แก้ปริศนาหมากรุก Solitaire


12

เมื่อเร็ว ๆ นี้ผมได้รับการแนะนำให้รู้จักกับเกมปริศนาที่เรียกว่าSolitaire หมากรุก ฉันจะสรุปกฎที่นี่:

  • กระดานเป็นกระดานหมากรุกขนาด 4x4
  • ทุกชิ้นมีสีเดียวกัน (ไม่มีทีม) และทุกชิ้นสามารถจับภาพชิ้นอื่นได้
  • ทุกการเคลื่อนไหวจะต้องมีการจับ ไม่มีการย้ายไปที่ช่องว่าง
  • จะต้องมีชิ้นเดียวที่เหลืออยู่ในตอนท้าย
  • ทุกชิ้นงานเคลื่อนไหวเหมือนกับที่ทำในหมากรุกโดยมีการดัดแปลงเพียงตัวเดียว: ตัวจำนำสามารถจับได้ทุกทิศทาง (ซึ่งในทางเทคนิคทำให้เป็นเฟอร์ซ ) เพื่อประโยชน์ของผู้ที่ไม่ทราบฉันได้รวมแผนภาพการเคลื่อนไหว
  • ไม่มีกฎของหมากรุกอื่น ๆ (เช่นเช็ค, การขว้าง ฯลฯ ) ที่นี่ มันเกี่ยวกับการจับกุม

คิง (K)

K * . . | * K * . | * * * .
* * . . | * * * . | * K * .
. . . . | . . . . | * * * .
. . . . | . . . . | . . . .

ราชินี (Q)

Q * * * | * Q * * | * * * .
* * . . | * * * . | * Q * *
* . * . | . * . * | * * * .
* . . * | . * . . | . * . *

โกง (R)

R * * * | * R * * | . * . .
* . . . | . * . . | * R * *
* . . . | . * . . | . * . .
* . . . | . * . . | . * . .

บิชอป (B)

B . . . | . B . . | * . * .
. * . . | * . * . | . B . .
. . * . | . . . * | * . * .
. . . * | . . . . | . . . *

อัศวิน (N)

N . . . | . N . . | . . . *
. . * . | . . . * | . N . .
. * . . | * . * . | . . . *
. . . . | . . . . | * . * .

จำนำ (P)

P . . . | . P . . | * . * .
. * . . | * . * . | . P . .
. . . . | . . . . | * . * .
. . . . | . . . . | . . . .

อินพุต / เอาต์พุต

สำหรับการอ้างอิงจะใช้ตัวต่อปริศนาตัวอย่างจากหน้าเว็บ Solitaire หมากรุก:

. . . .
. B . .
R P . .
. . . N

การแก้ปัญหาคือการเอาเบี้ยไปกับอัศวินจากนั้นนำอัศวินเข้ามาด้วยการโกงและในที่สุดก็นำอธิการไปด้วยการโกง

อินพุต

อินพุตต้องอยู่ในหนึ่งในสามรูปแบบ คุณมีอิสระที่จะเลือกสิ่งที่คุณสะดวกที่สุด

  • สตริงอักขระเช่น.....B..RP.....Nมีหรือไม่มีบรรทัดใหม่ ตัวละครที่เป็นตัวแทนของพื้นที่ว่างอาจจะเป็นตัวอักษรใด ๆ KQRBNPที่ไม่ได้เป็นหนึ่งใน
  • รายการของรายการ (หรือรายการบี้) ซึ่งองค์ประกอบที่มีทั้งตัวอักษรหรือตัวเลขเช่นดังนั้น: หรือ[['.', '.', '.', '.'], ['.', 'B', '.', '.'], ['R', 'P', '.', '.'], ['.', '.', '.', 'N']] สำหรับอดีตตัวละครที่แสดงถึงพื้นที่ว่างอาจจะเป็นอะไรที่ไม่ได้เป็นหนึ่ง[[0, 0, 0, 0], [0, 4, 0, 0], [3, 6, 0, 0], [0, 0, 0, 5]] KQRBNPสำหรับหลังฉันได้ให้หมายเลขที่สอดคล้องกับอันดับของพวกเขาในรายการการเคลื่อนไหวก่อนหน้าของฉัน ( 1คือราชา4เป็นอธิการ6เป็นเบี้ยประกัน ฯลฯ ) คุณมีอิสระที่จะเปลี่ยนหมายเลข
  • รายการของพิกัดที่แต่ละองค์ประกอบมีแบบฟอร์มเช่นดังนั้น:[x, y, 'c'][[1, 2, 'B'], [0, 1, 'R'], [1, 1, 'P'], [3, 0, 'N']]

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

