Spoon - kenrube/Esopoly GitHub Wiki
Spoon - производный от Brainfuck язык. Отличается он от предка всего 2 моментами:
- Добавлены 2 новые инструкции. Одна выводит на печать всю память полностью, вторая прерывает выполнение программы, тем самым завершая ее.
- Все инструкции сжаты по алгоритму Хаффмана. Благодаря ему, самая часто используемая инструкция инкремента кодируется всего одним символом (
1
), менее часто используемый декремент - тремя символами (000
), 2 новые и реже всех используемые инструкции кодируются восемью символами.
Поскольку все команды Brainfuck имеют в Spoon свой эквивалент, просто напишем исходник на нем, а затем уже сковертируем в Spoon. Принцип написания тот же, что и раньше:
+++++++++[>+++++++++<-]>++. print 'S'
<+++++[>++++++<-]>-. print 'p'
-. print 'o'
. print 'o'
-. print 'n'
>>++++++++[<++++>-]<. print ' '
[-]<++. print 'p'
++. print 'r'
---. print 'o'
--------. print 'g'
+++++++++++. print 'r'
>++++[<---->-]<-. print 'a'
++++++++++++. print 'm'
Составим таблицу соответствия инструкций:
Brainfuck | Spoon |
---|---|
> |
010 |
< |
011 |
+ |
1 |
- |
000 |
. |
001010 |
[ |
00100 |
] |
0011 |
И теперь трансформируем исходник (для удобства восприятия добавлены пробелы между инструкциями):
010 head
1 1 1 1 1 1 1 1 1 00100 010 1 1 1 1 1 1 1 1 1 011 000 0011 010 1 1 001010 print 'S'
011 1 1 1 1 1 00100 010 1 1 1 1 1 1 011 000 0011 010 000 001010 print 'p'
000 001010 print 'o'
001010 print 'o'
000 001010 print 'n'
010 010 1 1 1 1 1 1 1 1 00100 011 1 1 1 1 010 000 0011 011 001010 print ' '
00100 000 0011 011 1 1 001010 print 'p'
1 1 001010 print 'r'
000 000 000 001010 print 'o'
000 000 000 000 000 000 000 000 001010 print 'g'
1 1 1 1 1 1 1 1 1 1 1 001010 print 'r'
010 1 1 1 1 00100 011 000 000 000 000 010 000 0011 011 000 001010 print 'a'
1 1 1 1 1 1 1 1 1 1 1 1 001010 print 'm'
00101111 stop
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 tail
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --//--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --//--
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 --//--
Попробовать этот исходник в деле можно здесь.
Объединяем все 3 исходника:
DCBA@?\nZ;|38x0SA3tsN`Lo98*G"'&%$#Sc>`v<zLxwI5tWrDpoAm?Oj)Laf8dc\aZ~X|?U=Y;v9ONS54JnHG/jJCBGF(
>b%;_"876Z{321U5.-Qr*N('K%$H(hEf${Abaw=^zs9Zp6Wm3kj0Qglk+voooooooooo1oo>>o+ooooooooo11oooo++oo
ooooooooooooo1ooooo+ooooo+oooooo1ooooo+ooo[oooooo11oooooo<oooooooooo1ooooo+ooooooooo100ooo++oo
ooooooooooooo10oooo+0oooo+ooooooo0oooo+oooooooooo10oooo++ooooooooooo1ooooo+ooooooooo11oooo++oo
>oooooooooooo1ooo-o1oooo]ooooooo1ooooo<oooooooooo11o.oo>+ooooooooooo10oooo+ooooooooo11oooo++oo
oooooooooooooo0oooo+0oooo+[oooooo0oooo<ooooooooooo00ooo++ooooooooooo1ooooo+ooooooooo10oooo++oo
ooooooooooooo10oooo+ooooo+oooooo1ooooo+oooooooooo100ooo>oooooooooooo10oo-ooooooooo]o100ooooooo
oo<oooooooooo1oo.oo>ooooo+oooooo1ooooo+oooooooooo11oooo++oooooooo[oo1oooo<oooooooooo110o--oooo
oooooooooooooo0oo-o10oo-ooooooooo0oo>ooooooooooooo0oo-ooooooooo]oooo10ooo<oooooooooo11oo-ooooo
ooooooooooooo1oo.oo+ooooo+oooooo1ooooo+oooooooooo110ooo++ooooooooooo1ooooo+ooooooooo100ooo++oo
oooooooooooooo0o.oo+0oooo+ooooooo0oooo+oooooooooo110ooo++ooooooooooo10o.-oooooooooooo00o--oooo
oooooooooooooo0oo-oo0oo-ooooooooo0oo-oooooooooooo10oo--ooooooooooooo10o.>o+oooooooooo00ooo++oo
ooooooo[<ooooo0oooo+0oooo+ooooooo0oooo+oooooooooo10oooo++ooooooooooo10o>-ooooooooo]oo00ooooooo
oo<oooooooooo10o.oo>ooooo+oooooo10oooo+ooooooooooo00ooo++oooooooo[ooo0ooo<ooooooooooo00o--oooo
ooooooooooooo10oo-o10oo-ooooooooo0oo>oooooooooooo100o-ooooooooo]oooo10ooo<oooooooooo11oo--oooo
ooooooooooooo1oo.oo+ooooo+oooooo1ooooo+oooooooooo11oooo++ooooooooooo1ooooo+ooooooooo100ooo++oo
ooooooooooooo10o.oo>0oooooooooooo0oo>o+oooooooooo11oooo++ooooooooooo1ooooo+ooooooooo11oooo++oo
ooooooooooooo10oooo+ooooo+[ooooo10oooo<ooooooooooo00ooo++oooooooooooo0oooo+oooooooooo00ooo+ooo
>oooooooooooo1ooo-o10ooo]ooooooo1ooooo<oooooooooo100.oooooooooooo[oo10oo-ooooooooo]o100ooooooo
oo<ooooooooooo0oooo+ooooo+oooooo10oooo+ooooooooooo00ooo++oooooooooooo0o.oo+oooooooooo00ooo+ooo
oooooooooooooo0o.-o1ooo-oooooooo10oo-oooooooooooo11o.--ooooooooooooo1ooo-ooooooooooo100o--oooo
ooooooooooooo10oo-o10oo-oooooooo1ooo-oooooooooooo100.oo++ooooooooooo10oooo+ooooooooo100ooo++oo
oooooooooooooo0oooo+0oooo+ooooooo0oooo+ooooooooooo00ooo++oooooooooooo0oooo+oooooooooo00.oooooo
>ooooooooooooo0oooo+0oooo+oooooo10oooo+oooooooooo100ooo+ooooooooo[ooo0ooo<ooooooooooo00o--oooo
oooooooooooooo0oo-oo0oo-ooooooooo0oo>ooooooooooooo00o-ooooooooo]ooooo0ooo<ooooooooooo00o-ooooo
oooooooooooooo0o.oo+0oooo+ooooooo0oooo+ooooooooooo00ooo++oooooooooooo0oooo+oooooooooo00ooo++oo
oooooooooooooo0oooo+0oooo+ooooooo0oooo+ooooooooooo00ooo+ooooooooooooo0o.oooooooooooo10oooooooo
ooooooooooooo10oooo1oooooooooooo1oooooooooooooooo11ooooooooooooooooo1ooooooooooooooo11oooooooo
ooooooooooooo1ooooo1oooooooooooo1oooooooooooooooo100oooooooooooooooo10oooooooooooooo100ooooooo
ooooooooooooo10oooo1oooooooooooo1oooooooooooooooo110ooooooooooooooooo0oooooooooooooo100ooooooo
oooooooooooooo0oooo1oooooooooooo10oooooooooooooooo00ooooooooooooooooo0ooooooooooooooo00ooooooo
oooooooooooooo0ooooo0oooooooooooo0oooooooooooooooo00ooooooooooooooooo0ooooooooooooooo0oooooooo
ooooooooooooo10ooooo0oooooooooooo0oooooooooooooooo00ooooooooooooooooo0oooooooooooooo110ooooooo
ooooooooooooo1ooooo10oooooooooooo0oooooooooooooooo00ooooooooooooooooo0oooooooooooooo10oooooooo
ooooooooooooo10oooo1oooooooooooo1oooooooooooooooo11ooooooooooooooooo1ooooooooooooooo11oooooooo
ooooooooooooo1ooooo1oooooooooooo1oooooooooooooooo110ooooooooooooooooo0oooooooooooooo10oooooooo
ooooooooooooo10ooooo0oooooooooooo0ooooooooooooooo10ooooooooooooooooo1ooooooooooooooo11oooooooo
ooooooooooooo1oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
3 языка есть, идем дальше.