Cellular Automata thực sự hấp dẫn. Những cái thường được nói đến là những cái nhị phân, tức là những cái được đại diện bởi một số. Tuy nhiên, những người, theo tôi, đã được thực hiện cho đến chết. CA Ternary thú vị hơn, nhưng chúng tôi có tất cả ASCII để xem xét! Điều gì có thể vui vẻ!
Thay vì quyết định một quy tắc cho mỗi nhân vật, tôi sẽ sử dụng quy tắc quyết định đơn giản mà tôi sẽ nói về sớm. Để quyết định thế hệ tiếp theo, chúng tôi xem xét ba ô "trên cùng", giống như một máy tự động di động. Quan sát một ví dụ:
QWERTY
X Y Z
"Trên cùng" Y
là WER
, là các ô bên trên và bên phải, bên trên và bên trên và bên trái. Y sẽ là kết quả của hàm tôi sắp định nghĩa, là hàm trên chuỗi ba char. "Đỉnh" của X
là QW
, hoặc một khoảng trắng điền vào ô không tồn tại / bị thiếu .
Bây giờ, cho các chức năng thú vị ! Tôi gọi trình tự này là trình tự XOROR vì một lý do. Đặt A
mã char ô trên cùng bên trái, B
là mã char cell ở trên và C
là charcode ô trên cùng bên phải. Sau đó, ô kết quả là ký tự có charcode là (A XOR B) OR C
, nghĩa là (A^B)|C
. (Nếu giá trị kết quả lớn hơn 126, thì nó được đặt thành (CHARCODE % 127) + 32
. Không có gì được thực hiện nếu giá trị nhỏ hơn 32.) Đây là một ví dụ về hạt giống Hello, World!
:
S: Hello, World!
0: mmmo/c_ z}~)e
m = ( )^(H)|(e) = (32^72)|101 = 104|101 = 109 (m)
m = (H)^(e)|(l) = (72^101)|108 = 45|108 = 109 (m)
etc.
1: mmo/c_< +wl
2: mo/c_<c< + |;
3: o/c_<c ?+ g
4: oc_<c c??4+gg
5: 0_<c c 4+ o
6: _<c ccc4??ooo
7: c ccc4 ?o o
8: ccccc4w? pooo
9: cccc4w h o
A: ccc4wc hh ooo
B: cc4wc4kh ooo
C: c4wc4 #ooo o
D: wwc4w4#ooo oo
E: wc4wwc oo oo
F: w4wwc4oo oo o
G: wwwc4 oo oo
H: wwc4w4 oo oo
I: w4wwc4oooo oo
J: wwwc4 oo oo
K: wwc4w4oo oo o
L: wc4wwo oo oo
M: w4wwo8ooo oo
N: wwwo8 o oo o
O: wwo8w8oooo oo
Và chúng ta có thể tiến hành trong một thời gian sau đây. Việc sửa đổi chuỗi này được gọi là chuỗi XOROR.
Mục tiêu Bạn phải viết một chương trình hoặc chức năng thực hiện một trong các nhiệm vụ sau:
- Cho một chuỗi
s
và một sốn >= 0
, xuấtn
chuỗi thứ n trên chuỗi XOROR với seeds
, vớin = 0
phép biến đổi đầu tiên của chuỗi. - Đưa ra một chuỗi
s
, đầu ra (cho các chương trình) hoặc tạo (cho các hàm / trình tạo) một luồng vô hạn của chuỗi XOROR với seeds
. Bạn có thể chọn dừng lại nếu trình tự lặp lại, nhưng điều này là không cần thiết.
s
sẽ luôn chỉ bao gồm các ký tự ASCII có thể in được, từ dấu cách đến dấu ngã cộng với các tab (không có dòng mới.)
Đây là một môn đánh gôn , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.
o
s làm cho nó trông giống như một cơn sốt Zerg .
127%127+32==32
.
n=0
không phải là chuỗi gốc?
(d^!)|(space)
. Đối với câu hỏi thứ hai của bạn, bạn thực hiện (CHAR%127)+32
sau khi XOROR được thực hiện.