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

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

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

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

Предыдущие записи блогера :
Архив записей в блогах:
Группа сопровождения миссии OSIRIS-REx опубликовала наиболее детально е на сегодняшний день изображение участка Nightingale на астероиде Бенну  (101955 Bennu). Он выбран в качестве основного участка для операции по взятию образца малого тела. 4 марта OSIRIS-REx выполнил близкий ...
Мастерская Франсуа Клуэ. Портрет Дианы де Пуатье. 1555 Часть 7. ПОСЛЕ КОРОЛЯ          Диана де Пуатье наслаждалась жизнью королевы и ...
Завтра ключевой день запуска кодов. Бдите. Не снил. Просто спал и снилось много мутного.  Снился конкурс песен, на котором мы должны выступить, а Лёша, наш певец, артачится, называя всё попсой, хотя нам дали отель, жратву, бабло и будет телевидение....Я настаиваю  -давай убедим ...
Его пыталась съесть галка, но улетела, когда я подошла посмотреть, кто такой длинный. Не детёныш гадюки же? Киев. Рядом банка для масштаба. ...
После того как уже бывшего президента США Дональда Трампа забанили в соцсетях, он решил завести собственную платформу, которая должна была конкурировать с Twitter и Facebook. Быстрого взлета не получилось. И менее чем через месяц Трамп закрыл свой блог. Один из его бывших советников ...