У раунді дилемою укладеного вправи, два гравця кожен вирішити , чи варто чи співпрацювати або дефект в цьому раунді. Оцінка за раунд:
- Гравець А та Гравець В співпрацюють: 1 бал для обох
- Гравець А та Гравець В - дефект: 2 очки за обидва
- Гравець A співпрацює та дефекти гравця B: 3 бали за гравця A та 0 балів за перегравання гравця B
Однак, вам не потрібно хвилюватися про стратегію: ваша програма буде просто нараховувати рахунок за гру. (Якщо ви вже знайомі з дилемою в'язня, мої "пункти" тут відповідають "років ув'язнення".)
Ваша задача полягає в тому, щоб взяти внесок, який представляє вибір гравців протягом декількох раундів, і обчислити їх відповідні загальні бали. Один гравець подає вибір у малому регістрі 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 для виходу?
