Xây dựng cây cầu


10

Nhiệm vụ của bạn là xây dựng một cây cầu để kết nối hai vách đá với một đầu vào d, cách nhau một khoảng. dsẽ luôn luôn

Tuy nhiên, cây cầu cần cột để giữ nó lên. Mỗi cột có thể chứa tối đa 6 khoảng trống ở mỗi bên.

Ví dụ này:

________                        ________
        |                      |
   A    |                      |   B

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

Cây cầu cho d = 20nên trông như thế này với hai cột. Cột không được tính trong d.

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

Quy tắc:

  1. Phải có đủ cột để đứng lên.

  2. Phải có số lượng cột tối thiểu cần thiết để đứng lên.

  3. Phải đối xứng

  4. Lượng Byte thấp nhất

Ví dụ: (#s chỉ để giúp bạn đếm khoảng trắng. Không nên đưa vào đầu ra của bạn)

d = 10

_____|_____
12345|12345
     |

d = 32

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

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

hoặc là

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

Để làm rõ, những con số trong đầu ra là cần thiết, hay chỉ mang tính minh họa?
isaacg

@isaacg Không có chúng không cần thiết trong đầu ra. Họ chỉ ở đó để các bạn không phải đếm dòng trên ví dụ của tôi.
JoshK

Tôi nghĩ rằng đặc điểm kỹ thuật của bạn là thiếu sót? Điều gì ngăn cản giải pháp 1 | 2 | 3 | 4 | 5 ... | d trong đó | là một chùm.
Vlo

@Vlo Một trong những quy tắc là sử dụng số lượng cột tối thiểu có thể. Do đó, sử dụng một cột mỗi không gian sẽ không phải là tối thiểu.
JoshK

Bạn nói d luôn luôn là số chẵn, nhưng trong ví dụ cuối cùng của bạn, d = 21.
SE - ngừng bắn những người tốt vào

Câu trả lời:


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`

Trường hợp \nđại diện cho nhân vật dòng chữ mới. Nếu dcó thể là số lẻ, tôi phải mất 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`

Làm thế nào giải pháp của bạn cho số lẻ làm việc? Với d = 35, không có giải pháp tối ưu nào là đối xứng.
SE - ngừng bắn những người tốt vào

@Hohmannfan Nó trả về giải pháp đối xứng dưới mức tối thiểu, trong trường hợp này là |____________|___________|____________|v.v.
Neil

Tôi đoán đó là cách giải thích tốt nhất.
SE - ngừng bắn những người tốt vào

0

Ruby, 108 byte

Có lẽ có thể được đánh golf xuống nhiều hơn nữa. Thuật toán tham lam.

->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}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.