7 , 2 byte
Các nhân vật tạo nên chương trình này là:
240223
Khi xem tệp trong trình chỉnh sửa, có thể sẽ cố gắng diễn giải nó thành ASCII, trong trường hợp đó nó trông như thế này:
P$
Hãy thử trực tuyến!
Chương trình có đầu vào. Tôi đã giả định ở đây rằng đầu vào là ở EOF; nếu bạn cung cấp đầu vào, có thể nó sẽ bị sập.
Giải trình
Lặp lại Zeroth
240223
240223 Nối 240223 vào phần tử ngăn xếp trên cùng
Toàn bộ chương trình ở đây là thụ động, do đó, nó sẽ nối thêm phiên bản hoạt động của chính nó vào phần tử ngăn xếp trên cùng (ban đầu trống). Chương trình nằm trong một vòng lặp ngầm định, đánh giá phần tử ngăn xếp trên cùng (trong khi để nó trên ngăn xếp) mỗi lần lặp. Vì vậy, phiên bản hoạt động sẽ chạy. (Khá nhiều tất cả 7 chương trình bắt đầu như thế này.)
Lặp lại đầu tiên
240223
2 Sao chép phần tử ngăn xếp trên cùng
40 Thoát phần tử ngăn xếp thứ hai, hoán đổi nó lên trên cùng
2 Sao chép phần tử ngăn xếp trên cùng
23 Xuất phần tử ngăn xếp trên cùng
Trước lệnh đầu ra, ngăn xếp chứa hai bản sao của 240223 (tức là thụ động). Cái trên cùng có đầu ra (không có hiệu ứng có thể quan sát được ngoài việc chọn định dạng đầu ra 2, "số"), cái bên dưới ở lại và trở thành chương trình cho lần lặp tiếp theo.
Lặp lại lần thứ hai
240223
240223 Nối 240223 vào phần tử ngăn xếp trên cùng
Giống như phép lặp zeroth, phải không? Không hẳn; ngăn xếp có nội dung khác nhau. Các ngăn xếp bây giờ là 240223dưới đây .240223240223
Lặp lại thứ ba
240223 240223
240223 Nối 240223 vào phần tử ngăn xếp trên cùng
2 Sao chép phần tử ngăn xếp trên cùng
40 Thoát phần tử ngăn xếp thứ hai, hoán đổi nó lên trên cùng
2 Sao chép phần tử ngăn xếp trên cùng
23 Xuất phần tử ngăn xếp trên cùng
Điều này xuất ra một phần tử ngăn xếp có thêm ba giây và 0 so với 7 giây và 1. Định dạng đầu ra 2 diễn giải điều này như một yêu cầu nhập số. Chúng tôi đọc EOF, với kết quả là phần tử tiếp theo trên ngăn xếp được giảm xuống chuỗi có độ dài bằng không. Tuy nhiên, do một lỗi (có vẻ hơi hữu ích và có thể được quảng bá thành một tính năng?), Điều này chỉ xảy ra sau khi nó bắt đầu thực thi. Ngăn xếp một lần nữa có hai phần tử, 240223bên dưới , nhưng phiên bản thoát của phần tử hàng đầu này , hiện đang thực thi.24022324022324022372402236240223240223
Lặp lại thứ tư
7 240223 6 240223240223
7 240223 6 240223240223 Nối 240223 240223240223 vào đầu ngăn xếp
Đỉnh của ngăn xếp là một chuỗi có độ dài bằng không, vì vậy về cơ bản chúng ta chỉ bỏ qua chương trình kết thúc ở đó.
Lặp lại thứ năm
240.223 240.223.240.223
240.223 Nối 240.223 lên đỉnh ngăn xếp yếu tố
2 Sao chép đỉnh ngăn xếp nguyên tố
40 Thoát ngăn xếp phần tử thứ hai, trao đổi nó vào top
2 Sao chép đỉnh ngăn xếp nguyên tố
23 Output đỉnh ngăn xếp yếu tố
2 Sao chép đỉnh ngăn xếp nguyên tố
40 thoát thứ hai phần tử ngăn xếp, hoán đổi nó lên trên cùng
2 Sao chép phần tử ngăn xếp trên cùng
23 Xuất phần tử ngăn xếp trên cùng
Điều này rất giống với lần lặp thứ ba. Có hai thay đổi, mặc dù. Đầu tiên, bây giờ có thêm 4 số 0 và 6 so với số 1 và 7, vì vậy chúng tôi sẽ cố gắng nhập một ký tự từ đầu vào tiêu chuẩn thay vì số. Mặc dù vậy, chúng tôi vẫn nhận được EOF và cuối cùng vẫn giảm đầu ngăn xếp thành chuỗi có độ dài bằng không. Tiếp theo, có mã chạy sau khi giảm, vì vậy lần lặp tiếp theo không bắt đầu ngay lập tức. Thay vào đó, chúng tôi thực hiện một loạt các hoạt động trên phần tử có độ dài bằng không đó, kết thúc bằng ba phần tử có độ dài bằng không. Chúng ta xuất ra một, hai cái còn lại biến mất (vì đó là sự kết thúc của một lần lặp) và về cơ bản chúng ta đã ở nơi chúng ta ở cuối của lần lặp thứ ba.
Lặp lại thứ sáu
Chương trình chúng tôi sao chép từ đầu ngăn xếp bây giờ . Mọi thứ hoạt động như trong lần lặp trước cho đến khi chúng ta đạt được hướng dẫn đầu ra đầu tiên (lần đầu tiên ). Điều này hiện có thêm năm 0 và 6 so với số 1 và 7, do đó, nó đặt chế độ trong đó lệnh đầu ra tiếp theo sẽ được hiểu là yêu cầu thay đổi định dạng đầu ra. Điều này cũng dẫn đến một sự thay đổi đáng chú ý trong hành vi; vì không có yêu cầu đầu vào, chúng tôi đã không đọc EOF, và do đó không gây ra hậu quả của việc đọc EOF (phần tử ngăn xếp trên cùng mới được làm trống), và như vậy phiên bản thoát của phần tử ngăn xếp ban đầu vẫn tồn tại chứ không phải là loại bỏ. Điều này có nghĩa là tiếp theo240223240223240223240223232402không còn là không hoạt động nữa, tạo ra hai bản sao của phần tử ngăn xếp được thoát (tức là chúng hiện đã thoát kép). Chúng tôi xuất một, đặt định dạng đầu ra thành 7 ("giống như đầu vào"); định dạng đầu ra này không có lệnh I / O và không có lệnh thay đổi định dạng, vì vậy chúng tôi sẽ giữ nguyên trong phần còn lại của chương trình. Chúng tôi cũng xuất 724022362402232402232402232402236(cùng mã hóa với đầu vào) thành đầu ra tiêu chuẩn.
Dù sao, khá rõ ràng chương trình sẽ làm gì từ thời điểm này trở đi: đó là sự kết hợp của việc nối thêm nhiều bản sao khác nhau được thoát 240223lên trên cùng của ngăn xếp, thoát khỏi đỉnh ngăn xếp và xuất ra các bản sao của đỉnh ngăn xếp. Từ thời điểm này trở đi, phần tử ngăn xếp trên cùng không bao giờ bị xóa (vì chúng ta không bao giờ đọc EOF), vì vậy nó chỉ phát triển và tăng trưởng và phát triển. Việc thoát định kỳ đảm bảo rằng đầu ra không bao giờ lặp lại (vì điều đó có nghĩa là mỗi lần lặp, đầu ra đầu tiên bắt đầu với ít nhất một lần 7so với lần lặp trước đó).
1\n12\n123hợp lệ không?