เรียงกระดานหมากรุกด้วยสามสี


12

งาน:

พิจารณาปัญหา: "ให้กระดานหมากรุกหายไปหนึ่งสี่เหลี่ยมจัตุรัสตัดมันเป็น 21 L-triominoes" มีหลักฐานเชิงสร้างสรรค์ที่รู้จักกันดีว่าสิ่งนี้สามารถทำได้สำหรับกระดานหมากรุกสี่เหลี่ยมขนาดใดก็ได้ที่มีกำลังสอง มันทำงานได้โดยการแยกกระดานหมากรุกออกเป็นกระดานหมากรุกขนาดเล็กที่มีรูอยู่ในนั้นและ Triomino ตัวใหญ่หนึ่งตัวจากนั้นสังเกตว่า Triomino นั้นสามารถตัดออกเป็นสี่ส่วนได้แบบเรียกซ้ำ

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

รายละเอียด:

ข้อมูลที่คุณป้อนคือตำแหน่งของหลุมซึ่งให้เป็นจำนวนเต็มคู่ คุณสามารถเลือกอันใดอันหนึ่งเป็นดัชนีคอลัมน์และอันไหนคือดัชนีแถว คุณสามารถเลือกได้ว่าการเริ่มต้นแต่ละครั้งที่ 0 หรือที่ 1 และอยู่ห่างจากมุมใดบ้าง คุณอาจต้องใช้ A .. H เป็นพิกัดแรกแทน 0..7 หรือ 1..8 นอกจากนี้คุณยังสามารถยอมรับพิกัดทั้งสองที่บรรจุเป็นจำนวนเต็มเดียว 0..63 หรือ 1..64 ตามลำดับพจนานุกรม (แถวหลักหรือคอลัมน์ใหญ่จากซ้ายไปขวาหรือขวาไปซ้ายขึ้นไปขึ้นหรือลง) คุณสามารถเขียนโปรแกรมเต็มหรือฟังก์ชั่น

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

หากคุณเลือกสี ASCII หรือเอาต์พุตกราฟิกคุณสามารถเลือกสีสี่สีจาก # 000, # 00F, # 0F0, # 0FF, # F00, # F0F, # FF0, #FFF หรือเทียบเท่าที่ใกล้เคียงที่สุดในสภาพแวดล้อมของคุณ หากคุณเลือกเอาต์พุตกราฟิกกราฟิกดั้งเดิมของคุณจะต้องเติมสี่เหลี่ยมอย่างน้อย 32x32 พิกเซลและคั่นด้วยสีอื่นไม่เกินสองพิกเซล ถ้าข้างต้นเกินความละเอียดหน้าจอของสภาพแวดล้อมของคุณข้อกำหนดขนาดต่ำสุดจะถูกย่อให้เป็นขนาดสี่เหลี่ยมจัตุรัสที่ใหญ่ที่สุด

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

ตัวอย่าง:

เอาต์พุตที่เป็นไปได้สำหรับอินพุต = [0, 0] (มุมซ้ายบน)

 #??##??
##.?#..?
?..#??.#
??##.?##
##?..#??
#.??##.?
?..#?..#
??##??##

เอาต์พุตอื่นที่เป็นไปได้ของโปรแกรมเดียวกัน (อินพุต = [0, 7]):

??#??#?
?##?##??
..xx..xx
.?x#.?x#
??##??##
..xx..xx
.?x#.?x#
??##??##

โปรแกรมที่แตกต่างกันอาจผลิตสำหรับการป้อนข้อมูลของ "D1" (หมายเหตุการปฐมนิเทศกระดานหมากรุกที่ไม่เป็นมาตรฐาน แต่ได้รับอนุญาต)

AABBCCAA
ACBACBAC
CCAABBCC
 ABBAADD
AABDABDC
BBDDBBCC
BABBACAA
AABAACCA

4
หากมีการป้อนข้อมูลก็ไม่ซับซ้อน Kolmogorov จริง ๆ
Jonathan Allan

@JonathanAllan คำอธิบายแท็กใช้ว่าใครเป็นโปเกมอนนั้นเป็นตัวอย่างของคำถามซับซ้อน kolmogorov ที่รับอินพุต มันขึ้นอยู่กับคุณถ้าคุณต้องการบีบอัดชุดโซลูชั่น 64 ค่าคงที่หรือถ้าคุณต้องการใช้ขั้นตอนการเรียงกระดานหมากรุกและจากนั้นให้สี
John Dvorak


1
มีสามสีไม่พอ?
Arnauld

1
@Annauld ฉันจะอนุญาตให้ ฉันจะแก้ไข
John Dvorak

คำตอบ:


22

JavaScript (ES6),  184 ... 171  163 ไบต์

(x)(y)0x70y7012

