Блог пользователя dmkz

Автор dmkz, 6 лет назад, По-русски

На просторах интернета с 2004 года существует игра "Жук".

Цель игры — построить такой лабиринт, в котором жук найдет выход за наибольшее количество шагов. Жук всегда находит выход, то есть, его алгоритм поиска выхода корректен, но не оптимален. Запирать жука нельзя, в конкурсе участвуют только лабиринты, из которых есть выход.

Существует также одноименная олимпиадная задача по программированию, посвященная этому жуку. В ней подробно описан алгоритм движения жука, поэтому, решив эту задачу, можно скармливать лабиринты жуку на домашнем компьютере:

Жук всегда начинает свое движение с левого верхнего угла, а выход всегда находится в правом нижнем. Жук движется не оптимально, а следующим образом: он идет туда, где еще не был, либо был там реже. Т.е. проходя каждую клетку лабиринта, жук запоминает: сколько раз он был в этой клетке и при обдумывании направления своего движения в какой то конкретный момент он смотрит: сколько раз он был в клетке снизу, сколько справа, сколько слева и сколько сверху и движется туда, где он был меньше раз. Если таких направлений несколько и одно из них совпадает с текущим направлением движения, то он не меняет направления, иначе он движется согласно следующим приоритетам: вниз, направо, вверх, налево. Т.е. если минимальное число посещений сразу справа и слева (а двигался он при этом вверх или вниз), то жук идет направо, т.к. у "направо" приоритет выше.

На сайте есть таблица рекордов по всем лабиринтам, в которой указан пользователь и результат прохождения жуком его самого сложного лабиринта. Я там есть, 5-е место с 10 млн ходов. Кстати, 250 млн ходов у победителя было получено совсем недавно, еще в мае его не было.

За 14 лет существования игры не было получено хороших оценок сверху на максимально возможное количество шагов жука, а также не был получен алгоритм построения худшего теста.

Заинтересовавшимся предлагается поиграть в игру "Жук", погенерировать лабиринты и "поисследовать" эту задачу. Возможно, получится сместить лидеров с их пьедестала.

UPD: для ускорения прогонки жука на ваших лабиринтах онлайн жмите F12 (консоль разработчика) и пропишите speed = 1/512. Для регистрации рекорда не нужно ждать, просто жмите сохранить и результат будет отправлен на сервер. Там он будет проверен и таблица будет обновлена.

  • Проголосовать: нравится
  • +87
  • Проголосовать: не нравится

»
6 лет назад, # |
Rev. 2   Проголосовать: нравится +45 Проголосовать: не нравится

Мы с sas4eka действительно прошлись по жуку в июне. Результаты весьма неутешительные: (а) мы воткнулись в исследованиях в один неприятный потолок и (б) отправить лабиринт порядка 300млн на сайт уже не получится в связи с чрезвычайно медленной проверкой на стороне сервера.

Примечание: у меня есть лабиринт на 1.5e9 и практическая уверенность, что ответ превышает 4e9, так что ставьте int64 для поля 19*29

  • »
    »
    6 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +16 Проголосовать: не нравится

    Вы пробовали связываться с администрацией сайта? Контакты с сайта: Беляев Сергей Николаевич, [email protected]. Может, лабиринты с 300 млн вообще не предполагались авторами и есть возможность пофиксить, ускорив проверку.

    Вы считали явно, моделируя перемещение жука, или как-то оптимизировали, отслеживая циклы? На сайте проверка явная.

    • »
      »
      »
      6 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +13 Проголосовать: не нравится

      Именно это и есть наш неприятный потолок. Мы не придумали, как вычислять целевую функцию быстрее, чем простейшей эмуляцией.

      На сайте безумно медленная проверка, написанная на ASP, кажется, порядка 10м/минута.

      С разработчиком сайта я связывался, вы тоже можете попробовать. Он не предполагал, что ответы подобного масштаба существуют.

»
6 лет назад, # |
  Проголосовать: нравится +18 Проголосовать: не нравится

Honestly I was looking for a "Connect Four" meme when I saw the title

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Do all labyrinths need to be 19 x 29?

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Yes, all labyrinths in this contest need to be a (1 + 29 + 1) in width and (1 + 19 + 1) in height. (I added 1 for borders)

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

У меня дежавю, или на КФ уже была статья об этой игре?

  • »
    »
    6 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Я не нашел в поиске, поэтому написал. Если Вам удастся найти — прикрепите ссылку.