Эта задача касается печати последовательности abacaba определенной глубины.
Вот схема первых 5 последовательностей ( a(N)
это последовательность abacaba глубины N, верхний / нижний регистр просто для того, чтобы показать шаблон, это не требуется в выходных данных вашей программы):
a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...
Как вы, вероятно, можете сказать, n-ая последовательность abacaba является последней с n-ой буквой и снова добавленной к ней. ( a(n) = a(n - 1) + letter(n) + a(n - 1)
)
Ваша задача - создать программу или функцию, которая принимает целое число и печатает последовательность abacaba этой глубины. Выходные данные должны быть правильными, по крайней мере, для значений до 15 включительно.
Ответы:
Pyth, 11 байт
Простое сокращение.
источник
0
должна быть пустая последовательность ИМО, но яrev-doc.txt
рядом с этим ответом, и он должен легко показать себя простым.Python, 44 байта
Выглядит подозрительно, возможно, будет пригодным для игры в гольф.
источник
Haskell,
3937 байтПример использования:
a 3
->"abacabadabacaba"
.Изменить: @Angs нашел два байта для сохранения. Благодарность!
источник
a n=a(n-1)++[97+n]++a(n-1)
сработает? Не могу проверить прямо сейчас.[97+n]
это списокInteger
иa(n-1)
списокChar
(он жеString
). Вы не можете объединять списки с разными типами.toEnum
делаетChar
изInteger
.['a'..]!!n
на 2 байта корочеtoEnum(97+n)
Pyth,
1413 байтовСпасибо Jakube за сохранение байта!
Решение с 14 байт:
VhQ=ks[k@GNk;k
.Объяснение:
Попробуй это здесь !
источник
V
линии?hQ
простоeval(input) + 1
=k
до=
. Pyth автоматически присваивает результатk
, посколькуk
является первой переменной в выражении+k+@GNk
.Vt^2Q=+k@Gx_.BhN`1)k
(В этом случае он настроен на предоставление первых 2 ^ Q-1 символов, как того требует задание, но вы можете видеть, как это изменить.)Сетчатка ,
3732 байтаКонечный перевод строки значителен. Ввод принимается в одинарном .
Попробуйте онлайн!
источник
Brainfuck, 157 байтов
Вход дан в двоичном виде.
Основная идея состоит в том, чтобы многократно дублировать текущую последовательность (начиная с «а») и увеличивать последний элемент после каждой итерации:
a → aa → ab
ab → abab → abac
abac → abacabac → abacabac
...
Когда все это будет сделано указанное количество раз, результат будет напечатан, исключая последний элемент.
Подробное объяснение
Память устроена следующим образом:
Обратный отсчет содержит количество циклов копирования, которые еще предстоит выполнить. Последовательность ABACABA хранится в последовательных блоках, каждый из которых состоит из 3 ячеек. Значение содержит символ элемента (то есть «A», «B», «C» ...). Копировать флаг указывает , необходимо ли или нет соответствующий элемент должен быть скопирован в пределах текущего цикла копирования (0 = копировать, 1 = нет). Конец флаг установлен в 0 для последнего элемента , пока он копируется (это 1 во всех остальных случаях).
Теперь перейдем к актуальной (немного безвкусной) программе:
источник
Haskell , 36 байт
Попробуйте онлайн!
При этом используется рекурсивный метод, отличный от большинства других ответов. Чтобы получить следующую строку в последовательности, мы не соединяем две копии в предыдущей строке с новой буквой между ними, а вместо этого увеличиваем каждую букву и переменную
a
.источник
bcb
вместоcbc
?05AB1E , 12 байтов (неконкурентный)
Код:
Будь я проклят. Благодаря этой проблеме я исправил много ошибок, ха-ха.
Объяснение:
источник
JavaScript (ES6),
4342 байтаБайт сохранен благодаря @Neil !
Еще одно простое рекурсивное решение ...
источник
(n+11).toString(36)
экономит 1 байт и работает до (25)!CJam (14 байт)
Онлайн демо
источник
Рубин (1,9 и выше), 38 байт
?a
лучший способ написать,"a"
но выглядит смешно с троичным?:
источник
R , 48 байт
Попробуйте онлайн!
Простая рекурсия.
источник
paste0
эквивалентенpaste
withsep=""
, поэтому вы избегаете пробелов между буквами,paste
которые добавляются по умолчанию.C #, 59 байт
Просто еще одно решение C # ...
источник
Perl, 33 байта
Нет необходимости в игре в гольф. Создает строку путем итеративного добавления следующего символа в последовательности плюс обратная строка до сих пор, используя значение ASCII «a» в качестве начальной точки. Использует,
$\
чтобы сохранить несколько штрихов, но это примерно так же сложно, как и получается.Работает на
a(0)
протяженииa(25)
и даже дальше. Несмотря на то, что вы попадаете в расширенный ASCIIa(29)
, вы исчерпаете память задолго до того, как исчерпаете коды символов:a(25)
составляет ~ 64 МБ.a(29)
составляет ~ 1 ГБ.Чтобы сохранить результат
a(255)
(не проверенный!), Потребуется 2 ^ 256 - 1 = 1,15x10 ^ 77 байт или примерно 1,15x10 ^ 65 1-терабайтных дисков.источник
Java 7, 158 байт
Мне нравится скрываться в PPCG, и я бы с удовольствием мог голосовать / комментировать другие ответы.
Ввод дан как параметры программы. Это следует тому же формату, что и многие другие ответы здесь, в том, что это прямая рекурсивная реализация. Я бы прокомментировал другой ответ, но у меня пока нет представителя, чтобы комментировать. Это также немного отличается тем, что рекурсивный вызов выполняется дважды, а не строит строку и не передает ее.
источник
Mathematica,
3632 байтаВы когда-нибудь смотрели TWOW 11B?
источник
"",
и тогда вы можете использовать инфиксную нотацию дляFold
.<>
s, а # 2 работает только для двоичных функций.Python,
62544645 байтЯ хотел бы думать, что этот код все еще может быть каким-то образом отключен.
Изменить: Исправление ошибки благодаря Линн. -1 байт благодаря кальмару.
Попробуйте онлайн!
источник
Mathematica, 46 байтов
Простая рекурсивная функция. Другое решение:
источник
К5, 18 байт
Повторно применяйте функцию к переносимому значению (
"A"
) и каждому элементу последовательности. Последовательность состоит из букв алфавита от B до некоторого числа N (`c$66+!
). Функция объединяет левый аргумент по обе стороны от правого аргумента ({x,y,x}
).В бою:
источник
JavaScript,
6557 1 байтДемо-версия:
1 - спасибо Нейлу за сохранение 8 байт
источник
(i+11).toString(36)
экономит вам 6 байтов.s="a";
до,for
то оно становится возвращаемым значением по умолчанию, и вы можете отбросить трейлинг;s
еще на 2 байта.i
inline и уменьшая приращение в цикле for. Так что ...for(i=0;i<n;)s+=(i+++11)...
Japt,
2017 байтПроверьте это онлайн!
Как это работает
Неконкурентная версия, 14 байтов
ô
Функция схожаo
, но и создает диапазон[X..X+Y]
вместо[X..Y)
.Проверьте это онлайн!Я предпочитаю менять 97 на 94, и в этом случае вывод для
5
выглядит так:источник
Java, 219 байт
Моя первая попытка игры в гольф. Наверное, дальше можно заняться гольфом, но я голоден и иду на обед.
Ungolfed:
Довольно простой рекурсивный алгоритм грубой силы, использует
char
манипуляции.источник
public
ключевое слово отa
иaddLetter
/j
.MATL , 14 байтов
Это использует версию 8.0.0 языка / компилятора, которая является более ранней, чем проблема.
пример
объяснение
Secuence создается первое с номерами
0
,1
,2
... Они преобразуются в буквы'a'
,'b'
,'c'
в конце концов.редактировать
Попробуйте онлайн!
источник
Powershell,
53,46,44, 41 байтВставка в консоль приведет к ошибочному выводу при втором запуске, так
$d
как не будет повторно инициализирована.Сохранить 2 байта с помощью + = Сохранить 3 байта благодаря @TimmyD
источник
(
,)
.Gaia , 14 байтов
Попробуйте онлайн!
источник
PowerShell , 54 байта
Попробуйте онлайн!
источник
Japt , 8 байт
Попытайся
источник
Шелуха , 12 байт
Попробуйте онлайн!
Использует индексирование на основе 1, которое, я надеюсь, в порядке.
объяснение
источник
APL (NARS), 24 символа, 48 байтов
тест:
источник
PHP
-r
, 43 байтаregister_argc_argv
должен быть включен, чтобы это работало.Попробуйте онлайн!
PHP , 51 байт
Анонимная функция, которая печатает вывод напрямую.
Попробуйте онлайн!
источник