Knight on the Rim คือ Grim


48

บทนำ

Aron Nimzowitsch เป็นหัวหน้าหมากรุกชั้นนำและเป็นนักเขียนหมากรุกที่มีอิทธิพล

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

สิ่งนี้ชัดเจนมากเมื่อมองที่ตำแหน่งต่าง ๆ ของอัศวินและการเคลื่อนไหวครั้งต่อไปของมัน (แสดงเป็นสีชมพู) บนกระดานเปล่า:

ป้อนคำอธิบายรูปภาพที่นี่

วัตถุประสงค์

ประเมินจำนวนของการเคลื่อนไหวถัดไปที่อาจเกิดขึ้นโดยตรงของอัศวินบนกระดานเปล่าตามตำแหน่งของมัน

ข้อมูลจำเพาะอินพุต

ตำแหน่งของอัศวิน

ก่อน x (คอลัมน์) แล้ว y (แถว) 0 0เป็นมุมล่างซ้าย

เพื่อความง่ายฉันเปลี่ยนฉลากของกระดานหมากรุกเป็นตัวเลขเท่านั้น สำหรับตัวอย่างและกรณีทดสอบของเราเราใช้ดัชนีแบบ 0 คุณมีอิสระที่จะใช้ดัชนีแบบ 1

คุณสามารถใช้รูปแบบอินพุตที่เป็นไปได้อาเรย์อาร์กิวเมนท์ของฟังก์ชันใด ๆ ก็ได้

รายละเอียดผลผลิต

จำนวนของการเคลื่อนไหวถัดไปที่อาจเกิดขึ้นโดยตรงสำหรับอัศวินบนกระดานว่าง

กรณีทดสอบ

3 4 => 8
4 6 => 6
7 7 => 2
1 0 => 3

กรณีทดสอบกำลังใช้ดัชนีแบบ 0 กริดเต็มของค่าคือ:

2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2

9
ความท้าทายแรกที่ดี! :-)
Luis Mendo

14
"Knight on the rim is grim"

2
@stacey ความคิดเห็นของคุณจะได้รับชื่อที่ดีสำหรับปริศนานี้ :)
starcorder

6
ตอนนี้สำหรับคำถามที่ยากจริงๆ : อัศวินสีแดงในภาพด้านบนมีสีเดียวกันทั้งหมดหรือไม่?
mbomb007

คำตอบ:


25

Python 2 , 35 ไบต์

lambda x,y:50/(8+x*x/7-x+y*y/7-y)-4

ลองออนไลน์!


Python 2 , 39 ไบต์

lambda x,y:50/(8-x*(7-x)/5-y*(7-y)/5)-4

ลองออนไลน์!

รับอินพุต 0-indexed

นิพจน์x*(7-x)/5ใช้ค่าพิกัด0..7เป็น

[0, 1, 2, 2, 2, 2, 1, 0]

( min(x,7-x,2)ทำเหมือนกัน แต่ยาวกว่า) รวมสิ่งนี้ไว้xและyให้รูปแบบที่ถูกต้อง แต่ด้วยตัวเลขที่ไม่ถูกต้อง

0 1 2 2 2 2 1 0
1 2 3 3 3 3 2 1
2 3 4 4 4 4 3 2
2 3 4 4 4 4 3 2
2 3 4 4 4 4 3 2
2 3 4 4 4 4 3 2
1 2 3 3 3 3 2 1
0 1 2 2 2 2 1 0

(ดูวิธีแก้ปัญหาของนีลเพื่อเหตุผลที่ดีกว่าว่าทำไมเรื่องนี้ถึงเกี่ยวกับรูปแบบที่ถูกต้อง)

ในที่สุดการทำแผนที่a -> 50/(8-a)-4กับการแบ่งชั้นให้ค่าที่เหมาะสม

2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2

ทางเลือกทางยาวเท่ากันพร้อมอินพุต 1 ที่จัดทำดัชนี

lambda x,y:(x*(9-x)/6+y*(9-y)/6)**2/6+2

(7-a)*a/5คือ 3 min(a,7-a,2)ไบต์สั้นกว่า
Neil

