체커 : 킹 미?


14

도전:

바둑판이 주어지면 가능한 한 빨간색 조각을 만들기 위해 가장 적은 양의 움직임 (검정색이 전혀 움직이지 않는다고 가정)을 출력하십시오.

규칙 :

레드의 측면은 항상 바닥에 있지만 조각은 모든 행에서 시작할 수 있습니다 (왕의 행조차도 도달해야 함). 검은 색 조각은 고정 되어있어 빨간색의 움직임 사이에서 움직이지 않지만 캡처되면 보드에서 제거됩니다. 조각은 서로 바로 옆을 포함하여 보드의 모든 공간에서 시작할 수 있습니다 . 이것은 정상적인 체커가 재생되는 방식이 아니지만 프로그램에서 이러한 문제를 해결할 수 있어야합니다. (입력 5 참조) 그러나 체커 조각은 대각선으로 만 움직여야합니다 (입력 3 참조). 체인에서 첫 번째 캡처가 전달되면 뒤로 캡처가 허용됩니다 (입력 7 참조).

입력:

보드 공간이 다음 문자로 정의 된 8x8 바둑판 (일관된 대안을 자유롭게 사용하십시오) :

. -비우기

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가 아니어야합니까?
제임스

정수 배열의 상태 배열이 입력으로 정상입니까?
Jonathan Allan

1
어려운 것으로 입증 된 다른 테스트 케이스를 추가했습니다. 최상의 솔루션을 달성하기 위해 여러 번의 점프, 여러 조각 및 뒤로 점프가 포함됩니다.
orlp

1
@orlp 흠, 나는 빨간 조각 중 어느 것도 왕이 아니기 때문에 뒤로 움직일 수 없다고 말하려고했지만 (따라서 도전의 요점), 일부 사람들은 거꾸로 캡처가 허용되지 않는 규칙을 가지고 노는 것처럼 보입니다. 첫 번째 포획이 진행되면 나는 이것을 전에 알지 못했기 때문에 규칙에 추가 할 것입니다.
Yodle

1
ooooooooh, 당신은 단 하나의 빨간 조각을 선택할 필요가 없습니다, 그들은 팀을 구성 할 수 있습니다! 알 겠어요
Greg Martin

답변:


4

자바 스크립트 (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는 아마 괜찮을 것입니다 .8x8 보드에서 99 개의 움직임을 취하는 실제 솔루션을 상상할 수 없습니다. 좋은 작업!
Yodle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.