)K`0
"$+"+¶<`.+
$.(*__2*$-1*
Hãy thử trực tuyến!
Dựa trên 0, vì vậy đầu vào n cho kết quả n + 1 đầu tiên .
Giải trình
Sử dụng đệ quy từ OEIS:
a(n) = a(n-1) + 2*a(n-2) + 1
Hãy cùng xem qua chương trình:
)K`0
Đây là một giai đoạn không đổi: nó loại bỏ đầu vào và đặt chuỗi làm việc thành 0
, giá trị ban đầu của chuỗi. Các )
kết thúc giai đoạn này trong một nhóm. Bản thân nhóm đó không làm gì, nhưng hầu như mọi giai đoạn (bao gồm cả giai đoạn nhóm) đều ghi lại kết quả của nó trong nhật ký và chúng tôi sẽ cần hai bản sao của 0
nhật ký đó để chương trình hoạt động.
"$+"+¶<`.+
$.(*__2*$-1*
Có một loạt các cấu hình ở đây: "$+"+
kết thúc giai đoạn trong một vòng lặp. Cái "$+"
được coi là sự thay thế và $+
đề cập đến đầu vào của chương trình, tức là n . Điều này có nghĩa là vòng lặp được chạy n lần.
Sau đó ¶<
kết thúc mỗi lần lặp trong một giai đoạn đầu ra, trong đó in đầu vào của giai đoạn bằng một dòng cấp dữ liệu (do đó, lần lặp đầu tiên in số 0, lần lặp thứ hai in kết quả của lần lặp đầu tiên, v.v.).
Giai đoạn tự thay thế toàn bộ chuỗi làm việc bằng sự thay thế trên dòng cuối cùng. Cái đó sử dụng dấu ngoặc đơn đóng và ẩn đối số cho toán tử lặp lại *
, vì vậy nó thực sự là viết tắt của:
$.($&*__2*$-1*_)
Những thứ bên trong dấu ngoặc đơn có thể được chia thành ba phần:
$&*_
: đưa ra một chuỗi gồm một (n-1) _
s.
_
: đưa ra một _
.
2*$-1*_
: đưa ra một chuỗi 2 * a (n-1) _
. Đề $-1
cập đến kết quả áp chót trong nhật ký kết quả, tức là vòng lặp trước lần cuối. Đó là lý do tại sao chúng ta cần bắt đầu sao chép số 0 trên nhật ký, nếu không, điều này sẽ đề cập đến đầu vào của chương trình trong lần lặp đầu tiên.
Sau đó $.(…)
đo chiều dài của chuỗi kết quả. Nói cách khác, chúng tôi đã tính toán a(n) = a(n-1) + 1 + 2*a(n-2)
bằng cách đi qua unary (không thực sự: $.(…)
lười biếng và không thực sự đánh giá nội dung của nó nếu nó có thể xác định độ dài kết quả trực tiếp thông qua số học, do đó, điều này thậm chí khá hiệu quả).
Kết quả của lần lặp vòng lặp cuối cùng ( phần tử thứ n + 1 của chuỗi) được in do đầu ra ẩn của Retina ở cuối chương trình.