Gli automi cellulari sono davvero affascinanti. Quelli di cui si parla di solito sono quelli binari, cioè quelli rappresentabili da un numero. Tuttavia, quelli, secondo me, sono stati fatti a morte. Le CA ternarie sono più interessanti, ma dobbiamo considerare tutte le ASCII! Che divertimento potrebbe essere!
Invece di decidere una serie di regole per ogni personaggio, userò una semplice regola decisiva di cui parlerò presto. Per decidere la prossima generazione, esaminiamo le tre celle "top", in modo molto simile agli automi cellulari. Osserva un esempio:
QWERTY
X Y Z
La "cima" di Y
è WER
, essendo le celle sopra e destra, sopra e sopra e sinistra. Y sarà il risultato della funzione che sto per definire, che è una funzione su stringhe a tre caratteri. Il "top" di X
is QW
, o uno spazio che riempie la cella inesistente / mancante .
Ora, per la divertente funzione! Chiamo questa sequenza la sequenza XOROR per un motivo. Lascia che A
sia il charcode della cella in alto a sinistra, B
sia il charcode della cella in alto e C
sia il charcode della cella in alto a destra. Quindi, la cella risultante è il carattere il cui charcode è (A XOR B) OR C
, cioè (A^B)|C
. (Se un valore risultante è maggiore di 126, allora è impostato su (CHARCODE % 127) + 32
. Nulla viene fatto se un valore è inferiore a 32.) Ecco un esempio del seme 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 possiamo procedere per un po 'di seguito. Questa modifica della stringa è chiamata sequenza XOROR.
Obiettivo È necessario scrivere un programma o una funzione che svolga una delle seguenti attività:
- Data una stringa
s
e un numeron >= 0
,n
genera la stringa th sulla sequenza XOROR con seeds
,n = 0
essendo la prima trasformazione della stringa. - Data una stringa
s
, output (per programmi) o generare (per funzioni / generatori) un flusso infinito della sequenza XOROR con seeds
. Puoi scegliere di interrompere se la sequenza si ripete, ma ciò non è necessario.
s
consisterà sempre solo di caratteri ASCII stampabili, dallo spazio alla tilde più le schede (nessuna nuova riga).
Questo è un codice-golf , quindi vince il programma più breve in byte.
o
fanno sembrare una corsa allo zerg .
127%127+32==32
.
n=0
non è la stringa originale?
(d^!)|(space)
. Per quanto riguarda la tua seconda domanda, ti esibisci (CHAR%127)+32
dopo l'esecuzione di XOROR.