เอาท์พุต

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

[[[3,0], [1,1]], [[0,1], [1,1]], [[1,1], [1,2]]]หากคุณเลือกที่จะส่งออกลำดับการย้ายที่พวกเขาจะต้องแสดงเป็นรายการคู่ประสานงานคู่เช่นดังนั้น: [0,0]แสดงถึงมุมล่างซ้ายและอีกครั้งการแยกและการคั่นอักขระอาจเป็นตัวเลือกที่สมเหตุสมผล

หากบอร์ดที่ระบุไม่สามารถแก้ไขได้ให้ส่งออกค่าเท็จ ( 0สตริงว่างเปล่า ฯลฯ ) หากคณะกรรมการที่กำหนดมีน้อยกว่าสองชิ้นพฤติกรรมจะไม่ได้กำหนด

กรณีทดสอบ

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

อินพุต 1:

. . . N
. . . .
. R . .
. . B .

...N.....R....B.

[['.', '.', '.', 'N'], ['.', '.', '.', '.'], ['.', 'R', '.', '.'], ['.', '.', 'B', '.']]

[[0, 0, 0, 5], [0, 0, 0, 0], [0, 3, 0, 0], [0, 0, 4, 0]]

[[3, 3, 'N'], [1, 1, 'R'], [2, 0, 'B']]

เอาท์พุท 1:

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

อินพุต 2:

. . . .
. B . .
R P . .
. . . N

.....B..RP.....N

[['.', '.', '.', '.'], ['.', 'B', '.', '.'], ['R', 'P', '.', '.'], ['.', '.', '.', 'N']]

[[0, 0, 0, 0], [0, 4, 0, 0], [3, 6, 0, 0], [0, 0, 0, 5]]

[[1, 2, 'B'], [0, 1, 'R'], [1, 1, 'P'], [3, 0, 'N']]

เอาท์พุท 2:

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

อินพุต 3:

. N R .
B . . .
N . . B
. . P .

.NR.B...N..B..P.

[['.', 'N', 'R', '.'], ['B', '.', '.', '.'], ['N', '.', '.', 'B'], ['.', '.', 'P', '.']]

[[0, 5, 3, 0], [4, 0, 0, 0], [5, 0, 0, 4], [0, 0, 6, 0]]

[[1, 3, 'N'], [2, 3, 'R'], [0, 2, 'B'], [0, 1, 'N'], [3, 1, 'B'], [2, 0, 'P']]

เอาท์พุท 3:

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

อินพุต 4:

. . . N
. . . R
R B B .
N P P .

...N...RRBB.NPP.

[['.', '.', '.', 'N'], ['.', '.', '.', 'R'], ['R', 'B', 'B', '.'], ['N', 'P', 'P', '.']]

[[0, 0, 0, 5], [0, 0, 0, 3], [3, 4, 4, 0], [5, 6, 6, 0]]

[[3, 3, 'N'], [3, 2, 'R'], [0, 1, 'R'], [1, 1, 'B'], [2, 1, 'B'], [0, 0, 'N'], [1, 0, 'P'], [2, 0, 'P']]

เอาท์พุท 4:

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

อินพุต 5:

P . . .
. R . .
R . R .
. R . .

P....R..R.R..R..

[['P', '.', '.', '.'], ['.', 'R', '.', '.'], ['R', '.', 'R', '.'], ['.', 'R', '.', '.']]

[[6, 0, 0, 0], [0, 3, 0, 0], [3, 0, 3, 0], [0, 3, 0, 0]]

[[0, 3, 'P'], [1, 2, 'R'], [0, 1, 'R'], [2, 1, 'R'], [1, 0, 'R']]

ผลลัพธ์ 5:

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

อินพุต 6:

. P . N
K . . .
. . B .
. . R Q

.P.NK.....B...RQ

[['.', 'P', '.', 'N'], ['K', '.', '.', '.'], ['.', '.', 'B', '.'], ['.', '.', 'R', 'Q']]

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

