Турнир

Описание

Компания «Технологика» объявляет турнир.

Турнир состоит из раундов. В каждом раунде устроители турнира выставляют набор страшных голодных зверей, а каждый участник выставляет одного мужественного бойца. После чего происходит серия кровавых схваток, где каждый боец сражается с каждым зверем один на один.

После окончания турнира организаторы публикуют его детальную историю.

Правила

Количество раундов в турнире: 10.

Количество зверей в раунде: от 1 до 10.

Каждый участник присылает на турнир свою программу — генератор бойцов. В каждом раунде этой программе передаются описания всех зверей раунда, а она генерирует описание одного бойца, который сражается один на один с каждым зверем раунда.

Порядок сражений

Звери и бойцы представляют собой последовательности команд. Например, «aBAcCbb». Существует три вида атаки — «A», «B» и «C», и три вида блока — «a», «b» и «c». Других команд нет.

Максимальное количество команд в последовательности: 42.

Перед началом каждого сражения у каждого из соперников 10 очков здоровья. Сражение происходит по тактам. В каждом такте одновременно исполняется следующая команда каждого сражающегося, начиная с первой. За последней командой следует первая команда.

Если исполнен блок, то он действует на том такте, когда был исполнен, а также на следующем такте. Если один из сражающихся исполнил атаку, а у второго в этом такте не действует блок того же типа, что атака первого, то второй теряет одно очко здоровья.

Если по результатам исполнения такта у кого-то из сражающихся стало 0 (ноль) очков здоровья, то сражение заканчивается. Если за последние N тактов, где N = (длина зверя)*(длина бойца), ни у одного из сражающихся не изменилось количество очков здоровья, то сражение заканчивается.

НЕ нашли? Не то? Что вы ищете?

Определение победителя сражения

Сражение считается выигранным (бойцом) только в том случае, если после окончания сражения боец жив, а зверь мёртв.

Дисквалификация бойца

·  Если длина бойца меньше 1 или больше 42, или боец содержит символы, не содержащиеся в наборе «AaBbCc», то боец не допускается к раунду.

·  Если программа работает дольше 5 минут, то она не допускается к раунду.

Определение победителя турнира

После окончания турнира для каждого участника подсчитывается два числа: количество выигранных сражений и сумма длин выигранных сражений (в тактах). Места в турнире распределяются по количеству выигранных сражений — чем больше, тем лучше. Если у нескольких участников одинаковое количество выигранных сражений, то сравнение между ними идёт по сумме длин выигранных сражений — чем меньше сумма, тем лучше.

Устроители турнира анализируют все исходные коды и начисляют бонус в виде 2 (двух) выигранных сражений участнику, предоставившему самый хороший (хорошо структурированный, опрятный, разумно откомментированный, профессиональный) код.

Требования

Программа должна быть консольным. NET приложением, написанным на C#, и должна быть предоставлена в виде исходного кода.

Программа должна прочитать описания зверей со стандартного входа — один зверь в строке, и выдать описание бойца в стандартный выход.

Пример

Сражение между зверем «aA» и бойцом «Ba». Пусть у каждого по 2 очка здоровья:

Такт

Действие

Очки здоровья

Комментарий

боец

зверь

боец

зверь

2

2

Начальное положение

1

B

a

2

1

Зверь ставит блок против «A», боец атакует «B». Зверь теряет очко здоровья. Сражение продолжается.

2

а

A

2

1

Зверь атакует «A», боец блокирует «A». Сражение продолжается.

3

B

a

2

0

Зверь ставит блок против «A», боец атакует «B». Зверь теряет очко здоровья. Сражение заканчивается.

Сражение выиграл боец.

Удачи в турнире!