2048 - невероятно веселая и захватывающая игра, целью которой является создание плитки с 2048 на ней.
Вот краткое описание игры:
Нажатие клавиши со стрелкой сдвинет все блоки на сцене в этом направлении. Например, если x
представляет блок, и вы нажали стрелку вверх в этом случае:
...x
.x..
..x.
xx..
Тогда доска станет
xxxx
.x..
....
....
Кроме того, блоки нумеруются, начиная с 2
. Если два одинаковых пронумерованных блока переместятся вместе, они объединятся в следующий номер. Например, нажав «вверх» на этой доске:
.2..
..22
.2..
....
Создали бы это:
.422
....
....
....
И затем после нажатия «вправо» он станет ..44
, и, следовательно, нажатие вправо снова создаст «8» блок, и так далее.
Каждый ход новый блок «2» создается на случайном открытом квадрате. (На самом деле это не всегда «2», но для простоты давайте сохраним это.) Если не осталось никаких возможных ходов (т. Е. Доска заполнена, и вы ничего не можете объединить), игра будет проиграна, и если блок 2048 создан, вы выиграли!
Ваша задача - воссоздать эту игру, игра в гольф!
Для крайних случаев, таких как нажатие «вправо» на этой доске:
.... .222 .... ....
Вы должны объединить плитки ближе к краю нажатой клавиши со стрелкой. Например, это стало бы
..24
, потому что вторые и третьи "2" являются самыми близкими к правому краю.Если игрок нажимает неверный ход (например, «вверх» на доске, например
2.2. / .... / .... / ....
), вы должны игнорировать этот ход.Движения могут быть приняты любым способом, таким как нажатие, клавиши со стрелками
ULRD
и т. Д.Все плитки должны иметь одинаковую форму - плитка «1024» должна быть того же размера, что и плитка «2».
Плитка должна быть каким-то образом отделена. Например,
|1024| 2|1024|1024|
является допустимым примером строки (при условии, что плитки являются квадратами), тогда1024 210241024
как нет.Вы должны вывести «Вы выиграли», если игрок создал плитку 2048, или «Вы проиграли», если не осталось действительных ходов.
Это код-гольф , поэтому выиграет самый короткий код в байтах!
источник
Ответы:
APL (Dyalog APL) ,
153150167156 байтовПодсказки для переезда; 0 = влево, 1 = вверх 2 = вправо, 3 = вниз
Попробуйте онлайн!
Неуправляемый, с пробелами
объяснение
Пустые строки указывают на новую строку, а блоки строк принадлежат одной строке.
источник
GolfScript, 323 символа
Ключи, которые вы должны использовать,
wasd
но вы можете изменить константу в коде на любые ключи, которые вам нравятся. Он изящно игнорирует любой неизвестный ключ или незаконный ход. К сожалению, вы должны нажать клавишу ввода после каждой клавиши.256 символов
Здесь результат является шестнадцатеричным логарифмическим, то есть
0
означает.
,1
для2
,2
для4
,3
для8
...B
для2048
. Поскольку все мы знаем шестнадцатеричные числа и степени двух, это не должно быть ограничением вообще.Пример выполнения (первые ходы):
источник
J -
240230216 символовЭто подсчитывает завершающий символ новой строки, потому что он нужен для запуска игры на консоли. Играть, набрав один из,
udlr
а затем нажмите Enter. Ходы, которые ничего не делают с доской, обрабатываются должным образом, но программа рассердится на вас, если вы дадите ей плохой ответ.Читаемая версия и пояснения слишком велики, чтобы удобно помещаться в посте: вы можете найти рецензию по этой ссылке .
Использование:
источник
Mathematica, 484 символа
Очень некрасиво.
Управляется клавишами со стрелками.
Ungolfed:
источник
Delphi XE3 (Вааааааааааааааааааааааааааааааааааааааууууууууууууууууууууууууууууууе (((многие шепотом) 2.979 байт -> нефиксированные 4.560 байт)
Мне нравится называть этот код "2048 код романом".
Используется больше байтов, чем мне нравится, но это работает, и это было весело делать.
Я все еще собираюсь сделать это позже короче.
Игра в процессе
Golfed
Ungolfed
источник
,
и.
в цифрах!C (стандарт C89), 881 байт
Используйте ключи Wasd для перемещения. Компилируется в GCC и Clang по умолчанию, если не установлен стандарт C99 (я думаю). Использует termios.h, работал в Linux и MacOS X. Не уверен насчет Windows.
Разбито на несколько строк:
Выглядит:
Это можно улучшить наверняка.
источник
Ява:
13461269Редактировать Так что, хотя этот конкурс закончен, иногда я не могу отпустить, когда могут быть сделаны улучшения. Эта версия может похвастаться более скудной, изящной функцией сворачивания на месте,
boolean
исключением большинства типов, за исключением случаев, когда без них было бы более многословно, и немного меньшими ячейками (4x4 вместо 5x5), чтобы вырезать там несколько дополнительных символов.Так что это было весело. Спасибо за публикацию! Без обработки, это было 2856 байтов, в гольфе я сократил его до 1346 байтов. Будучи Java, я не собираюсь побеждать, но я хотел показать хороший результат. Изыскать «общую» функцию свертки для обработки соединений и перемещений листов было забавно - вы, конечно, можете проверить мой «прогресс», просмотрев коммиты в моем репозитории github для этого решения .
Golfed:
Ungolfed: (Проверьте мой репозиторий github для этого проекта на наличие обновленной версии, включая тест на основе утверждений для новых функций свертывания)
Пользоваться программой просто. Чтобы построить и запустить:
Нажмите,
u
чтобы сложить,r
чтобы сложить вправо,d
чтобы сложить,l
чтобы сложить влево. Любой другой ключ игнорируется, недопустимые (безрезультатные) ходы игнорируются. Будучи Java, нажимайтеenter
после каждой клавиши, чтобы очистить буфер строки. В соответствии с правилами, если вы выиграете выходы программыyou win
, если вы потеряете выходы программыyou lose
. Новые2
размещаются случайным образом на открытых плитках. Слияния следуют заявленным правилам. Ячейки размером 4х4, с рамкой вокруг каждой ячейки. Конечно, оставьте мне комментарий, если я что-то напутал, и я обязательно это исправлю.Пример вывода:
источник
Lua,
622616615612592590575 байтЗапрашивает стандартный ввод для 1,2,3,4, соотнося его с левым, нижним, правым, верхним (сделано для ввода с цифровой клавиатуры); вылетает, если вы даете неверный ввод.
Пустые квадраты печатаются как «0».
Пример вывода:
источник
Clojure: 599
запустить его в REPL
golfed
ungolfed
источник