Một "chương trình vần" là một chuỗi các chữ cái a
để z
, như vậy mà lần xuất hiện đầu tiên của các nhân vật trong thứ tự tăng dần (không có khoảng trống), bắt đầu từ a
. Ví dụ: với lần xuất hiện đầu tiên được đánh dấu):
abccdbebdcfa
^^^ ^ ^ ^
Số lượng các sơ đồ vần có độ dài N
được cho bởi số Bell B(N)
. ( OEIS A000110 )
Các thách thức
Nhiệm vụ của bạn là thực hiện một phép liệt kê các sơ đồ vần này, tức là ánh xạ phỏng đoán từ số nguyên sang sơ đồ vần. Bạn được cung cấp một số nguyên dương N <= 26
, cũng như một số nguyên không âm 0 <= i < B(N)
. Ngoài ra, bạn có thể sử dụng phạm vi 1 <= i <= B(N)
. Bạn nên đưa ra một sơ đồ vần có độ dài N
, sao cho mỗi i
chuỗi mang lại một chuỗi khác nhau.
Bạn có thể viết chương trình hoặc hàm, lấy đầu vào qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và xuất kết quả qua tham số STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).
Bạn có thể sử dụng chữ thường hoặc chữ in hoa (nhất quán).
Mã của bạn phải có khả năng xử lý bất kỳ đầu vào hợp lệ nào trong khoảng thời gian hợp lý (ví dụ: không quá vài giờ trong N = 26
trường hợp xấu nhất i
). Điều này sẽ cho phép các giải pháp mở rộng theo cấp số nhân với N
(đối với các cơ sở nhỏ), ngay cả trong các ngôn ngữ chậm nhưng cấm các giải pháp mở rộng tuyến tính với i
(nghĩa là B(N)
). Cụ thể, điều đó có nghĩa là bạn không thể chỉ lặp đi lặp lại qua tất cả các lược đồ vần có độ dài hợp lệ N
cho đến khi bạn loại bỏ các i
lược đồ.
Luật golf tiêu chuẩn được áp dụng.
Ví dụ
Việc gán chính xác các i
lược đồ (tức là thứ tự của các lược đồ cho trước N
) tùy thuộc vào bạn. Nhưng giả sử bạn đã chọn thứ tự từ điển, giải pháp của bạn sẽ tương ứng với bảng sau (với -
biểu thị đầu vào không hợp lệ):
N\i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 a - - - - - - - - - - - - - -
2 aa ab - - - - - - - - - - - - -
3 aaa aab aba abb abc - - - - - - - - - -
4 aaaa aaab aaba aabb aabc abaa abab abac abba abbb abbc abca abcb abcc abcd
Dưới đây là một tập lệnh CJam ngắn tạo ra tất cả các lược đồ vần hợp lệ cho bất kỳ độ dài nhất định nào (nhưng đừng thử nhiều hơn 10 hoặc bạn sẽ đợi một lúc).
N
), với điều kiện là nó không quá tầm thường và tôi quá ngu ngốc khi tìm thấy nó.