Leapers를 찾는


19

나는 최근에 정말 이상한 불규칙한 체스 판을 얻었다. 그것은 사각형이 모든 곳에 있으며 심지어 모든 연결도 아닙니다. 적어도 그들은 여전히 ​​규칙적인 그리드에 배치되어 있습니다. 나는 체스 규칙을 보드에서 재생할 수 있도록 조정하고 싶지만, 우선 보드의 어느 곳으로나 갈 수있는 조각이 필요합니다. 리퍼가 최선의 방법입니다.

Leapers 는 기사의 요정 체스 일반화입니다. 리프 퍼는 2 개의 정수 mn 으로 매개 변수화되며 한 방향으로 m 제곱을 이동 한 다음 수직 방향으로 다른 n 제곱을 이동할 수 있습니다 . 표준 기사의 경우 (m, n) = (2, 1) 입니다. 전체 이동은 한 번의 점프로 간주되어 대상으로가는 사각형이 비어 있거나 존재하지 않아도됩니다.

도전

보드의 일부인 정사각형을 나타내는 양의 2D 정수 좌표 목록의 형태로 "체스 보드"가 제공됩니다. 당신의 임무는 충분한 움직임이 주어지면 보드의 모든 사각형에 도달 할 수있는 도약을 찾는 것입니다.

몇 가지 예를 살펴 보겠습니다. 표준 체스 판은 8x8 정사각형의 규칙적인 그리드를 사용합니다 (이 도전에 대해 흰색과 검은 색 사각형을 구분하지 않음에 유의하십시오).

########
########
########
########
########
########
########
########

표준 기사는 그 모든 것에 도달 (2, 1)할 수 있으므로 유효한 결과가 될 것입니다. 그러나 (1, 1)예를 들어, 해당 조각은 시작 위치에 관계없이 사각형의 절반에만 도달 할 수 있으므로 유효하지 않습니다. (1, 0)반면에 모든 사각형이 직교로 연결되어 있기 때문에 유효한 출력이 될 수도 있습니다.

이제 불규칙한 보드가 있다면 :

#   #
 # # #
  # # #
 # #
    #

그리고 가능한 솔루션입니다 (1, 1)(3, 1). 또한 다음과 같이 완전히 분리 된 지역이있는 보드를 가질 수도 있습니다.

#### ####
#### ####
#### ####
#### ####

표준 기사 (2, 1)는 여전히 모든 사각형에 도달 할 수 있으며 실제로 유일한 해결책입니다.

마지막으로, 어떤 간단한 선수도 다음과 같은 간단한 보드에 완전히 도달 할 수 없습니다.

#
 ##

입력 형식은 ASCII 표현이 아니라 좌표 목록이됩니다. 예를 들어 위의 두 번째 예는 다음과 같습니다.

[[1, 1], [5, 1], [2, 2], [4, 2], [6, 2], [3, 3], [5, 3], [7, 3], [2, 4], [4, 4], [5, 5]]

규칙

STDIN (또는 가장 가까운 대안), 명령 행 인수 또는 함수 인수를 통해 입력을 받고 STDOUT (또는 가장 가까운 대안), 함수 리턴 값 또는 함수 (out) 매개 변수를 통해 결과를 출력하는 프로그램 또는 함수를 작성할 수 있습니다.

입력 좌표는 편리한 목록 형식 (플랫 목록, 쌍 목록, 복잡한 정수 목록, 일관된 구분 기호가있는 문자열 등)으로 가져올 수 있습니다.

결과는 솔루션이 존재하는 경우 (리퍼, 비 숫자 구분 기호가있는 문자열 등의 두 개의 정수로) 리프 퍼를 식별 하는 두 개의 정수 mn 이어야합니다 . 솔루션이 존재하지 않는 경우 유효한 값을 가질 수없는 일관된 값을 출력 할 수 있습니다. 여기에는 (0, 0)일반 형식 의 정수 쌍과 음이 아닌 정수 쌍이 아닌 모든 항목이 포함됩니다.

프로그램은 1 분 안에 모든 테스트 사례를 처리해야합니다 . 이것은 다소 모호한 제한이지만 상식을 사용하십시오. 컴퓨터에서 2 분이 걸리면 다른 사람의 경우 1 내에서 실행될 수 있다고 가정 할 수 있지만 20이 걸리면 덜 가능성이 있다고 생각합니다. 몇 초 만에 각 테스트 사례를 해결하는 것이 어렵지 않으므로이 규칙은 순진한 무차별 대입을 배제하는 역할을합니다.

