В раунде дилеммой заключенного упражнения, два игрока каждый решить , стоит ли сотрудничать или дефект в этом раунде. Очки за тур это:
- Игрок A и игрок B оба сотрудничают: 1 очко для обоих
- Игрок A и игрок B оба дефекта: 2 очка для обоих
- Игрок А сотрудничает и игрок Б дефекты: 3 очка за сотрудничество Игрока А и 0 очков за побег Игрока Б
Вам не нужно беспокоиться о стратегии: ваша программа будет просто сводить счет за игру. (Если вы уже знакомы с дилеммой заключенного, мои «баллы» здесь соответствуют «годам тюрьмы».)
Ваша задача состоит в том, чтобы взять данные, которые отражают выбор игроков за несколько раундов, и вычислить их общее количество очков. Один игрок представляет варианты в нижнем регистре, c
и d
(для сотрудничества и дефекта ), а другой - в верхнем регистре, C
и D
. Эти варианты предоставляются вашей программе в виде строки.
Обычно игроки в дилемме заключенного подают свои ходы одновременно и итеративно. В этом соревновании, однако, игроки могли представить свой выбор на несколько раундов одновременно. Если ход игрока не соответствует последовательности, программа подсчета очков запоминает его и сопоставляет со следующим доступным ходом противостоящего игрока.
Вот пример входной строки:
cDCddDDCcCc
Чтобы показать совпадения, существующие в этом входном файле, я отдельно вызову строчные и прописные буквы, а затем сопоставлю их:
cDCddDDCcCc
c dd c c => cddcc
DC DDC C => DCDDCC
Они будут объединены в раунды:
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)
Который производит счет 9
(нижний регистр) в 6
(верхний регистр), поэтому вывод должен быть 9,6
(или любой однозначный разделитель).
Чтобы выразить это еще одним способом, вот каждая пара, выделенная в отдельном ряду:
cDCddDDCcCc
cD
Cd
dD
D c
C c
Есть один бесподобный C
, потому что игрок в верхнем регистре представил больше ходов, чем игрок в нижнем регистре. Это приемлемо и полностью игнорируется для целей подсчета очков.
Вот требования:
Вы должны написать программу или функцию, которая принимает строку формы регулярного выражения
/[cdCD]+/
через некоторый механизм ввода (STDIN, аргумент функции, чтение из файла и т. Д.). (Ваша программа может при желании принять ввод с завершающим переводом строки.)Ваша программа или функция должна выводить или возвращать результаты игроков в виде строки. Выходной формат должен начинаться со счета игрока в нижнем регистре, за которым следует счет игрока в верхнем регистре, разделенный любым непустым нечисловым разделителем по вашему выбору. (Завершающий перевод строки не является обязательным.)
Если у одного игрока больше ходов, чем у другого, лишние ходы игнорируются.
Если все ходы на входе сделаны исключительно одним игроком (то есть, раунды не были сыграны вообще), то оценка каждого игрока равна
0
.Наименьшая подача в байтах побеждает.
Контрольные примеры
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)
или [0,0]
OK для выхода?