Brainfuck, 157 байт
,+>-[>++<-----]>----->>+<<<<[->>[[->>[>>>]<+<+<[<<<]>>[>>>]<]>>[>>>]<[-<<[<<<]>>[>>>]<+>>[>>>]<]+>+<<<[<<<]>>[>>>]+[>>>]<]<<<+>>[<-<<]<]>>>>[>>>]<<<<<<[<<.<]
Вхід подається у двійковій формі.
Основна ідея полягає в тому, щоб повторно дублювати поточну послідовність (починаючи з «а») і нарощувати останній елемент після кожної ітерації:
a → aa → ab
ab → abab → abac
абак → абакабак → абакабак
...
Коли все це було зроблено вказану кількість разів, результат надрукується, виключаючи останній елемент.
Поглиблене пояснення
Пам'ять розташована таким чином:
.---------.-.-----.----.---.-----.----.---.---
|Countdown|0|Value|Copy|End|Value|Copy|End|...
'---------'-'-----'----'---'-----'----'---'---
|--Element 1---|--Element 2---|
Зворотний відлік містить кількість циклів копіювання, які ще належить виконати. Послідовність ABACABA зберігається в суміжних блоках, кожен з яких складається з 3 комірок. Значення містить характер елемента (тобто "A", "B", "C" ...). Копіювати прапор вказує , чи потрібно чи ні відповідний елемент повинен бути скопійований в межах поточного циклу копіювання (0 = копіювати, 1 = немає). End прапор встановлений в 0 для останнього елемента , поки він копіюється (це 1 у всіх інших випадках).
Тепер до фактичної (злегка не золотої) програми:
, read Countdown from input
+ add 1 to avoid off-by-one error
>-[>++<-----]>----- initialize value cell of first element to 97 ("a")
>>+ set End flag of first element to 1
<<<< move to Countdown
[ loop until Countdown hits 0 (main loop)
- decrement Countdown
>> move to Value cell of first element
[ copying loop
[ duplication sub-loop
- decrement Value cell of the element to copy
>> move to End flag
[>>>] move to End flag of the last element
<+<+ increment Copy and Value cell of last element (Copy cell is temporarily abused)
< move to End flag of second to last element
[<<<]>> move back to Copy cell of first element
[>>>]< move to Value cell of the first element where the Copy flag is 0
]
>>[>>>]< move to (abused) Copy flag of the last element
[ "copy back" sub-loop
- decrement Copy flag
<< move to End flag of second to last element
[<<<]>> move back to Copy cell of first element
[>>>]< move to Value cell of the first element where the Copy flag is 0
+ increment Value cell
>>[>>>]< move back to Copy flag of the last element
]
+>+ set Copy and End flag to 1
<<< move to End flag of second to last element
[<<<]>> move back to Copy cell of first element
[>>>]< move to Value cell of the first element where the Copy flag is 0
>+< set Copy flag to 1
>[>>>]< move to Value cell of the next element to copy
] loop ends three cells behind the last "valid" Value cell
<<<+ increment Value cell of last element
>> move to End flag
[<-<<] reset all Copy flag
< move to Countdown
]
>>>> move to End flag of first element
[>>>]<<< move to End flag of last element
<<< skip the last element
[<<.<] output Value cells (in reverse order, but that doesn't matter)