Проблема:
У шахах є дещо відоме правило щодо малювання шляхом повторення. Якщо однакова позиція повторюється 3 рази (або більше), гравець, який має намір зробити хід, що спричинить це повторення, може вимагати нічиї.
Іноді арбітр може виявити це легке завдання, якщо останні кілька рухів - це лише гравці, які рухаються вперед і вперед. Іноді це менш банально, коли шматки значно перемістилися між повторними положеннями.
Проблема в цьому виклику полягає у виведенні триєтного значення, якщо заявлена позиція витягується шляхом повторення (бачили 3 рази або більше) та значення фальси, якщо заявлена позиція не намальована повтором, з урахуванням переліку ходів у позначенні координат як описано нижче, або будь-яке позначення на ваш вибір (але вам доведеться конвертувати тестові випадки).
Що таке посада?
У реальному сценарії на позицію впливатимуть такі речі, як, наприклад, чи може гравець грати в замок, чи можливий обхід; ви повинні НЕ враховувати їх у вашому рішенні цієї проблеми. У цій проблемі позиція визначається просто конфігурацією частин на дошці. Отже, для цієї проблеми дві позиції вважаються однаковими, якщо кожен квадрат на обох дошках займає один і той же тип шматка одного кольору. Це не повинно бути точним твором, наприклад, білі рицарі можуть міняти квадрати, і якби всі інші шрифти відповідали критеріям, це все одно буде однаковою.
Як виглядає дійсне позначення?
Хоча я продовжуватиму пояснювати позначення координат, ви можете взяти на себе інформацію із обраної вами системи нотацій. За умови, що:
- Кожен елемент нотації описує будь-який або всі: задіяний фрагмент / шматок; чи були доставлені чек, мат, подвійний чек, мат або патч; якщо відбулося безперервне захоплення; вихідне положення; кінцева позиція.
- Ви можете не мати інформації про повторення в нотації.
Поки ці критерії виконуються, я з радістю приймаю, доки ви вказуєте у своїй відповіді, вашу систему нотацій. Це може бути, наприклад, 0 індексованих рядків, кортежів стовпців або будь-якого сенсу для вашої програми.
Позначення координат
Позначення координат - це позначення, яке суто описує рухи як систему координат.
Рух описується як спочатку початкова координата з набору, {A1-H8}
а потім цільова координата знову з того ж набору. Так виглядав Гамбіт короля (як колекція струн)
{"E2-E4","E7-E5","F2-F4"}
Я вважаю, що найкраще позначити цю проблему, оскільки вона не заповнена сторонньою інформацією, наприклад, чи відбулася перевірка чи тип переміщення шматка. Як згадувалося раніше, позначення можуть бути на ваш вибір, тому ви можете використовувати інше позначення, наприклад, алгебраїчне позначення або ви можете адаптувати це позначення (наприклад, видаліть тире або взяти як список кортежів)
Правила:
- Ви повинні НЕ розглянути чи положення або рух дійсно, викликає тільки повторення
- Ви можете припустити, що просування по службі та пішака не відбудеться.
- Ви повинні взяти список рядків як введення та виведення значення truthy або falsey, що відповідає тому, чи відбулося третє (або більше) повторення під час остаточного ходу
- Гра завжди починається зі стандартної вихідної позиції для шахів. Початкова позиція може рахуватися з повторенням.
- Нічия шляхом повторення не відбулося, якщо позиція не повторилася остаточним ходом
Загальні правила:
- Це код-гольф , тому найкоротша відповідь у байтах виграє.
Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування. - Для вашої відповіді застосовуються стандартні правила з правилами вводу / виводу за замовчуванням , тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу повернення. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду (тобто TIO ).
- Також настійно рекомендується додавати пояснення до своєї відповіді.
Випробування
Ви повинні повернути триєдні значення для:
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}
І значення фальси для:
{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}
C6-B8
початкове положення відбулося тричі.