Dies ist meine erste Frage hier, daher würden wir uns über Vorschläge in den Kommentaren freuen! Vielen Dank ;)
Einführung
Eine sehr verbreitete Strategie für das Spiel 2048 ist es, niemals nach unten zu streichen . Dies positioniert alle großen Zahlen oben und die unteren unten. Wenn Sie diese Strategie richtig anwenden, entspricht Ihr Board immer dem folgenden Muster:
Das zu überprüfende Muster / Ihre Aufgabe
Ihre Einsendung sollte entweder ein vollständiges Programm oder eine Funktion sein, die einen Wahrheitswert zurückgibt, wenn die Tafel wie folgt beschrieben werden kann: In jeder Spalte der Tafel sollte die erste Zahl die höchste der Spalte sein, die zweite die niedrigere als oder gleich der ersten Zahl usw. Ein gutes 2048-Board ist definiert als ein Board, bei dem die höchsten Zahlen alle oben liegen. Das ist Code-Golf , also gewinnt der kürzeste Code pro Sprache (in Bytes).
I / O
Die Eingabe kann auf jede geeignete Weise erfolgen, z. B. als Array von 4 Arrays mit jeweils 4 Zahlen oder als Array von 16 Zahlen. Insgesamt werden es immer 16 Zahlen sein, die die 4x4- Karte darstellen. Die Ausgabe sollte ein wahrer Wert sein, die Eingabe ist eine "gute 2048-Karte" und ansonsten ein falscher Wert.
Beispiele
Wahrheit:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 8 |
|-------------------|
| 4 | | 32 | 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 128| 32 | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Falsch:
|-------------------|
| 16 | | 64 | 8 |
|-------------------|
| 8 | | 32 | 16 |
|-------------------|
| 32 | | 128| 2 |
|-------------------|
| 2 | | | |
|-------------------|
|-------------------|
| 16 | 128| 64 | 32 |
|-------------------|
| 8 | 32| | 8 |
|-------------------|
| 4 | 16 | 8 | 2 |
|-------------------|
| 4 | | | |
|-------------------|
Hinweis
Schauen Sie sich den zweiten falschen Testfall an: Wenn irgendwo ein leerer Wert (oder eine 0) vorhanden ist und selbst dann, wenn auf ihn ein Wert folgt, der höher ist als die letzte Zahl ungleich Null, sollte dies falsch sein, da der nächste Wert nach dem Null wäre höher als die 0 selbst, was es ungültig macht.
Viel Glück!
Antworten:
Haskell , 21 Bytes
Probieren Sie es online!
Nimmt eine Liste von Spalten mit Leerzeichen als 0.
quelle
[[16,8,4,0],[16,0,4,4],[16,4,4,4],[16,4,4,4]]
.05AB1E , 4 Bytes
Probieren Sie es online!
Gleich wie meine beiden anderen Antworten. Ich verspreche, dies ist meine letzte, bis andere geantwortet haben :)
quelle
APL (Dyalog) ,
74 BytesNimmt eine 4-mal-4-Matrix, wobei 0 für Leerzeichen als Argument verwendet wird.
Probieren Sie es online!
⌊⍀
ist das vertikale kumulative Minimum≡
identisch mit⊢
das unveränderte argument?quelle
Gelee , 4 Bytes
Probieren Sie es online!
Eingabe als Array von Spalten. Funktioniert mit Gittern beliebiger Größe.
quelle
0
als1
.ḟ0
aber nicht funktioniertR (+ Pryr), 23 Bytes
Welches zur Funktion auswertet
Welche nimmt eine Matrix als Eingabe:
diff
Berechnet bei Angabe einer Matrix automatisch die Unterschiede innerhalb von Zeilen (überraschenderweise kannte ich diese Funktion erst, als ich sie für diese Herausforderung ausprobierte).Keiner dieser Werte kann in einer guten Platine 1 oder höher sein, daher prüfen wir,
<1
ob dieall
Werte der Matrix übereinstimmen.quelle
JavaScript, 37 Bytes
Nenne es so:
Getestet unter Firefox, Chrome, JavaScript Shell und Node.js.
quelle
''+
)sort
ist eine veränderbare Methode, die das Array verändert. Beim ersten Konvertieren in einen String wird eine Kopie des Arrays gespeichert. Beim Konvertieren in einen String wird die Gleichheitsoperation auch durch einen (String-) Wert anstelle eines Verweises ausgeführt.Python 3 , 42 Bytes
Probieren Sie es online!
Gleicher Algorithmus wie meine Jelly-Antwort
quelle
C # (.NET Core) , 71 Byte
Probieren Sie es online!
Der langweilige Weg. Erwartet eine in ein lineares Array abgeflachte Eingabe.
Alternativ der ausdrücklich verbotene Weg:
Probieren Sie es online!
Löst eine IndexOutOfBoundsException aus, um true anzugeben, endet normalerweise, um false anzugeben. Ich habe eine Version ausprobiert, die die Konvertierung von Ausnahme / keine Ausnahme nach Wahr / Falsch beinhaltete, aber sie endete genauso lange wie die reguläre Version.
quelle
JavaScript,
34, 32 BytesRufen Sie auf, indem Sie ein einzelnes Array mit der ersten Spalte gefolgt von der zweiten, dritten und vierten Spalte übergeben.
Vergleicht jede Zahl mit der vorherigen Zahl mit Ausnahme der ersten Zahl jeder Spalte und gibt true zurück, wenn alle true sind.
Prüfung
Bearbeiten: 2 Bytes dank TSH gespeichert
quelle
v=>!v.some((x,i)=>i%4&&x>v[i-1])
Haskell , 28 Bytes
Es gibt auch
mit 15 bytes wird es aber nur
import Data.List
beim arbeiten mit dem prelude benötigt. Alternative,mit 25 Bytes arbeitet in GHCI.
quelle
Gaia ,
36 Bytes+3 Bytes, weil ich anscheinend nicht wusste, wie meine Sprache funktioniert
Dies ist eine Funktion, die eine Liste von Spalten akzeptiert und das Ergebnis auf dem Stapel belässt.
Es gibt einige andere 6-Byte-Lösungen, einschließlich
0+¦o¦ẏ
undọ¦_ẏ¦ỵ
.Probieren Sie es online!
Erläuterung
quelle
TI-BASIC, 25 Byte
Übernimmt die Eingabe als 4x4-Matrix in Ans.
Erläuterung
quelle
Haskell , 41 Bytes
Probieren Sie es online!
Definiert die punktfreie Funktion
all f
, mit derf
festgelegt wird, ob eine Liste sortiert wird.quelle
f
alsf(a:b:c)=a>=b&&f(b:c)
JavaScript (ES6), 42 Byte
Nimmt ein Array von Spalten; gibt eine (wahrheitsgemäße) Zahl zurück oder
false
.JavaScript (ES6),
54ByteErster Versuch. Nimmt ein Array von Spalten; zurück
true
oderfalse
.quelle
MATL , 4 Bytes
Probieren Sie es online!
Eingabe als Array von Zeilen mit dem Kopf nach oben.
quelle
Swift 4 ,
84,77 BytesProbieren Sie es online!
quelle
Dyalog APL,
211915 BytesProbieren Sie es online! (so geändert, dass es in tryapl läuft)
Übernimmt die Eingabe als 2D-Array.
Wie?
⎕
Eingang⍉
transponieren↓
2D-Array => 1D-Vektor von 1D-Vektoren{ ... }¨
Wende dies auf jedes Mitglied an (Argument⍵
):⍵[⍒⍵]
⍵
absteigend sortiert⍵≡
Gleichheit mit⍵
∧/
ob jedes Element ist1
.quelle
Japt , 7 Bytes
Versuchte ein paar verschiedene Methoden für diese, aber am Ende war die kürzeste, die ich finden konnte, eine Portierung der JS-Lösung von tsh.
Nimmt ein Array von Spalten als Eingabe. Leere Zellen können ein-
0
oder ausgeblendet werden, wenn die Spalte keine anderen Zahlen enthält.Probier es aus
Erläuterung
Implizite Eingabe eines Arrays
U
.Stellen Sie
U
eine leere Zeichenfolge voran und konvertieren Sie das Array in eine Zeichenfolge.Überprüfen Sie die Gleichheit, wodurch auch die rechte Seite in eine Zeichenfolge umgewandelt wird.
Karte über
U
.Sortieren (
n
) nach<=
.Boolesches Ergebnis implizit ausgeben.
quelle
U
. Das könnte man auchnn
am Ende machen;)U
in diesem Fall funktioniert hat, @ETHproductions; Ich dachte, es würde nur funktionieren, wenn die Variable das einzige ist, was links von der ist==
. Ich muss es für die zukünftige Verwendung merken.Clojure, 30 Bytes
versuche es online
quelle
Java 8, 69 Bytes
Nun, zum jetzigen Zeitpunkt schlägt dies die Swift-Lösung, also gibt es das! Ganz einfach. Input ist ein Array von Integer-Arrays, wobei die inneren Arrays Spalten des Boards sind (obere Quadrate zuerst). Besetzung für
Function<int[][], Boolean>
.quelle
MY ,
666220 Bytes (nicht konkurrierend)Probieren Sie es online!
Der Grund, warum dies nicht konkurriert, ist, dass ich vor kurzem implementiert habe
8E (≡)
, was äquivalent zu APL ist≡
.Wie?
ω⍉
Das erste Befehlszeilenargument wurde umgesetztω⍉
Das erste Befehlszeilenargument wurde umgesetztA6ǵ'
pushchr(0x6A)
(⍖
in der Codepage, die absteigend sortiert)ƒ
als Funktion und nicht als Zeichenfolge⇹
Schieben Sie eine Funktion, die eine POP-Funktion auf jedes Argument abbildet(
sich bewerbenE8ǵ'ƒ⇹(
das Gleiche, außer mitchr(0x8E)
, das der Match-Befehl ist (≡
).Π
Produkt←
Ausgabe ohne ZeilenumbruchJa, viele MY-Symbole sind genau gleich oder ähnlich zu APLs. Die Erklärung ist, dass sie mir einfielen, als ich einen 1-Zeichen-Befehl wollte. (Ich weiß nicht, warum ich T nicht für die Transponierung verwendet habe)
quelle
Mathematica, 27 Bytes
t=Thread;-t[Sort/@-t@#]==#&
Erläuterung:
Thread
ist eine seltsame allgemeine transponierungsähnliche Operation, bei der die Transponierung ausgeführt wird, wenn eine Matrix angegeben wird .t=Thread;
Lässt micht
zweimal stattThread
zweimal verwenden, um Bytes zu speichern.Sort
sortiert eine Liste (in aufsteigender Reihenfolge).Sort\@
ordnet dieSort
Funktion jedem Element einer Liste einzeln zu; Bei Anwendung auf eine Matrix werden die Zeilen sortiert.t@#
Wendet die Transponierungsfunktion auf den Eingang#
der Hauptfunktion an.-
Nimmt das Negativ aller Einträge, damit die Zeilen der transponierten Matrix (die Spalten des Originals) in der gewünschten Weise sortiert werden.-t[...]
macht das Negative und die Transponierung rückgängig, sodass wir wirklich nur die Spalten vom größten zum kleinsten sortieren mussten.==#
Überprüft, ob diese neue spaltensortierte Matrix der ursprünglichen Eingabe entspricht.&
Beendet die anonyme Funktion mit der von#
uns definierten Eingabe .Sie können es online in der Wolfram Cloud-Sandbox versuchen, indem Sie folgenden Code einfügen und auf Zahnrad -> "Zelle auswerten" klicken oder Umschalt + Eingabetaste oder die Zifferntaste drücken:
Oder für alle Testfälle:
quelle