]]> ]]>

COW

Диалект языка программирования Brainfuck

COW — эзотерический язык программирования, созданный Sean Heber в 2003 году на основании языка Brainfuck. В отличие от многих диалектов Brainfuck, команды COW похожи, но не идентичны командам последнего. Всего в языке 12 команд, выражающихся мычанием в разных регистрах; кроме мычания, каждой команде соответствует числовой код:

  • 0 moo : вернуться к парной команде MOO и продолжить выполнение с нее;
  • 1 mOo : сдвинуть указатель данных на одну ячейку влево (BF — <);
  • 2 moO : сдвинуть указатель данных на одну ячейку вправо (BF — >);
  • 3 mOO : выполнить значение в текущей ячейке как команду с соответствующим кодом; значения больше 11 и 3 считаются инвалидными и прекращают выполнение программы;
  • 4 Moo : если значение текущей ячейки равно 0, прочитать символ и поместить в ячейку его ASCII-код (BF — ,), иначе вывести значение в ячейке как символ (BF — .);
  • 5 MOo : уменьшить на 1 значение в текущей ячейке (BF — -);
  • 6 MoO : увеличить на 1 значение в текущей ячейке (BF — +);
  • 7 MOO : если значение текущей ячейки ноль, пропустить следующую команду и перейти на команду, следующую за парной moo; иначе продолжать выполнение;
  • 8 OOO : обнулить значение в текущей ячейке (BF — [-]);
  • 9 MMM : если регистр пуст, скопировать в него значение текущей ячейки, иначе скопировать в ячейку содержимое регистра и очистить регистр;
  • 10 OOM : напечатать значение текущей ячейки как число;
  • 11 oom : прочитать число и поместить его в текущую ячейку.

Следует отметить, что команды MOO и moo работают не так, как [ и ] — при поиске парной команды, закрывающей цикл, команда, следующая сразу за началом цикла, пропускается.

Примеры:

Hello, World!:

Пример для версий EsCo 0.511 (Brainfuck)

Пример на COW.

MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MOO moO MoO moO MoO MoO moO MoO MoO MoO 
moO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO moO MoO 
MoO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO 
MoO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO moO MoO MoO MoO 
MoO MoO MoO MoO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO 
MoO moO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO mOo mOo mOo mOo mOo
mOo mOo mOo mOo mOo mOo mOo mOo MOo moo moO moO moO moO moO moO moO moO MOo MOo 
MOo MOo MOo MOo MOo MOo Moo moO moO moO MOo MOo MOo MOo MOo MOo MOo MOo MOo Moo 
MoO MoO MoO MoO MoO MoO MoO Moo Moo moO MOo MOo MOo MOo MOo MOo MOo MOo MOo Moo 
mOo mOo mOo mOo mOo mOo mOo MOo MOo MOo MOo MOo MOo Moo mOo MOo MOo MOo MOo MOo 
MOo MOo MOo Moo moO moO moO moO moO MOo MOo MOo Moo moO moO moO Moo MoO MoO MoO 
Moo mOo Moo MOo MOo MOo MOo MOo MOo MOo MOo Moo mOo mOo mOo mOo mOo mOo mOo MoO 
Moo 

Числа Фибоначчи:

Пример для версий EsCo 0.511 (Brainfuck)

Пример на COW. Аналогичен этому примеру, но вывод чисел на печать существенно упрощается за счет команды OOM; фактически, даже с более длинными командами пример лаконичнее исходного.

MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO 
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO 
                                            c1v44 : ASCII code of comma
moO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO 
MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
                                            c2v32 : ASCII code of space
moO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO MoO
                                            c3v11 : quantity of numbers to be calculated
moO                                         c4v0  : zeroth Fibonacci number (will not be printed)
moO MoO                                     c5v1  : first Fibonacci number
mOo mOo                                     c3    : loop counter
MOO                                         block : loop to print (i)th number and calculate next one
moO moO OOM                                 c5    : the number to be printed
mOo mOo mOo mOo Moo moO Moo                 c1c2  : print comma and space
                                            block : actually calculate next Fibonacci in c6
moO moO MOO moO moO MoO mOo mOo MOo moo     c4v0  : move c4 to c6 (don't need to preserve it)
moO MOO moO MoO mOo mOo MoO moO MOo moo     c5v0  : move c5 to c6 and c4 (need to preserve it)
moO MOO mOo MoO moO MOo moo                 c6v0  : move c6 with sum to c5
mOo mOo mOo MOo                             c3    : decrement loop counter
moo 
mOo mOo MoO MoO Moo Moo Moo                 c1    : output three dots

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам