Schreiben Sie das kürzestmögliche Programm, das eine Reihe eindeutiger positiver Ganzzahlen aufnimmt und eine ASCII-Darstellung konzentrischer Sechsecke mit diesen Seitenlängen aus Schrägstrichen, Unterstrichen, Leerzeichen und Zeilenumbrüchen ausgibt.
Das kürzeste Programm in Bytes, das von https://mothereff.in/byte-counter gezählt wird, gewinnt.
Beispiele
(Sie sehen mit weniger Zeilenabstand besser aus.)
Wenn die Eingabe 1
die Ausgabe ist, sollte das Sechseck mit der Seitenlänge 1 sein:
__
/ \
\__/
Beachten Sie, dass am oberen und unteren Rand des Sechsecks zwei Unterstriche verwendet werden, um die Proportionen zu verbessern.
Im Allgemeinen enthält das Sechskant der Größe N N Schrägstriche an jeder abgewinkelten Seite und 2 * N Unterstriche an der Ober- und Unterseite.
Wenn die Eingabe 1 2
die Ausgabe ist, sollten die konzentrischen Sechsecke mit den Seitenlängen 1 und 2 sein:
____
/ __ \
/ / \ \
\ \__/ /
\____/
Wenn der Eingang 1 3
der Ausgang ist, sollte sein:
______
/ \
/ __ \
/ / \ \
\ \__/ /
\ /
\______/
Wenn der Eingang 1 3 2
der Ausgang ist, sollte sein:
______
/ ____ \
/ / __ \ \
/ / / \ \ \
\ \ \__/ / /
\ \____/ /
\______/
etc.
E / A-Regeln
Die Eingabe muss entweder über die Befehlszeile oder über stdin erfolgen, kann jedoch in einem beliebigen Format erfolgen, das für Sie am bequemsten ist.
Zum Beispiel könnten Sie jede Nummer als Befehlszeilenargument geben: > myprogram 1 3 2
, oder Sie können den Benutzer zur Eingabe der Zahlen als vorformatierte Liste aufgefordert: [1, 3, 2]
.
Die Ausgabe muss auf stdout oder das nächsthöhere Sprachäquivalent erfolgen.
Zusätzliche Regeln
- Die Eingabe besteht immer aus einer Reihe eindeutiger positiver Ganzzahlen, nicht unbedingt in beliebiger Reihenfolge .
- Die Ausgabe muss ...
- keine Zeichen außer
/\ _
und Zeilenumbrüche enthalten. - haben keine nachgestellten oder unnötigen führenden Leerzeichen.
- Enthält keine überflüssigen führenden Zeilenumbrüche, kann aber einen optionalen nachgestellten Zeilenumbruch enthalten.
- keine Zeichen außer
- Wenn nichts eingegeben wird, wird nichts ausgegeben (außer möglicherweise einer neuen Zeile).
- Wenn dies hilft, können Sie davon ausgehen, dass die Eingabe-Ganzzahlen kleiner als 2 16 sind .
1
auf das innerste oder äußerste Sechseck?1
(oder eine beliebige Zahl) bezieht sich auf das Sechseck mit einer Seitenlänge von 1. (Mit der Einschränkung, dass 1 Schrägstrich = 2 Unterstriche ist.) Bezieht1
sich also immer auf das innerste Sechseck.Antworten:
CJam,
148116109 BytesDas hat viel länger gedauert als ich erwartet hatte. Ursprünglich wollte ich nur den oberen linken Quadranten iterativ erstellen, wie bei den Diamantherausforderungen, und dann den Rest durch Spiegeln erhalten. Aber ich habe nicht bemerkt, dass die Unterstriche nicht der Spiegelsymmetrie zwischen der oberen und unteren Hälfte entsprechen. Also musste ich das meiste wiederholen, um die rechte Hälfte iterativ zu erzeugen und dann nur einmal (nach links) zu spiegeln.
Teste es hier.
Ein Fibonacci-ähnliches Beispiel:
Erläuterung:
Wie oben angegeben, beginne ich mit der iterativen Erstellung der rechten Hälfte. Das heißt, anfangs habe ich nur ein einzelnes Feld im Raster, und dann umgebe ich für jeden möglichen Ring das vorhandene Feld entweder in Feldern oder in einem neuen Halbsechseck.
Sobald dies erledigt ist, spiegele ich jede Zeile nach links und fülle sie mit führenden Leerzeichen auf, um eine korrekte Ausrichtung zu gewährleisten. Hier ist eine Aufschlüsselung des Codes:
quelle
Python -
251, 240, 239,228Alternativer Ansatz (251):
quelle
APL (222 Byte in UTF-8)
(und 133 Zeichen)
Da bei dieser Frage speziell die Anzahl der Bytes in der UTF8-Darstellung abgefragt wird , musste ich sie tatsächlich ein wenig entgolfen , damit sie länger ist, aber die UTF8-Darstellung kürzer. (Insbesondere ist das Zeichen des Pendleroperators
⍨
drei Bytes, während()
es nur zwei Bytes sind, so dass die Optimierung nicht mehr funktioniert und die Zuweisung auch sehr teuer wird.)Vorherige Version, die kürzer in Zeichen ist (124), aber mehr Bytes verwendet, wenn sie in UTF-8 dargestellt wird (230, was den zweiten Platz bedeuten würde):
Prüfung:
quelle
Perl 5, 352 (349 Bytes + 3 für
anE
Flags)Dies könnte wahrscheinlich viel mehr golfen werden ..
Ungolfed:
Beispiel (
1 5 3 14
):quelle
C # -
388316 BytesBearbeiten: Es wurde geändert, wie das Drucken nachgestellter Leerzeichen vermieden wird, und einige LINQ-Befehle eingefügt
Einfaches Programm, das Befehlszeilenargumente akzeptiert. Es durchläuft jedes mögliche Zeichen in jeder Zeile eines Rechtecks, das durch die maximale Sechseckdimension definiert ist, und hängt es an die aktuelle Zeile an, bevor die Zeilen abgeschnitten und nacheinander gedruckt werden (es erzeugt die optionale nachgestellte neue Zeile).
Golf Code:
Ungolfed-Code:
quelle
APL (Dyalog Classic) , 151 Bytes (93 mit der klassischen APL-Codierung)
Probieren Sie es online!
quelle