지는 광장인가요?


19

체스 판에서 플레이하는 Get Home 이라는 게임이 있습니다 . 이 게임에는 두 선수가 교대로 한 조각이 움직입니다. 조각을 이동하는 방법에는 몇 가지 규칙이 있습니다. 턴에서 플레이어는 양수 n에 대해 다음 중 하나를 움직여야합니다 .

  • n은 위로

  • 왼쪽에 n

  • n은 위와 왼쪽 (대각선)

조각을 보드의 왼쪽 상단으로 이동 한 플레이어가 게임에서 승리합니다.

이제 우리는지는 사각형의 개념을 정의 할 것입니다. 에서 이 비디오 (나는 생각이있어 곳에서)를 잃고 사각형은 자신의 차례를 시작하는 모든 플레이어가 자신의 상대가 승리를 강제 할 수 있도록 이동을 강요 될에 사각형으로 정의된다. 지는 사각형의 가장 간단한 예는 (1,2)의 사각형입니다. (1,2)의 작품은 다음 장소 중 하나로 이동할 수 있습니다.

삽화

모두 다음 플레이어를위한 승리의 직접적인 길을 가지고 있습니다.

또한 잃어버린 정사각형으로 이동 경로가 하나 인 정사각형 플레이어는 해당 정사각형에서 시작하는 플레이어가 승리를 거둘 수 있습니다. 즉,지는 사각형에서 한 이동 거리가 아닌 사각형도 잃어버린 사각형입니다.

이것은 우리를 잃어버린 사각형의 다소 깔끔한 정의로 이끌어줍니다.

지는 사각형은 다른 잃어버린 사각형으로 이동할 수없는 사각형이며 (0,0)은지는 사각형입니다.

직무

임의의 크기의 체스 판에 사각형의 좌표가 주어지면 그것이 사각형을 잃는 지 여부를 결정합니다. 하나는 제곱을 잃고 다른 하나는 다른 두 값을 출력합니다.

이것은 이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.

테스트 사례

다음은 일반적인 8 x 8 체스 판 (0으로 표시)의 모든 정사각형 사각형입니다.

0 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 1 0
1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 0 1 1 1

다음은 100 x 100 보드의 이미지로 사각형으로 잃어버린 사각형으로 표시됩니다 (각 사각형은 2 픽셀 x 2 픽셀입니다).

100 x 100 보드


2
패턴을 찾기에 충분한 테스트 사례가 없다고 생각합니다. 패턴이 있다고 생각 하지만 확실하게 말할 수는 없습니다. 되어 10, 7지는 광장은? 입니까 10, 8? 무엇에 대해 15, 11?
DJMcMayhem

1
@WheatWizard 이미지를 조금 크게 만드시겠습니까?
아웃 골퍼 에릭

1
@WheatWizard 나는 더 큰 픽셀을 의미했습니다. 예를 들어 1x1 대신 5x5 픽셀, 너무 힘들지 않은 경우 일부 그리드도 가능합니다 (100x100의 경우 btw 감사)
Erik the Outgolfer

2
또한 관련이 있습니다 (최적의 이동을 반환하거나 위치가 손실되었음을 알립니다).
Zgarb

1
부동 소수점 부정확성으로 인해 임의의 큰 정수 기능을 사용하더라도 성능을 방해하는 것이 일반적이라고 생각합니다.
Jonathan Allan

답변:


8

파이썬 3 , 112 50 46 42 바이트

Jonathan Allan 덕분에 -4 바이트 !

xnor 덕분에 -2 바이트 !

lambda r,c:abs(r-c)*(3+5**.5)//2==max(r,c)

온라인으로 사용해보십시오!

Wythoff의 게임에서 차가운 위치에 대한 공식을 기반으로하고 명시 적 공식을 생성하기 위해 약간의 수정을합니다. 공식 도출에 대한 적절한 방법론을 마치면 인바운드 설명.


한두 바이트로 변경 0<=x하여 x>0저장할 수 없습니까?
Jonathan Frech 2012 년

@JonathanFrech position을 포함 <=시키거나 >=포함해야합니다 0, 0.
notjagan

맞습니다. 1 바이트 만 저장할 수 있습니다.
Jonathan Frech 2012 년

1
동일한 구현의 다른 바이트 :lambda r,c:int(abs(r-c)*(5**.5+1)**2/4)==max(r,c)
Jonathan Allan

1
/2//1와 동일하게 보입니다 //2.
xnor

5

젤리 , 8 바이트

ạ/×ØpḞ⁼Ṃ

온라인으로 사용해보십시오! 또는 왼쪽 상단 60 x 60을 격자 로 참조하십시오.

어떻게?

