Это мой первый вопрос здесь, поэтому любые предложения в комментариях будут оценены! Благодарность ;)
Введение
Одна из самых распространенных стратегий игры 2048 года - никогда не падать . Это помещает все большие числа вверху, а нижние внизу. Таким образом, если вы правильно примените эту стратегию, ваша доска всегда будет соответствовать следующей схеме:
Шаблон для проверки / Ваша задача
Ваша заявка должна быть либо полной программой, либо функцией, которая возвращает истинное значение, если доску можно описать так: спускаясь вниз по каждому столбцу доски, первое число должно быть самым высоким из столбца, второе число должно быть меньше. чем или равно первому числу и т. д. Хорошая доска 2048 определяется как доска, в которой все старшие числа находятся сверху. Это код-гольф , поэтому выигрывает самый короткий код на язык (в байтах).
I / O
Входные данные могут быть получены любым подходящим способом, например массивом из 4 массивов, каждый из которых содержит 4 числа, или массивом из 16 чисел. В общей сложности это всегда будет 16 цифр, представляющих плату 4x4 . Выходные данные должны быть истинными, а значение ввода - «хорошей платой 2048», а в противном случае - ложным значением.
Примеры
Truthy:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 8 |
|-------------------|
| 4 | | 32 | 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 128| 32 | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Falsy:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 16 |
|-------------------|
| 32 | | 128| 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 32| | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Заметка
Посмотрите на 2-й ложный тестовый случай: когда где-то есть пустое значение (или 0) и даже когда за ним следует значение, которое больше, чем последнее ненулевое число, это должно быть ложным, потому что следующее значение после ноль будет выше самого 0, что делает его недействительным.
Удачи!
Ответы:
Haskell , 21 байт
Попробуйте онлайн!
Принимает список столбцов с пустыми пробелами как 0.
источник
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 байта
Попробуйте онлайн!
То же, что и мои два других ответа. Я обещаю, что это мой последний, пока другие не ответили :)
источник
APL (Dyalog) ,
74 байтаПринимает матрицу 4 на 4, используя 0 в качестве аргумента.
Попробуйте онлайн!
⌊⍀
вертикальный кумулятивный минимум≡
идентичный⊢
неизмененный аргумент?источник
Желе , 4 байта
Попробуйте онлайн!
Ввод в виде массива столбцов. Работает с сетками произвольного размера.
источник
0
а не1
.ḟ0
не сработаетR (+ pryr), 23 байта
Который оценивает функцию
Который принимает матрицу в качестве входных данных:
При задании матрицы
diff
автоматически вычисляется разница в строках (что удивительно. Я не знал об этой функции, пока не попробовал ее для этой задачи).Ни одно из этих значений не может быть 1 или выше на хорошей доске, поэтому мы проверяем
<1
и проверяем, соответствуют лиall
значения матрицы.источник
JavaScript, 37 байт
Назовите это так:
Протестировано на Firefox, Chrome, JavaScript Shell и Node.js.
источник
''+
)sort
- изменяемый метод, который изменяет массив. первое преобразование в строку сохранит копию массива. преобразование в строку также делает равную операцию работающей по (строковому) значению вместо ссылки.Python 3 , 42 байта
Попробуйте онлайн!
Тот же алгоритм, что и мой ответ на желе
источник
C # (.NET Core) , 71 байт
Попробуйте онлайн!
Скучный путь. Ожидается, что входной сигнал сведен в линейный массив.
Альтернативно явно запрещенный способ:
Попробуйте онлайн!
Выдает исключение IndexOutOfBoundsException для указания значения true, обычно заканчивается для указания значения false. Я попробовал версию, которая включала преобразование из исключения / без исключения в истину / ложь, но получилось так же долго, как и в обычной версии.
источник
JavaScript,
34, 32 байтаВызов, передав в один массив, содержащий первый столбец, а затем 2, 3 и 4-й.
Сравнивает каждое число с предыдущим, за исключением первого числа каждого столбца, и возвращает значение true, если все значения равны true.
Тест
Редактировать: сохранено 2 байта благодаря Tsh
источник
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 байт
Есть также
с 15 байтами, но требуется
import Data.List
при работе только с Prelude. С другой стороны ,с 25 байтами работает в GHCI.
источник
Gaia ,
36 байт+3 байта, потому что, видимо, я не знал, как работает мой язык
Это функция, принимающая список столбцов и оставляющая результат в стеке.
Существует несколько других 6-байтовых решений, включая
0+¦o¦ẏ
иọ¦_ẏ¦ỵ
.Попробуйте онлайн!
объяснение
источник
TI-BASIC, 25 байтов
Принимает ввод в виде матрицы 4x4 в Ans.
объяснение
источник
Haskell , 41 байт
Попробуйте онлайн!
Определяет бессмысленную функцию
all f
, гдеf
определяет, отсортирован ли список.источник
f
какf(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 байта
Принимает массив столбцов; возвращает (правдивое) число или
false
.JavaScript (ES6),
5447 байтПервая попытка. Принимает массив столбцов; возвращает
true
илиfalse
.источник
MATL , 4 байта
Попробуйте онлайн!
Ввод в виде массива строк, вверх ногами.
источник
Swift 4 ,
8477 байтПопробуйте онлайн!
источник
Дьялог АПЛ,
211915 байтПопробуйте онлайн! (модифицировано так, что оно будет работать в тряпле)
Принимает ввод в виде 2D-массива.
Как?
⎕
вход⍉
транспонирования↓
2D массив => 1D вектор 1D векторов{ ... }¨
примените это к каждому члену (аргумент⍵
):⍵[⍒⍵]
⍵
отсортировано по убыванию⍵≡
равенство с⍵
∧/
будь каждый элемент1
.источник
Japt , 7 байт
Попробовал несколько разных методов для этого, но, в конце концов, самый короткий, который я смог придумать, оказался портом решения JS от tsh.
Принимает массив столбцов в качестве входных данных. Пустые ячейки могут быть
0
или опущены, если в столбце нет других чисел.Попробуй это
объяснение
Неявный ввод массива
U
.Предварительно добавьте
U
пустую строку, преобразовав массив в строку.Проверьте на равенство, что приводит к правой стороне строки.
Карта окончена
U
.Сортировать (
n
) по<=
.Неявно выводить логический результат.
источник
U
. Вы могли бы сделать иnn
в конце;)U
работает в этом случае, @ETHproductions; Я думал, что это будет работать, только если переменная была единственной слева от==
. Я должен буду помнить это для будущего использования.Clojure, 30 байтов
попробуйте это онлайн
источник
Java 8, 69 байт
Ну, на момент написания этой статьи это превосходит решение Swift, так что вот оно! Совершенно просто. Ввод - это массив целочисленных массивов, внутренние массивы - это столбцы доски (сначала верхние квадраты). Приведение к
Function<int[][], Boolean>
.источник
МОЙ ,
666220 байтов (неконкурентный)Попробуйте онлайн!
Причина, по которой это не конкурирует, заключается в том, что я недавно
8E (≡)
, что эквивалентно APL≡
.Как?
ω⍉
Первый аргумент командной строки транспонированω⍉
Первый аргумент командной строки транспонированA6ǵ'
нажатьchr(0x6A)
(⍖
в кодовой странице, которая сортируется по убыванию)ƒ
как функция, а не строка⇹
выдвиньте функцию, которая отображает всплывающую функцию на каждый аргумент(
подать заявлениеE8ǵ'ƒ⇹(
то же самое, кроме как сchr(0x8E)
помощью команды match (≡
).Π
продукт←
вывод без перевода строкиДа, многие символы MY в точности совпадают или похожи на символы APL. Объяснение состоит в том, что они пришли в голову, когда я хотел 1-символьную команду. (Я не знаю, почему я не использовал T для транспонирования)
источник
Mathematica, 27 байт
t=Thread;-t[Sort/@-t@#]==#&
Объяснение:
Thread
это странная общая операция, подобная транспонированию, которая происходит, когда принимает матрицу .t=Thread;
позвольте мне использоватьt
дважды вместоThread
двух, чтобы сохранить байты.Sort
сортирует список (в порядке возрастания).Sort\@
сопоставляетSort
функцию каждому элементу списка индивидуально; применительно к матрице сортирует строки.t@#
применяет функцию транспонирования к входу#
основной функции.-
принимает отрицательные значения всех записей, так что сортировка строк транспонированной матрицы (столбцы оригинала) сортирует их нужным образом.-t[...]
уничтожает негатив и транспонирование, поэтому все, что мы действительно делали, это сортировали столбцы по величине к наименьшему.==#
проверяет, равна ли эта новая отсортированная по столбцам матрица исходному вводу.&
заканчивает анонимную функцию вводом, который#
мы определили.Вы можете попробовать его онлайн в песочнице Wolfram Cloud , вставив код, подобный приведенному ниже, и щелкнув Gear -> «Оценить ячейку» или нажав Shift + Enter или цифровую клавишу Enter:
Или для всех тестовых случаев:
источник