1
*lที่จริงแล้วคุณเสียค่าใช้จ่ายโดยรวมของไบต์lambda a,b:"23468"[(7-a)*a/5+(7-b)*b/5]เพียง 41 ไบต์เท่านั้น
Neil

@ Neil ฉันเพิ่งพบสิ่งเดียวกันกับx*(9-x)/6หนึ่งดัชนี
xnor

1
ทำไมคุณไม่ใช้<strike>เหมือนคนอื่น ๆ เพื่อแสดงความคืบหน้าการเล่นกอล์ฟ?
บ้า

4
@ บ้าฉันคิดว่ามันดูน่าเกลียดและไม่ได้ช่วยจริงๆ รหัสเป็นสิ่งสำคัญและทุกคนที่ต้องการเห็นวิวัฒนาการของมันยังคงต้องดูในประวัติการแก้ไข เมื่อรหัสเก่าของฉันจะแตกต่างกันมากพอที่จะคุ้มค่าการแสดงผมแสดงรุ่นเหมือนที่นี่ แต่สำหรับคำถามนี้มันเป็นการปรับปรุงเล็กน้อยทั้งหมดในกลยุทธ์เดียวกันดังนั้นฉันจึงพบว่ามันสะอาดกว่าที่จะพูดถึงความเป็นไปได้ที่แตกต่างกัน
xnor

17

MATL , 17 14 13 12 ไบต์

ขอบคุณ @Neil สำหรับการปิด 1 ไบต์!

8:HZ^ZP5X^=s

อินพุตเป็นแบบอิง 1

ลองออนไลน์!

คำอธิบาย

สิ่งนี้คำนวณระยะทางแบบยุคลิดจากอินพุตไปยังแต่ละตำแหน่ง 64 ตำแหน่งในกระดานหมากรุกและพบว่าค่าเหล่านั้นมีค่าเท่ากันเป็นรากที่สองของ 5

เนื่องจากพิกัดเป็นค่าจำนวนเต็มเราจึงมั่นใจได้ว่าค่าทศนิยมสองค่าที่เป็นตัวแทนสแควร์รูทของ 5 (ที่คำนวณจากพิกัดและคำนวณโดยตรง) จึงเหมือนกัน

8:      % Push array [1 2 ... 8]
H       % Push 2
Z^      % Cartesian power. Gives 2D array [1 1; 1 2; ... 1 8; 2 1; ... 8 8]     
ZP      % Implicit input. Compute Euclidean distances, considering each row as a point
5X^     % Square root of 5
=s      % Compute how many squared distances equal sqrt(5). Implicit display

1
ประทับใจและขอบคุณสำหรับคำอธิบาย
starcorder

1
หากการเปรียบเทียบสแควร์รูทของสแควร์รูทของ 5 ถึง 5 ล้มเหลวเนื่องจากข้อผิดพลาดในการปัดเศษคุณไม่สามารถเปรียบเทียบสแควร์รูทของ 5 กับสแควร์รูทของ 5 ได้หรือไม่?
Neil

@ Neil ขอบคุณสำหรับความคิด! ใช่เนื่องจากการคำนวณมีจำนวนเต็มฉันสามารถมั่นใจได้ว่า "รากของ 5" สองตัวเป็นdoubleหมายเลขเดียวกัน Ant ช่วยประหยัดไบต์
Luis Mendo

15

Mathematica 63 43 ไบต์

ด้วย 20 ไบต์ที่บันทึกไว้ขอบคุณคำแนะนำโดย Martin Ender!

