(Mit einer Entschuldigung an Jim West für den Titel und nach dem Zufallsprinzip inspiriert von Ciscos textueller Darstellung ihres Logos: .:|:.:|:.
für das Konzept)
Ausgeben einer 1 <= n <= 255
ASCII-Grafikdarstellung einer Hängebrücke mit einer bestimmten Ganzzahl gemäß den n
folgenden Konstruktionsregeln:
- Der Anfang und das Ende der Brücke (in der
n
Entfernung nicht mitgezählt ) sind immer-|
und|-
, sodass die Brücke in geeigneter Weise mit den Autobahnen daneben verbunden werden kann. - Die Brücke erstreckt sich nicht nach unten (die Fahrbahnebene, bestehend aus der
-
Reihe, ist die unterste Reihe). - Es können höchstens zwei Fahrbahnstücke
--
hintereinander liegen, für eine längere Spannweite sind Tragseile zur Abstützung erforderlich. - Die Tragseile
\
verlaufen|
geradlinig von der Fahrbahn bis zu den Türmen . - Die Türme
|
müssen hoch genug sein, um die angrenzenden Aufhängungskabel zu tragen, dürfen jedoch nicht höher sein. - Die Brücke muss um den Mittelpunkt von links nach rechts ausbalanciert sein, wobei die Mittelteile nach Möglichkeit bevorzugt werden.
- All dies sollte zu einer Minimierung der Kabel führen. Um jedoch klar zu sein, muss die Anzahl der Aufhängungskabel minimiert werden, während die obigen Regeln eingehalten werden.
Zur visuellen Darstellung sind hier die erwarteten Ausgaben für n = 1, 2, 3, ... 15
:
1
-|-|-
2
-|--|-
3
-|\-/|-
4
-|\--/|-
5
|\ /|
-|-\-/-|-
6
|\ /|
-|-\--/-|-
7
|\ /|
| \ / |
-|--\-/--|-
8
|\ /|
| \ / |
-|--\--/--|-
9
|\ /|
| \ / |
| \ / |
-|\--\-/--/|-
10
|\ /|
| \ / |
| \ / |
-|\--\--/--/|-
11
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\-/--/-|-
12
|\ /|
| \ / |
| \ / |
|\ \ / /|
-|-\--\--/--/-|-
13
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\-/--/--|-
14
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
-|--\--\--/--/--|-
15
|\ /|
| \ / |
| \ / |
|\ \ / /|
| \ \ / / |
| \ \ / / |
-|\--\--\-/--/--/|-
Eingang
Eine einzelne positive ganze Zahl in jedem geeigneten Format , n > 9
.
Ausgabe
Die ASCII-art Brücke folgt der obigen Konstruktionstechnik.
Regeln
- Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Brückenzeichen selbst korrekt ausgerichtet sind.
- Es ist entweder ein vollständiges Programm oder eine Funktion zulässig. Bei einer Funktion können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
- Fügen Sie nach Möglichkeit einen Link zu einer Online-Testumgebung hinzu, damit die Benutzer Ihren Code ausprobieren können!
- Standardlücken sind verboten.
- Dies ist Codegolf, daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Byte) gewinnt.
Antworten:
05AB1E ,
795958 BytesProbieren Sie es online! .
Erläuterung:
Als die bessere Lösung gefunden wurde, lautete der Schlüssel, die folgenden Arrays für jede Nummer wie folgt zurückzugeben:
quelle
Python 2, 173 Bytes
Spiegel des Wert von b und fügen Sie die zentralen „-“
f=lambda b:'-|'+b[::-1].replace('/','\\')+-~(~i%2)*'-'+b+'|-'
Grundmuster (rechte Hälfte der unteren Zeile)
b=(i*'/--')[:~-i/2]
Schleife für nicht-untere Schichten
for x in range(1,~-i/2):
Holen Sie sich die ersten x Zeichen des Grundmusters und komplett mit „-“
(len(b)-x)*'-'+b[:x]
Alle ersetzen - mit Leerzeichen zu drucken Alle Ebenen (außer unten)
print f().replace('-',' ')
Untere Ebene drucken
print f(b)
quelle
Befunge, 150 Bytes
Probieren Sie es online!
Ich habe auch eine unbenutzte Version des Codes zur Verfügung gestellt, die die beim Bau der Brücke verwendete Architektur besser demonstriert.
Probieren Sie es online!
Die Türme übernehmen die Eingabe und Parameterinitialisierung. Das Deck besteht aus zwei Schleifen, die die Teile der Brücke berechnen, die für jede x, y-Koordinate ausgegeben werden müssen. Und die Grundlage enthält die Zeichentabelle für diese Brückenteile sowie einen anderen völlig unabhängigen Code.
Ausführliche Erklärung
Wir beginnen mit der Berechnung der Breite und Höhe des Ausgabebereichs, der zum Rendern der Brücke iteriert werden muss.
Beachten Sie, dass der y- Bereich nicht auf Null basiert. Der Anfangswert ist
5 - (h<5)
und wird bis h iteriert (der aktuelle Wert wird bei 2,0 gespeichert). Der x- Wert wird von w bis 0 iteriert und auf dem Stapel gespeichert.Die innere Schleife ist nur eine Reihe von Booleschen Bedingungen, die bestimmen, ob eine bestimmte x , y- Koordinate mit einer der Positionen übereinstimmt, die ein Nicht-Leerzeichen erfordern. Diese Berechnungen basieren auf zwei Gleitversätzen, die dem Pfad der Aufhängungskabel folgen.
Die verschiedenen Bedingungen werden dann wie folgt bestimmt:
Um diese Bedingungen in den richtigen Zeichenversatz zu übersetzen, müssen wir sie nur mit einem geeigneten Versatz multiplizieren und das Ergebnis summieren. Diese Berechnung wird durchgeführt, wenn die Bedingungen ausgewertet werden. So sieht es ungefähr so aus:
Beachten Sie, dass der Wert für bridge_deck abhängig davon zusammengeführt wird, ob eine der anderen Bedingungen erfüllt ist, da ein Suspendierungs- oder Turmcharakter Vorrang vor dem Deck hat.
Das Endergebnis ist ein Versatz in der Zeichentabelle in der letzten Zeile des Spielfelds. Wir geben einfach dieses Zeichen aus und wiederholen die Schleife.
quelle
Batch, 241 Bytes
Hinweis: Leerzeichen in Zeile 5 nachziehen. Beginnt mit dem Aufbau einer Reihe von Leerzeichen und dem Hinzufügen von Kabeln nach Bedarf. Wiederholen Sie diesen Vorgang, um Türme in der gewünschten Höhe zu errichten, und ersetzen Sie dann alle verbleibenden Leerzeichen durch Straßen.
quelle
WinDbg, 312 Bytes
Die Eingabe erfolgt durch Setzen des Pseudoregisters
$t0
.Ich denke, es sollte eine Möglichkeit geben, die beiden
for
Loops zu einer zu kombinieren ... vielleicht auch einige andere Möglichkeiten zum Golfen ...Dieser Vorgang füllt den gesamten Bereich mit Straßen, ersetzt dann alle bis auf die letzte Reihe mit Leerzeichen und erstellt schließlich die Säulen und Kabel.
Beispielausgabe von 1-15:
quelle
Java 8,
423, 412 BytesDank Kritixi Lithos konnten 11 Bytes eingespart werden
Golf gespielt:
ungolfed:
quelle
int i,j,k,t=n/2+n%2,u=t-2,q=0
und anstatt dasschar v="-";
Sie es verwenden können , könnenchar v=45;
Sie dasabc%xyz==0
s ändern inabc%xyz<1
(haben es nicht getestet)