Esta es mi primera pregunta aquí, por lo que cualquier sugerencia en los comentarios sería apreciada. Gracias ;)
Introducción
Una estrategia muy común para el juego 2048 es nunca deslizar hacia abajo . Esto coloca todos los números grandes en la parte superior y los más bajos en la parte inferior. Entonces, si aplica esta estrategia correctamente, su tablero siempre coincidirá con el siguiente patrón:
El patrón para verificar / Su tarea
Su envío debe ser un programa completo o una función que devuelva un valor verdadero si el tablero se puede describir así: bajando cada columna del tablero, el primer número debe ser el más alto de la columna, el segundo número debe ser menor igual o igual que el primer número, etc. Un buen tablero de 2048 se define como un tablero donde los números más altos están todos en la parte superior. Este es el código de golf , por lo que gana el código más corto por idioma (en bytes).
I / O
La entrada se puede tomar de cualquier manera apropiada, por ejemplo, una matriz de 4 matrices, cada una con 4 números, o una matriz de 16 números. En total, siempre serán 16 números, que representan la placa 4x4. La salida debe ser un valor verdadero de la entrada es una "placa 2048 buena", y un valor falso de lo contrario.
Ejemplos
Verdad:
|-------------------|
| 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 | | | |
|-------------------|
Nota
Mire el segundo caso de prueba de falsedad: cuando hay un valor vacío (o un 0) en algún lugar e incluso cuando es seguido por un valor que es más alto que el último número distinto de cero, esto debería ser falso, porque el siguiente valor después de cero sería más alto que el 0 en sí mismo, lo que lo hace inválido.
¡Buena suerte!
Respuestas:
Haskell , 21 bytes
Pruébalo en línea!
Toma una lista de columnas, con espacios vacíos como 0.
fuente
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 bytes
Pruébalo en línea!
Igual que mis otras dos respuestas. Prometo que este es el último hasta que otros hayan respondido :)
fuente
APL (Dyalog) ,
74 bytesToma una matriz de 4 por 4, usando 0 para espacios en blanco, como argumento.
Pruébalo en línea!
⌊⍀
es el mínimo acumulativo vertical≡
idéntico a⊢
el argumento sin modificar?fuente
Jalea , 4 bytes
Pruébalo en línea!
Entrada como una matriz de columnas. Funciona con cuadrículas de tamaño arbitrario.
fuente
0
en lugar de1
.ḟ0
no funcionaR (+ pryr), 23 bytes
Que evalúa la función
Que toma una matriz como entrada:
Cuando se le da una matriz,
diff
calcula automáticamente las diferencias dentro de las filas (sorprendentemente. No conocía esta característica hasta que la probé para este desafío).Ninguno de estos valores puede ser 1 o superior en una buena tabla, por lo que probamos
<1
y vemos si losall
valores de la matriz cumplen.fuente
JavaScript, 37 bytes
Llámalo así:
Probado en Firefox, Chrome, JavaScript Shell y Node.js.
fuente
''+
)sort
es un método mutable, que mutará la matriz. primero convertir a cadena guardará una copia de la matriz. la conversión a cadena también hace que la operación igual funcione por (cadena) en lugar de referenciaPython 3 , 42 bytes
Pruébalo en línea!
Mismo algoritmo que mi respuesta Jelly
fuente
C # (.NET Core) , 71 bytes
Pruébalo en línea!
La forma aburrida. Espera entrada aplanada en una matriz lineal.
Alternativamente, la forma explícitamente prohibida:
Pruébalo en línea!
Lanza una IndexOutOfBoundsException para indicar verdadero, termina normalmente para indicar falso. Probé una versión que incluía la conversión de excepción / no excepción a verdadero / falso, pero terminó tan larga como la versión normal.
fuente
JavaScript,
34, 32 bytesLlame pasando una sola matriz que contenga la primera columna, seguida de la 2da, 3ra y 4ta.
Compara cada número con el número anterior, excepto el primer número de cada columna y devuelve verdadero si todos son verdaderos.
Prueba
Editar: guardado 2 bytes gracias a tsh
fuente
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 bytes
También hay
con 15 bytes, pero se requiere
import Data.List
cuando se trabaja solo con Prelude. Alternativamente,con 25 bytes funciona en GHCI.
fuente
Gaia ,
36 bytes+3 bytes porque aparentemente no sabía cómo funcionaba mi idioma
Esta es una función que acepta una lista de columnas y deja el resultado en la pila.
Existen algunas otras soluciones de 6 bytes que incluyen
0+¦o¦ẏ
yọ¦_ẏ¦ỵ
.Pruébalo en línea!
Explicación
fuente
TI-BASIC, 25 bytes
Toma la entrada como una matriz 4x4 en Ans.
Explicación
fuente
Haskell , 41 bytes
Pruébalo en línea!
Define la función sin puntos
all f
, dondef
determina si una lista está ordenada.fuente
f
comof(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 bytes
Toma una gran variedad de columnas; devuelve un número (verdadero) o
false
.JavaScript (ES6),
5447 bytesPrimer intento. Toma una gran variedad de columnas; vuelve
true
ofalse
.fuente
MATL , 4 bytes
Pruébalo en línea!
Ingrese como un conjunto de filas, al revés.
fuente
Swift 4 ,
8477 bytesPruébalo en línea!
fuente
Dyalog APL,
211915 bytesPruébalo en línea! (modificado para que se ejecute en tryapl)
Toma la entrada como una matriz 2D.
¿Cómo?
⎕
entrada⍉
transponer↓
Matriz 2D => vector 1D de vectores 1D{ ... }¨
aplique esto a cada miembro (argumento⍵
):⍵[⍒⍵]
⍵
ordenado descendente⍵≡
igualdad con⍵
∧/
si cada elemento es1
.fuente
Japt , 7 bytes
Probé algunos métodos diferentes para este, pero, al final, el más corto que pude encontrar terminó siendo un puerto de la solución JS de tsh.
Toma una matriz de columnas como entrada. Las celdas vacías se pueden
0
omitir si no hay otros números en la columna.Pruébalo
Explicación
Entrada implícita de matriz
U
.Anteponga
U
una cadena vacía, convirtiendo la matriz en una cadena.Verifique la igualdad, que también arroja el lado derecho a una cuerda.
Mapa terminado
U
.Ordenar (
n
) por<=
.Salida implícita del resultado booleano.
fuente
U
. También podría hacerlonn
al final;)U
funcionó en este caso, @ETHproductions; Pensé que solo funcionaría si la variable fuera lo único a la izquierda del==
. Tendré que recordarlo para usarlo en el futuro.Clojure, 30 bytes
pruébalo en línea
fuente
Java 8, 69 bytes
Bueno, al momento de escribir esto, esto supera a la solución Swift, ¡así que eso es todo! Completamente directo. La entrada es una matriz de matrices enteras, las matrices internas son columnas de la placa (primero los cuadrados superiores). Fundido a
Function<int[][], Boolean>
.fuente
MY ,
666220 bytes (sin competencia)Pruébalo en línea!
La razón por la cual esto no compite es que recientemente implementé
8E (≡)
, lo que equivale a APL≡
.¿Cómo?
ω⍉
El primer argumento de línea de comando transpuestoω⍉
El primer argumento de línea de comando transpuestoA6ǵ'
empujarchr(0x6A)
(⍖
en la página de códigos, que se ordena descendente)ƒ
como una función, en lugar de una cadena⇹
empujar una función que mapea una función emergente sobre cada argumento(
aplicarE8ǵ'ƒ⇹(
lo mismo, excepto conchr(0x8E)
, que es el comando match (≡
).Π
producto←
salida sin nueva líneaSí, muchos de los símbolos de MY son exactamente iguales o similares a los de APL. La explicación es que me vinieron a la mente cuando quería un comando de 1 carácter. (No sé por qué no usé T para transponer)
fuente
Mathematica, 27 bytes
t=Thread;-t[Sort/@-t@#]==#&
Explicación:
Thread
es una extraña operación de transposición general que sucede que toma la transposición cuando se le da una matriz .t=Thread;
me permite usart
dos veces en lugar deThread
dos veces para guardar bytes.Sort
ordena una lista (en orden creciente).Sort\@
asigna laSort
función a cada elemento de una lista individualmente; cuando se aplica a una matriz, ordena las filas.t@#
aplica la función de transposición a la entrada#
de la función principal.-
toma el negativo de todas las entradas para que al ordenar las filas de la matriz transpuesta (las columnas del original) las clasifique de la manera deseada.-t[...]
deshace lo negativo y la transposición, por lo que todo lo que realmente hicimos fue ordenar las columnas de mayor a menor.==#
prueba para ver si esta nueva matriz ordenada por columnas es igual a la entrada original.&
finaliza la función anónima con la entrada#
que definimos.Puede probarlo en línea en el sandbox de Wolfram Cloud pegando código como el siguiente y haciendo clic en Gear -> "Evaluar celda" o presionando Shift + Enter o el teclado numérico Enter:
O para todos los casos de prueba:
fuente