Esta é a minha primeira pergunta aqui, então qualquer sugestão nos comentários seria apreciada! Obrigado ;)
Introdução
Uma estratégia muito comum para o jogo de 2048 nunca é derrubada . Isso posiciona todos os grandes números no topo e os mais baixos no fundo. Portanto, se você aplicar essa estratégia corretamente, seu quadro sempre corresponderá ao seguinte padrão:
O padrão a ser verificado / Sua tarefa
Sua submissão deve ser um programa completo ou uma função que retorne um valor verdadeiro se o quadro puder ser descrito desta maneira: Descendo cada coluna do quadro, o primeiro número deve ser o mais alto da coluna, o segundo número deve ser menor igual ou igual ao primeiro número, etc. Uma boa placa de 2048 é definida como uma placa em que os números mais altos estão todos no topo. Isso é código-golfe , então o código mais curto por idioma (em bytes) vence.
I / O
A entrada pode ser obtida de qualquer maneira apropriada, por exemplo, uma matriz de 4 matrizes, cada uma contendo 4 números ou uma matriz de 16 números. No total, sempre haverá 16 números, representando a placa 4x4. A saída deve ser um valor verdadeiro da entrada: uma "boa placa 2048" e, caso contrário, um valor falso.
Exemplos
Verdade:
|-------------------|
| 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
Veja o segundo caso de teste falso: quando houver um valor vazio (ou 0) em algum lugar e mesmo quando for seguido por um valor maior que o último número diferente de zero, isso deve ser falso, porque o próximo valor após o zero seria maior que o próprio 0, o que o torna inválido.
Boa sorte!
Respostas:
Haskell , 21 bytes
Experimente online!
Leva uma lista de colunas, com espaços vazios como 0.
fonte
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 bytes
Experimente online!
O mesmo que as minhas outras duas respostas. Eu prometo que este é o meu último até que outros tenham respondido :)
fonte
APL (Dyalog) ,
74 bytesAssume a matriz 4 por 4, usando 0 para espaços em branco, como argumento.
Experimente online!
⌊⍀
é o mínimo cumulativo vertical≡
idêntico a⊢
o argumento não modificado?fonte
Gelatina , 4 bytes
Experimente online!
Entrada como uma matriz de colunas. Funciona com grades de tamanho arbitrário.
fonte
0
1
ḟ0
não funcionaR (+ pryr), 23 bytes
Que avalia a função
O que leva uma matriz como entrada:
Quando é fornecida uma matriz,
diff
calcula automaticamente as diferenças nas linhas (surpreendentemente. Eu não conhecia esse recurso até tentar esse desafio).Nenhum desses valores pode ser 1 ou superior em um bom quadro; portanto, testamos
<1
e verificamos se osall
valores da matriz estão em conformidade.fonte
JavaScript, 37 bytes
Chame assim:
Testado no Firefox, Chrome, JavaScript Shell e Node.js.
fonte
''+
)sort
é um método mutável, que irá alterar o array. primeiro converter em string salvará uma cópia da matriz. a conversão em string também faz com que a operação igual funcione pelo valor (string) em vez da referência.Python 3 , 42 bytes
Experimente online!
Mesmo algoritmo que minha resposta Jelly
fonte
C # (.NET Core) , 71 bytes
Experimente online!
O caminho chato. Espera entrada achatada em uma matriz linear.
Alternativamente, a maneira proibida explicitamente:
Experimente online!
Lança uma IndexOutOfBoundsException para indicar true, termina normalmente para indicar false. Eu tentei uma versão que incluía a conversão de exceção / nenhuma exceção para true / false, mas acabou como a versão regular.
fonte
JavaScript,
34, 32 bytesLigue passando uma única matriz contendo a primeira coluna, seguida pela 2ª, 3ª e 4ª.
Compara cada número com o número anterior, exceto o primeiro número de cada coluna e retorna true se tudo for verdadeiro.
Teste
Edit: salvou 2 bytes graças ao tsh
fonte
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 bytes
Há também
com 15 bytes, mas é necessário
import Data.List
ao trabalhar apenas com o Prelude. Alternativamente,com 25 bytes funciona em GHCI.
fonte
Gaia ,
36 bytes+3 bytes, porque aparentemente eu não sabia como minha linguagem funcionava
Esta é uma função que aceita uma lista de colunas e deixa o resultado na pilha.
Existem algumas outras soluções de 6 bytes, incluindo
0+¦o¦ẏ
eọ¦_ẏ¦ỵ
.Experimente online!
Explicação
fonte
TI-BASIC, 25 bytes
Recebe entrada como uma matriz 4x4 em Ans.
Explicação
fonte
Haskell , 41 bytes
Experimente online!
Define a função sem ponto
all f
, ondef
determina se uma lista é classificada.fonte
f
comof(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 bytes
Toma uma matriz de colunas; retorna um número (verdade) ou
false
.JavaScript (ES6),
5447 bytesPrimeira tentativa. Toma uma matriz de colunas; retorna
true
oufalse
.fonte
MATL , 4 bytes
Experimente online!
Entrada como uma matriz de linhas, de cabeça para baixo.
fonte
Swift 4 ,
8477 bytesExperimente online!
fonte
Dyalog APL,
211915 bytesExperimente online! (modificado para que seja executado em tryapl)
Recebe a entrada como uma matriz 2D.
Quão?
⎕
entrada⍉
transpor↓
Array 2D => vetor 1D de vetores 1D{ ... }¨
aplique isso a cada membro (argumento⍵
):⍵[⍒⍵]
⍵
ordenado decrescente⍵≡
igualdade com⍵
∧/
se todo elemento é1
.fonte
Japonês , 7 bytes
Tentei alguns métodos diferentes para este, mas, no final, o mais curto que eu pude acabou sendo uma porta da solução JS do tsh.
Toma uma matriz de colunas como entrada. As células vazias podem ser
0
ou omitidas se não houver outros números na coluna.Teste-o
Explicação
Entrada implícita da matriz
U
.Anexar
U
com uma sequência vazia, convertendo a matriz em uma sequência.Verifique a igualdade, que também projeta o lado direito de uma corda.
Mapa sobre
U
.Classificar (
n
) por<=
.Resultado implícito de saída booleana.
fonte
U
. Você poderia fazernn
no final bem;)U
funcionava nesse caso, @ETHproductions; Eu pensei que só funcionaria se a variável fosse a única coisa à esquerda do==
. Vou ter que lembrá-lo para uso futuro.Clojure, 30 bytes
experimente online
fonte
Java 8, 69 bytes
Bem, no momento da redação deste artigo, supera a solução Swift, então é isso! Totalmente direto. A entrada é uma matriz de matrizes inteiras, as matrizes internas sendo colunas da placa (primeiro os quadrados superiores). Transmitir para
Function<int[][], Boolean>
.fonte
MY ,
666220 bytes (não competitivo)Experimente online!
A razão pela qual isso não é concorrente é que eu implementei recentemente
8E (≡)
, o que é equivalente ao APL≡
.Quão?
ω⍉
O primeiro argumento da linha de comando transpostoω⍉
O primeiro argumento da linha de comando transpostoA6ǵ'
pushchr(0x6A)
(⍖
na página de códigos, que classifica como decrescente)ƒ
como uma função, em vez de uma string⇹
empurre uma função que mapeia uma função exibida sobre cada argumento(
ApliqueE8ǵ'ƒ⇹(
a mesma coisa, exceto comchr(0x8E)
, que é o comando match (≡
).Π
produtos←
saída sem nova linhaSim, muitos símbolos do MY são exatamente iguais ou semelhantes aos do APL. A explicação é que eles vieram à mente quando eu queria um comando de 1 caractere. (Não sei por que não usei T para transpor)
fonte
Mathematica, 27 bytes
t=Thread;-t[Sort/@-t@#]==#&
Explicação:
Thread
é uma operação estranha, semelhante à transposição, que ocorre quando a matriz é dada .t=Thread;
permite-me usart
duas vezes em vez deThread
duas vezes para salvar bytes.Sort
classifica uma lista (em ordem crescente).Sort\@
mapeia aSort
função para cada elemento de uma lista individualmente; quando aplicado a uma matriz, classifica as linhas.t@#
aplica a função de transposição à entrada#
da função principal.-
recebe o negativo de todas as entradas para que a classificação das linhas da matriz transposta (as colunas do original) as classifique da maneira desejada.-t[...]
desfaz o negativo e a transposição, então tudo o que fizemos foi classificar as colunas da maior para a menor.==#
testa para ver se essa nova matriz classificada em coluna é igual à entrada original.&
finaliza a função anônima com a entrada#
que definimos.Você pode experimentá-lo online na caixa de proteção Wolfram Cloud colando código como o seguinte e clicando em Equipamento -> "Avaliar célula" ou pressionando Shift + Enter ou o teclado numérico Enter:
Ou para todos os casos de teste:
fonte