TovTovTov (một đột biến của gà ): 810147050 byte
Mô tả dưới đây là hai giải pháp được đề xuất: Một giải pháp đầy đủ cho câu hỏi cần nhiều byte và giải pháp một phần thứ hai (chỉ giải quyết các phần N + N và N * N , chỉ cần 484 byte), mỗi giải pháp có một cách tiếp cận khác nhau thiết lập các thủ thuật hay! :)
1. Giải pháp đầy đủ (810147050 byte)
Sử dụng TovTovTov(TOV='hi',SEP=',')
, các TOV
yếu tố miễn nhiễm với việc sao chép các ký tự tại chỗ (cả hai "hihihi"
và "hhiihhiihhii"
có ba "hi"
s trong đó, và tất cả sự TovTovTov
quan tâm là có bao nhiêu TOV
s xuất hiện giữa SEP
các s).
Nếu chúng ta sử dụng SEP=', '
, toàn bộ chương trình sẽ miễn nhiễm với nhân bản (điều này thật tuyệt, nhưng sẽ không giải quyết được câu hỏi). Vì vậy, chúng tôi sử dụng SEP=','
.
Vì vậy, chương trình "hihihi,hi"
, ví dụ, biên dịch thành mảng ints [3,1]
, trong khi "hhiihhiihhii,,hhii"
biên dịch thành [3,0,1]
và "hhiihhiihhii,,hhii"
đến [3,0,0,1]
. Điều này có nghĩa là bản thân các lệnh không thay đổi ý nghĩa của chúng sau khi sao chép, nhưng độ dài tổng thể thay đổi theo sao chép ký tự. Các giải pháp dưới đây truy vấn theo chiều dài của chương trình và sử dụng này để quyết định xem có nên in N+N
, N*N
hoặc N^N
.
Giải pháp đầy đủ được đề xuất, như mảng ints, là: [6, 12, 9, 18, 9, 142, 11, 38, 8, 9, 260, 11, 73, 8, 22, 75, 7, 10, 14, 3, 1, 22, 24, 18, 15, 8, 10, 16, 3, 1, 22, 24, 18, 15, 8, 10, 45, 16, 7, 22, 3, 1, 22, 24, 18, 15, 8, 22, 3, 1, 22, 24, 18, 15, 8, 25, 3, 1, 22, 24, 18, 15, 8, 48, 3, 1, 22, 24, 18, 15, 8, 277, 3, 1, 22, 24, 18, 15, 8, 3146, 3, 1, 22, 24, 18, 15, 8, 46677, 3, 1, 22, 24, 18, 15, 8, 823564, 3, 1, 22, 24, 18, 15, 8, 16777237, 3, 1, 22, 24, 18, 15, 8, 387420510, 3, 1, 22, 24, 18, 15, 8]
Là một chuỗi, đây là một chương trình khá dài, bao gồm 810147050 ký tự, bắt đầu bằng:
hihihihihihi,hihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihi,hihihihihihihihihi,hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihih...
2. Chỉ giải các phần N + N và N * N của câu hỏi (484 byte)
Sử dụng TovTovTov(TOV='1',SEP=', ')
, lần này các SEP
s miễn dịch với sao chép ( ",, "
vẫn chỉ có một ", "
trong đó), vì vậy giải pháp được đề xuất sau đây sẽ luôn có 33 lệnh trong đó, ngay cả sau khi sao chép ký tự:
1111, 111111111111111111111111111111111111111111111111, 1111111111, 1111111111, 1111111111, 111111, 111111111111, 111111111, 11111111111111, 111, 1, 1111111111111111111111, 111111111111111111111111, 111111111111111111, 111111111111111, 11111111, 111111111111, 1111111111111111, 111111111111111, 1111111111111111111111, 111111111111111111111111111111111111, 11, 1111111111111111111111111111, 111111, 111, 111111, 11111111111, 111111111111111111111111111, 1111, 1, 11111111, 1, 11111111
Mảng ints tương ứng (số TOV
s ( 1
s) trong mỗi 33 lệnh trên) như sau:[4,48,10,10,10,6,12,9,14,3,1,22,24,18,15,8,12,16,15,22,36,2,28,6,3,6,11,27,4,1,8,1,8]
Sao chép các ký tự tại chỗ dẫn đến một danh sách 33 lệnh hoàn toàn khác nhau :
[8,96,20,20,20,12,24,18,28,6,2,44,48,36,30,16,24,32,30,44,72,4,56,12,6,12,22,54,8,2,16,2,16]
Các mảng ints gốc (để tính toán N + N ) được thiết kế một cách cẩn thận để sau khi các lệnh thay đổi ý nghĩa của chúng, chương trình vẫn có ý nghĩa, nhưng tính toán N * N . Ví dụ: lần đầu tiên 4
( TovTovTov
hiểu là "coi op tiếp theo là mã ascii để chuyển đổi thành ký tự") thay đổi sau khi sao chép ký tự thành 8
một lệnh hoàn toàn khác ("thay đổi Bộ đếm chương trình thành giá trị được bật đầu tiên từ ngăn xếp, nếu giá trị xuất hiện ngay sau đó là đúng ").