Задача 5. Составление списка возможных ходов (125 баллов).
XVII открытая заочная олимпиада
«Играем в программистов»
2021-22 учебного года
«Реверси»
Уважаемые участники олимпиады!
На этот раз все задачи объединены темой игра «Реверси», в самом распространённом её варианте 8х8. Надеемся, что каждый из вас знает эту игру и её правила. Тем не менее, перед началом работы над задачами советую ознакомиться с ними (https://ru.wikipedia.org/wiki/Реверси).
Напомним, что игровое поле практически такое же, как и в шахматах, только поля не имеют цвета. Обозначение полей точно такое же, как и в шахматах, колонка обозначается заглавной латинской буквой, а строка – числом. Например, F3. После буквы пробела нет! Строки нумеруются снизу наверх.
8 | ||||||||
7 | ||||||||
6 | ||||||||
5 | ||||||||
4 | ||||||||
3 | ||||||||
2 | ||||||||
1 | ||||||||
A | B | C | D | E | F | G | H |
Уважаемые участники, с особой тщательностью прочтите нижеследующую информацию!
Система обозначений
- Текущее положение задаётся следующим образом: во-первых, задаётся расположение фишек на доске. Во-вторых, задаётся номер игрока, сделавшего последний ход (1 – ход первого игрока, 2 – второго), при этом в начальном положении задаётся 2.
Положение задаётся 8-ю строками. В каждой строке по 8 цифр (0, 1, 2). Каждая цифра соответствует одному полю. На пустом месте находится НОЛЬ! 1 и 2 – фишки соответствующего игрока. | 00000000 00000000 00000000 00021000 00012000 00000000 00000000 00000000 | 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 |
|
|
- Сделанный ход задаётся указанием поля, куда ставит свою фишку игрок. Например, E7.
Входные данные читаются из файла INPUT . txt, а выходные данные записываются в файл OUTPUT . txt текущего каталога.
Внимательно читайте условия задач, к каждой из них приложены примерные тесты. Выбирайте задачи по своим силам.
Уважаемые участники! Предлагаемые задачи нельзя назвать лёгкими. Если Вы не можете решить какую-либо задачу полностью, к чему надо стремиться, то решите её для посильных частных случаев! Тогда за прохождение соответствующих тестов Вы получите некоторое количество баллов.
Все программы должны укладываться в 3 секунды.
Ещё один важный момент. В этой игре бывает, хотя и редко, что тот игрок, чья очередь ходить, не имеет такой возможности и вынужден пропускать ход, который переходит к противнику.
|
|
Напоминаем, что на нашей олимпиаде, как и на прочих, предполагается ввод корректных данных, то есть не противоречащих условию задачи. Тратить время на «защиту от дурака» не надо! Исключением являются лишь специальные задачи, в которых это сказано.
Не торопитесь! Задачи связаны друг с другом, и это может помочь в работе.
Желаем творческих успехов!
Задача 1. Определение количества сделанных ходов (125 баллов).
Задаётся расположение на доске. Сделать программу для определения количества сделанных ходов.
Входные данные: 8 строк - положение.
Выходные данные: одно число через пробел.
Примерные тесты:
Номер теста | 1 | 2 |
Входные данные | 00000000 00000000 00000000 00021000 00012000 00000000 00000000 00000000 | 00000000 00000000 00000000 00022200 00021100 00200000 00000000 00000000 |
Выходные данные | 0 | 3 |
Комментарии | Начальное положение. | Должен быть сделан 4-й ход, ходит 2-й игрок. |
Задача 2. Определение победителя и счёта (125 баллов).
Задаётся окончательное расположение, то есть такое, в котором ни одна сторона не может сделать ход. Сделать программу, которая определит победителя и конечный счёт игры. Если победил 1-й игрок – вывести 1, 2-й игрок – 2, если ничья, то 0. Далее вывести количество баллов первого и второго игроков.
|
|
Входные данные: 8 строк — окончательное положение.
Выходные данные: строка с 3-мя числами через пробел: сперва число 1 / 2 / 0, в зависимости от результата игры, а затем количество набранных баллов первого и второго игроков.
Примерные тесты:
Номер теста | 1 | 2 | 3 |
Входные данные | 12222222 21111112 22111222 21212112 22221222 22111122 22221212 22222121 | 22222221 11112221 11112221 11122221 11122221 11111111 11111111 11111111 | 12221222 21111112 22111222 21212112 22221222 22211111 22111111 22211111 |
Выходные данные | 2 23 41 | 1 43 21 | 0 32 32 |
Задача 3. Определение сделанного хода (125 баллов).
Задаются два положения. Сделать программу, определяющую, можно ли из первого положения перейти ко второму за один ход, и, если возможно, выводящую этот ход. В случае невозможности, вывести «0». Возможен вариант, когда ход остаётся за предыдущим игроком.
Входные данные: 18 строк — первое положение, второе положение.
Выходные данные: обозначение хода, либо 0.
Примерные тесты:
Номер теста | 1 | 2 |
Входные данные | 00000000 00000000 00000000 00021000 00012000 00000000 00000000 00000000 2 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 1 | 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 1 00000000 00000000 00000000 00021000 00012000 00000000 00000000 00000000 2 |
Выходные данные | F4 | 0 |
|
|
Задача 4. Определение получившегося положения (125 баллов).
Задаётся положение и сделанный ход. Сделать программу, определяющую положение, которое получится в результате этого хода. Если указанный ход невозможен, выдать исходное положение. Конечное положение исключено.
Входные данные: положение, очерёдность хода и ход.
Выходные данные: положение.
Примерные тесты:
Номер теста | 1 | 2 | 3 |
Входные данные | 00000000 00000000 00000000 00021000 00012000 00000000 00000000 00000000 2 F4 | 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 1 F3 | 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 1 G3 |
Выходные данные | 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 1 | 00000000 00000000 00000000 00021000 00012100 00000200 00000000 00000000 2 | 00000000 00000000 00000000 00021000 00011100 00000000 00000000 00000000 2 |
Задача 5. Составление списка возможных ходов (125 баллов).
Задаётся текущее положение (расположение на доске и номер последнего сходившего игрока). Сделать программу, для составления списка всех возможных ходов того игрока, чья очередь ходить. Сперва вывести количество ходов, затем, сами ходы. Возможен случай, когда у очередного игрока нет хода, и ход не переходит. В случае окончательного положения выдать 0.
Входные данные: положение.
Выходные данные: три строки. В первой номер игрока, который должен сделать ход, во второй количество ходов, в третьей - ходы в отсортированном виде через пробел числа в одной строке через один пробел.
Примерные тесты:
Дата добавления: 2022-12-03; просмотров: 49; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!