Im Spiel Pickomino liegen mehrere Kacheln in der Mitte des Tisches, auf denen sich jeweils eine andere positive Ganzzahl befindet. In jeder Runde würfeln die Spieler auf eine bestimmte Weise und erhalten eine Punktzahl, die eine nicht negative ganze Zahl ist.
Jetzt nimmt der Spieler das Plättchen mit der höchsten Zahl, die noch niedriger oder gleich seiner Punktzahl ist, entfernt das Plättchen aus der Mitte und fügt es seinem Stapel hinzu. Wenn dies nicht möglich ist, weil alle Zahlen in der Mitte höher sind als die Punktzahl des Spielers, verliert der Spieler das oberste Plättchen von seinem Stapel (das zuletzt hinzugefügt wurde), das in die Mitte zurückgelegt wird. Wenn der Spieler keine Steine mehr hat, passiert nichts.
Die Herausforderung
Simulieren Sie einen Spieler, der das Spiel gegen sich selbst spielt. Sie erhalten eine Liste der Kacheln in der Mitte und eine Liste der Punkte, die der Spieler erhalten hat. Gibt eine Liste der Kacheln des Spielers zurück, nachdem alle Züge ausgewertet wurden.
Herausforderungsregeln
- Sie können davon ausgehen, dass die Liste mit den Kacheln geordnet ist und keine Ganzzahl zweimal enthält.
- Sie können beide Eingabelisten in beliebiger Reihenfolge eingeben
- Die Ausgabe muss die Reihenfolge der Kacheln auf dem Stapel beibehalten. Sie können jedoch entscheiden, ob die Liste von oben nach unten oder von unten nach oben sortiert wird.
Allgemeine Regeln
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln . Sie können also STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden.
- Standardschlupflöcher sind verboten.
- Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code (dh TIO ) hinzu.
- Es wird empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Beispiel
(aus dem 6. Testfall entnommen)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Die erste Punktzahl ist 22, also nimm das höchste Plättchen in der Mitte <= 22, also 22 selbst.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [22, 22, 23, 21, 24, 0, 22]
Die nächste Punktzahl ist 22, also nimm das höchste Plättchen in der Mitte <= 22. Da 22 bereits vergeben ist, muss der Spieler 21 nehmen.
Middle: [23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 21]
Remaining scores: [22, 23, 21, 24, 0, 22]
Die nächste Punktzahl ist 22, aber alle Zahlen <= 22 sind bereits vergeben. Daher verliert der Spieler das oberste Plättchen auf dem Stapel (21), das in die Mitte zurückgelegt wird.
Middle: [21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22]
Remaining scores: [23, 21, 24, 0, 22]
Die nächsten Punkte sind 23, 21 und 24, also nimmt der Spieler diese Steine aus der Mitte.
Middle: [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21, 24]
Remaining scores: [0, 22]
Der Spieler bricht ab und erzielt null Punkte. Daher wird die Kachel mit der Nummer 24 (oberste auf dem Stapel) in die Mitte zurückgebracht.
Middle: [24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Stack: [22, 23, 21]
Remaining scores: [22]
Die letzte Punktzahl ist 22, aber alle Plättchen <= 22 sind bereits vergeben, sodass der Spieler das oberste Plättchen auf dem Stapel verliert (21).
Middle: [21, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Final Stack and Output: [22, 23]
Testfälle
(mit der obersten Kachel zuletzt in der Ausgabeliste)
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [26, 30, 21]
Output: [26, 30, 21]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [35, 35, 36, 36]
Output: [35, 34, 36, 33]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23]
Output: [23]
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: []
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 17, 23, 19, 23, 0]
Output: []
Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
Scores: [22, 22, 22, 23, 21, 24, 0, 22]
Output: [22, 23]
Tiles: [1, 5, 9, 13, 17, 21, 26]
Scores: [6, 10, 23, 23, 23, 1, 0, 15]
Output: [5, 9, 21, 17, 13, 1]
Tiles: []
Scores: [4, 6, 1, 6]
Output: []
Antworten:
Haskell ,
119111104103 Bytes1 Byte dank Ørjan Johansen gespeichert
Probieren Sie es online aus!
Angenommen, die Kacheln sind in absteigender Reihenfolge sortiert.
Hier ist nicht viel los. Das erste Argument ist der Stapel der Spieler, das zweite ihre Punkte und das dritte der Stapel in der Mitte.
quelle
sort
es aufsteigend ist. Der TIO-Testfall trifft diesen Zweig jedoch nie. Ich empfehle dringend, alle Fälle jedes Mal zu testen, wenn Sie so iterieren.(#)=span.(<)
.Japt, 24 Bytes
Uff! Das hat nicht so gut geklappt, wie ich es mir vorgestellt hatte!
Nimmt die Eingabe in umgekehrter Reihenfolge vor.
Probieren Sie es aus oder führen Sie alle Testfälle auf TIO aus
quelle
Perl 6 , 89 Bytes
Probieren Sie es online aus!
Ich denke, es gibt noch ein paar Bytes, die man abspielen kann ...
quelle
C # (Visual C # Interactive Compiler) ,
159158154 ByteGenannt als
f(tiles)(scores)
Wenn nur
System.Void
tatsächlich ein Rückgabetyp und nicht nur ein Platzhalter für die Reflexion ist. Ich wäre in der Lage zu ersetzen ,if(a<1)m.Add(s.Count<1?0:s.Pop());else s.Push(a);
mitvar t=a>1?m.Add(s.Count<1?0:s.Pop()):s.Push(a);
, spart zwei Bytes.Probieren Sie es online aus!
quelle
Ruby , 77 Bytes
Probieren Sie es online aus!
quelle
JavaScript (Node.js) , 80 Byte
Dieselbe Logik wie in der ES6-Version, jedoch werden die Kacheln als BigInt-Bitmaske und die Ergebnisse als Array von BigInts verwendet.
Probieren Sie es online aus!
JavaScript (ES6),
100 98 9487 ByteNimmt Eingabe als
(tiles)(scores)
. Die Kacheln können in beliebiger Reihenfolge übergeben werden.Probieren Sie es online aus!
Kommentiert
quelle
Holzkohle , 35 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Schleife über die Partituren.
Suchen Sie nach der höchsten verfügbaren Kachel.
Wenn es existiert, dann ...
... entferne die Fliese aus der Mitte ...
... und zum Stapel hinzufügen.
Andernfalls, wenn der Stapel nicht leer ist ...
Entfernen Sie die neueste Kachel vom Stapel und legen Sie sie wieder in die Mitte.
Drucken Sie den resultierenden Stapel vom ältesten zum neuesten.
quelle
Python 2 , 120 Bytes
Probieren Sie es online aus!
quelle
05AB1E ,
2722 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Pyth, 32 Bytes
Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .
Hier muss es irgendwo Verbesserungspotenzial geben - Vorschläge sind sehr willkommen!
quelle
Perl 5
-apl -MList:Util=max
, 97 BytesTIO
Liest Partituren und Kacheln in der nächsten Zeile und druckt die Ausgabe.
Wie
-apl
:-p
um Zeilen zu durchlaufen und zu drucken,-a
automatisch-l
zu teilen, von der Eingabe zu chompen und der Ausgabe ein Zeilenumbruchzeichen hinzuzufügen$_=$".<>
: um die nächste Zeile (Kacheln) zu lesen und ein Leerzeichen in die Standardvariable einzufügen$_
for$i(@F){
...}
Schleife$i
über@F
Felder der aktuellen Zeile (Scores)(
..?
..:
..).=$&
vorherige Übereinstimmung an ternären l-Wert anhängen($m=max grep$_<=$i,/\d+/g)&&s/ $m\b//?$s
falls der maximale Wert gefunden und von den Kacheln entfernt wurde ($_
) l-Wert ist Punktzahl ($s
)$s=~s/ \d+$//?$_
Andernfalls, wenn die letzte Zahl aus den Punktzahlen entfernt werden könnte, sind es Kacheln:$G
Endlich ist es Müll, weil er nicht auftreten kann$_=$s;s/ //
um die Punktzahl auf die Standardvariable zu setzen und das führende Leerzeichen zu entfernenquelle