Membangun Jembatan

10

Tugas Anda adalah membangun jembatan untuk menghubungkan dua tebing yang diberi input d, jaraknya terpisah. dakan selalu genap

Namun, jembatan membutuhkan kolom untuk menahannya. Setiap kolom dapat menampung maksimal 6 spasi di setiap sisi.

Untuk contoh ini:

________                        ________
        |                      |
   A    |                      |   B

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

Jembatan untuk d = 20akan terlihat seperti ini dengan dua kolom. Kolom tidak dihitung dalam d.

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

Aturan:

  1. Harus memiliki cukup kolom untuk berdiri.

  2. Harus memiliki jumlah kolom minimum yang diperlukan untuk berdiri.

  3. Harus simetris

  4. Jumlah Bytes Menang terendah

Contoh: (# hanya untuk membantu Anda menghitung spasi. Seharusnya tidak termasuk dalam output Anda)

d = 10

_____|_____
12345|12345
     |

d = 32

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

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

atau

______|__________|______
123456|1234554321|123456
      |          |
JoshK
sumber
Untuk memperjelas, apakah angka-angka dalam output diperlukan, atau hanya ilustratif?
isaacg
@isaacg Tidak, mereka tidak diperlukan dalam output. Mereka ada di sana sehingga kalian tidak perlu menghitung garis pada contoh saya.
Joshk
Saya pikir spesifikasi Anda cacat? Apa yang mencegah solusi 1 | 2 | 3 | 4 | 5 ... | di mana | adalah sebuah balok.
Vlo
@Vo. Salah satu aturannya adalah menggunakan jumlah kolom minimum. Oleh karena itu menggunakan kolom setiap ruang tidak akan menjadi minimum.
Joshk
Anda mengatakan d akan selalu genap, tetapi dalam contoh terakhir Anda, d = 21.
SE - berhenti menembak orang-orang baik

Jawaban:

4

JavaScript (ES6), 92 byte

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

Dimana \nmewakili karakter baris baru literal. Jika dbisa aneh, saya butuh 128 byte:

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`
Neil
sumber
Bagaimana solusi Anda untuk angka ganjil bekerja? Untuk d = 35, tidak ada solusi optimal yang simetris.
SE - berhenti menembakkan orang-orang baik
@ Hansmannfan Ini mengembalikan solusi simetris yang paling tidak optimal, yang dalam hal ini adalah |____________|___________|____________|dll.
Neil
Saya kira itu adalah interpretasi terbaik.
SE - berhenti menembakkan orang-orang baik
0

Ruby, 108 byte

Mungkin bisa bermain golf lebih banyak. Algoritma serakah.

->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}
Nilai Tinta
sumber