Wythoff의 게임 에서 차가운 위치 는지는 위치입니다. 좌표는 [n,m]경우 초기 위치를 제공 n = floor(kφ) = floor(mφ) - m하거나 m = floor(kφφ) = ceil(nφ) = n + k약간의 자연수, k, 및 황금비 φ. 전자 n는 다음보다 작을 때 유지합니다 m. 후자 m는보다 작을 때 n(모두에서 유지 0,0).

k차의 절대 값이다 따라서 n하고 m그리고 만약 floor(abs(n-m)φ)=min(n,m)조건이 충족된다.

ạ/×ØpḞ⁼Ṃ - Link: list, c ([n,m])
 /       - reduce c by:
ạ        -   absolute difference = abs(n-m)
   Øp    - golden ratio yield
  ×      - multiply
     Ḟ   - floor
       Ṃ - minimum of c = min(n,m)
      ⁼  - equal?

2

자바 스크립트 (ES6), 64 바이트

f=(x,y,p=5**.5/2+.5)=>x<y?f(y,x):y/p%p<1&(y/p%p-x*p%++p)**2<1e-9

나는 이것이 최선의 기술이 아니라는 것을 알지만이 페이지를로드 한 직후 인터넷을 잃어 버렸기 때문에 스스로 알아 내야했다. (이 인터넷 문제가 아니라면 얼마 전에 게시했을 것입니다 ...)

완벽한 세계에서 부동 소수점 정밀도는 문제가되지 않으며 9 바이트를 절약 할 수 있습니다.

f=(x,y,p=5**.5/2+.5)=>x<y?f(y,x):y/p%p<1&y/p%p==x*p%++p

JS가 Python의 비교 체인을 지원하면 6 바이트를 더 절약 할 수 있습니다.

f=(x,y,p=5**.5/2+.5)=>x<y?f(y,x):y/p%p==x*p%++p<1

0

피 이스, 39 바이트

=SQL?!b0-byytb;q@myd+0.fqyZytZ@Q1)-F_Qh

나는 이것을 명명 된 함수 (ew)로 작성했으며 골프에는 극도로 게으르다. 오늘 밤 꽤 많은 바이트를 골라 낼 계획

True / False를 대체하기 위해 자체적으로 생성 한 테스트로 온라인에서 사용해보십시오.

설명:

솔루션 매트릭스의 대각선은 OEIS A005206 에서 반복되는 숫자의 순서에 따라지는 사각형을 갖습니다 . L처음 부터 ;끝까지 정의하는 것은 매우 간단한 폴란드어 표기법 y(b)=b-y(y(b-1))입니다.

나머지 설명은 다음과 같습니다.

=SQL?!b0-byytb;q@myd+0.fqyZytZ@Q1)-F_Qh    Full program, take stdin as [x, y], output True or False to stdout
=SQ                                        Sort input
   L?!b0-byytb;                            Named lambda as explained above
                    +0.f                   Make sequence of first max(x, y) numbers, starting with 0, 
                        qy y               For which are equal 
                          Z tZ             each element and the previous are equal
                myd                        Map this sequence to the y(index), not just index numbers
             q                             Check if are equal 
              @                  )-F_Q     the x-yth element of sequence (x-y represents which diagonal) 
                                     h(Q)  and the lower of [x,y] (Q is added by the interpreter to fix arity issues

0

배치, 204 바이트

@if %1 lss %2 %0 %2 %1
@if %1==0 exit/b0
@set/au=l=i=0
:g
@set/au+=2+i%%2,l+=1+i%%2
@if %1==%n% if %2==%m% exit/b0
@if %1 leq %n% exit/b1
:l
@set/a"k=3*i^2*i^i,i+=1
@if %k%==0 goto g
@goto l

종료 코드를 통해 반환합니다. 설명 : Batch에는 정수 산술 만 있기 때문에 순수하게 산술 솔루션을 고안해야했습니다. 0,0항목을 제외하고 , 손실되는 제곱 좌표 쌍은 다음 규칙을 따릅니다. 다음 11무료 이진수가 짝수이면 add를 추가 3,2하십시오 2,1. 11프리 이진수에 대한 테스트 는 3을 곱한 경우에 캐리가없는 경우입니다 (i*2)+i==(i*2)^i. 처음 몇 개의 11프리 바이너리 숫자와 그 좌표는 다음과 같습니다.

   0     2,1  + 3,2 =  5,3
   1     5,3  + 2,1 =  7,4
  10     7,4  + 3,2 = 10,6
 100    10,6  + 3,2 = 13,8
 101    13,8  + 2,1 = 15,9
1000    15,9  + 3,2 = 18,11
1001    18,11 + 2,1 = 20,12
1010    20,12 + 3,2 = 23,14

신비하게도이 규칙은 시퀀스를 보완하기에 충분합니다. 그런 다음 더 큰 좌표에 도달 할 때까지 시퀀스를 계속 계산하여 정사각형이 손실되는지 여부를 확인할 수 있습니다.

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