РЕДАКТИРОВАТЬ: Недавно мой вопрос был предложен в качестве дубликата 2048 Bot Challenge . Я хотел бы подчеркнуть, что этот вопрос отличается от этого вопроса и потребует, чтобы ответы на него отличались от этого вопроса. 2048 Bot Challenge попросил пользователя создать бота, и он будет работать в течение часа, при этом наивысшим показателем будет оценка пользователя. Кроме того, он был ограничен 555 байтами. Моя задача запускает код гораздо реже, всего 3 раза. Ваш счет рассчитывается с использованием среднего из этих трех раз и делится на длину символа вашего кода в гольфе. Мой вопрос призывает к тому, чтобы записи были «умнее», а не пытались получить самый высокий балл за счет грубой силы.
-
РЕДАКТИРОВАТЬ: метод get был изменен на getTile, чтобы избежать конфликта с ключевым словом JS get. Кроме того, был добавлен раздел рекордов.
Недавно я создал сайт, который позволяет управлять популярной игрой 2048 с помощью JavaScript. Мой сайт связан здесь:
Как:
Ace Editor находится над доской. Вы помещаете в него код, который запускается один раз каждые 250 мс или 4 раза в секунду. Это называется циклом.
Используйте следующие методы для управления доской. Вы не можете использовать клавиши со стрелками.
up(); //move up
down(); //move down
left(); //move left
right(); //move right
move(integer); //integer is a direction. 0:up,1:right,2:down,3:left
getTile(y,x); //gets the value of the tile in position y,x on the board. See diagram
Для вашего удобства определены следующие переменные:
eother //boolean, alternates every cycle
frozen //integer, counts how many cycles the board has remained stationary
lastDir //integer, indicates the last direction that was tried to move in
//uses same format as the move method above.
startup //boolean, will always be true when the game first starts
//you can change it as you wish
a
b //a b and c are all persistant variables, they do not change each cycle
c //any other variables defined in the cycle will be reset every time
Правила:
- Нет случайности, вы должны использовать логику. (Да, я знаю, что пример кода использует случайный.)
- Не подключаться к игровым функциям и не обманывать другими способами
- Обычно старайтесь вызывать только один метод перемещения за цикл. Это нормально, если вы используете больше, но это винты с анимацией
- Доска должна начинаться в случайном состоянии, без изменений в состоянии перед игрой
- Вы должны предоставить как несжатую версию, так и версию для гольфа в своем сообщении.
- Вы должны предоставить ссылку на сайт, который уже загружает несжатую версию вашего кода, обслуживаемую через PasteBin (например, ... thatcoolidea.com/2048?i=pH18GWtu загружает пример кода.)
Подсчет очков:
- Ваш код будет оценен мной.
- Часть А вашего счета - это в среднем 3 прогона кода, округленные в меньшую сторону.
- Часть B вашего счета - это длина вашего кода для игры в гольф.
- Ваш окончательный счет - Часть A, разделенная на Часть B
Победитель получит свой код в качестве примера кода на сайте, если он выберет его, и будет подтвержден в комментарии в коде.
Удачи! Надеюсь, вам понравится вызов.
Текущий рекорд 225.22 - Морозильник - user3217109
источник
Ответы:
Sinker / Shaker, 65 байт
Вот мой . Это так же слепо и просто, как они приходят.
Несжатый (МОГ) ...
Все, что он делает, это повторяет вниз, вправо, вниз, влево и т. Д. И ударяется один раз, если застревает. Это не всегда очень хорошо, но иногда будет 512. Мой высокий балл во время тестирования был 7520.
источник
Светофор -
2321 байтЭто ссылка.
Он будет попеременно двигаться вверх и вправо, за исключением случаев, когда доска оставалась неподвижной в течение последних двух ходов, и в этом случае она будет двигаться вниз и влево соответственно.
Мое оригинальное, функционально эквивалентное представление было длиной 23 байта и получило 182,72:
источник
Whirlpool -
372117 байт - Оценка: 211,22Я решил пойти с подходом «меньше значит больше». Мой код представляет собой простой дизайн, который пытается идти вверх, вправо, вниз, влево ... Я буду работать над обучающим ИИ, чтобы увидеть более оптимальный способ решения головоломки.
Оптимизатор помог сократить время
a
инициализации.Сам помог сократить время
a
инициализации, убралvar
.Ungolfed?
Мой лучший результат с этим ИИ 5120.
Морозильник - 12 байт - Оценка: 225,22
Этот бот имеет приоритет движения. Он пытается подняться. Если оно может «подняться», оно идет правильно. Если это не может идти как надо, это идет вниз. Если он не может идти вниз, он идет налево.
Джеймс Бонд Объяснение
Зашифрованный код расшифровывается, чтобы сказать:
Оптимизатор должен был проиграть его расшифрованный код. Это могло быть # Оптимизировано.
источник
a
тоже. Так что это должно быть добавлено в длину кода.a
один раз и забыть об этом, но если вы закроете вкладку / окно и вернетесь к нему, я не думаю, что это больше будет работать. Вот почему я должен был добавить бит if (запуска) на мой.var a=a|0;move(a++%4)
- 21 байтa
не делая этогоvar a
Вешалка - 20 байт
Официальный счет: 224,87 - 2 место на 0,35 балла.
Этот бот использует подход вниз, влево, вниз, вправо, но с необычной функцией, которая никогда не будет двигаться вверх. Я не уверен, как оценивать случаи, когда он зависает и не завершается, или делает ли тот факт, что это происходит, незаконным. Вот оно, хотя:
Шаблон инициализации благодаря @Optimizer.
В моих 3 тестовых прогонах он набрал 4284, 6352 и 4232, в среднем 4956. Я обновлю, когда будет запущен официальный тест.
Альтернативная версия, которая выходит из зависания (27 байт):
источник