[[1, 3, 'P'], [3, 3, 'N'], [0, 2, 'K'], [2, 1, 'B'], [2, 0, 'R'], [3, 0, 'Q']]

เอาท์พุท 6:

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

มีข้อผิดพลาดเล็กน้อยในผลลัพธ์ 1 ควรเป็น [[[2,0], [1,1]], [[1,1], [3,3]]]
ดาเมียน

นอกจากนี้ในฐานะที่เป็นบันทึกเพิ่มเติมกษัตริย์เป็นจริงแมนน์ (สามารถจับได้ แต่มีกฎการย้ายเดียวกัน) (ศัพท์หมากรุกนางฟ้าคือความสนุก)
มะนาวที่ถูกทำลาย

@ Damien: จุดดี! ขอบคุณ
El'endia Starman

ตกลงเพื่อรวมสัญลักษณ์ชิ้นส่วนในผลลัพธ์หรือไม่? เช่น:[["R", [2, 0], [1, 1]], ["N", [1, 1], [3, 3]]]
Arnauld

@Annauld: ใช่ว่าจะไม่เป็นไร ค่อนข้างแปลกเนื่องจากคุณกำลังแสดงรายการที่ถูกจับไม่ใช่ชิ้นที่จับได้
El'endia Starman

คำตอบ:


10

Haskell, 226 195 191 188 ไบต์

ส่งคืนรายการโซลูชันทั้งหมด แต่ละวิธีคือรายการของการเคลื่อนไหว ส่งคืนรายการว่างถ้าไม่มีวิธีแก้ไข

บันทึกแล้ว 4 ไบต์ขอบคุณ Lynn

ลองออนไลน์

m"P"=[2]
m"N"=[5]
m"K"=[1,2]
m"R"=[1,4,9]
m"B"=[2,8,18]
m _=m"B"++m"R"
l%x=[z|z<-l,fst z/=x]
f[_]=[[]]
f l=[(i,j):r|(i@(s,t),a)<-l,(j@(u,v),_)<-l,(s-u)^2+(t-v)^2`elem`m a,r<-f$(j,a):l%i%j]

การใช้งาน:

main = do 
    print $ f [((3, 3), "N"), ((1, 1), "R")]
    putStrLn""
    mapM_ print $ f [((3, 3), "N"), ((1, 1), "R"), ((2, 0), "B")]
    putStrLn""
    mapM_ print $ f [((1, 2), "B"), ((0, 1), "R"), ((1, 1), "P"), ((3, 0), "N")]
    putStrLn""
    mapM_ print $ f [((1, 3), "P"), ((3, 3), "N"), ((0, 2), "K"), ((2, 1), "B"), ((2, 0), "R"), ((3, 0), "Q")]

เอาท์พุท:

[]

[((2,0),(1,1)),((1,1),(3,3))]

[((3,0),(1,1)),((0,1),(1,1)),((1,1),(1,2))]