EdgeCount[8~KnightTourGraph~8,#+1+8#2/<->_]&

ด้านบนจะค้นหาจำนวนของช่องสี่เหลี่ยมที่อยู่ห่างออกไป 1 ช่องจากเซลล์ที่กำหนดบนกราฟทัวร์อัศวินที่สมบูรณ์


g=KnightTourGraph[8,8,VertexLabels->"Name",Axes->True]

แสดงกราฟทัวร์อัศวินที่สมบูรณ์พร้อมชื่อจุดสุดยอดและพิกัด โปรดทราบว่า Mathematica จะใช้ค่าเริ่มต้นเป็นดัชนีแบบอิงฐานเดียวสำหรับพิกัด

กราฟ


#+1+8#2&[r,f]การแปลงคืนจุดยอดที่สอดคล้องกับตารางที่อันดับ (แถว) rและไฟล์ (คอลัมน์) fโดยใช้ค่า zero-based เป็นอินพุต

ตัวอย่างเช่น#+1+8#2&[2,1]ส่งคืน 11


EdgeCount ให้จำนวนขอบในกราฟย่าน


ขอบสำหรับอันดับ 2 ไฟล์ 1 (ตาราง 11):

IncidenceList[8~KnightTourGraph~8, 8 #2 + # + 1] &[2, 1]

(*{1 <-> 11, 5 <-> 11, 11 <-> 17, 11 <-> 21, 11 <-> 26, 11 <-> 28}*)

ขอบที่ไฮไลต์:

HighlightGraph[g, {1, 5, 11, 17, 21, 26, 28, Style[1 <-> 11, Thick, Blue], Style[5 <-> 11, Thick, Blue], Style[11 <-> 17, Thick, Blue], Style[11 <-> 21, Thick, Blue], Style[11 <-> 26, Thick, Blue], Style[11 <-> 28, Thick, Blue]},GraphHighlightStyle -> "DehighlightFade", PlotRangePadding -> .5]

ไฮไลท์


วิธีที่ 2: ระยะทางแบบยุคลิด

70 ไบต์

วิธีนี้ใช้เวลานานกว่า แต่อาจเป็นที่สนใจ วิธีการคือการตรวจสอบระยะทางแบบยุคลิดระหว่างศูนย์กลางกระดานหมากรุกและเซลล์ที่น่าสนใจ

Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&

ตัวอย่าง

Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&@{0, 0}
Which[(x=Sqrt@Tr[({3.5, 3.5}-#)^2])<2.2,8,x<3,6,x<4,4,x<4.6,3,x>4.6,2]&@{3, 3}

2

8


เพื่อช่วยให้เห็นภาพว่าระยะทางจากศูนย์กลางของกระดานหมากรุกเพียงพอสำหรับการกำหนดค่าอย่างไร

values={{2,3,4,4,4,4,3,2},{3,4,6,6,6,6,4,3},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{4,6,8,8,8,8,6,4},{3,4,6,6,6,6,4,3},{2,3,4,4,4,4,3,2}};
f[x_]:=Text[x,#]&/@Position[values,x]r_~w~p_:=RegionMember[{3.5`,3.5`}~Disk~r,p]
h@y_:=Which[2.2~w~y,8,3~w~y,6,4~w~y,4,4.6~w~y,3,2<3,2]

Graphics[{Circle[{4.5, 4.5}, 2.3], Circle[{4.5, 4.5}, 3], 

แวดวง [{4.5, 4.5}, 4],

Circle [{4.5, 4.5}, 4.6], แผ่ [f / @ {2, 3, 4, 6, 8}, 1]}, Axes -> True, AxesOrigin -> {-1, -1}]


ตัวเลข 2.2, 3, 4 และ 4.6 เป็นรัศมีของวงกลม

ภาพ


1
กราฟท่องเที่ยวที่ยอดเยี่ยม
ดารานักแสดง

20
KnightTourGraphMathematica และ builtins ของมัน ... :-)
Luis Mendo

ฉันคิดว่ามีการหลงทาง#ในตอนท้ายของซอร์สโค้ดของคุณ (ก่อนหน้านี้]) คุณควรใช้IncidenceListแทนEdgeList@NeighborhoodGraphได้ (หรือมิฉะนั้นก็มีEdgeCountแต่ฉันคิดว่ามันจะนานขึ้น)
Martin Ender

1
โอ้เดี๋ยวก่อนมันสั้นกว่าจริงๆ:EdgeCount[8~KnightTourGraph~8,#+1+8#2<->_]&
Martin Ender

EdgeCountเจ๋งมาก!
DavidC

12

JavaScript (ES6), 38 ไบต์

(x,y)=>+"23468"[((7-x)*x+(7-y)*y)/5|0]

รับอินพุต 0 ดัชนี คำอธิบาย: ดูสี่เหลี่ยมของระยะทางไปยังศูนย์กลาง:

24.5 18.5 14.5 12.5 12.5 14.5 18.5 24.5
18.5 12.5  8.5  6.5  6.5  8.5 12.5 18.5
14.5  8.5  4.5  2.5  2.5  4.5  8.5 14.5
12.5  6.5  2.5  0.5  0.5  2.5  6.5 12.5
12.5  6.5  2.5  0.5  0.5  2.5  6.5 12.5
14.5  8.5  4.5  2.5  2.5  4.5  8.5 14.5
18.5 12.5  8.5  6.5  6.5  8.5 12.5 18.5
24.5 18.5 14.5 12.5 12.5 14.5 18.5 24.5

จำนวนของช่องสี่เหลี่ยมที่เข้าถึงได้นั้นแบ่งออกเป็นห้าแถบ:

8    0-5
6    5-10
4   10-15
3   15-20
2   20-25

ฉันคำนวณ 24.5 - (3.5 - x) ** 2 - (3.5 - y) ** 2 = (7 - x) * x + (7 - y) * y เพราะมันเป็นการคำนวณที่สั้นกว่า แต่ทั้งหมดจะย้อนกลับ คำสั่งของวงดนตรี


วิธีการกระชับและดีเยี่ยมมากดังนั้นฉันไม่ต้องเริ่มโซลูชัน JS ของตัวเองอีกต่อไป :)
starcorder

จุดที่ดีเกี่ยวกับสูตรเทียบเท่ากับรัศมีกำลังสอง ฉันคิดว่าx*(7-x)เป็นเพียงการดำเนินการที่ดูเหมือนเป็นส่วนโค้งลง0..7และเกิดขึ้นกับเส้นโค้งที่พอดี แต่สิ่งนี้อธิบายได้ว่าทำไมมันจึงสร้างรูปแบบที่สวยงามเมื่อรวมเข้าด้วยกันxและ y
xnor

11

เยลลี่ 10 ไบต์

8ṗ2_³²S€ċ5

1 การจัดทำดัชนี [x,y]ใช้อาร์กิวเมนต์เดียวของแบบฟอร์ม ลองที่นี่

8ṗ2          Cartesian square [[1,1],[1,2]…[8,8]]
   _³        Subtract the input
     ²S€     Compute the norm of each vector
        ċ5   Count fives

เดนนิสบันทึกไบต์!


เพียงสิบเอ็ดไบต์ว้าว!
starcorder

ฉันเห็นคำถามนี้ในตอนเช้าและนี่เป็นอัลกอริทึมที่แน่นอนที่ฉันคิดว่าฉันจะนำไปใช้ในเยลลี่เมื่อฉันมีเวลา : P
PurkkaKoodari

8

Mathematica, 44 40 ไบต์

ขณะนี้ฉันมีวิธีแก้ปัญหาสามข้อด้วยจำนวนไบต์เดียวกัน:

2[3,4,6,8][[Tr@⌊3.2-.8Abs[#-4.5]⌋]]&
Tr@⌈.85(4-Abs[#-4.5])⌉/.{5->6,6->8}&
⌊Tr@⌈.85(4-Abs[#-4.5])⌉^1.1608⌋&

ทั้งหมดเหล่านี้เป็นฟังก์ชั่นที่ไม่มีชื่อที่ใช้คู่ของพิกัด{3, 4}ซึ่งเป็นแบบ 1

ฉันลองหาสูตรที่ค่อนข้างชัดเจน รูปแบบทั่วไปของกระดานทั้งหมดมีลักษณะดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ค่าที่แท้จริงของสีเหล่านั้น (จากที่มีน้ำหนักเบาเพื่อ Darkest) 2, 3, 4, 6, 8เป็น นั่นคือ:

2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2

4ครั้งแรกที่เราใช้ประโยชน์จากสมมาตรโดยขยับจุดเริ่มต้นไปยังศูนย์การค่าสัมบูรณ์และลบผลจาก นี้ทำให้เรามีพิกัด0.5ที่จะ3.5เพิ่มขึ้นจากแต่ละมุม ในการทำให้พิกัดศูนย์กลางเหมือนกันเราจำเป็นต้องทำแผนที่0.5และ1.5ค่าที่แตกต่างและ2.5และ3.5ค่าเดียวกัน สามารถทำได้อย่างง่ายดายโดยการคูณด้วย0.8(ให้{0.4, 1.2, 2., 2.8}) และปูพื้นผลลัพธ์ ดังนั้นตอนนี้เรามี{0, 1, 2, 2}ระยะทางจากศูนย์กลาง หากเราเพิ่มพิกัดในแต่ละเซลล์เราจะได้รับตารางนี้:

0 1 2 2 2 2 1 0
1 2 3 3 3 3 2 1
2 3 4 4 4 4 3 2
2 3 4 4 4 4 3 2
2 3 4 4 4 4 3 2
2 3 4 4 4 4 3 2
1 2 3 3 3 3 2 1
0 1 2 2 2 2 1 0

2[3,4,6,8]นี้มีค่าที่ไม่ซ้ำกันสำหรับทุกผลที่แตกต่างกันดังนั้นเราก็ใช้เป็นดัชนีลง

ในรุ่นที่สองเราใช้ฝ้าเพดานแทนพื้น วิธีนี้2, 3และ4มีอยู่แล้วที่ถูกต้อง แต่เราได้รับ5และ6แทน6และ8เพื่อให้เราแก้ไขเหล่านั้นด้วยตนเองกับกฎทดแทน

สุดท้ายในรุ่นที่สามเราขยาย5และ6ขึ้นไป6และ8โดยวิธีการของการยกกำลังตามด้วยการดำเนินการอีกชั้น


ฉันชอบวิธีการมากที่ใช้รูปแบบทั่วไปของบอร์ดดีมาก!
starcorder

6

APL, 21 ตัวอักษร

{+/,5=+/¨×⍨(⍳8 8)-⊂⍵}

เป็นภาษาอังกฤษ:

  • (⍳8 8): อาร์เรย์ 8x8 อันดับ 2 ที่มีพิกัดของเซลล์ทั้งหมด
  • +/¨×⍨(⍳8 8)-⊂⍵: ตารางของระยะทางแบบยุคลิดของเซลล์ที่กำหนดด้วยความเคารพต่อทุกเซลล์บนกระดาน;
  • 5=: เมทริกซ์ของ 0/1 โดยที่ 1s ปรากฏที่ระยะทางคู่กันเท่ากับ 5
  • +/,: สรุปเมทริกซ์ที่แบน

ทดสอบ (ต้นกำเนิด 1):

    f←{+/,5=+/¨×⍨(⍳8 8)-⊂⍵}
    f¨1+(3 4)(4 6)(7 7)(1 0)
8 6 2 3

ในรูปแบบนี้:

f←{+/,5=+/¨×⍨(⍳⍺)-⊂⍵}

อาร์กิวเมนต์ซ้ายสามารถระบุขนาดของกระดาน ดังนั้น8 8 fจะทำงานสำหรับกระดานหมากรุกสี่เหลี่ยมมาตรฐาน แต่บนกระดานขนาดใหญ่และเป็นรูปสี่เหลี่ยมผืนผ้ากรณีทดสอบจะให้ผลลัพธ์ที่แตกต่างกัน ตัวอย่างเช่นบนกระดาน 12x10:

    g←(10 12)∘f
    g¨1+(3 4)(4 6)(7 7)(1 0)
8 8 8 3

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

@Istefano การใช้ "อันดับ" เป็น "จำนวนมิติ" ดูเหมือนว่าจะต้องทนทุกข์ทรมานจากความทุกข์แบบเดียวกัน :-P
Luis Mendo

ฉันจะเป็น ... คุณพูดถูก! คุณจะเห็นได้ว่าเป็นเวลานานแล้วที่ฉันได้เรียนพีชคณิตเชิงเส้น ฉันเลิก :-)
lstefano

1
โปรแกรมเต็มรูปแบบ 27: ≢⍸5=+/¨×⍨-∘⎕¨⍳8 8 ลองออนไลน์!
อดัม

@ Adámคุณหมายถึง 17
ngn

6

Java - 160 150 ไบต์

int m(int r,int c){int m=0,i,j;for(i=0;i<3;i+=2)for(j=0;j<3;j+=2){m+=r+i>0&r+i<9&c+2*j>1&c+2*j<11?1:0;m+=r+2*i>1&r+2*i<11&c+j>0&c+j<9?1:0;}return m;}

Ungolfed:

public static int m(int r, int c) {
    int m=0;
    for(int i=-1;i<2;i+=2)
        for(int j=-1;j<2;j+=2){
            m += r+i>-1 && r+i<8 && c+2*j>0 && c+2*j<8 ? 1:0;
            m += r+2*i>0 && r+2*i<8 && c+j>1 && c+j<8 ? 1:0;
        }
    return m;
}

รหัส ungolfed เหมือนกันยกเว้นการเปลี่ยนขอบเขตของ for loop เพื่อบันทึก 4 ไบต์ ทำงานโดยการวนซ้ำในแต่ละการเคลื่อนไหวที่เป็นไปได้และทำการตรวจสอบขอบเขต (> 0 และ <8) ใช้ความจริงที่ว่าออฟเซ็ตคือ (1, 2), (2, 1), (-1, 2), (-2, 1) ฯลฯ และสามารถตรวจสอบ 2 การเคลื่อนไหวสำหรับแต่ละค่าของ i และ j

แก้ไข: บันทึก 10 ไบต์ด้วยคำแนะนำจาก Leaky Nun และ u902383


นี่ก็เร็วดีด้วย!
starcorder

มีข้อผิดพลาดในนั้นจะได้รับการแก้ไข
ejaszewski

1
int m=0,i=-1,j;เพื่อบันทึกบางไบต์
Leun Nun

1
เปลี่ยนตรรกะ AND เป็น bitwise AND และจะอนุญาตให้คุณลบอักขระเพิ่มเติม 6 ตัว
user902383

6

C, 44 ไบต์

f(x,y){return "23468"[((7-x)*x+(7-y)*y)/5];}

แต่นี่จะดีกว่า:

f(x,y){return "2344443234666643468888644688886446888864468888643466664323444432"[x*8+y];}

1
;หายไป จะไม่รวบรวม
ugoren


1
มันไม่ใช่ตัวอย่างมันเป็นฟังก์ชั่นและไม่ใช่ฟังก์ชั่นโพสต์ที่ต้องห้าม ขออภัยเซมิโคลอนที่หายไป แก้ไขแล้ว.
Giacomo Garabello


5

Java, 81 ตัวอักษร (113 ไบต์)

int r(int a,int b){return "⍄䐲㑦晃䚈衤䚈衤䚈衤䚈衤㑦晃⍄䐲".codePointAt(a*2+b/4)>>(3-b%4)*4&15;}

เข้ารหัสตารางผลลัพธ์ทั้งหมดเป็นตาราง Unicode จากนั้นรับไบต์ที่เหมาะสมในการดำเนินการระดับบิต

คุณสามารถดูออนไลน์ได้ที่นี่: https://ideone.com/K9BojC


3

Python ขนาด 94 ไบต์

lambda x,y,a=[2,1,-1,-2,-2,-1,1,2]:list((9>x+a[i]>0)&(9>y+a[5-i]>0)for i in range(8)).count(1)

ใช้การจัดทำดัชนีตาม 1

การสาธิตได้ที่https://repl.it/C6gV


2

Pyth - 33 15 ไบต์

ขอบคุณ @LeakyNun ที่ลดขนาดฉันลงครึ่งหนึ่ง

การจัดเรียงแผนที่ใหม่และVอาจทำให้สนามกอล์ฟเล็กลง

/sM*Fm^R2-Rd8Q5

Test Suite


1
นี่เร็วดี!
starcorder




1

จริงแล้ว 18 ไบต์

`;7-2km`MΣ8-:50\¬¬

ลองออนไลน์!

นี้ใช้สูตรเดียวกันว่าคำตอบอื่น ๆ 50/(8-x*(7-x)//5+y*(7-y))//5)-4อีกมากมายได้ใช้: อินพุตถูกนำมาเป็นรายการ: [x,y](หรือตัวอักษรใด ๆ ที่ซ้ำได้ใน Python เช่น(x,y)หรือx,y)

คำอธิบาย:

`;7-2km`MΣ8-:50\¬¬
`;7-2km`M           for each value in input:
 ;7-                  make a copy, subtract from 7
    2                 push 2
     km               minimum of the three values (x, 7-x, 2)
         Σ          sum
          8-        subtract from 8
            :50\    integer divide 50 by the value
                ¬¬  subtract 2 twice

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.