сложить два числа (программистское)

топ 100 блогов avva12.05.2015 Забавная задачка из блога Джона Грэма-Камминга. Он пишет, что ему ее задали на вступительном экзамене на компьютерный факультет
в Оксфорде в 1980-х.

Дана абстрактная машина, которая работает с памятью неограниченного размера. Память состоит из ячеек, пронумерованных от 0, и каждая ячейка содержит целое число. В начале работы программы содержимое всех ячеек неопределено.

У машины есть три инструкции следующего вида:

Z n - обнулить ячейку n
I n - увеличить на 1 содержимое ячейки n
J n,m,стрелка - сравнить ячейки n и m, и если их содержимое различается, то прыгнуть на инструкцию, на которую указывает стрелка (вместо стрелки в тексте можно использовать метки или номера инструкций).

Программа состоит из последовательности инструкций (с метками/номерами). Программа останавливается, когда закончились инструкции. Например, следующая программа копирует в ячейку 0 содержимое ячейки 20 (предполагая, что оно больше нуля), а потом останавливается. Если в ячейке 20 лежит отрицательное число, она никогда не остановится.

Z 0
loop:
I 0
J 0, 20 -> loop

Задание: написать программу, которая складывает два числа. Перед запуском программы числа помещаются в ячейки 0 и 1. В конце работы программы сумма должна лежать в ячейке 2. Про числа известно, что они целые неотрицательные.

Эта задача не будет сложной для опытного программиста, но есть некоторые тонкости. Интересно также посмотреть, как ее можно сделать покороче. Я справился за 16 инструкций.

Update: несколько типичных ошибок: 1) не прочитали внимательно, что делает инструкция J; 2) не работает, когда один из аргументов 0; 3) не работает, когда оба аргумента 0.

Но уже в комментах есть несколько правильных версий, в том числе короче моей (я теперь понимаю, что несколько перестраховался в своем дизайне).

Оставить комментарий

Предыдущие записи блогера :
Архив записей в блогах:
Эх! ...
Вывод этот сделан после стенаний либералов на радио "Эхо Москвы" по случаю отказа суда признать прошлогодние высказывания директора ФСБ Бортникова противозаконными. Савеловский районный суд Москвы отклонил иск бывшего следователя по особо важным делам Генпрокуратуры Игоря Степанова к ...
По мере того как мы подходили к границе, разделяющие руандийский городок Гисейни ...
Дама получила срок за создание странички в Интернете от имени соперницы/ Если вы решите поставить на свою аватарку в соцсети чужую фотографию — будьте готовы, что придется отвечать за это перед судом. Неожиданный интернет-скандал разгорелся ...
С учетом того, как продвигаются дела у "Синергии", есть идеи, куда будет развиваться их военно-историческая программа. В позапрошлом году их коллеги из Екатеринбурга показали, как правильно подходить к данному вопросу. ...

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: db

Filename: libraries/Output.php

Line Number: 246

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: db

Filename: libraries/Output.php

Line Number: 246

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: db

Filename: libraries/Output.php

Line Number: 246

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: db

Filename: libraries/Output.php

Line Number: 246

A PHP Error was encountered

Severity: Warning

Message: mysqli::mysqli(): (HY000/2002): No such file or directory

Filename: libraries/Output.php

Line Number: 246

A PHP Error was encountered

Severity: Warning

Message: mysqli::query(): Couldn't fetch mysqli

Filename: libraries/Output.php

Line Number: 250