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

топ 100 блогов avva — 12.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.

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

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

Предыдущие записи блогера :
Архив записей в блогах:
Кот по кличке Тихон, проживающий на территории управления ветеринарии правительства Саратовской области, прибавил в весе. Об этом рассказала пресс-секретарь ведомства Анна Чурсова. По ее словам, с момента пресс-конференции начальника управления Алексея Частова, состоявшейся 21 ноября ...
Новый взрыв новой подстанции в Венесуэле. Взорвалась подстанция Лос Фараллонес в районе города Сьюдад-Боливар. Ситуация начинает напоминать события 2005 года в Москве, когда взорвавшаяся подстанция "Чагино" стала причиной перегрузок в сети, в которой и без того наблюдался дефицит ...
Утром лень тратить время на это. А вечером захуярил на сковородку что-то такое, утром кинул туда пару яиц, сыром засыпал, паприки и чеснока сверху и божественный завтрак за 10 минут. ...
« Пляж » на Яндекс.Фотках По неоднократно высказанным просьбам выкладываю подборку фоток с Одессы) фотки не мои, автор - одесский фотограф Карра. У меня, в общем-то, тоже есть несколько фоток с красотками на пляже, но таки будем посмотреть на коменты к этому посту) Понравится - ...
Кстати, друзья мои, вы заметили, что у меня перестала появляться джинса?   Не, не от того, что не нужны деньги. Просто потому, что я пересмотрел требования.   Несколько месяцев назад ко мне обратилась общеизвестная фармкомпания. Выдала мне длинную портянку с вопросами, на ...