Рекурсивний двійковий опис
Нещодавно я зробив свій перший внесок у OEIS, розширивши та додавши b-файл до послідовності A049064 . Послідовність починається з 0, а наступні значення виводяться з надання "двійкового опису" останнього елемента.
Наприклад, другий термін був би 10, бо 0в першому елементі був один . Третій термін був би 1110, бо був один 1і один 0. Четвертим було б 11110. тому що є три ( 11у двійкових!) 1 s і один 0. Нижче наведено розбиття п'ятого терміну, щоб зрозуміти цей процес:
> 11110
> 1111 0 (split into groups of each number)
> 4*1 1*0 (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110 (join each group back together)
Ось приклад переходу від 6-го до 7-го терміну:
> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110
Ви можете перевірити довідкову програму φ, яку я зробив для обчислення термінів.
Ваша робота
Потрібно створити програму або функцію яка приймає число nза допомогою стандартних аргументів введення чи функції , і виводить послідовність від 1stтерміна до (n+1)thтерміна, відокремлений новим рядком. Якщо ви хочете подивитися на менші цифри, ви можете звернутися до b-файлу зі сторінки OEIS. Однак ваша програма / функція повинна підтримувати 0 <= n <= 30, тобто до 31-го терміну. Це не маленький подвиг, оскільки A049064(30)довгий δ понад 140 000 цифр . Якщо ви хочете побачити, яким повинен бути 31-й термін, я поставив його на Пастебін .
Приклад вводу / виводу
func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110
func(0)
0
func(3)
0
10
1110
11110
Є лише одне правило: Ніякі стандартні лазівки!
Це код-гольф , тому виграє найменший байт.
φ - Gist можна знайти тут , і ideone демо тут .
δ - На всякий випадок, коли вам було цікаво, мої оцінки в тривалість 100-го терміну ставлять це приблизно в 3,28x10 250 символів, що було б досить багато для кого-небудь підрахувати.
[0]\n[1, 0]\n[1, 1, 1, 0]\n...