Les automates cellulaires sont vraiment fascinants. Ceux dont on parle habituellement sont les binaires, c'est-à-dire ceux représentables par un nombre. Cependant, ceux-ci, à mon avis, ont été tués à mort. Les AC ternaires sont plus intéressants, mais nous avons tous à considérer ASCII! Quel plaisir cela pourrait-il être!
Au lieu de décider d'un ensemble de règles pour chaque personnage, j'utiliserai une règle de décision simple dont je parlerai bientôt. Pour décider de la prochaine génération, nous examinons les trois cellules "supérieures", un peu comme les automates cellulaires. Observez un exemple:
QWERTY
X Y Z
Le "haut" de Y
est WER
, étant les cellules au-dessus et à droite, au-dessus et au-dessus et à gauche. Y sera le résultat de la fonction que je m'apprête à définir, qui est une fonction sur des chaînes de trois caractères. Le "haut" de X
est QW
, ou un espace remplissant la cellule inexistante / manquante .
Maintenant, pour la fonction amusante ! J'appelle cette séquence la séquence XOROR pour une raison. Soit A
le code de cellule en haut à gauche, B
le code de cellule ci-dessus et le code de cellule en C
haut à droite. Ensuite, la cellule résultante est le caractère dont le code de caractère est (A XOR B) OR C
, c'est-à-dire (A^B)|C
. (Si une valeur résultante est supérieure à 126, elle est alors définie sur (CHARCODE % 127) + 32
. Rien n'est fait si une valeur est inférieure à 32.) Voici un exemple de la graine 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
Et nous pouvons continuer un peu plus tard. Cette modification de la chaîne est appelée séquence XOROR.
Objectif Vous devez écrire un programme ou une fonction qui effectue l'une des tâches suivantes:
- Étant donné une chaîne
s
et un nombren >= 0
,n
sortez la e chaîne sur la séquence XOROR avec seeds
, avecn = 0
comme première transformation de la chaîne. - Étant donné une chaîne
s
, produire (pour les programmes) ou générer (pour les fonctions / générateurs) un flux infini de la séquence XOROR avec seeds
. Vous pouvez choisir d'arrêter si la séquence se répète, mais ce n'est pas nécessaire.
s
sera toujours uniquement composé de caractères ASCII imprimables, de l'espace aux onglets tilde plus (pas de nouvelle ligne.)
Il s'agit d'un code-golf , donc le programme le plus court en octets l'emporte.
o
s font ressembler à une ruée vers les zergs .
127%127+32==32
.
n=0
la chaîne d'origine n'est-elle pas?
(d^!)|(space)
. Quant à votre deuxième question, vous effectuez (CHAR%127)+32
après l'exécution du XOROR.