Köprü İnşa Etmek


10

Senin görevin bir dmesafe verilen mesafe, iki uçurum bağlamak için bir köprü inşa etmektir . dher zaman eşit olacak

Ancak, köprünün dayanabilmesi için sütunlara ihtiyacı vardır. Her sütun, her bir tarafta en fazla 6 boşluk tutabilir.

Bu örnek için:

________                        ________
        |                      |
   A    |                      |   B

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

İçin köprü d = 20iki sütun ile böyle görünmelidir. Sütunlar d.

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

Kurallar:

  1. Ayağa kalkmak için yeterli sütun olmalıdır.

  2. Ayağa kalkmak için gereken minimum sütun sayısı olmalıdır.

  3. Simetrik olmalı

  4. En düşük Bayt Kazanma miktarı

Örnekler: (#s yalnızca boşluk saymanıza yardımcı olmak içindir. Çıktınıza dahil edilmemelidir)

d = 10

_____|_____
12345|12345
     |

d = 32

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

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

veya

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

Açıklığa kavuşturmak için, çıktıdaki sayılar gerekli mi yoksa yalnızca açıklayıcı mı?
isaacg

@isaacg Hayır, çıktıda gerekli değildir. Onlar sadece orada bu yüzden benim örnekler üzerinde çizgiler saymak zorunda değilsiniz.
JoshK

Bence şartnameniz kusurlu mu? 1 | 2 | 3 | 4 | 5 ... | d çözümünü ne önler burada | bir ışın.
Vlo

@Vlo Kurallardan biri, mümkün olan en düşük sütun sayısını kullanmaktır. Bu nedenle her boşluk bir sütun kullanmak minimum olmaz.
JoshK

D'nin her zaman eşit olacağını söylüyorsunuz, ancak son örneğinizde d = 21.
SE - iyi adamları

Yanıtlar:


4

JavaScript (ES6), 92 bayt

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

Burada \ngerçek satırsonu karakterini temsil eder. Eğer dgarip olabilir, bu 128 byte beni alır:

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`

Tek sayılar için çözümünüz nasıl çalışır? D = 35 için, optimal çözeltilerin hiçbiri simetrik değildir.
SE - iyi adamları

@Hohmannfan Bu durumda olan en az yetersiz simetrik çözümü döndürür |____________|___________|____________|.
Neil

Sanırım bu en iyi yorum.
SE - iyi adamları

0

Ruby, 108 bayt

Muhtemelen çok daha fazla golf yapılabilir. Açgözlü algoritma.

->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}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.