Шашки шашки


10

Мета цього виклику - визначити, чи є переїзд законним кроком англійської шашки .

У цьому виклику буде використана дошка 8x8. До переміщеного шматка слід ставитися як до людини (а не до короля), яка може рухатись лише по діагоналі вперед. На дошці буде 0 або більше чорних шматочків і 1 або більше білих шматочків. Один білий шматок зараз буде рухатися. Білий шматок може «перестрибнути» по одному чорному шматку по діагоналі перед ним, якщо квадрат прямо за ним порожній. Можна здійснити подальший стрибок з цього положення, якщо перед ним є ще одна чорна деталь у будь-якому напрямку по діагоналі. Захоплення є обов'язковим, тому забороняється виконувати стрибок, який є в наявності. Однак не обов’язково брати шлях, який максимально збільшує кількість стрибків. В основному це означає, що якщо ви зробите стрибок і є інший можливий стрибок з кінця, то цей хід є незаконним. Позиційні позиції використовують таку схему нумерації:

Нумерація шахів


Правила

Вхідні дані:

  • Список номерів, які представляють чорні шматки.

  • Список номерів, які представляють білі шматки.

  • Вихідне положення для білого шматка

  • Кінцеве положення для білого шматка

Вихід:

  • Неправильне значення, якщо хід дійсний, інакше значення фальси


Можна припустити, що білий шматок завжди буде займати вихідне положення.

Якщо зручно, ви можете припустити, що перший білий фрагмент у списку білих шматочків буде містити вихідне положення замість прийняття вводу 3.

Стандартні правила гольфу. Виграє найменше байт.


Випробування

Для ілюстрації, O - вихідне положення, X - кінцеве положення, B - чорні шматки, W - білі шматки

Black pieces: []
White pieces: [5]
Move: (5, 1)
Output: True

Single move no jump
 X _ _ _
O _ _ _ 

B: [6]
W: [9]
M: (9, 2)
O: True

Single jump
 _ X _ _
_ B _ _ 
 O _ _ _

B: [2, 6]
M: (9, 2)
O: False

Illegal ending position on top of black piece
 _ X _ _
_ B _ _ 
 O _ _ _

B: [7, 14]
W: [17]
M: (17, 3)
O: True

Double jump
 _ _ X _
_ _ B _ 
 _ _ _ _
_ B _ _ 
 O _ _ _

B: [7, 14]
M: (17, 10)
O: False

Illegal jump, must take the next jump as well
 _ _ _ _
_ _ B _ 
 _ X _ _
_ B _ _ 
 O _ _ _

B: [4]
W: [8]
M: (8, 3)
O: False

Illegal jump across the board
 _ _ _ X
B _ _ _ 
 O _ _ _


B: [6, 7]
W: [6]
M: (10, 1)
O: True

Split decision p1
 X _ _ _
_ B B _ 
 _ O _ _

B: [6, 7]
M: (10, 3)
O: True

Split decision p2
 _ _ X _
_ B B _ 
 _ O _ _


B: [2]
W: [1]
M: (1, 3)
O: False

Sideways Jump
 O B X _

B: [6]
W: [1]
M: (1, 10)
O: False

Backwards Jump
 O _ _ _
_ B _ _ 
 _ X _ _

B: [6]
W: [9, 2]
M: (9, 2)
O: False

Illegal ending position on top of white piece
 _ X _ _
_ B _ _ 
 O _ _ _

B: []
W: [9, 6]
M: (9, 2)
O: False

Illegal jump over white piece
 _ X _ _
_ W _ _ 
 O _ _ _

B: [8, 15, 23, 24]
W: [27]
M: (27, 4)
O: True


Split decision long path
 _ _ _ X
_ _ _ B 
 _ _ _ _
_ _ B _ 
 _ _ _ _
_ _ B B 
 _ _ W _

B: [8, 15, 23, 24]
W: [27]
M: (27, 20)
O: True

Split decision short path
 _ _ _ _
_ _ _ B 
 _ _ _ _
_ _ B _ 
 _ _ _ X
_ _ B B 
 _ _ W _

3
Я пропоную тестовий випадок, як B=[8,15,23,24];W=[27]з кожним з 1. M=[27,4]і M=[27,20]він дасть зміну напрямку. 2 він відповість на запитання, яке я маю: чи дійсні, чи потрібно тривати довше? ("Захоплення є обов'язковим, тому забороняється виконувати стрибок, який є в наявності", припускає, що обидва є дійсними, хоча я не знаю, чому ви забороняєте не захоплювати, якщо можливо, тому, можливо, ви маєте на увазі взяти за якомога більше творів?)
Джонатан Аллан

Вибачте, я не знаю, як грати в (англійські) шашки . Не заперечуєте додати ще детальну інформацію про законний крок.
tsh

1
Ось короткий виклад тестів у форматі, сприятливому для STDIN.
Арнольд

Захоплення є обов'язковим, тому забороняється виконувати стрибок, який є в наявності. що означає "скокнути"?
Ерік Аутгольфер

1
@JonathanAllan Я думаю, що я вирішив ваше питання у поясненні та додав тестові випадки.
aoemica

Відповіді:


1

Це було складно :) * виправлені помилки (додані байти)

JavaScript (Node.js) , 197 193 191 185 181 186 байт

f=(B,W,S,E,F=1)=>g(S).filter((x,i)=>B[I="includes"](x)&!B[I](t=g(x)[i])&!W[I](t)&&t>0?F+=f(B,W,t,E):0)[0]?F>1:g(S)[I](E)
g=S=>[S--,!(y=~-(e=S-3)/4%2|0)||S%4^3?y?e+1:e:0,S%4||y?y?e:e-1:0]

Спробуйте в Інтернеті!


Я думаю, ви можете використовувати >>2&1замість цього /4%2|0.
Арнольд

Тестова шафа: [10, 3], [14], 14, 7не вдалося.
tsh

@tsh виправлено :), якщо більше тестових випадків не вдалося, дайте мені знати
DanielIndie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.