Турнир
Описание
Компания «Технологика» объявляет турнир.
Турнир состоит из раундов. В каждом раунде устроители турнира выставляют набор страшных голодных зверей, а каждый участник выставляет одного мужественного бойца. После чего происходит серия кровавых схваток, где каждый боец сражается с каждым зверем один на один.
После окончания турнира организаторы публикуют его детальную историю.
Правила
Количество раундов в турнире: 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». Зверь теряет очко здоровья. Сражение заканчивается. |
Сражение выиграл боец. |
Удачи в турнире!


