Ось так визначається послідовність Колакоскі (OEIS A000002 ):
Послідовність Колакоскі - це послідовність, яка містить
1
і2
, аn
й елемент послідовності - це довжина третьоїn
групи рівних елементів (запуску) у самій послідовності. Першими 20 членами послідовності та відповідними довжинами є:1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 - --- --- - - --- - --- --- - --- --- - 1 2 2 1 1 2 1 2 2 1 2 2 1
По суті, довжини груп рівних елементів послідовності Колакоскі є самою послідовністю Колакоскі.
Поки так добре, але що, чому ми повинні обмежувати себе 1
і 2
? Ми не збираємось! Давши два входи, масив додатних цілих чисел A
і ціле число N
, повертають перші N
члени послідовності, схожі на Колакоскі, визначені перемиканням наскрізь A
. Щоб краще зрозуміти це, ось опрацьований приклад із довжиною ново доданих груп у дужках:
A = [2, 3, 1]
N = 25
2: [[2], 2 ]
3: [ 2 ,[2], 3 , 3 ]
1: [ 2 , 2 ,[3], 3 , 1 , 1 , 1 ]
2: [ 2 , 2 , 3 ,[3], 1 , 1 , 1 , 2 , 2 , 2 ]
3: [ 2 , 2 , 3 , 3 ,[1], 1 , 1 , 2 , 2 , 2 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 ,[1], 1 , 2 , 2 , 2 , 3 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 ,[1], 2 , 2 , 2 , 3 , 1 , 2 ]
3: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 ,[2], 2 , 2 , 3 , 1 , 2 , 3 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 ,[2], 2 , 3 , 1 , 2 , 3 , 3 , 1 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 ,[2], 3 , 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 ]
3: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 ,[3], 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 ,[1], 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 1 ,[2], 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 , 2 , 2 ]
C: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 , 2 , 2 ]
Ось ще один відпрацьований приклад з ведучим 1
:
A = [1, 2, 3]
N = 10
1: [[1]]
2: [ 1 ,[2], 2 ]
3: [ 1 , 2 ,[2], 3 , 3 ]
1: [ 1 , 2 , 2 ,[3], 3 , 1 , 1 , 1 ]
2: [ 1 , 2 , 2 , 3 ,[3], 1 , 1 , 1 , 2 , 2 , 2 ]
C: [ 1 , 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 ]
Як видно вище, кінцевий результат вирізали на N = 10
елементи. n
- Й елемент повинен бути , як довго n
й рівноапостольної групи елементів, навіть якщо сам елемент належить до групи він відноситься. Як і у вищенаведеному випадку, перша 1
стосується першої такої групи, яка є саме цим 1
, а перша 2
стосується другої такої групи, яка починається з неї.
Правила
- Ви можете припустити, що
A
ніколи не буде двох і більше послідовних рівних елементів.A
може містити ціле число більше одного разу, але перший і останній елементи не будуть рівними іA
містять щонайменше 2 елементи (наприклад[1, 2, 2, 3]
,[2, 4, 3, 1, 2]
і[3]
не збираються даватись). Це тому, що якби були послідовні рівні елементи, кінцевий результат був би недійсним префіксом для такої послідовності. - Ви можете припустити, що
A
містить лише додатні цілі числа (оскільки така послідовність була б інакше невизначеною). - Ви можете припустити
N
, що це невід'ємне ціле число (N >= 0
). - Ви не можете повернути більше термінів, ніж просили.
- Використовувати будь-яку зі стандартних лазів , категорично заборонено.
- Ви можете використовувати будь-який розумний метод вводу / виводу .
- Ваша відповідь не повинна працювати за межами природних мов, але теоретично ваш алгоритм повинен працювати для довільно великих входів та цілих чисел .
- Це код-гольф , тому найкоротша відповідь виграє.
Тестові справи
[5, 1, 2], 0 -> []
[2, 3, 1], 25 -> [2, 2, 3, 3, 1, 1, 1, 2, 2, 2, 3, 1, 2, 3, 3, 1, 1, 2, 2, 3, 3, 3, 1, 2, 2]
[1, 2, 3], 10 -> [1, 2, 2, 3, 3, 1, 1, 1, 2, 2]
[1, 2], 20 -> [1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1]
[1, 3], 20 -> [1, 3, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 1, 3, 3, 3, 1, 1, 1, 3]
[2, 3], 50 -> [2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3]
[7, 4], 99 -> [7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4]
[1, 2, 3], 5 -> [1, 2, 2, 3, 3]
[2, 1, 3, 1], 2 -> [2, 2]
[1, 3, 5], 2 -> [1, 3]
[2, 3, 2, 4], 10 -> [2, 2, 3, 3, 2, 2, 2, 4, 4, 4]