h=>v=>(a=[...'3232132031021010'],a[5+(v&4|h>3)]^=3,a[v/2<<2|h/2]=v%2*2+h%2,g=x=>y&8?'':(x<8?x-h|y-v?a[y/2<<2|x/2]^y%2*2+x%2?(x^y)&2:1:' ':`
`)+g(-~x%9||!++y))(y=0)

ลองออนไลน์!

วิธี

4×4

(t0t1t2t3t4t5t6t7t8t9t10t11t12t13t14t15)

Triomino แต่ละอันเป็นหนึ่งใน:

triominoes

การกำหนดค่าเริ่มต้นของเมทริกซ์มีดังนี้:

(3232132031021010)

เราสลับสองสีแรกเช่นเดียวกับที่เราทำบนกระดานหมากรุกซึ่งให้:

matrix0

ขั้นตอนต่อไปคือ:

  1. t5t6t9t10
  2. เราหมุน Triomino ที่หลุมตั้งอยู่ (อาจเป็น Triomino เดียวกับในขั้นตอนที่ 1) เพื่อที่จะไม่ปิดรู
  3. เราเติมหลุมด้วยสีที่ 3 (ยกเว้นหลุม 'ของจริง')

(3,0)

matrix1

และในกรณีนั้นเมทริกซ์สุดท้ายคือ:

(3132102031021010)

แสดงความคิดเห็น

h => v => (                       // (h, v) = hole coordinates
  a = [...'3232132031021010'],    // a[] = flat representation of the 4x4 matrix
  a[5 + (v & 4 | h > 3)] ^= 3,    // first rotation, achieved by XOR'ing with 3
  a[v / 2 << 2 | h / 2] =         // second rotation according to the
    v % 2 * 2 + h % 2,            // position of the hole within the triomino's square
  g = x =>                        // g is a recursive function that converts the 4x4
                                  // matrix into a 8x8 ASCII art
    y & 8 ?                       // if y = 8:
      ''                          //   stop recursion and return an empty string
    :                             // else:
      ( x < 8 ?                   //   if this is not the end of the row:
          x - h | y - v ?         //     if this is not the position of the hole:
            a[y / 2 << 2 | x / 2] //       if this part of the triomino located at this
            ^ y % 2 * 2 + x % 2 ? //       position is 'solid':
              (x ^ y) & 2         //         use either color #0 or color #2
            :                     //       else:
              1                   //         use color #1
          :                       //     else:
            ' '                   //       the hole is represented with a space
        :                         //   else:
          `\n`                    //     append a linefeed
      ) + g(-~x % 9 || !++y)      //   append the result of a recursive call
)(y = 0)                          // initial call to g with x = y = 0

เอาท์พุทแบบกราฟิก

คลิกที่ภาพเพื่อกำหนดตำแหน่งของหลุม


การพิสูจน์ที่สร้างสรรค์ว่าสามสีเพียงพอเสมอดีมาก!
John Dvorak

6
ชอบเอาท์พุทกราฟิกที่คลิกได้!
Kevin Cruijssen

3

ถ่าน , 78 ไบต์

NθNη”{⊞⊟¦≦⁶q×fΣ\⊙t×_⊟✳-Y⁴℅=⁶υ”≔›θ³ζ≔›η³εFζ≦⁻⁷θFε≦⁻⁷ηJ⊕÷θ²⊕÷η²§#$⁺ⅈⅉJθη Fζ‖Fε‖↓

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด เอาต์พุตโดยใช้#$%อักขระ คำอธิบาย:

NθNη

ป้อนพิกัดของช่องว่าง

”{⊞⊟¦≦⁶q×fΣ\⊙t×_⊟✳-Y⁴℅=⁶υ”

เอาต์พุตสตริงที่บีบอัด มันมีการขึ้นบรรทัดใหม่ดังนั้นเพื่อหลีกเลี่ยงการหยุดไหลของคำอธิบายนี้คุณจะพบกับสตริงในตอนท้ายของคำตอบ

≔›θ³ζ≔›η³εFζ≦⁻⁷θFε≦⁻⁷η

หากการประสานงานทั้งสองมีค่ามากกว่า3นั้นโปรดจำไว้ว่าความจริงนั้นและลบพิกัดออกจาก 7

J⊕÷θ²⊕÷η²§#$⁺ⅈⅉ

ข้ามไปยัง%สี่เหลี่ยมจัตุรัสมุมบนซ้ายที่ใกล้ที่สุด%แล้วเขียนทับด้วย#หรือ$ตามความเหมาะสม (แต่สิ่งนี้จะถูกเขียนทับโดยช่องว่างหากมีอยู่แล้วในสแควร์นี้)

Jθη Fζ‖Fε‖↓

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

##$$##$$
#%%$#%%$
$%%#$$%#
$$##%$##
##$%%#$$
#%$$##%$
$%%#$%%#
$$##$$##

ฉันพยายามเริ่มต้นด้วยจตุ%รัสที่อยู่ตรงกลางและพยายามออกไปหาพิกัดที่ต้องการ แต่ใช้เวลา 90 ไบต์

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