Фон
Hex - це абстрактна стратегічна гра для двох гравців, що грається на K×K
ромбі шестикутної плитки. Дві протилежні сторони ромба забарвлені в білий колір, а інші два чорні, а два гравці, чорно-білі, по черзі розміщують маркер свого кольору на незайнятій плитці. Гравець, якому вперше вдається побудувати шлях між протилежними сторонами їх кольору, є переможцем. Відомо, що гра не може закінчитися внічию, і що перший гравець має виграшну стратегію незалежно від розміру дошки (детальніше див. На сторінці Вікіпедії).
Завдання
У цьому виклику ми фіксуємо розмір плати на K = 4
і представляємо дошку як наступну сітку. Товсті лінії позначають сусідні плитки.
Ваше завдання - створити виграшну стратегію для першого гравця, яку ви можете вибрати як чорного, так і білого. Це означає, що який би законний хід не робив противник, ваша гра повинна призвести до перемоги. Ваш вхід - це ігрова позиція (розташування жетонів на дошці), а ваш вихід - законний хід у форматі, зазначеному нижче. Якщо ви хочете знайти стратегію виграшу самостійно, не читайте цей спойлер:
Окреслити одну з можливих стратегій виграшу, якщо припустити, що білі мають перше місце. Спочатку виберіть 5. Після цього, якщо у вас є шлях від 5 до нижнього рядка АБО чорний колір вибирає 0 або 1 в будь-якій точці, відповідь, вибравши те, що 0 або 1 є вакантним. Якщо чорний колір обирає 9 або 13, виберіть 10, а потім вільний від 14 або 15 розмір. Якщо чорний колір не вибирає 9, 13 або 14, виберіть 9 і наступне, що з 13 або 14 є вакантним. Якщо чорний колір вибирає 14, відповідайте, вибравши 15. Далі виберіть 10, якщо він є вакантним; якщо чорний вибирає 10, відповідайте 11. Якщо чорний, то вибирає 6, відповідайте 7, а наступне, що з 2 або 3 є вакантним. Якщо чорний колір не вибирає 6, виберіть його, щоб у вас був шлях від 5 до нижнього ряду.
Вхід і вихід
Ваш вхід - це рядок з 16 символів WBE
, які означають білий, чорний і порожній. Вони представляють плитку дошки, як перераховано вище. Ви можете вибрати метод введення (який також визначає спосіб виведення) з наступного:
- Вхід з STDIN, вихід на STDOUT.
- Введіть як один аргумент командного рядка, виведіть в STDOUT.
- Введіть як 16 односимвольних аргументів командного рядка, виведіть в STDOUT.
- Введіть як аргумент названої функції, виведіть як зворотне значення.
Ваш вихід представляє плитку, на яку ви розміщуєте свій наступний маркер, оскільки настає ваша черга рухатися. Ви можете вибрати наступні вихідні формати:
- Нульовий індекс (як використовується на малюнку вище).
- Єдиний індекс.
- Вхідна рядок з одного
E
замінюється який зW
абоB
ви вибрали для вашого плеєра.
Правила
Ваша стратегія повинна бути детермінованою. Від вас не потрібно правильно обробляти ігрові позиції, недоступні на порожній дошці, використовуючи стратегію, або позиції, які вже виграють для будь-якого гравця, і ви можете вийти з ладу на них. І навпаки, на дошках, доступних за допомогою вашої стратегії, ви повинні повернути законний крок.
Це код-гольф, тому виграє найменший байт. Стандартні лазівки заборонені.
Тестування
Я написав контролер Python 3 для перевірки записів, оскільки це було б надзвичайно нудно робити вручну. Ви можете знайти його тут . Він підтримує перші три вхідні формати та функції Python 3 (функції інших мов повинні бути загорнуті в програми), усі три вихідні формати та обидва плеєри. Якщо стратегія не виграє, вона виведе програшну гру, яку вона знайшла, тож ви зможете налаштувати програму.
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
Я мав би давно виграти, чи я помиляюся?