Bulgari Solitaire là một trò chơi một người chơi được phổ biến bởi Martin Gardner trong chuyên mục toán học của mình trong Khoa học Mỹ .
Bạn có N
thẻ giống hệt nhau, chia thành đống. Bạn lấy một thẻ từ mỗi cọc và tạo thành một đống mới với các thẻ bị loại bỏ. Bạn lặp lại quá trình này cho đến khi bạn đạt đến trạng thái bạn đã thấy và do đó tiếp tục sẽ lặp lại vòng lặp.
Ví dụ: giả sử bạn có 8
thẻ, chia thành một đống 5
và một đống 3
. Chúng tôi viết các kích thước cọc theo thứ tự giảm dần : 5 3
. Đây là bảng điểm của trò chơi:
5 3
4 2 2
3 3 1 1
4 2 2
Trước tiên, bạn loại bỏ một thẻ từ mỗi trong hai cọc, để lại các đống 4
và 2
, và một đống mới được tạo ra 2
, cho 4 2 2
. Trong bước tiếp theo, những giảm này 3 1 1
theo sau với một đống mới 3
. Cuối cùng, bước cuối cùng làm trống các đống kích thước 1
và sản xuất 4 2 2
đã xuất hiện, vì vậy chúng tôi dừng lại.
Lưu ý rằng tổng kích thước cọc giữ nguyên.
Mục tiêu của bạn là in một bản sao của trò chơi như vậy từ một cấu hình bắt đầu nhất định. Đây là mã golf, vì vậy ít byte nhất sẽ thắng.
Đầu vào
Một danh sách các số dương theo thứ tự giảm dần biểu thị kích thước cọc ban đầu. Lấy đầu vào thông qua STDIN hoặc đầu vào chức năng. Bạn có thể sử dụng bất kỳ cấu trúc giống như danh sách bạn muốn.
Bạn không nhận được tổng số thẻ N
làm đầu vào.
Đầu ra
In chuỗi kích thước cọc mà trò chơi Bulgari Solitaire trải qua. Lưu ý rằng in ấn là bắt buộc, không trả lại. Mỗi bước nên là dòng riêng của nó.
Mỗi dòng nên có một chuỗi các số dương theo thứ tự giảm dần mà không có 0
. Bạn có thể có dấu phân cách và mã thông báo bắt đầu và kết thúc (ví dụ [3, 3, 1, 1]
:). Các số có thể có nhiều chữ số, vì vậy chúng nên được tách ra bằng cách nào đó.
In các phần tách kích thước cọc mà bạn thấy cho đến khi và bao gồm cả việc lặp lại. Vì vậy, dòng đầu tiên phải là đầu vào và dòng cuối cùng phải là lặp lại của dòng trước đó. Không nên có bất kỳ sự lặp lại nào khác.
Các trường hợp thử nghiệm
>> [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()$
bằngQ
. 2. Nếu bạn lưu trữ danh sách theo thứ tự giảm dần, bạn hoàn toàn không cầnN
:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q