Стільникові автомати справді захоплюючі. Ті, про які зазвичай говорять, - це двійкові, тобто ті, що можуть бути представлені числом. Однак, на мою думку, це було зроблено до смерті. Термінальні ЦА цікавіші, але ми маємо враховувати всі ASCII! Що це може бути весело!
Замість того, щоб визначити набір правил для кожного символу, я буду використовувати просте правило, про яке я поговорю найближчим часом. Щоб вирішити наступне покоління, ми дивимось на три "верхніх" комірки, подібно до стільникових автоматів. Подивіться приклад:
QWERTY
X Y Z
"Вершина" Y
- WER
це клітини вправо, вгорі, вгорі і вгорі і вліво. Y буде результатом функції, яку я збираюся визначити, що є функцією на трьох рядках. «Вершина» X
є QW
, або заповнення простору в неіснуючої / відсутню клітці .
Тепер, для веселої функції! Я називаю цю послідовність послідовністю XOROR з причини. Нехай це A
буде верхній лівий шаркод клітини, B
бути вищенаведеним charcode коду та C
бути угорі правого верхнього коду комірки. Потім, отримана комірка є символом, чиїм кодом є (A XOR B) OR C
, тобто (A^B)|C
. (Якщо отримане значення перевищує 126, тоді воно встановлюється (CHARCODE % 127) + 32
. Нічого не робиться, якщо значення менше 32.) Ось приклад насіння 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
І ми можемо продовжити деякий час далі. Ця модифікація рядка називається послідовністю XOROR.
Завдання: Ви повинні написати програму або функцію, яка виконує одне з наступних завдань:
- Задавши рядок
s
і числоn >= 0
, виведітьn
th рядок у послідовності XOROR з насіннямs
, приn = 0
цьому це буде першим перетворенням рядка. - Дано рядок
s
, вивести (для програм) або генерувати (для функцій / генераторів) нескінченний потік послідовності XOROR із насіннямs
. Ви можете зупинити, якщо послідовність повторюється, але це не обов'язково.
s
завжди буде складатися лише з символів для друку ASCII, від простору до тильди та вкладок (немає нових рядків.)
Це кодовий гольф , тому виграє найкоротша програма в байтах.
127%127+32==32
.
n=0
не є початковий рядок?
(d^!)|(space)
. Що стосується вашого другого питання, ви виконуєте (CHAR%127)+32
після виконання XOROR.