Ceci est ma première question ici, donc toute suggestion dans les commentaires serait appréciée! Merci ;)
introduction
Une stratégie très courante pour le jeu 2048 n'est jamais de glisser vers le bas . Cela positionne tous les grands nombres en haut et les plus bas en bas. Donc, si vous appliquez correctement cette stratégie, votre tableau correspondra toujours au modèle suivant:
Le modèle à vérifier / Votre tâche
Votre soumission doit être soit un programme complet soit une fonction qui retourne une valeur véridique si le tableau peut être décrit comme ceci: En descendant dans chaque colonne du tableau, le premier nombre doit être le plus élevé de la colonne, le deuxième nombre doit être inférieur supérieur ou égal au premier nombre, etc. Une bonne carte 2048 est définie comme une carte où les nombres les plus élevés sont tous sur le dessus. C'est le code-golf , donc le code le plus court par langue (en octets) l'emporte.
E / S
L'entrée peut être prise de n'importe quelle manière appropriée, par exemple un tableau de 4 tableaux, chacun contenant 4 numéros, ou un tableau de 16 numéros. Au total, ce sera toujours 16 chiffres, représentant la carte 4x4 La sortie doit être une valeur véridique de l'entrée est une "bonne carte 2048", et une valeur fausse sinon.
Exemples
Vérité:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 8 |
|-------------------|
| 4 | | 32 | 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 128| 32 | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Faux:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 16 |
|-------------------|
| 32 | | 128| 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 32| | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Remarque
Regardez le 2ème cas de test de falsification: quand il y a une valeur vide (ou un 0) quelque part et même lorsqu'elle est suivie d'une valeur qui est supérieure au dernier nombre non nul, cela devrait être faux, car la valeur suivante après la zéro serait supérieur au 0 lui-même, ce qui le rend invalide.
Bonne chance!
Réponses:
Haskell , 21 octets
Essayez-le en ligne!
Prend une liste de colonnes, avec des espaces vides comme 0.
la source
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 octets
Essayez-le en ligne!
Identique à mes deux autres réponses. Je promets que c'est mon dernier jusqu'à ce que les autres aient répondu :)
la source
APL (Dyalog) ,
74 octetsPrend la matrice 4 x 4, en utilisant 0 pour les blancs, comme argument.
Essayez-le en ligne!
⌊⍀
est le minimum cumulatif vertical≡
identique à⊢
l'argument non modifié?la source
Gelée , 4 octets
Essayez-le en ligne!
Saisissez un tableau de colonnes. Fonctionne avec des grilles de taille arbitraire.
la source
0
plutôt que1
.ḟ0
ne fonctionne pasR (+ pryr), 23 octets
Qui évalue à la fonction
Ce qui prend une matrice en entrée:
Lorsqu'on leur donne une matrice,
diff
calcule automatiquement les différences au sein des lignes (étonnamment. Je ne connaissais pas cette fonctionnalité jusqu'à ce que je l'essaie pour ce défi).Aucune de ces valeurs ne peut être supérieure ou égale à 1 dans une bonne planche, donc nous testons
<1
et voyons si lesall
valeurs de la matrice sont conformes.la source
JavaScript, 37 octets
Appelez ça comme ceci:
Testé sur Firefox, Chrome, JavaScript Shell et Node.js.
la source
''+
)sort
est une méthode mutable qui mute le tableau. La première conversion en chaîne enregistrera une copie du tableau. la conversion en chaîne permet également de faire fonctionner l'opération par valeur (chaîne) au lieu de référence.Python 3 , 42 octets
Essayez-le en ligne!
Même algorithme que ma réponse Jelly
la source
C # (.NET Core) , 71 octets
Essayez-le en ligne!
La façon ennuyeuse. Attend une entrée aplatie dans un tableau linéaire.
Alternativement, la manière explicitement interdite:
Essayez-le en ligne!
Lève une exception IndexOutOfBoundsException pour indiquer vrai, se termine normalement pour indiquer faux. J'ai essayé une version qui incluait la conversion d'exception / pas d'exception en vrai / faux, mais elle a fini aussi longtemps que la version régulière.
la source
JavaScript,
34, 32 octetsAppelez en passant dans un seul tableau contenant la première colonne, suivi des 2e, 3e et 4e.
Compare chaque numéro au numéro précédent à l'exception du premier numéro de chaque colonne et renvoie vrai si tous sont vrais.
Tester
Edit: sauvé 2 octets grâce à tsh
la source
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 octets
Il y a aussi
avec 15 octets, mais il ne nécessite que
import Data.List
lorsque vous travaillez avec le Prelude. Alternativement,avec 25 octets fonctionne dans GHCI.
la source
Gaia ,
36 octets+3 octets car apparemment je ne savais pas comment ma langue fonctionnait
Il s'agit d'une fonction acceptant une liste de colonnes et laissant le résultat sur la pile.
Il existe quelques autres solutions de 6 octets, notamment
0+¦o¦ẏ
etọ¦_ẏ¦ỵ
.Essayez-le en ligne!
Explication
la source
TI-BASIC, 25 octets
Prend l'entrée comme une matrice 4x4 dans Ans.
Explication
la source
Haskell , 41 octets
Essayez-le en ligne!
Définit la fonction sans point
all f
, oùf
détermine si une liste est triée.la source
f
commef(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 octets
Prend un tableau de colonnes; renvoie un nombre (véridique) ou
false
.JavaScript (ES6),
5447 octetsPremier essai. Prend un tableau de colonnes; renvoie
true
oufalse
.la source
MATL , 4 octets
Essayez-le en ligne!
Entrez sous forme de tableau de lignes, à l'envers.
la source
Swift 4 ,
8477 octetsEssayez-le en ligne!
la source
Dyalog APL,
211915 octetsEssayez-le en ligne! (modifié pour qu'il fonctionne dans tryapl)
Prend l'entrée comme un tableau 2D.
Comment?
⎕
contribution⍉
transposer↓
Tableau 2D => vecteur 1D de vecteurs 1D{ ... }¨
appliquer ceci à chaque membre (argument⍵
):⍵[⍒⍵]
⍵
tri décroissant⍵≡
égalité avec⍵
∧/
si chaque élément l'est1
.la source
Japt , 7 octets
J'ai essayé quelques méthodes différentes pour celui-ci mais, au final, le plus court que j'ai pu trouver a fini par être un portage de la solution JS de tsh.
Prend un tableau de colonnes en entrée. Les cellules vides peuvent être
0
ou omises s'il n'y a pas d'autres nombres dans la colonne.Essaye-le
Explication
Entrée implicite du tableau
U
.Ajoutez
U
une chaîne vide et convertissez le tableau en chaîne.Vérifiez l'égalité, qui transforme également le côté droit en chaîne.
Carte terminée
U
.Trier (
n
) par<=
.Sortie implicite du résultat booléen.
la source
U
. Vous pourriez aussi fairenn
à la fin;)U
fonctionné dans ce cas, @ETHproductions; Je pensais que cela ne fonctionnerait que si la variable était la seule chose à gauche de la==
. Je vais devoir m'en souvenir pour une utilisation future.Clojure, 30 octets
essayez-le en ligne
la source
Java 8, 69 octets
Eh bien, à ce jour, cela bat la solution Swift, donc il y a ça! Tout à fait simple. L'entrée est un tableau de tableaux entiers, les tableaux intérieurs étant des colonnes de la carte (les carrés supérieurs en premier). Cast to
Function<int[][], Boolean>
.la source
MY ,
666220 octets (sans concurrence)Essayez-le en ligne!
La raison pour laquelle cela n'est pas en concurrence est que j'ai récemment implémenté
8E (≡)
, ce qui équivaut à APL≡
.Comment?
ω⍉
Le premier argument de ligne de commande transposéω⍉
Le premier argument de ligne de commande transposéA6ǵ'
pushchr(0x6A)
(⍖
dans la page de code, qui trie en ordre décroissant)ƒ
comme une fonction, plutôt qu'une chaîne⇹
pousser une fonction qui mappe une fonction sautée sur chaque argument(
appliquerE8ǵ'ƒ⇹(
la même chose, sauf avecchr(0x8E)
, qui est la commande match (≡
).Π
produit←
sortie sans nouvelle ligneOui, beaucoup de symboles de MY sont exactement identiques ou similaires à ceux d'APL. L'explication est qu'ils me sont venus à l'esprit quand je voulais une commande à 1 caractère. (Je ne sais pas pourquoi je n'ai pas utilisé T pour la transposition)
la source
Mathematica, 27 octets
t=Thread;-t[Sort/@-t@#]==#&
Explication:
Thread
est une opération générale de type transposition bizarre qui arrive à prendre la transposition quand on lui donne une matrice .t=Thread;
me permet d'utilisert
deux fois au lieu deThread
deux pour économiser des octets.Sort
trie une liste (dans l'ordre croissant).Sort\@
mappe laSort
fonction à chaque élément d'une liste individuellement; lorsqu'il est appliqué à une matrice, il trie les lignes.t@#
applique la fonction de transposition à l'entrée#
de la fonction principale.-
prend le négatif de toutes les entrées de sorte que le tri des lignes de la matrice transposée (les colonnes de l'original) les trie de la manière souhaitée.-t[...]
défait le négatif et la transposition, donc tout ce que nous avons vraiment fait était de trier les colonnes du plus grand au plus petit.==#
teste pour voir si cette nouvelle matrice triée par colonne est égale à l'entrée d'origine.&
termine la fonction anonyme avec l'entrée que#
nous avons définie.Vous pouvez l' essayer en ligne dans le sandbox Wolfram Cloud en collant du code comme celui-ci et en cliquant sur Gear -> "Evaluer la cellule" ou en appuyant sur Maj + Entrée ou sur le pavé numérique Entrée:
Ou pour tous les cas de test:
la source