Cheat ist ein Kartenspiel, bei dem Sie versuchen, Ihre Hand loszuwerden. Eine Kurve sieht ungefähr so aus:
- Bestimmen Sie, welchen Kartenrang Sie in diesem Zug spielen müssen. In den meisten Varianten ist dies ein Rang höher als in der vorherigen Runde.
- Spiele 1-4 verdeckte Karten. Diese müssen nicht mit dem gültigen Rang übereinstimmen. Wenn sie es nicht tun, wird es als Betrug betrachtet . Zu diesem Zeitpunkt kann jeder Spieler Sie herausfordern .
- Wenn Sie niemand herausfordert, wird das Spiel mit dem nächsten Spieler fortgesetzt.
- Wenn dich jemand herausfordert und du nicht betrogen hast, musst du alle gespielten Karten nehmen.
- Wenn dich jemand herausfordert und du betrogen hast, musst du alle gespielten Karten nehmen.
Die Strategie ist meistens eine Mischung aus Bluffen und Kartenzählen. Ich bin schlecht in Mathe, also werde ich bei Cheat schummeln und einen Bot mitbringen.
Eingang
Die Eingabe erfolgt in einer beliebigen Reihenfolge oder in einem beliebigen Format:
- Die Hand des Spielers. Wenn ich weiß, dass sie Karten haben müssen (ich habe zum Beispiel gesehen, dass sie sie aufgehoben haben), werden diese in aufsteigender Reihenfolge aufgelistet. Unbekannte werden anschließend als aufgelistet
?
. Wenn sie zum Beispiel sechs Karten haben und ich weiß, dass zwei 1 und eine 4 sind, ist eine gültige Darstellung der Hand114???
. werden immer nach bekannten Karten aufgelistet.141???
und11???4
sind beide ungültige Eingaben und Ihr Code muss diese nicht verarbeiten. - Die Karten, die ich definitiv kenne, sind nicht Teil ihrer Hand (ich habe sie, ich habe jemanden gesehen, der sie aufhebt usw.). Die Liste wird in aufsteigender Reihenfolge des Ranges angezeigt. Die Liste ist möglicherweise leer.
- Die Karten, die der Spieler ausgespielt hat. Wenn sie behaupteten, 3 7's zu spielen, wäre ein möglicher Input hier
777
. Die Karten haben immer den gleichen Rang.
Die Anzahl der gespielten Karten ist immer 1-4 und die Ränge sind immer 0-9. Ein Rang wird niemals mehr als vier Mal in ihrer Hand + nicht in ihrer Hand erscheinen.
Dies ist ein Beispiel für eine gültige Eingabe:
33577??
01555688
55
Dies ist ein Beispiel für eine ungültige Eingabe:
35377?? # Out of order
7779 # Five 7's in total
23 # Two separate ranks played
Ausgabe
Ein wahrer Wert, wenn wir definitiv herausfordern sollten. Ein falscher Wert, wenn wir nicht herausfordern wollen.
Wir fordern immer heraus, wenn wir wissen, dass sie betrogen haben. Wir wissen, dass sie betrogen haben, wenn sie Karten gespielt haben, die sie unmöglich haben könnten:
12
3 # They don't have any 3's or ?'s
-------------
12?
33 # Fewer ?'s than played cards
-------------
123?
333
33 # Since we have three 3's they can't have two
Das andere Mal stellen wir uns der Frage, ob sie ihre letzten Karten spielen. Selbst wenn das Spiel echt wäre, würde es das Spiel beenden, also könnten wir es genauso gut herausfordern.
1
1 # They'd win, so challenge anyway
Weitere Testfälle
Wahrheit (sollte herausfordern)
11445678?
22
-------------
????????
4
4444
-------------
12345678
9
Falsey (sollte nicht herausfordern)
1?
222
2
-------------
12?
22
22
-------------
?????
1111
Wertung
Kürzester Code gewinnt.
quelle
Antworten:
Pyth, 22 Bytes
Probieren Sie es online aus.
quelle
JavaScript (ES6), 93 Byte
Akzeptiert drei Kartenreihen (Zeichen
0
-9
oder?
); kehrt sonst1
zur Herausforderung zurück0
. Erläuterung:quelle
C # 6, 134 Bytes
(Hinweis: In Übereinstimmung mit dem Beispiel von OP gibt diese Antwort falsch zurück, auch wenn der Gegner mehr als eine Karte hat und seine gesamte Hand spielt. In Bezug auf die Strategie sollte dies wahr sein.)
Erläuterung:
a
: Hand des Spielersb
: Karten, die ich definitiv kenne ...c
: Karten, die angeblich gespielt werdenUngolfed:
quelle
a.Length==1
seina.Length==c.Length
. Sie scheinen so etwas in Ihrem Zettel zu implizieren, aber ich weiß nicht, auf welches OP-Beispiel Sie sich beziehen, dass möglicherweise mehr Karten gespielt werden, als der Gegner auf der Hand hat.Java 8,
169135 BytesErläuterung:
Probieren Sie es hier aus.
HINWEIS:
(s+0).split("c",-1).length-1
Gibt an, wie oft das Zeichenc
in String vorkommts
. Die Kommentare in der obigen Erklärung sind also korrekt, aber der Code scheint deshalb möglicherweise anders zu sein. Das(a+0).split(x+"|\\?",-1).length-1<C
ist zu golfen(a+0).split(x+"|\\?",-1).length<=C
und das4-(b+0).split(""+x,-1).length-1<C
ist zu golfen5-(b+0).split(""+x,-1).length<C
.quelle