Двоично-квадрат-диагональная последовательность строится следующим образом :
- Возьмем последовательность положительных натуральных чисел:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
Преобразовать каждое число в двоичное:
1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000, 10001, ...
Объединить их:
11011100101110111100010011010101111001101111011111000010001 ...
Начиная с
n=1
, генерируйте квадраты с увеличивающейся длиной стороны,n
которые заполняются слева направо, сверху вниз элементами вышеописанной последовательности:1
1 0 1 1
1 0 0 1 0 1 1 1 0
1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1
0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 0 0 0 0 1
...
Возьмите диагональ (сверху слева внизу справа) каждого квадрата:
1, 11, 100, 1011, 00111, ...
Преобразовать в десятичную (игнорируя ведущие нули):
1, 3, 4, 11, 7, ...
задача
Напишите программу или функцию, которая выводит последовательность одним из следующих способов:
- Вернуть или распечатать последовательность бесконечно.
- При заданном вводе
i
вернуть или распечатать первыеi
элементы последовательности. - При заданном вводе
i
вернуть или распечататьi
элемент последовательности (либо 0, либо 1 проиндексированный).
Пожалуйста, укажите в своем ответе, какой выходной формат вы выберете.
Это код-гольф , выигрывает самый короткий ответ на каждом языке.
Контрольные примеры
Вот первые 50 элементов последовательности:
1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845,17129,55518,134717,151988,998642,1478099,391518,7798320,8530050,21809025,61485963,66846232,54326455,221064493,256373253,547755170,4294967295,1875876391,2618012644,24710258456,6922045286,132952028155,217801183183,476428761596,51990767390,687373028085,1216614609441,7677215985062,15384530216172,22714614479340,15976997237789,0,256145539974868,532024704777005,601357273478135
3m
наn
?°
гораздо быстрее: PШелуха , 15 байт
Это принимает несколько иной подход к ответу Мартина
Попробуйте онлайн!
Объяснение:
В бою
ṁḋN
:[1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1...]
ṘNN
:[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8...]
C
:[[1],[1,0],[1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1,1],[0,0,0,1]...]
CN
:[[[1]],[[1,0],[1,1]],[[1,0,0],[1,0,1],[1,1,0]]...]
m z!N
:[[1],[1,1],[1,0,0],[1,0,1,1],[0,0,1,1,1],[0,1,1,1,0,1]...]
oḋ
:[1,3,4,11,7,29,56,141,343,853,321,3558,8176,3401,21845...]
источник
Java (OpenJDK 8) ,
215212206202197 байтПопробуйте онлайн!
источник
i->{String b="",t;int s=0,x=++i,j;for(;--x>0;s+=x*x);while(b.length()<s)b+=i.toString(++x,2);for(j=1,s=0;j<i;System.out.println(i.valueOf(t,2)),s+=j*j++)for(t="",x=s;x<s+j*j;x+=j+1)t+=b.charAt(x);}
( 197 байтов )Python 2 , 91 байт
Попробуйте онлайн!
печатает последовательность бесконечно
источник
Желе , 16 байт
Попробуйте онлайн!
объяснение
источник
Mathematica, 96 байт
Выходы на
i
го элемента последовательности (1-индексированных)Попробуйте онлайн!
источник
Perl 5 , 92 + 1 (
-p
) = 93 байтаПопробуйте онлайн!
источник
Желе , 18 байт
Совершенно другой подход по сравнению с решением Эрика .
Попробуйте онлайн!
Как это устроено
Сохранено 1 байт благодаря Джонатану Аллану !
источник
³
:Ḷ²S‘ɓ*3B€Fṫ
Желе , 22 байта
Попробуйте онлайн!
источник
Pyth ,
2720 байтовПроверьте первые несколько тестовых случаев.
Получает I- й член последовательности, 1 проиндексирован.
Как это устроено?
источник