표준 규칙이 적용됩니다.

테스트 사례

각 테스트 케이스는 형식 board => all valid leapers입니다. 그중 하나만 출력하면됩니다. 리프 퍼 목록이 비어 있으면 유효한 리프 퍼가 아닌 것을 반환해야합니다 .

Examples above:
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [2, 8], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [4, 8], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [6, 8], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7], [7, 8], [8, 1], [8, 2], [8, 3], [8, 4], [8, 5], [8, 6], [8, 7], [8, 8]] => [[0, 1], [1, 2], [1, 4], [2, 3], [3, 4]]
[[1, 1], [5, 1], [2, 2], [4, 2], [6, 2], [3, 3], [5, 3], [7, 3], [2, 4], [4, 4], [5, 5]] => [[1, 1], [1, 3]]
[[1, 1], [2, 2], [3, 2]] => []
[[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4], [6, 1], [6, 2], [6, 3], [6, 4], [7, 1], [7, 2], [7, 3], [7, 4], [8, 1], [8, 2], [8, 3], [8, 4], [9, 1], [9, 2], [9, 3], [9, 4]] => [[1, 2]]

Square boards:
[[1, 1], [1, 2], [2, 1], [2, 2]] => [[0, 1]]
[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]] => [[0, 1]]
[[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4]] => [[0, 1], [1, 2]]
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5]] => [[0, 1], [1, 2]]
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6]] => [[0, 1], [1, 2], [2, 3]]
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [2, 7], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [7, 1], [7, 2], [7, 3], [7, 4], [7, 5], [7, 6], [7, 7]] => [[0, 1], [1, 2], [2, 3]]

Miscellaneous:
[[1, 1], [2, 1]] => [[0, 1]]
[[1, 1], [1, 2]] => [[0, 1]]
[[1, 1], [12, 35]] => [[11, 34]]
[[1, 1], [1, 2], [2, 1], [2, 2], [6, 1], [6, 2], [6, 3], [6, 4], [7, 1], [7, 2], [7, 3], [7, 4], [8, 1], [8, 2], [8, 3], [8, 4], [9, 1], [9, 2], [9, 3], [9, 4]] => []
[[1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5], [2, 6], [3, 1], [3, 2], [3, 5], [3, 6], [4, 1], [4, 2], [4, 5], [4, 6], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6]] => [[0, 1], [1, 2], [1, 4]]
[[2, 2], [2, 4], [2, 6], [2, 8], [4, 2], [4, 4], [4, 6], [4, 8], [6, 2], [6, 4], [6, 6], [6, 8], [8, 2], [8, 4], [8, 6], [8, 8]] => [[0, 2], [2, 4]]

