สร้างสะพาน


10

งานของคุณคือการสร้างสะพานเพื่อเชื่อมต่อหน้าผาสองแห่งที่ให้อินพุตdระยะห่าง dจะเป็นเสมอ

อย่างไรก็ตามสะพานต้องการคอลัมน์เพื่อเก็บไว้ แต่ละคอลัมน์สามารถมีช่องว่างได้สูงสุด 6 ช่องในแต่ละด้าน

สำหรับตัวอย่างนี้:

________                        ________
        |                      |
   A    |                      |   B

        |----------------------|
                d = 22

สะพานd = 20ควรมีลักษณะเช่นนี้มีสองคอลัมน์ คอลัมน์จะไม่นับใน d

_____|__________|_____
12345|1234554321|12345
     |          |

กฎ:

  1. ต้องมีคอลัมน์เพียงพอที่จะยืนขึ้น

  2. ต้องมีจำนวนคอลัมน์ขั้นต่ำที่จำเป็นในการยืน

  3. ต้องสมมาตร

  4. จำนวนไบต์ที่น้อยที่สุดชนะ

ตัวอย่าง: (#s เพียงเพื่อช่วยให้คุณนับช่องว่างไม่ควรรวมในผลลัพธ์ของคุณ)

d = 10

_____|_____
12345|12345
     |

d = 32

_____|___________|___________|_____
12345|12345654321|           |
     |           |           |

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

หรือ

______|__________|______
123456|1234554321|123456
      |          |

เพื่อชี้แจงว่าตัวเลขในผลลัพธ์นั้นจำเป็นหรือเป็นเพียงตัวอย่างเท่านั้น
isaacg

@isaacg ไม่จำเป็นสำหรับการส่งออก พวกเขาอยู่ที่นั่นดังนั้นพวกคุณไม่ต้องนับบรรทัดในตัวอย่างของฉัน
JoshK

ฉันคิดว่าสเปคของคุณมีข้อบกพร่องหรือไม่ สิ่งที่ป้องกันไม่ให้ 1 | 2 | 3 | 4 | 5 ... | d ทางออกโดยที่ | เป็นลำแสง
Vlo

@Vlo หนึ่งในกฎคือใช้จำนวนคอลัมน์ขั้นต่ำที่เป็นไปได้ ดังนั้นการใช้คอลัมน์ทุกช่องว่างจึงไม่ใช่ขั้นต่ำ
JoshK

คุณบอกว่า d จะเป็นเลขคู่เสมอ แต่ในตัวอย่างสุดท้ายของคุณ d = 21
SE - หยุดยิงคนดี

คำตอบ:


4

JavaScript (ES6), 92 ไบต์

d=>[..."_  "].map(c=>(s=c+c[r='repeat'](n%6))+'|'+(c[r](12)+'|')[r](n/6)+s,n=d-1>>1).join`\n`

โดย\nแสดงถึงอักขระบรรทัดใหม่ตามตัวอักษร ถ้าdเป็นเลขคี่ก็จะใช้เวลา 128 ไบต์:

d=>[..."_  "].map(c=>[...Array(d+1)].map((_,i)=>(d&1?i&&d-i&&(i>m)+5+i-m:((d-1)%24>11)*6+i-m)%12?'':'|',m=d>>1).join(c)).join`\n`

วิธีแก้ปัญหาสำหรับเลขคี่ของคุณทำงานอย่างไร สำหรับ d = 35 ไม่มีวิธีการแก้ปัญหาที่ดีที่สุดที่มีสมมาตร
SE - หยุดยิงคนดี

@Hohmannfan มันส่งกลับก่อให้เกิดผลลัพธ์อย่างน้อยการแก้ปัญหาสมมาตรซึ่งในกรณีนี้คือ|____________|___________|____________|ฯลฯ
นีล

ฉันเดาว่านี่เป็นการตีความที่ดีที่สุด
SE - หยุดยิงคนดี

0

Ruby, 108 ไบต์

อาจจะสามารถลงสนามได้มากขึ้น อัลกอริทึมโลภ

->d{s='',k=6
(s+=?_*[d,k].min+(d>k/2??|:'');d-=k;k=12)while d>0
s=s.chomp(?|)+s.reverse+$/
s+s.tr(?_,' ')*2}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.