In einer Runde des Häftlingsdilemmas entscheiden jeweils zwei Spieler, ob sie in dieser Runde kooperieren oder ausfallen . Die Wertung für eine Runde lautet:
- Spieler A und Spieler B kooperieren beide: 1 Punkt für beide
- Spieler A und Spieler B haben beide Fehler: 2 Punkte für beide
- Spieler A kooperiert und Spieler B defekt : 3 Punkte für kooperierenden Spieler A und 0 Punkte für den Defekt von Spieler B
Sie brauchen sich jedoch keine Gedanken über die Strategie zu machen: Ihr Programm tabelliert lediglich die Punktzahl für ein Spiel. (Falls Sie bereits mit dem Gefangenendilemma vertraut sind, entsprechen meine "Punkte" hier "Jahren im Gefängnis".)
Ihre Herausforderung besteht darin, Eingaben zu machen, die die Entscheidungen der Spieler über mehrere Runden repräsentieren, und ihre jeweiligen Gesamtpunktzahlen zu berechnen. Ein Spieler gibt die Auswahl in Kleinbuchstaben cund d(für Zusammenarbeit und Fehler ) und der andere in Großbuchstaben Cund ein D. Diese Auswahlmöglichkeiten werden Ihrem Programm als Zeichenfolge zur Verfügung gestellt.
Normalerweise reichen Spieler im Gefangenendilemma ihre Züge gleichzeitig und iterativ ein. Bei dieser Herausforderung haben die Spieler möglicherweise ihre Auswahl für mehrere Runden gleichzeitig abgegeben. Wenn der Zug eines Spielers nicht in der richtigen Reihenfolge ist, merkt sich das Auswertungsprogramm den Zug und gleicht ihn mit dem nächsten verfügbaren Zug des gegnerischen Spielers ab.
Hier ist eine Beispiel-Eingabezeichenfolge:
cDCddDDCcCc
Um die Übereinstimmungen anzuzeigen, die in dieser Eingabe vorhanden sind, rufe ich Klein- und Großbuchstaben getrennt auf und verbinde sie:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Diese werden in die Runden eingeteilt:
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
d vs C (0 pts for lowercase-player, 3 pts for uppercase-player)
d vs D (2 pts for both)
c vs D (3 pts for lowercase-player, 0 pts for uppercase-player)
c vs C (1 pt for both)
Wodurch die Punktzahl 9(Kleinbuchstaben) in 6(Großbuchstaben) umgewandelt wird, sollte die Ausgabe 9,6(oder ein eindeutiges Trennzeichen) sein.
Um es noch anders auszudrücken, hier ist jede Paarung in einer eigenen Reihe gezogen:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Es gibt einen, der nicht übereinstimmt C, da der Spieler mit Großbuchstaben mehr Züge eingereicht hat als der Spieler mit Kleinbuchstaben. Das ist akzeptabel und wird für Bewertungszwecke völlig ignoriert.
Hier sind die Anforderungen:
Sie müssen ein Programm oder eine Funktion schreiben
/[cdCD]+/, die über einen Eingabemechanismus (STDIN, Funktionsargument, Auslesen aus Datei usw.) eine Zeichenfolge in Form eines regulären Ausdrucks akzeptiert . (Ihr Programm akzeptiert optional Eingaben mit einer nachgestellten Newline.)Ihr Programm oder Ihre Funktion muss die Punktzahlen der Spieler als Zeichenfolge ausgeben oder zurückgeben. Das Ausgabeformat muss mit der Punktzahl des Spielers in Kleinbuchstaben beginnen, gefolgt von der Punktzahl des Spielers in Großbuchstaben, getrennt durch ein nicht leeres, nicht numerisches Trennzeichen Ihrer Wahl. (Ein abschließender Zeilenumbruch ist optional.)
Wenn ein Spieler mehr Züge als der andere hat, werden die überschüssigen Züge ignoriert.
Wenn alle Züge in der Eingabe von ausschließlich einem Spieler stammen (dh es wurden überhaupt keine Runden gespielt), beträgt die Punktzahl jedes Spielers
0.Die kleinste Einsendung in Bytes gewinnt.
Testfälle
Input: cDCddDDCcCc
Output: 9,6 -- or any delimiter; I chose commas here
Input: cccDDD
Output: 9,0
Input: DDDDDDccc
Output: 9,0
Input: cDcDcD
Output: 9,0
Input: dcDDC
Output: 5,2
Input: CcdCDDcd
Output: 6,6
Input: Ddd
Output: 2,2
Input: ccccccccccc
Output: 0,0
(0,0)oder [0,0]OK für die Ausgabe?
