Sie haben beschlossen, eine Stein-Papier-Scheren- Meisterschaft zu organisieren, um herauszufinden, wer der Beste ist. Sie möchten nicht das Glück haben, den Gewinner zu bestimmen, daher muss jeder Ihnen seine Taktik vor dem Wettbewerb schriftlich mitteilen. Sie mögen auch einfache Dinge, so dass eine Bewegung eines Konkurrenten (mit Stein, Papier oder Schere) nur auf der vorherigen Runde basieren muss (RvR, RvP, RvS, PvR, PvP, PvS, SvR, SvP oder SvS). In der ersten Runde muss ein Spieler ein festes Zeichen zeigen.
Sie haben beschlossen, ein Programm (oder eine Funktion) zu schreiben, um die Meisterschaft zu simulieren.
Details des Wettbewerbs
- Es werden mindestens 2 Teilnehmer sein.
- Jeder Spieler spielt genau ein Match mit allen anderen.
- Ein Match dauert 7 Runden.
- In jeder Runde erhält der Gewinner 2 Punkte, der Verlierer keine. Bei einem Unentschieden erhalten beide Spieler 1 Punkt.
- Die Punktzahl eines Spielers in einem Spiel ist die Summe seiner Punkte über die Runden des Spiels.
- Das Endergebnis eines Spielers in der Meisterschaft ist die Summe seiner Punkte über alle Spiele.
Details der Eingabe:
- Ihr Programm oder Ihre Funktion erhält
N
10 Zeichen lange Zeichenfolgen, von denen jede einer Spielerstrategie entspricht. Alle Zeichen sind (Kleinbuchstaben)r
p
oders
bedeuten, dass der Spieler in der gegebenen Situation Steinpapier oder eine Schere zeigt. - Der erste Buchstabe kodiert die erste Runde (in jedem Spiel für diesen Teilnehmer). Die zweite zeigt, was passiert, wenn die letzte Runde Rock gegen Rock war. Die nächsten sind RvP, RvS, PvR, PvP, PvS, SvR, SvP und SvS, wobei der erste Buchstabe das Zeichen des Spielers und der zweite das Zeichen des Gegners ist. ZB
rrpsrpsrps
bedeutet, dass der Spieler mit Stein beginnt und dann den letzten Zug des Gegners kopiert. - Sie können die Liste der Zeichenfolgen als Liste / Array oder ähnliche Daten Ihrer Sprache oder als eine Zeichenfolge eingeben. Im letzteren Fall ist eine Art Trennzeichen ein Muss.
Details der Ausgabe:
- Ihr Programm oder Ihre Funktion sollte die Endergebnisse jedes Spielers in derselben Reihenfolge ausgeben, in der die Eingabe geliefert wurde.
- Scores sollten durch Leerzeichen oder Zeilenumbrüche getrennt werden. Leerzeichen oder Zeilenumbrüche sind zulässig.
Beispiele:
Eingang:
['rrpsrpsrps', 'rpppsprrpr']
Ausgabe:
5 9
(Umdrehungen sind rvr rvp pvs svp pvr rvp pvs
)
Eingang:
['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss']
Ausgabe:
13 17 12
(Übereinstimmungen sind 5-9
(1. gegen 2.), 8-6
(1. gegen 3.) und 8-6
(2. gegen 3.))
Dies ist Code-Golf, also gewinnt der kürzeste Eintrag.
quelle
6-8
und der zweite verliert gegen den dritten mit6-8
.Antworten:
Python 2:
201188 ZeichenDie Logik des Programms: Ich konvertiere die Buchstaben Nummer (
r=0
,p=1
,s=2
).m
ist die Nummer der ersten,n
die Nummer der zweiten Person. Da das Spiel zyklisch ist,(m-n)%3
bestimmt sich bereits das Ergebnis. Und natürlich kann ich das Ergebnis um eins verschiebenf=(m+1-n)%3
. Bedeutet nunf=0
, dass der zweite Spielerq
gewinnt,f=1
ein Unentschieden bedeutet und derf=2
erste Spielerp
gewinnt. Es ist auch bereits die Punktzahl für Spieler 1. Daher muss ich nur alle Werte(p!=q)*(m+1-n)%3
für jeden Spieler hinzufügen .Testen Sie es mit
print f(['rrpsrpsrps', 'rpppsprrpr', 'ssssssssss'])
quelle