Eine Brücke bauen


10

Ihre Aufgabe ist es, eine Brücke zu bauen, um zwei Klippen zu verbinden, wenn ein Eingang vorhanden ist d, der Abstand voneinander. dwird immer gerade sein

Die Brücke benötigt jedoch Säulen, um sie hochzuhalten. Jede Spalte kann maximal 6 Leerzeichen auf jeder Seite enthalten.

Für dieses Beispiel:

________                        ________
        |                      |
   A    |                      |   B

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

Die Brücke für d = 20sollte mit zwei Spalten so aussehen. Spalten zählen nicht in d.

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

Regeln:

  1. Muss genug Säulen haben, um aufzustehen.

  2. Muss über eine Mindestanzahl von Spalten verfügen, die zum Aufstehen erforderlich sind.

  3. Muss symmetrisch sein

  4. Die geringste Anzahl von Bytes gewinnt

Beispiele: (#s dienen nur zum Zählen von Leerzeichen. Sollte nicht in Ihrer Ausgabe enthalten sein.)

d = 10

_____|_____
12345|12345
     |

d = 32

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

d = 8

____|____
1234|1234
    |

d = 4

__|__
12|34
  |

d = 22

_____|____________|_____
12345|123456654321|
     |            |

oder

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

Sind zur Verdeutlichung die Zahlen in der Ausgabe erforderlich oder nur zur Veranschaulichung?
isaacg

@isaacg Nein, sie werden in der Ausgabe nicht benötigt. Sie sind nur da, damit ihr bei meinen Beispielen keine Zeilen zählen müsst.
JoshK

Ich denke, Ihre Spezifikation ist fehlerhaft? Was verhindert eine 1 | 2 | 3 | 4 | 5 ... | d-Lösung, wobei | ist ein Strahl.
Vlo

@Vlo Eine der Regeln ist die Verwendung der minimal möglichen Anzahl von Spalten. Daher wäre bei Verwendung einer Spalte nicht jedes Leerzeichen das Minimum.
JoshK

Sie sagen, d wird immer gerade sein, aber in Ihrem letzten Beispiel ist d = 21.
SE - hör auf, die Guten zu feuern

Antworten:


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`

Wobei \ndas wörtliche Zeilenumbruchzeichen steht. Wenn des seltsam sein kann, brauche ich 128 Bytes:

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`

Wie kann Ihre Lösung für ungerade Zahlen funktionieren? Für d = 35 ist keine der optimalen Lösungen symetrisch.
SE - hör auf, die Guten zu feuern

@Hohmannfan Es gibt die am wenigsten suboptimale symmetrische Lösung zurück, die in diesem Fall |____________|___________|____________|usw. ist .
Neil

Ich denke, das ist die beste Interpretation.
SE - hör auf, die Guten zu feuern

0

Ruby, 108 Bytes

Wahrscheinlich kann viel mehr Golf gespielt werden. Gieriger Algorithmus.

->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}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.