Болгарський пасьянс - це одиночна гра, яку зробив популярний Мартин Гарднер у своїй математичній колонці в Scientific American .
У вас N
однакові картки, розбиті на палі. Ви берете картку з кожної купи і формуєте нову купу зі знятими картками. Ви повторюєте цей процес, поки не досягнете стану, який ви вже бачили, і таким чином, продовжуючи, буде повторюватися цикл.
Наприклад, скажімо, у вас є 8
картки, розділені на купу 5
і купу 3
. Пишемо розміри купи в порядку убування: 5 3
. Ось стенограма гри:
5 3
4 2 2
3 3 1 1
4 2 2
Ви спочатку виймаєте карту з кожної з двох паль, залишаючи палі 4
і 2
, і новостворену купу 2
, віддаючи 4 2 2
. На наступному кроці слід зменшити ці зміни 3 1 1
з новою купою 3
. Нарешті, останній крок опорожнює палі розміром 1
і виробляє, 4 2 2
які вже з’явилися, тому ми зупиняємось.
Зауважте, що сума розмірів ворсу залишається однаковою.
Ваша мета - роздрукувати таку стенограму гри із заданої стартової конфігурації. Це кодовий гольф, тому виграє найменше байтів.
Вхідні дані
Список позитивних чисел у порядку зменшення, що представляють початкові розміри палі. Візьміть вхід через STDIN або функціональний вхід. Ви можете використовувати будь-яку структуру, схожу на список, яку хочете.
Ви не отримуєте загальну кількість карток N
як вхід.
Вихідні дані
Роздрукуйте послідовність розмірів ворсів, через які проходить гра в болгарський пасьянс. Зверніть увагу, що друк необхідний, а не повернення. Кожен крок повинен бути власною лінією.
Кожен рядок повинен мати послідовність додатних чисел у порядку зменшення без 0
позначень. Можливо, у вас є роздільники, маркери початку та кінця (наприклад, [3, 3, 1, 1]
). Числа можуть мати кілька цифр, тому їх слід якось розділити.
Роздрукуйте розрізи розміру ворсу, які ви бачите, до тих пір, поки не включите повторення. Отже, перший рядок повинен бути вхідним, а останній - повторенням попереднього рядка. Інших повторів не повинно бути.
Тестові справи
>> [1]
1
1
>> [2]
2
1 1
2
>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1
>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2
>> [3, 2, 1]
3 2 1
3 2 1
>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1
v$input()$
наQ
. 2. Якщо ви зберігаєте список у порядку зменшення, вам це взагалі не потрібноN
:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q