Random boards:
[[1, 5], [1, 9], [2, 6], [2, 8], [2, 10], [2, 12], [3, 5], [3, 7], [3, 9], [3, 11], [3, 13], [4, 2], [4, 4], [4, 6], [4, 8], [4, 14], [5, 1], [5, 3], [5, 5], [5, 7], [6, 2], [6, 4], [7, 1], [8, 2]] => [[1, 1], [1, 3]]
[[1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [2, 1], [2, 2], [2, 3], [2, 4], [2, 7], [3, 1], [3, 2], [3, 3], [3, 4], [3, 6], [3, 7], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [5, 3], [5, 4], [5, 6]] => [[0, 1], [1, 2]]
[[1, 8], [2, 6], [2, 10], [3, 3], [3, 4], [3, 8], [4, 1], [4, 11], [5, 3], [5, 9], [6, 12], [8, 11], [10, 10], [11, 12], [12, 6], [12, 8], [13, 6], [13, 8], [13, 10], [13, 11], [14, 5], [14, 7], [14, 8], [14, 13], [14, 14], [15, 7], [15, 9], [15, 11], [15, 12], [16, 6], [16, 7], [16, 9], [16, 13], [16, 14], [17, 10], [17, 12], [18, 8], [18, 12], [20, 9], [21, 11], [22, 13], [23, 10], [23, 11], [23, 15], [24, 12]] => [[1, 2]]
[[1, 17], [1, 21], [3, 11], [3, 15], [3, 19], [3, 23], [5, 13], [5, 21], [7, 11], [7, 15], [7, 19], [9, 1], [9, 13], [9, 17], [11, 3], [11, 7], [11, 15], [11, 19], [13, 5], [13, 9], [13, 13], [13, 17], [13, 21], [15, 11], [15, 15], [15, 19], [17, 13], [17, 17]] => [[2, 2], [2, 6], [2, 10]]
[[1, 3], [2, 4], [2, 5], [3, 6], [4, 1], [5, 3], [5, 6], [5, 7], [6, 12], [6, 14], [6, 21], [7, 9], [7, 19], [8, 9], [8, 15], [8, 17], [8, 18], [8, 24], [9, 12], [9, 19], [10, 12], [10, 14], [10, 17], [10, 21], [11, 22], [12, 15], [12, 17], [12, 24], [13, 16], [14, 20], [14, 21], [14, 26], [15, 13], [15, 19], [16, 18], [16, 23], [17, 16], [17, 24]] => [[2, 3]]
[[1, 11], [3, 13], [4, 10], [6, 14], [8, 12], [9, 9], [9, 15], [12, 8], [13, 5], [13, 19], [13, 21], [14, 8], [15, 1], [15, 17], [16, 4], [16, 14], [16, 18], [16, 20], [17, 21], [18, 2], [18, 16], [18, 18], [19, 9], [19, 13], [19, 15], [20, 12], [21, 1], [21, 17], [22, 4], [22, 10], [23, 7]] => [[1, 3]]
[[1, 39], [6, 37], [8, 32], [10, 27], [11, 31], [11, 35], [12, 22], [16, 21], [16, 29], [16, 33], [18, 34], [21, 3], [21, 9], [21, 19], [23, 8], [23, 14], [23, 22], [23, 24], [23, 36], [24, 6], [25, 13], [25, 17], [26, 1], [26, 11], [28, 6], [28, 20], [28, 26], [28, 30], [28, 34], [30, 11], [30, 15], [30, 21], [32, 6], [33, 28], [33, 32], [35, 13], [35, 23]] => [[2, 5]]

특별한 경우, 단 하나의 셀로 구성된 보드의 경우 모든 Leper가 작동하지만 출력은 실제 Leper와 일치해야하므로 [0, 0]유효한 출력이 아닙니다.


빠른 질문. 기사는 (2,1)어때? 내가 틀렸다면 나를 수정하지만 기사는 한 방향으로 3 정사각형을 움직일 수 있으며 이전 방향과 직교하는 방향으로 1 정사각형을 움직일 수 있다고 확신합니다 (3,1).
R. Kap

1
@ R.Kap 잘못되었습니다. ;) en.wikipedia.org/wiki/Knight_(chess)#Movement
DLosc

@DLosc Ok, 와우. 내가했던 것 같아 고마워요!
R. Kap

유효한 모든 도약자를 목록으로 출력 할 수 있습니까? 만약 그렇다면, 우리는 [[1, 0], [0, 1]]?
FryAmTheEggman

@FryAmTheEggman 그냥 그들 중 하나입니다.
Martin Ender

답변:


12

피스, 41 35

hfqQu@+G+VM*s_BM*F_BMTGQ]hQ)maVhQdt

유효한 leapers가 없으면 오류가 발생하고 STDERR을 무시하면 빈 문자열을 제공합니다.

여기에서 시도 하거나 테스트 스위트를 실행 하십시오.

isaacg 덕분에 6 바이트를 절약했습니다 ! 기본적으로 첫 번째 타일에서 서로 다른 타일로 유효한 각 leaper를 선택하여 모든 leaper 후보를 찾습니다. 그런 다음, 각각에 대해, [x, y]선수가 취할 수있는 8 가지 오프셋 구성을 모두 만듭니다 . 그런 다음 이동 이후에 오는 첫 번째 타일에서 시작하여 모든 이동을 찾고 입력에없는 이동을 버립니다. 결과가 변경되지 않을 때까지이 작업을 계속 수행합니다. 이 최종 목록이 입력 값과 동일하면 윤이 유효합니다.

표준 체스 보드는 테스트 할 때 가장 오래 걸리고 인상적이지 않은 컴퓨터에서 약 3 초가 걸렸습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.