Півтора місяці тому я писав про курси Prometheus, де я взявся вивчати мову сценаріїв Python і що я там такий успішний. Так ось, в цю суботу було опубліковане останнє, екзаменаційне завдання і я його виконав, тепер чекаю на генерацію електронного сертифікату — наскільки я зрозумів, то буде посилання, за яким красивими літерами буде написано про те, що я такий молодець.

До останнього завдання відсіялися люди, які не вміють читати і шукати інформацію самостійно. Самі курси, за враженнями учасників, схожі до інструкції "Як намалювати сову?". Крок перший — малюємо два кола, крок другий — малюємо решту сови. В тім, є форум, де можна було задавати свої ламерські запитання і бути посланим на гугл. Бувало, що і по справі підказували.

Ах так, мало не забув — курс програмування на Prometheus нікуди не дівається, а залишається доступним для тих, хто вирішить опанувати його пізніше.

Так ось, екзаменаційне завдання стосувалося проходження лабіринту роботом. План і розміри невідомі, десь там лежить артефакт — перстень Цзунь-Си, що можна знайти. Тестовий лабіринт може бути як і простий, так і багатозв'язний і, навіть, з коридорами, ширшими за одну клітинку. Робот вміє повертатися і наосліп їхати вперед, стикаючись з перешкодами.

Моя програма вийшла:

  • Рекурсивною. Більше того, в кожному виклику копія робота тиражується в чотири екземпляри, кожен з яких посилається вперед, назад, вліво та вправо. Можна було-б назад не роботи, адже ми звідти прийшли, проте в одному із тестових прикладів робот стартує мордою в стінку.
  • Я в курсі, що можна написати без рекурсії.
  • Щоб обмежити рекурсію, робот запам'ятовує відносні координати всіх відвіданих точок і більше в них не сунеться жодною із своїх копій.
  • Для тестування свого коду, я мусив візуалізувати лабіринт, що очевидно.
  • В Python незвична для мене політика областей видимості, а я до цього програмував на Pascal, то-ж мені не вдалося повернути копію робота, яка знайшла артефакт, в первинну точку виклику. Тому я приробив милицю у вигляді запису правильних ходів і потім, за допомогою простого циклу, відтворюю всі ходи над оригінальною копією робота, що передається в мою підпрограму у вигляді об'єкта.
  • Ну а раз у мене є запис ходів, плюс наявні засоби візуалізації, тому можна запросто показати правильний шлях у вигляді анімації. Зазначу, що шлях не найкоротший.
Анімація робота

А під катом мій бидлокод. Точніше, перша частина — викладача курсів, як задана умова, а вже далі — мій розв'язок.

...

Свій бидлокод я публікувати передумав, неетично викидати в інтернети готове рішення задачі.