Три задачки

Apr 16, 2012 14:04

  В пятницу прошла встреча с двумя приехавшими издалека подругами - Хэллот и Летицией. Во время встречи Летиция, Антон и я озвучили по одной задачке. Задачки известные и несложные, но могут подойти для разминки мозга в первый день рабочей недели.


Задача #1:
Во вторник с господином A и господином Б будет проделана следующая странная процедура: каждому из них на голову наденут шапки, на каждой шапке будет написано одно число, "1" или "2". Числа никак друг-от-друга не зависят. Каждый из них увидит, что написано на шапке другого, но будет без понятия о том, что написано на его шапке. После этого их разведут по  разным комнатам, так что они не смогут ни слышать ни видеть друг-друга. В комнатах они должны будут назвать число. Если хотя бы один из них назовет число, которое написано у него на шапке, они победили, и им выдают по книжке Смаллиана. Если же нет - заставляют смотреть передачи про НЛО по каналу ТВ-3. В понедельник им дают договориться о стратегии, с которой они будут действовать во вторник. Какой же должна быть эта стратегия, чтобы не смотреть ТВ-3.

Задача #2:
В бесконечно длинную прямую траншею на парашютах десантируются 2 робота. Во время приземления роботы смотрят в одну сторону, перпендикулярно траншее. Траншея узкая и только-только вмещает робота. После приземления парашют каждого робота остается на том месте, куда данный робот приземлился. Роботы содержат в себе интерпретатор простенького языка メガメカ, состоящего из 4-х команд. Каждая поманда располагается на своей строке. Каждая строка имеет свой номер. Пустых строк нет. Команды такие:
left - роботу пойти влево на шаг, интерпретатору перейти на следующую строку;
right - роботу пойти вправо на шаг, интерпретатору перейти на следующую строку;
goto x - интерпретатору перейти на строку с номером x;
check - проверить, есть ли парашют под роботом. Если да - интерпретатору перепрыгнуть через следующую строку. Если нет - просто перейти на следующую строку.
Исполнение каждой команды занимает один тик. Если интерпретатор пытается перейти на строку за пределами программы, программа на следующем тике заканчивает свое исполнение. Длина шага у роботов одинакова. Роботы приземляются единовременно и тут же начинают исполнение своих программ. Роботы после приземления оказываются на расстоянии целого числа шагов друг-от-друга. 
Существует ли программа на языке メガメカ такая, что если перед десантированием загрузить ее в оба робота, они встретятся за конечное число тиков? Если да, то приведите ее листинг:)

Задача #3:
Есть две двери, перед каждой из них стоит стражник. За одной дверью - еще одна книжка Смаллиана. За другой - ничего. Каждый из стражников может быть одного из 3-х типов:
рыцарь - всегда говорит правду
лжец - всегда говорит ложь
хитрец - по очереди(т.е. меняя состояние после каждого заданного ему вопроса) говорит правду/ложь, но неизвестно, с чего именно начинает.
Стражникам можно задавать вопросы, ответом на которые является "да" или "нет". Можно ли за два таких вопроса узнать, за какой дверью книжка? Если да, то как?

Previous post Next post
Up