นี่เป็นตารางที่แพ้หรือเปล่า?


19

มีเกมชื่อGet Homeที่เล่นบนกระดานหมากรุก ในเกมนี้มีชิ้นส่วนเดียวที่ผู้เล่นทั้งคู่หันกัน มีกฎบางอย่างที่สามารถเคลื่อนย้ายชิ้นส่วนได้ ที่เปิดให้ผู้เล่นจะต้องทำอย่างใดอย่างหนึ่งของการเคลื่อนไหวต่อไปนี้สำหรับบวกn

  • ไม่มีที่ว่างขึ้น

  • ไม่มีช่องว่างทางด้านซ้าย

  • ช่องว่างnขึ้นและไปทางซ้าย (เส้นทแยงมุม)

ผู้เล่นที่ย้ายชิ้นส่วนไปที่มุมซ้ายบนของกระดานชนะเกม

ตอนนี้เราจะกำหนดแนวคิดของสี่เหลี่ยมจัตุรัสที่แพ้ ในวิดีโอนี้ (จากจุดที่ฉันมีความคิด) สี่เหลี่ยมจัตุรัสที่แพ้ถูกกำหนดให้เป็นสี่เหลี่ยมจัตุรัสซึ่งผู้เล่นที่เริ่มต้นเทิร์นของพวกเขาจะถูกบังคับให้ย้ายเพื่อให้คู่ต่อสู้บังคับให้ชนะ ตัวอย่างที่ง่ายที่สุดของสี่เหลี่ยมจัตุรัสที่แพ้คือสี่เหลี่ยมที่ (1,2) ชิ้นส่วนที่ (1,2) สามารถย้ายไปยังสถานที่ต่อไปนี้

ภาพประกอบ

ทั้งหมดนี้มีเส้นทางตรงสู่ชัยชนะสำหรับผู้เล่นคนต่อไป

นอกจากนี้ยังตามด้วยช่องสี่เหลี่ยมใด ๆ ที่มีเส้นทางการเคลื่อนที่หนึ่งเส้นทางไปยังจตุรัสที่แพ้จะอนุญาตให้ผู้เล่นเริ่มต้นบนสี่เหลี่ยมนั้นเพื่อบังคับให้ชนะ ซึ่งหมายความว่าสี่เหลี่ยมจัตุรัสใด ๆ ที่ไม่ได้เคลื่อนย้ายออกไปจากจตุรัสที่แพ้ก็เป็นสี่เหลี่ยมจัตุรัสที่แพ้ด้วย

นี่นำเรามาสู่นิยามที่ค่อนข้างเรียบร้อยของสี่เหลี่ยมจัตุรัสที่แพ้:

สี่เหลี่ยมจัตุรัสที่สูญเสียเป็นสี่เหลี่ยมจัตุรัสซึ่งไม่มีการเคลื่อนที่ใดจะมาถึงสี่เหลี่ยมจัตุรัสอีกอันหนึ่งได้และ (0,0) เป็นสี่เหลี่ยมจัตุรัสที่แพ้

งาน

เมื่อพิจารณาพิกัดของสี่เหลี่ยมจัตุรัสบนกระดานหมากรุกขนาดที่ไม่มีกฎเกณฑ์จะตัดสินว่ามันเป็นสี่เหลี่ยมจัตุรัสที่สูญหายหรือไม่ เอาท์พุทสองค่าหนึ่งสำหรับการสูญเสียสี่เหลี่ยมและหนึ่งสำหรับคนอื่น ๆ

นี่คือดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยไบต์น้อยจะดีขึ้น

กรณีทดสอบ

นี่คือสี่เหลี่ยมที่หายไปทั้งหมดบนกระดานหมากรุก 8 คูณ 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 พิกเซลคูณ 2 พิกเซล)

100 คูณ 100 บอร์ด


2
ฉันไม่คิดว่ามีกรณีทดสอบเพียงพอที่จะหารูปแบบฉันคิดว่าฉันเห็นรูปแบบ แต่ฉันไม่สามารถพูดได้อย่างแน่นอน คือ10, 7สูญเสียตาราง? คือ10, 8อะไร เกี่ยวกับ15, 11อะไร
DJMcMayhem

1
@WheatWizard คุณคิดที่จะทำให้ภาพใหญ่ขึ้นหรือไม่?
Erik the Outgolfer

1
@WheatWizard ฉันหมายถึงพิกเซลที่มีขนาดใหญ่กว่า ... เช่น 5x5 พิกเซลแทน 1x1 อาจเป็นตารางบางส่วนถ้าไม่ยากเกินไป (btw ขอบคุณสำหรับ 100x100)
Erik the Outgolfer

2
ที่เกี่ยวข้องอีกด้วย (คืนการเคลื่อนที่ที่เหมาะสมหรือสัญญาณที่ตำแหน่งกำลังจะสูญเสีย)
Zgarb

1
ฉันคิดว่ามันเป็นเรื่องปกติที่จะอนุญาตให้จุดที่ไม่ถูกต้องลอยตัวเป็นอุปสรรคต่อประสิทธิภาพการทำงานแม้ว่าจะมีความสามารถจำนวนเต็มขนาดใหญ่โดยพล ...
Jonathan Allan

คำตอบ:


8

Python 3 , 112 50 46 42 ไบต์

-4 ไบต์ขอบคุณJonathan Allan !

-2 ไบต์ต้องขอบคุณxnor !

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

ลองออนไลน์!

ขึ้นอยู่กับสูตรสำหรับตำแหน่งที่เย็นในเกมของ Wythoff และทำการปรับเปลี่ยนบางอย่างเพื่อสร้างสูตรที่ชัดเจน คำอธิบายขาเข้าเมื่อฉันเสร็จสิ้นวิธีการที่เหมาะสมสำหรับการได้มาของสูตร


คุณไม่สามารถเปลี่ยน0<=xไปx>0และบันทึกไบต์หรือสอง?
Jonathan Frech

@JonathanFrech มันจะต้องมีอย่างใดอย่างหนึ่ง<=หรือเพื่อที่จะรวมถึงตำแหน่ง>= 0, 0
notjagan

คุณถูกต้องสามารถบันทึกได้หนึ่งไบต์เท่านั้น
Jonathan Frech

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 จาก 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

JavaScript (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

สามารถบันทึกได้อีก 6 ไบต์หาก JS รองรับการผูกมัดการเปรียบเทียบของ Python:

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

0

Pyth, 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

ส่งคืนผ่านรหัสออก คำอธิบาย: เนื่องจากแบทช์มีเลขคณิตจำนวนเต็มเท่านั้นฉันจึงต้องคิดหาวิธีแก้ปัญหาเชิงคณิตศาสตร์อย่างหมดจด หากไม่รวม0,0รายการคู่ของการสูญเสียตารางพิกัดจะปฏิบัติตามกฎต่อไปนี้: ถ้าต่อไป11เลขฐานสองปราศจากแม้แล้วเพิ่มอย่างอื่นเพิ่ม3,2 2,1การทดสอบสำหรับ11เลขฐานสองปราศจากคือถ้าไม่มีการดำเนินเมื่อมันถูกคูณด้วยสามในคำอื่น ๆ (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.