Сегодняшний дудл Google посвящен празднованию 50-летия детского кодирования : цель состоит в том, чтобы запрограммировать путь маленького зайчика, чтобы он мог съесть всю морковь. Есть 4 типа блоков (см. Рисунки ниже):
Слева направо:
O("...", k)
= оранжевый кусок: этоfor
циклы, которые k раз исполняют программу"..."
.G
= зеленая фигура: сделайте один шаг вперед, если можете, иначе ничего не делайтеBl
= синий кусок: повернуть направо и остаться на том же блокеBr
= синий кусок: поверните налево и оставайтесь на том же блоке
Код выше можно записать как
O(O(G G Br, 4) Bl Bl, 23)
Каждый блок ( G, Bl, Br, O(...,k)
) считается за 1 единицу, поэтому эта программа имеет длину 7. Обратите внимание, что значение k
включено в 1 единицу O
.
Есть 6 уровней. Чтобы пройти уровень, вам нужно съесть всю морковь. Это не проблема, если ваша программа не полностью выполнена, уровень заканчивается сразу, когда вы едите последнюю морковку.
Мы предполагаем, что все 4 типа блоков доступны на каждом уровне.
Ваша задача - найти единую программу, которая решает все уровни игры.
Кратчайшая программа в блоках выигрывает.
Снимки экрана каждого уровня:
Уровень 1:
Уровень 2:
Уровень 3:
Уровень 4:
Уровень 5:
Уровень 6:
источник
Собственно, я нашел решение с 8 блоками
источник
Найдено вручную, 9 блоков
O(O(GRGLGR,4)L,4)
Я начал с очевидного,
O(O(GGR,4)L,4)
что решает уровни 1-5, затем попробовал несколько вариантов, добавив фактически нулевые ходы на этих уровнях, чтобы найти тот, который завершил бы уровень 6. Самый короткий из них был простым направо-направо-налево в середине каждого "моста". «поэтому движение вперед не имело никакого эффекта.источник
O(O(GGR,4)L,4)
» опровергает, что самое короткое решение для уровня 4 - 7, как показано в игре.