Os autômatos celulares são realmente fascinantes. Os que geralmente são mencionados são os binários, ou seja, os representáveis por um número. No entanto, esses, na minha opinião, foram mortos. As ACs ternárias são mais interessantes, mas temos todo o ASCII a considerar! Que divertido isso poderia ser!
Em vez de decidir um conjunto de regras para cada personagem, usarei uma regra de decisão simples da qual falarei em breve. Para decidir a próxima geração, analisamos as três células "superiores", como um autômato celular. Observe um exemplo:
QWERTY
X Y Z
O "topo" de Y
é WER
, sendo as células acima e à direita, acima e acima e à esquerda. Y será o resultado da função que estou prestes a definir, que é uma função em seqüências de três caracteres. O "top" de X
é QW
, ou um enchimento espaço no / célula falta inexistente .
Agora, para a função divertida ! Eu chamo essa sequência de sequência XOROR por um motivo. Seja A
o código da célula no canto superior esquerdo, o código B
da célula acima e o código da célula no canto C
superior direito. Em seguida, a célula resultante é o caractere cujo código é (A XOR B) OR C
, ou seja (A^B)|C
,. (Se um valor resultante for maior que 126, será definido como (CHARCODE % 127) + 32
. Nada será feito se um valor for menor que 32.) Aqui está um exemplo da semente 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
E podemos continuar por um tempo adiante. Essa modificação da string é chamada de sequência XOROR.
Objetivo Você deve escrever um programa ou função que execute uma das seguintes tarefas:
- Dada uma sequência
s
e um númeron >= 0
,n
produza a sequência th na sequência XOROR com seeds
,n = 0
sendo a primeira transformação da sequência. - Dada uma sequência
s
, produza (para programas) ou gere (para funções / geradores) um fluxo infinito da sequência XOROR com sementes
. Você pode optar por parar se a sequência se repetir, mas isso não é necessário.
s
sempre consistirá apenas em caracteres ASCII imprimíveis, do espaço ao til e mais guias (sem novas linhas).
Este é um código de golfe , portanto o programa mais curto em bytes vence.
o
eles fazem parecer uma corrida zerg .
127%127+32==32
.
n=0
não é a string original?
(d^!)|(space)
. Quanto à sua segunda pergunta, você executa (CHAR%127)+32
após a execução do XOROR.