[((1,3),(0,2)),((3,3),(2,1)),((2,1),(0,2)),((3,0),(2,0)),((2,0),(0,2))]
[((1,3),(0,2)),((3,3),(2,1)),((3,0),(2,1)),((2,1),(2,0)),((2,0),(0,2))]
[((1,3),(0,2)),((3,3),(2,1)),((3,0),(2,0)),((2,0),(0,2)),((2,1),(0,2))]
[((1,3),(0,2)),((3,3),(2,1)),((3,0),(2,0)),((2,1),(0,2)),((2,0),(0,2))]
[((1,3),(0,2)),((2,0),(2,1)),((3,0),(2,1)),((3,3),(2,1)),((2,1),(0,2))]
[((1,3),(0,2)),((3,0),(2,1)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(0,2))]
[((1,3),(0,2)),((3,0),(2,0)),((2,0),(0,2)),((3,3),(2,1)),((2,1),(0,2))]
[((1,3),(0,2)),((3,0),(2,0)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(0,2))]
[((1,3),(0,2)),((3,0),(2,0)),((3,3),(2,1)),((2,1),(0,2)),((2,0),(0,2))]
[((1,3),(0,2)),((3,0),(2,0)),((3,3),(2,1)),((2,0),(0,2)),((2,1),(0,2))]
[((3,3),(2,1)),((2,1),(1,3)),((3,0),(2,0)),((2,0),(0,2)),((0,2),(1,3))]
[((3,3),(2,1)),((2,1),(0,2)),((1,3),(0,2)),((3,0),(2,0)),((2,0),(0,2))]
[((3,3),(2,1)),((2,1),(0,2)),((3,0),(2,0)),((2,0),(0,2)),((0,2),(1,3))]
[((3,3),(2,1)),((2,1),(0,2)),((3,0),(2,0)),((2,0),(0,2)),((1,3),(0,2))]
[((3,3),(2,1)),((2,1),(0,2)),((3,0),(2,0)),((1,3),(0,2)),((2,0),(0,2))]
[((3,3),(2,1)),((1,3),(0,2)),((2,1),(0,2)),((3,0),(2,0)),((2,0),(0,2))]
[((3,3),(2,1)),((1,3),(0,2)),((3,0),(2,1)),((2,1),(2,0)),((2,0),(0,2))]
[((3,3),(2,1)),((1,3),(0,2)),((3,0),(2,0)),((2,0),(0,2)),((2,1),(0,2))]
[((3,3),(2,1)),((1,3),(0,2)),((3,0),(2,0)),((2,1),(0,2)),((2,0),(0,2))]
[((3,3),(2,1)),((3,0),(2,1)),((2,1),(2,0)),((2,0),(0,2)),((0,2),(1,3))]
[((3,3),(2,1)),((3,0),(2,1)),((2,1),(2,0)),((2,0),(0,2)),((1,3),(0,2))]
[((3,3),(2,1)),((3,0),(2,1)),((2,1),(2,0)),((1,3),(0,2)),((2,0),(0,2))]
[((3,3),(2,1)),((3,0),(2,1)),((1,3),(0,2)),((2,1),(2,0)),((2,0),(0,2))]
[((3,3),(2,1)),((3,0),(2,0)),((2,0),(0,2)),((0,2),(1,3)),((2,1),(1,3))]
[((3,3),(2,1)),((3,0),(2,0)),((2,0),(0,2)),((2,1),(0,2)),((1,3),(0,2))]
[((3,3),(2,1)),((3,0),(2,0)),((2,0),(0,2)),((2,1),(1,3)),((0,2),(1,3))]
[((3,3),(2,1)),((3,0),(2,0)),((2,0),(0,2)),((1,3),(0,2)),((2,1),(0,2))]
[((3,3),(2,1)),((3,0),(2,0)),((2,1),(1,3)),((2,0),(0,2)),((0,2),(1,3))]
[((3,3),(2,1)),((3,0),(2,0)),((2,1),(0,2)),((2,0),(0,2)),((0,2),(1,3))]
[((3,3),(2,1)),((3,0),(2,0)),((2,1),(0,2)),((2,0),(0,2)),((1,3),(0,2))]
[((3,3),(2,1)),((3,0),(2,0)),((2,1),(0,2)),((1,3),(0,2)),((2,0),(0,2))]
[((3,3),(2,1)),((3,0),(2,0)),((1,3),(0,2)),((2,0),(0,2)),((2,1),(0,2))]
[((3,3),(2,1)),((3,0),(2,0)),((1,3),(0,2)),((2,1),(0,2)),((2,0),(0,2))]
[((0,2),(1,3)),((2,1),(3,0)),((2,0),(3,0)),((3,0),(3,3)),((3,3),(1,3))]
[((0,2),(1,3)),((2,0),(2,1)),((3,0),(2,1)),((3,3),(2,1)),((2,1),(1,3))]
[((0,2),(1,3)),((3,0),(2,1)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(1,3))]
[((0,2),(1,3)),((3,0),(2,0)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(1,3))]
[((2,1),(3,0)),((0,2),(1,3)),((2,0),(3,0)),((3,0),(3,3)),((3,3),(1,3))]
[((2,1),(3,0)),((2,0),(3,0)),((3,0),(3,3)),((3,3),(1,3)),((0,2),(1,3))]
[((2,1),(3,0)),((2,0),(3,0)),((3,0),(3,3)),((0,2),(1,3)),((3,3),(1,3))]
[((2,1),(3,0)),((2,0),(3,0)),((0,2),(1,3)),((3,0),(3,3)),((3,3),(1,3))]
[((2,0),(2,1)),((1,3),(0,2)),((3,0),(2,1)),((3,3),(2,1)),((2,1),(0,2))]
[((2,0),(2,1)),((0,2),(1,3)),((3,0),(2,1)),((3,3),(2,1)),((2,1),(1,3))]
[((2,0),(2,1)),((3,0),(2,1)),((1,3),(0,2)),((3,3),(2,1)),((2,1),(0,2))]
[((2,0),(2,1)),((3,0),(2,1)),((3,3),(2,1)),((2,1),(1,3)),((0,2),(1,3))]
[((2,0),(2,1)),((3,0),(2,1)),((3,3),(2,1)),((2,1),(0,2)),((1,3),(0,2))]
[((2,0),(2,1)),((3,0),(2,1)),((3,3),(2,1)),((1,3),(0,2)),((2,1),(0,2))]
[((2,0),(2,1)),((3,0),(2,1)),((3,3),(2,1)),((0,2),(1,3)),((2,1),(1,3))]
[((2,0),(2,1)),((3,0),(2,1)),((0,2),(1,3)),((3,3),(2,1)),((2,1),(1,3))]
[((3,0),(3,3)),((3,3),(1,3)),((1,3),(0,2)),((0,2),(2,0)),((2,0),(2,1))]
[((3,0),(2,1)),((2,1),(2,0)),((2,0),(0,2)),((0,2),(1,3)),((1,3),(3,3))]
[((3,0),(2,1)),((1,3),(0,2)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(0,2))]
[((3,0),(2,1)),((0,2),(1,3)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(1,3))]
[((3,0),(2,1)),((2,0),(2,1)),((1,3),(0,2)),((3,3),(2,1)),((2,1),(0,2))]
[((3,0),(2,1)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(1,3)),((0,2),(1,3))]
[((3,0),(2,1)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(0,2)),((1,3),(0,2))]
[((3,0),(2,1)),((2,0),(2,1)),((3,3),(2,1)),((1,3),(0,2)),((2,1),(0,2))]
[((3,0),(2,1)),((2,0),(2,1)),((3,3),(2,1)),((0,2),(1,3)),((2,1),(1,3))]
[((3,0),(2,1)),((2,0),(2,1)),((0,2),(1,3)),((3,3),(2,1)),((2,1),(1,3))]
[((3,0),(2,0)),((2,0),(0,2)),((0,2),(1,3)),((3,3),(2,1)),((2,1),(1,3))]
[((3,0),(2,0)),((2,0),(0,2)),((1,3),(0,2)),((3,3),(2,1)),((2,1),(0,2))]
[((3,0),(2,0)),((2,0),(0,2)),((3,3),(2,1)),((2,1),(0,2)),((1,3),(0,2))]
[((3,0),(2,0)),((2,0),(0,2)),((3,3),(2,1)),((2,1),(1,3)),((0,2),(1,3))]
[((3,0),(2,0)),((2,0),(0,2)),((3,3),(2,1)),((0,2),(1,3)),((2,1),(1,3))]
[((3,0),(2,0)),((2,0),(0,2)),((3,3),(2,1)),((1,3),(0,2)),((2,1),(0,2))]
[((3,0),(2,0)),((2,0),(2,1)),((1,3),(0,2)),((3,3),(2,1)),((2,1),(0,2))]
[((3,0),(2,0)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(1,3)),((0,2),(1,3))]
[((3,0),(2,0)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(0,2)),((1,3),(0,2))]
[((3,0),(2,0)),((2,0),(2,1)),((3,3),(2,1)),((1,3),(0,2)),((2,1),(0,2))]
[((3,0),(2,0)),((2,0),(2,1)),((3,3),(2,1)),((0,2),(1,3)),((2,1),(1,3))]
[((3,0),(2,0)),((2,0),(2,1)),((0,2),(1,3)),((3,3),(2,1)),((2,1),(1,3))]
[((3,0),(2,0)),((1,3),(0,2)),((2,0),(0,2)),((3,3),(2,1)),((2,1),(0,2))]
[((3,0),(2,0)),((1,3),(0,2)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(0,2))]
[((3,0),(2,0)),((1,3),(0,2)),((3,3),(2,1)),((2,1),(0,2)),((2,0),(0,2))]
[((3,0),(2,0)),((1,3),(0,2)),((3,3),(2,1)),((2,0),(0,2)),((2,1),(0,2))]
[((3,0),(2,0)),((3,3),(2,1)),((2,1),(1,3)),((2,0),(0,2)),((0,2),(1,3))]
[((3,0),(2,0)),((3,3),(2,1)),((2,1),(0,2)),((2,0),(0,2)),((0,2),(1,3))]
[((3,0),(2,0)),((3,3),(2,1)),((2,1),(0,2)),((2,0),(0,2)),((1,3),(0,2))]
[((3,0),(2,0)),((3,3),(2,1)),((2,1),(0,2)),((1,3),(0,2)),((2,0),(0,2))]
[((3,0),(2,0)),((3,3),(2,1)),((2,0),(0,2)),((0,2),(1,3)),((2,1),(1,3))]
[((3,0),(2,0)),((3,3),(2,1)),((2,0),(0,2)),((2,1),(0,2)),((1,3),(0,2))]
[((3,0),(2,0)),((3,3),(2,1)),((2,0),(0,2)),((2,1),(1,3)),((0,2),(1,3))]
[((3,0),(2,0)),((3,3),(2,1)),((2,0),(0,2)),((1,3),(0,2)),((2,1),(0,2))]
[((3,0),(2,0)),((3,3),(2,1)),((1,3),(0,2)),((2,1),(0,2)),((2,0),(0,2))]
[((3,0),(2,0)),((3,3),(2,1)),((1,3),(0,2)),((2,0),(0,2)),((2,1),(0,2))]
[((3,0),(2,0)),((0,2),(1,3)),((2,0),(2,1)),((3,3),(2,1)),((2,1),(1,3))]

