Напишите программу, которая генерирует выигрышную последовательность ходов для детерминированного варианта игры 2048. Последовательность должна быть в форме строки чисел 0-3, с 0: вверх, 1: вправо, 2: вниз, 3: осталось. Например, строка «1132» означает справа налево вниз. Программа-победитель - самый короткий исходный код, который получает 2048!
Правила для детерминизма 2048: игра ведется по сетке 4х4, изначально содержащей 1 плитку, в верхнем левом углу. Каждый ход состоит из команды «влево», «вправо», «вверх» или «вниз». Команда left перемещает все плитки в сетке влево, а затем объединяет и суммирует, как плитки, начиная слева. Аналогичным образом, команда вправо перемещает плитки вправо, а затем объединяет их, начиная справа.
Каждая плитка может участвовать только в одной комбинации за ход.
После перемещения новая плитка 2 создается в первом столбце слева с доступным пространством, в первом доступном пространстве сверху в этом столбце.
Например, последовательность «вправо вправо влево вниз» приводит к состояниям
2___
____
____
____
2__2
____
____
____
2__4
____
____
____
24__
2___
____
____
2___
____
____
44__
Право команды, примененное к строке _ 2 2 2, приводит к _ _ 2 4 Право команды, примененное к строке 2 2 2 2, приводит к _ _ 4 4
Этот вопрос вдохновлен http://jmfork.github.io/2048/
источник
$(".tile-container").addItem("<div class="tile tile-2048 tile-position-3-4">2048</div>");
Ответы:
Python, 740 символов (сжато 665 символов)
Код :
(Смешивает вкладки с пробелами для отступа, чтобы сохранить несколько байтов)
Должно быть, я проиграл в гольф, потому что, если я просто сожму код выше, закодирую base-64, и
exec
это будет всего 665 символов. Следующее в точности соответствует приведенному выше, не имеет жестко закодированного решения или чего-либо еще:Ответ :
Требуется ~ 47 секунд (17 секунд без присмотра), чтобы найти последовательность из 1111 ходов:
Со следующей конечной позицией доски и двигаться:
Общая информация: решение состоит из 309 байтов в сжатом виде и 418 байтов, если они сжаты и кодированы в base64. Таким образом, было бы более короткой программой, чтобы просто декодировать это и распечатать, но это совсем не весело .
Пояснение :
Вот пастбищная версия без золота, которая распечатывает доску после каждого хода, очень интересно смотреть!
Это очень простой искусственный интеллект. Он назначает EV для каждой позиции доски:
Он выполняет поиск в глубину на четыре шага вперед и выбирает путь, ведущий к максимальному EV за четыре хода. Функция ev побуждает его убирать доску и держать самые ценные фигуры в углу, что в итоге оказывается довольно оптимальным. Этого достаточно, чтобы получить это там!
Если вы измените функцию EV, чтобы поместить большее значение в другие места на доске, что-то вроде:
Эта функция доходит до:
16 КБ :
Эврика! С 5-ступенчатым прогнозом вместо 4 и следующими весами:
Это почти почти получает 32 КБ, заканчиваясь на:
Последовательность здесь .
32 КБ :
Да, дамы и господа, мы достигли отметки 32к. Функция EV вместо умножения квадратов на константу увеличивает каждый квадрат до следующих степеней и добавляет их.
x
означает, что квадрат не задействован:Он по-прежнему суммирует все значения один раз и добавляет 256 для каждого пустого квадрата. Lookahead был 4 до 32 тысяч, а затем увеличился до 5, но, похоже, он мало что дает. Конечная доска:
Пастебин последовательности из 24 625 ходов .
источник