А ето и задачата, която постави на изпитание възможностите на участниците
Категория: Интернет
10.2.2002
Валеше и валеше, и валеше. Това се случи в началото на май (някъде около 8-ми). Мечо Пух си стоеше вкъщи и си мислеше, че никога не е виждал толкова много дъжд, а навън продължаваше да вали.
Стоейки и гледайки падащите по перваза капки, Пух си помисли колко хубаво би било Кристофър Робин да е с него в този момент. Тогава щеше да му каже "Виждал ли си някога токова много дъжд, Кристофър Робин?", а той да му отвърне "Не е ли ужасно, Пух?". Тогава Пух щеше да му каже "Как ли се чувства Прасчо сега", а Кристофър Робин да отговори "Мисля, че горкият стар Зайо е наводнен вече". Да, би било прекрасно Кристофър Робин да бъде там и да си говорят по този начин. Наистина, не е така вълнуващо да преживяваш сам нещо толкова хубаво като пороен дъжд, както ако има с кого да го споделиш.
Тогава Мечо Пух си спомни, че е обещал на Кристофър Робин до го покани на вечеря. Затова се пресегна да вземе мобилния телефон, за да му се обади. Уви, нямаше обхват в лошото време. Разочарован, Пух се зачуди какво може да прави, обкръжен отвсякъде с вода. Тогава се сети, че никога не е опитвал игрите на мобилния си апарат. Една от тях, която Кристофър Робин му беше споменал отдавна, се оказа много интересна, но беше твърде объркващо за Мече с Много Малко Мозък, за да се опита да играе на нея.
Играта, наречена "Ривърс", се играе от двама играчи, А и Б, които поставят пулове на квадратна дъска, разделена на 8 реда (номерирани от 1 до 8 отгоре надолу) и 8 стълба (номерирани от 1 до 8 отляво надясно). Така всяка клетка може да се идентифицира с двойка числа - номер на ред и номер на стълб. Пуловете са двуцветни - бели от едната страна и черни от другата. В началото на играта в центъра на дъската - клетките (4 4), (4 5), (5 4) и (5 5) - са поставени четири пула, два бели и два черни. Всеки от играчите има 30 пула, като играчът А поставя пуловете си с бялото нагоре (поставя бели пулове), а играчът Б - с черното нагоре (черни пулове). Играчите се редуват да правят ходове, като първи е играчът А. Поредица от поне 3 пула по хоризонтал, вертикал или по някой диагонал, започваща и завършваща с пулове в един цвят (краища), а между тях пуловете да са в другия цвят, наричаме верига. Пуловете в клетки (3 5), (4 5) и (5 5) образуват верига. На всеки ход съответният играч трябва да постави свой пул в празна клетка, като условията да постави пул са:
* играчът трябва да има не поставен пул;
* в някоя от съседните клетки по хоризонтал, вертикал и диагонали трябва да има пул, поставен с цвета на другия играч нагоре;
* новопоставеният пул трябва да бъде край на поне една верига.
Пуловете на всяка верига, за която новопоставеният пул е край, се обръщат в цвета на краищата. Ако поставим бял пул в клетка (5 2) на, ще обърнем в бяло пуловете (4,3), (5,3) и (5,4). Ако не е възможно да се постави пул при горните условия, играчът пропуска хода.
Ако и двамата играчи пропуснат ход един след друг, играта приключва. Печели този, който има повече пулове на дъската. Теоретично е възможно играчите да завършат с равен брой пулове; тогава играта се счита за приключила наравно.
Напишете програма RAIN.EXE, която играе "Ривърс". Тя ще получава текущото състояние на дъската от входния файл RAIN.INP и трябва да записва избрания от нея ход във файла RAIN.OUT. Входният файл се състои от 9 реда: първите 8 реда са с по 8 символа (0 - празна клета; 1 - бял пул; 2 - черен пул), а последният (девети) ред съдържа едно число - 1, ако трябва да се постави бял пул на текущия ход; 2, ако трябва да се постави черен пул. Всеки ред на входния файл завършва със символи за нов ред. Изходният файл трябва да се състои от един ред (завършващ със символи за нов ред), съдържащ две числа, разделени с интервал - номера на реда и номера на стълба за поставяне на пула; ако не е възможно да се постави пул според правилата на играта, двете числа трябва да са 0.
Разрешава се създаването и използването на работни файлове само в директорията, в която се изпълнява програмата ви. Тези файлове няма да бъдат променяни и изтривани от проверяващите по време на проверката.
Програмата трябва да работи най-много една (1) секунда за всеки ход. Ако времето за работа се просрочи или програмата изведе неверен ход (координати на несъществуваща клетка; поставяне на пул в непразна клетка; поставяне на пул в клетка, неотговаряща на условията; пропускане на ход, когато може да се постави пул), ще се присъди служебна победа на другия играч.
Класирането ще се извърши по следния начин: програмата на всеки състезател ще се пусне от позицията на играч А срещу програмата на всеки друг състезател (като играч Б). Програмите ще се извикват алтернативно една след друга (в различни директории), докато играта завърши. За победа се присъждат 3 точки, за равенство 1, за загуба 0. Броят на пуловете на даден състезател в края на играта се добавя към пуловата му разлика, а броят на пуловете на противника се изважда. В началото пуловата разлика на всеки състезател е 0. При служебна победа пуловата разлика се увеличава с 30, а при служебна загуба се намалява с 30.
Състезателите се класират по набраните точки. В случай на равен брой точки между няколко състезателя класирането им ще се извърши според резултатите от игрите между тях. Този принцип се прилага рекурсивно, докато довежда до ново класиране. Ако между някои състезатели отново има равенство, се вземат предвид пуловите разлики от игрите помежду им. При поредно равенство класирането става по общата пулова разлика.