1
ทางออกที่สวยงาม! การอินไลน์!ช่วยประหยัดสองสามไบต์:f l=[(i,j):r|(i@(s,t),a)<-l,(j@(u,v),_)<-l%i,r<-f$(j,a):l%i%j,(s-u)^2+(t-v)^2`elem`m a]
ลินน์

ดี! ผลลัพธ์มีลักษณะอย่างไร
El'endia Starman

[[((2,0),(1,1)),((1,1),(3,3))]]. ((x1,y1),(x2,y2))รายชื่อของการแก้ปัญหาที่แก้ปัญหานี้เป็นรายการของการย้ายที่ย้ายคือ
ลินน์

1
m"P"=[1]มันควรจะเป็น 2 หรือไม่?
ngn

ใช่แน่นอน! ขอบคุณ
ดาเมียน

1

Javascript (ES6), 372 361 358 ไบต์

มัน (ยังคง) ต้องการการเพิ่มประสิทธิภาพบางอย่าง แต่นี่เป็นความพยายามครั้งที่ 2 ครั้งแรกที่2

b=>{for(n=-4,b=[...b];n<36;b.splice(n+=8,0,0,0,0,0));l=[];(M=(P,u,Z,z,L)=>{for(P=u=n;u--;)
for((z=[640,164928,641,259,899,898]["PNBRQK".indexOf(b[u])])&&P++,L=1,s=z&1;z>>=1;L++)for(Z
=u;z&1&!((Z+=L)&n)&&(b[Z]<'A'||!(M(l.push([b[Z],[u&3,31-u>>3],b[u],[Z&3,31-Z>>3]]),b[Z]=b[u
],b[u]='.'),b[u]=b[Z],b[Z]=l.pop()[0]))&&s||(L=-L,Z=u,L<0););P-37||console.log(l)})()}

รูปแบบผลลัพธ์:

// Puzzle #1
[["B", [2, 0], "R", [1, 1]], ["B", [1, 1], "N", [3, 3]]]

ตัวอย่าง:

let F =
b=>{for(n=-4,b=[...b];n<36;b.splice(n+=8,0,0,0,0,0));l=[];(M=(P,u,Z,z,L)=>{for(P=u=n;u--;)for((z=[640,164928,641,259,899,898]["PNBRQK".indexOf(b[u])])&&P++,L=1,s=z&1;z>>=1;L++)for(Z=u;z&1&!((Z+=L)&n)&&(b[Z]<'A'||!(M(l.push([b[Z],[u&3,31-u>>3],b[u],[Z&3,31-Z>>3]]),b[Z]=b[u],b[u]='.'),b[u]=b[Z],b[Z]=l.pop()[0]))&&s||(L=-L,Z=u,L<0););P-37||console.log(l)})()}

console.log("Puzzle #1");
F("...N.....R....B.");
console.log("Puzzle #2");
F(".....B..RP.....N");

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