Stax , 11 byte (Điểm 4)
'''cc'~~'dd
Chạy và gỡ lỗi trực tuyến!
Tôi rất vinh dự khi có câu trả lời đầu tiên (theo thời gian) cho thử thách này với số điểm cao hơn hoặc bằng 4. Có lẽ điểm số có thể còn cao hơn nữa.
Trong Stax, một chuỗi ký tự bao gồm một ký tự đơn được viết cùng '
, vì vậy '', 'c, 'd, '~
tất cả các chuỗi ký tự. Các lệnh tương ứng cho c
d
và ~
có nghĩa là nhân đôi đỉnh của ngăn xếp chính, bật đỉnh của ngăn xếp chính và bật đỉnh của ngăn xếp chính và lần lượt đẩy vào ngăn xếp đầu vào. Đối với thử thách này, ngăn xếp đầu vào không ảnh hưởng đến đầu ra và không quan trọng, do đó chúng ta có thể nói d
và ~
giống hệt nhau.
Giải trình
Tốt nhất là chia mã thành nhiều phần và xem xét chúng một cách riêng biệt.
Khi nó không bị can thiệp, '''cc
đẩy một nghĩa đen '
và nghĩa đen c
vào ngăn xếp chính và sao chép đỉnh, vì vậy ngăn xếp sẽ là (từ dưới lên) c,c,'
.
Khi không bị giả mạo, '~~
đẩy nghĩa đen ~
và sau đó bật nó (và đẩy vào ngăn xếp đầu vào), về cơ bản là không có op cho ngăn xếp chính.
Khi không bị giả mạo, 'dd
đẩy nghĩa đen d
và sau đó bật nó, một no-op khác cho ngăn xếp chính.
Vào cuối chương trình, vì không có đầu ra rõ ràng nào được thực hiện, phần trên cùng của ngăn xếp chính sẽ được in ra hoàn toàn.
Nếu chương trình đang chạy nguyên trạng, ngăn xếp cuối cùng vẫn c,c,'
và sẽ xuất ra c
.
Nếu phần đầu tiên trở thành ''cc
, thì chúng ta có một '
hướng dẫn bằng chữ và hai bản sao, ngăn xếp cuối cùng sẽ là ',','
. Cho rằng hai phần khác là không-op, kết quả sẽ là '
.
Nếu phần đầu tiên trở thành '''c
, kết quả về cơ bản là giống với phần không được chỉnh sửa, nhưng phần c
này không bị trùng lặp. Vì vậy, ngăn xếp sẽ được c,'
. Sau hai no-op, đỉnh của ngăn xếp là c
.
Vì vậy, chúng ta có thể phát hiện bức xạ trong phần đầu tiên.
Phần thứ hai và phần thứ ba hoạt động theo cùng một cách. Tôi sẽ lấy phần thứ ba làm ví dụ.
Nếu phần thứ ba bị giả mạo, thì hai phần đầu được giữ nguyên trạng và ngăn xếp trước khi chạy phần thứ ba là c,c,'
Nếu phần thứ ba trở thành 'd
, một nghĩa đen d
được đẩy lên đỉnh của ngăn xếp chính và không có gì được thực hiện thêm. Đỉnh của ngăn xếp chính bây giờ d
sẽ là đầu ra.
Nếu phần thứ ba trở thành dd
, hai phần tử được bật ra từ ngăn xếp chính và bây giờ phần trên cùng của ngăn xếp là '
và là đầu ra.
Do đó chúng ta có thể phát hiện bức xạ trong phần thứ ba. Vì lý do tương tự, chúng ta có thể phát hiện bức xạ trong phần thứ hai.