Doodle Google про кодування дітей: найкоротша програма, яка вирішує всі рівні


26

Сьогоднішня каракуля 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:скріншот рівня 1
скріншот рівня 2
скріншот рівня 3
скріншот рівня 4
скріншот рівня 5
скріншот рівня 6

Відповіді:


24

Не моя відповідь

6 блоків

Користувач Alex знайшов коротше рішення, довжиною 6. Я можу підтвердити, що їх рішення працює:

O(O(Br G G, 6) Br, 5)

6 блоків

Вони намагалися відредагувати це питання, щоб додати цю відповідь, тому я припускаю, що вони хочуть, щоб це було відображено тут. Мені не подобається, як тут працює система репутації.

Повідомлення, яке вони залишили:

У редактора немає 10 повторень, але він має рішення довжиною 6. O (O (RGG, 6) R, 5)

Через кілька днів вони знову відповіли, редагуючи повідомлення: "Дякую за це. Редагування це було єдиним способом, який я бачив, щоб отримати повідомлення. Я щасливий, що воно існує взагалі. ти хочеш хоч ".

Стара відповідь

7 блоків

O(O(G G Br, 4) G Br, 100)

Терпіння потрібно.

Редагувати: зображення було неправильним. 7 блоків


Гарна знахідка! Я спробував такий підхід, але не трапився в цій конкретній комбінації, перш ніж відмовлятися від свого блокового рішення.
Спарр

2
Користувач Alex стверджує, що знайшов коротше рішення.
Джонатан Фрех

@JonathanFrech насправді є! Межа в 10 повторів дратує. Я розумію, що нам потрібно запобігати спаму, але чи не повинні нові користувачі хоча б модерувати спосіб розміщення відповідей? Свобода слова та інше.
Reinis Mazeiks

@RM Мене також трохи роздратувало, побачивши проблему. Я думаю, SE просто не розрахована на одноразові відповіді, оскільки це, мабуть, засмучує Алекса ...
Джонатан Фрех

1
Чому ви відредагували цю свою стару відповідь, а не опублікували її як нову відповідь?
Спарр


6

Вручну знайдено 9 блоків

O(O(GRGLGR,4)L,4)

Я почав з очевидного, O(O(GGR,4)L,4)що вирішує рівні 1-5, потім спробував декілька варіантів, додавши ефективно-нульові рухи на цих рівнях, щоб знайти той, який би завершив рівень 6. Найкоротшим був простий правий передній-лівий посередині кожного "моста" "тому рух вперед не мав ефекту.


1
Це, мабуть, оптимально, це означає, що виклик вже закінчений. :(
повністюлюдський

6
@totallyhuman виявляється, що спільнота ще не з цим все зробила: P
HyperNeutrino

"Очевидне O(O(GGR,4)L,4)" спростовує те, що найкоротше рішення для рівня 4 - це 7, як показано в грі.
мік

1
@mik Ігрові рішення не покладаються на зміну розміру циклу або рухи, які нічого не роблять.
Ніл

@totallyhuman Ви прогнозували, що це зовсім неправильно :). Навіть через рік після опублікування питання було знайдено краще рішення.
Захід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.