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

топ 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.

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

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

Предыдущие записи блогера :
Архив записей в блогах:
Снилось что я на берегу, но не реки, не моря, а очень большого озера. Там такая коса, я бежал по ней, потом выбегаю на огромную асфальтированную площадку и думаю - тут же можно было сделать сосновую рощу и посерёдке - футбольное поле или лужайку. Бегу дальше вдоль берега, там заросло ...
Прочёл книгу Александра Панчина «Защита от тёмных искусств». Мощная штука — отличный инструмент для прочистки мозгов от веры в традиционное шарлатанство типа иглоукалывания, астрологии и прочей эзотерики. Отдельное спасибо автору за его борьбу с гомеопатией: в условиях, когда ...
Современные дети все больше времени проводят с разными гаджетами, но есть ещё места, где детям о гаджетах приходится только мечтать. Их детство — тяжёлый ежедневный труд, что бы заработать на кусок хлеба. Глядя на эти фотографии, язык не поворачивается жаловаться о своём трудном детстве и ...
Говорят, что богатый урожай рябины - к суровой зиме, но я предпочитаю думать, что это просто такой сорт:)) ...
А меня какие нибудь следопыты-охотники просматривают? Я тут в лесу жилище чьё то нашёл свежепостроенное, не поможете определить чьё? Характеристики жилой площади: Расположено в воронке, в шаговой доступности от относительно свежей вырубки. ...