Шашки: Король мене?


14

Виклик:

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

Правила :

Сторона Реда завжди буде знизу, однак їхні шматки можуть починатися в будь-якому ряду (навіть королівському ряду, до якого вони повинні дістатися). Чорні шматки нерухомі , це означає, що вони не рухаються між рухами червоного, але їх знімають з дошки при захопленні. Зауважте, що шматки можуть починатися з будь-якого місця на дошці, включаючи прямо поруч. Це не те, як відтворюються звичайні шашки, але ваша програма повинна вміти їх вирішувати. (Див. Вхід 5) Однак шашки повинні рухатися лише по діагоналі (див. Вхід 3). Зворотне захоплення дозволено, якщо перше захоплення вперед у ланцюжку (див. Вхід 7).

Вхід:

8х8 шахівницька панель з пробілами на дошці, визначеними як наступні символи (не соромтеся використовувати альтернативи, якщо вони відповідають):

. - Порожній

R - Червоний шматок

B - Чорний шматок

Вихід:

Найменша кількість ходів було б взяти червоний шматок , щоб бути «kinged», ввівши рядок короля на верхньому ряду плати ( з боку чорних), 0 , якщо не потрібно ніяких кроків (червона частина почалася в ряду короля), або від'ємне число, якщо неможливо вилучити червоний шматок (тобто чорний займає весь перший ряд).

Введення 1:

. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
R . . . . . . .

Вихід 1:

7

Введення 2:

. . . . . . . .
. . . . . . . .
. . . . . B . .
. . . . . . . .
. . . B . . . .
. . . . . . . .
. B . . . . . .
R . . . . . . .

Вихід 2:

2

Введення 3:

. B . B . B . B
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
R . . . . . . .

Вихід 3:

-1

Введення 4:

. . . . . . . R
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
R . . . . . . .

Вихід 4:

0

Введення 5:

. . . . . . . .
. . . . . . . .
. . . . . . . .
. B . . B . . .
B . . . . B . .
. B . B . . . .
. . B . . B . .
. . . R R . . .

Вихід 5:

4

Введення 6:

. . . . . . . .
. . . . . . . .
. B . . . . . .
. . B . . . . .
. B . B . . . .
. . . . R . . .
. . . B . . . .
. . . . R . . .

Вихід 6:

2

Введення 7:

. . . . . . . .
. . . . . . . .
. . B . . . . .
. . . . . . . .
. . B . . . . .
. B . B . B . .
. . . . B . . .
. . . . . R . R

Вихід 7:

4

Оцінка:

Це , тому найкоротший код у байтах виграє.


1
Чи не повинен другий тестовий випадок бути 2, оскільки ви можете двічі / потрійно стрибати?
Джеймс

Чи в порядку вхідний масив масивів цілих чисел як вхід?
Джонатан Аллан

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

1
@orlp Гм, я збирався сказати, що жоден з червоних шматочків не може рухатися назад, оскільки жоден з них не є королями (звідси суть виклику), але, здається, деякі люди грають з правилами, коли захоплення назад дозволяється не- королівські шматки, якщо перший захоплення було вперед. Я додам це до правил, оскільки я про це раніше не знав.
Йодл

1
ooooooooh, не потрібно вибирати лише одну червону частину, вони можуть об'єднатися! Я розумію
Грег Мартін

Відповіді:


4

JavaScript (ES6), 354 322 байти

Приймає масив як вхід з:

  • 0 = порожній квадрат
  • 1 = червоний шматок
  • 2 = чорний шматок

Повертає оптимальну кількість рухів, або 99, якщо немає рішення.

Це дуже швидко, але можна пограти в гольф набагато більше.

F=(b,n=0,C=-1,i)=>b.map((v,f,X,T,x=f&7,y=f>>3)=>v-1||(y&&n<m?[-9,-7,7,9].map(d=>(N=c=X=-1,r=(d&7)<2,T=(t=f+d)>=0&t<64&&(x||r)&&(x<7||!r)?(!b[t]&d<0)?t:b[t]&1?N:b[t]&2&&(d<0&y>1|d>0&C==f)?(X=t,x>1||r)&&(x<6|!r)&&!b[t+=d]?c=t:N:N:N)+1&&(b[f]=b[X]=0,b[T]=1,F(b,n+!(C==f&c>N),c,1),b[f]=1,b[X]=2,b[T]=0)):m=n<m?n:m),m=i?m:99)|m

var test = [
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,2,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,2,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,2,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,2,0,2,0,2,0,2,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,0,0,0,0,0,0,1,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    1,0,0,0,0,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,2,0,0,2,0,0,0,
    2,0,0,0,0,2,0,0,
    0,2,0,2,0,0,0,0,
    0,0,2,0,0,2,0,0,
    0,0,0,1,1,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,2,0,0,0,0,0,0,
    0,0,2,0,0,0,0,0,
    0,2,0,2,0,0,0,0,
    0,0,0,0,1,0,0,0,
    0,0,0,2,0,0,0,0,
    0,0,0,0,1,0,0,0
  ],
  [ 0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,2,0,0,0,0,0,
    0,0,0,0,0,0,0,0,
    0,0,2,0,0,0,0,0,
    0,2,0,2,0,2,0,0,
    0,0,0,0,2,0,0,0,
    0,0,0,0,0,1,0,1
  ]
];

test.forEach((b, n) => {
  console.log("Test #" + (n + 1) + " : " + F(b));
});


99, мабуть, добре, я не уявляю справжнього рішення, що виконує 99 ходів на дошці 8x8. Хороша робота!
Йодл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.