W rundzie ćwiczenia dylematu więźnia , każdy z dwóch graczy decyduje, czy w tej rundzie będzie współpracować, czy też wada . Punktacja dla rundy to:
- Zarówno gracz A, jak i gracz B współpracują: 1 punkt dla obu
- Wada zarówno gracza A, jak i gracza B: 2 punkty za oba
- Gracz A współpracuje, a gracz B ma wady: 3 punkty za współpracującego gracza A i 0 punktów za wadliwego gracza B.
Nie musisz się jednak martwić strategią: twój program będzie jedynie zestawiał wynik gry. (Jeśli znasz już dylemat więźnia, moje „punkty” tutaj odpowiadają „latom w więzieniu”).
Twoim wyzwaniem jest zdobycie wkładu reprezentującego wybory graczy w kilku rundach i obliczenie ich łącznej liczby punktów. Jeden gracz dokonuje wyboru małymi literami, ca d(w przypadku współpracy i wad ), a drugi wybiera wielkie litery, Ca D. Te opcje są dostarczane do programu jako ciąg.
Zwykle gracze dylematu więźnia poddają swoje ruchy jednocześnie i iteracyjnie. Jednak w tym wyzwaniu gracze mogli przedłożyć swoje wybory na kilka rund jednocześnie. Jeśli ruch gracza jest poza sekwencją, program punktacji zapamiętuje go i dopasowuje go do następnego dostępnego ruchu przeciwnika.
Oto przykładowy ciąg wejściowy:
cDCddDDCcCc
Aby wyświetlić dopasowania występujące w tym danych wejściowych, osobno wywołam małe i wielkie litery i sparuję je:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Zostaną one sparowane w rundach:
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)
Który tworzy wynik 9(małe litery) do 6(wielkie litery), więc wynikiem powinno być 9,6(lub dowolny jednoznaczny separator).
Aby wyrazić to w jeszcze inny sposób, oto każda para wyciągnięta w osobnym rzędzie:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Jest jeden nieporównywalny C, ponieważ gracz z dużymi literami zgłosił więcej ruchów niż gracz z małą literą. Jest to do przyjęcia i jest całkowicie ignorowane do celów punktacji.
Oto wymagania:
Musisz napisać program lub funkcję, która akceptuje ciąg wyrażenia regularnego
/[cdCD]+/, za pośrednictwem jakiegoś mechanizmu wejściowego (STDIN, argument funkcji, odczyt z pliku itp.). (Twój program może opcjonalnie zaakceptować wejście z końcowym znakiem nowej linii).Twój program lub funkcja musi generować lub zwracać wyniki graczy jako ciąg znaków. Format wyjściowy musi zaczynać się od wyniku małego gracza, po którym następuje wynik dużego gracza, oddzielone dowolnym niepustym, nieliczbowym ogranicznikiem według własnego wyboru. (Końcowy znak nowej linii jest opcjonalny).
Jeśli jeden gracz ma więcej ruchów niż drugi, nadwyżki ruchów są ignorowane.
Jeśli wszystkie ruchy na wejściu pochodzą wyłącznie od jednego gracza (to znaczy w ogóle nie rozegrano rund), wynik każdego gracza jest taki
0.Najmniejsze przesłanie w bajtach wygrywa.
Przypadki testowe
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)lub [0,0]OK do wyjścia?
