Überblick
Ordnen Sie die Sechsecke bei einer gegebenen Anzahl von Sechsecken in einer zusammenhängenden Form innerhalb der Grenzen eines 50 x 50 ASCII-Kunstbilds an. Die Form, die Sie wählen, kann beliebig sein - was auch immer Sie für das Golfen am besten geeignet finden -, solange es verbunden ist. Es können Löcher vorhanden sein, sofern diese größer als ein Sechseck sind (andernfalls ist die Anzahl der Sechsecke nicht eindeutig).
Layout
Alle Sechsecke müssen in der folgenden Form vorliegen (nur diese Größe und Ausrichtung ist gültig):
__
/ \
\__/ Note there are 2 underscores per horizontal edge.
Zwei Sechsecke sind direkt verbunden, wenn sie eine Kante teilen:
__ __
/ \__ / \
\__/ \ \__/
\__/ or / \
\__/
Zwei Sechsecke sind nicht verbunden, wenn sie nur einen Scheitelpunkt teilen:
__ __
/ \/ \
\__/\__/
Das Teilen einer halben Kante zählt ebenfalls nicht als verbunden:
__
/ \
\__/
/ \
\__/
Eine Sammlung von Sechsecken wird verbunden, wenn ein Pfad von einem Sechseck zu einem anderen existiert, wobei nur direkt verbundene Sechsecke verwendet werden.
Löcher
Ein sechseckgroßes Loch in einer zusammenhängenden Sammlung von Sechsecken zählt als Sechseck, sodass jedes ASCII-Kunstwerk eine eindeutige Sechseckzahl aufweist.
Dies zählt nicht als Loch, da das potenzielle Loch ein einzelnes Sechseck ist:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ 7 hexagons (not 6 with a hole)
Dies tut zählt als ein Loch , da es nicht auf ein einzelnes Sechseck entspricht:
__
__/ \__
/ \__/ \__
\__/ \__/ \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/ 8 hexagons with a hole
Ein- und Ausgabe
Eingang
Eine ganze Zahl von 1 bis 255.
Ausgabe
Eine ASCII-Zeichenfolge, die die Anzahl der eingegebenen Sechsecke darstellt, die wie oben beschrieben verbunden sind.
- Die Anzahl der Zeilen (durch Zeilenvorschub getrennte Teilzeichenfolgen) beträgt höchstens 50 plus einer zusätzlichen optionalen nachgestellten Zeile.
- Die Reihen müssen nicht gleich lang sein, aber jede darf höchstens 50 lang sein.
- Zeilen mit Nulllänge können über oder unter der verbundenen Form vorhanden sein, vorausgesetzt, die Gesamtzahl der Zeilen überschreitet 50 nicht.
- Nur-Leerzeichen-Zeilen können über oder unter der verbundenen Form vorhanden sein, sofern die Gesamtzahl der Zeilen 50 nicht überschreitet.
- Links von der Form können Leerzeichen angezeigt werden, sofern die Zeilenlänge 50 nicht überschreitet (die Form muss nicht links ausgerichtet sein).
- Leerzeichen können rechts von der Form angezeigt werden, sofern die Zeilenlänge 50 nicht überschreitet.
- Alle Zeichen, die nicht Teil der verbundenen Form sind, müssen Leerzeichen oder Zeilenumbrüche sein.
Vorausgesetzt, die Ausgabe ist korrekt, muss sie nicht von einem Lauf zum nächsten konsistent sein.
Beispiele
Eingang: 6
Gültige Ausgaben:
__ __ __
/ \__/ \__/ \__
\__/ \__/ \__/ \
\__/ \__/ \__/
__ __
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/
__
__ / \
/ \__ \__/
\__/ \__/ \
\__/ \__/
\__/
/ \
\__/
Ungültige Ausgaben:
__
__/ \__
/ \__/ \
\__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid for 6 as the centre hole counts as a 7th hexagon.
__ __ __ __
/ \__/ \__/ \ / \
\__/ \__/ \__/ \__/
\__/ \__/ Invalid as the 6 hexagons are not connected.
__ __ __ __
/ \__/ \__/ \/ \
\__/ \__/ \__/\__/
\__/ \__/ Invalid as vertex touching does not count as connected.
__ __ __
/ \__/ \ / \
\__/ \__/ \__/
/ \__/ \
\__/ \__/
\__/ Invalid as the 6 connected hexagons are not the only visible characters.
Gewinnen
Die kürzeste gültige Antwort in Bytes gewinnt.
Bestenliste
(mit Martins Leaderboard-Snippet )
quelle
6
. Für die Eingabe255
einer horizontalen Reihe von Sechsecken wird in einem 50 x 50 ASCII-Kunst nicht passen.Antworten:
CJam,
645755 BytesTeste es hier.
Dies erzeugt spaltenweise das folgende Muster :
Erläuterung
Dies basiert auf Dennis ' exzellentem Tipp , mit
.e>
dem eine ASCII-Kunstausgabe aus mehreren Stücken zusammengesetzt wird. Wie er sagt,.e>
nimmt er das elementweise Maximum von zwei Arrays (oder Strings), und da Leerzeichen den niedrigsten Zeichencode haben, können wir dies verwenden, um andere Zeichen in ein String-Gitter einzufügen. Wenn die beiden Arrays nicht die gleiche Länge haben, werden die überflüssigen Elemente des längeren Arrays einfach unverändert kopiert. Dies bedeutet, dass die verschiedenen Muster nicht einmal dieselbe Größe haben müssen. Um dies auf zweidimensionale Arrays anzuwenden (weil wir die Zeilenumbrüche nicht bis zum Ende einfügen möchten), wenden wir an.e>
paarweise auf Zeilen an, was ergibt..e>
.Die Grundidee des Codes besteht darin,
N
Kopien eines einzelnen Sechsecks zu generieren , das an die richtige Position verschoben wurde. Wir "bewegen" das Sechseck vertikal, indem wir Leerzeilen voranstellen und horizontal, indem wir Leerzeichen voranstellen. Sobald wir fertig sind, falten wir alle Kopien zusammen und verwenden das Schöne:..e>
(wahrscheinlich dem längsten Operator, den ich jemals in einem CJam-Programm verwendet habe) zusammen.Hier ist der Code:
quelle
Python 2,
219207 ZeichenÜbernimmt die Eingabe für stdin.
Ziemlich einfach ein 50x50-Raster von Feldern erstellen und die Sechsecke gegebenenfalls einblenden. Nach dem 16. Sechseck, muss ich nicht die erste Reihe der
h
(das Sechseck als 2D - Array) , so verwende ichi>15
auf den Bereich , auf 1 statt 0 beginnenc=i*3%48+1;r=(i*3+1)/48*2+i%2
berechnet die c PALTE und r ow ich anfangen müssen.n
ist ein Boolescher Wert, der jedoch als Ganzzahl verwendet wird, um die Grenzen zu korrigieren (da erh[0]
nur aus 3 Zeichen besteht, um das Überschreiben von Daten zu vermeiden).Ich bin ziemlich zufrieden damit, ich habe seit der ersten Version etwa 50 Bytes gespart, vor allem, als ich mich an die
a[x:y]=b
Syntax erinnerte .Ausgabe (n = 30):
Da nachfolgende Leerzeilen zulässig sind, habe ich die Erstellung von
g
so geändert , dass statt 50bytearray
Sekunden nur 50 Sekunden erstellt werden. Dies entspricht3+(x>1)+x/16*2
der genauen Anzahl der erforderlichen Zeilen, wobei 12 Byte gespart werden.quelle
Swift 2.0,
601591 BytesZu rennen:
swift hexagons.swift 21
Ausgabe:
Swift's
substringToIndex
undstringByReplacingOccurencesOfString
nimm so viele Charaktere auf ...quelle
stringByPaddingToLength
. In diesem Fall sind die Zeichen jedoch 11 Zeichen länger als beim Eingeben der vollständigen Zeichenfolge.stringByAppendingString
in Objective-C, aber trotzdem ...C 238 Bytes
Nur die für die Anzahl der Zeichen erforderlichen Leerzeichen und Zeilenumbrüche werden berücksichtigt.
Es wird einfach eine Matrix aus Zeichen erstellt, diese in umgekehrter Reihenfolge gefüllt und dann das Ganze gedruckt.
quelle
JavaScript (ES6), 265 Byte
Tesselliert Sechsecke in einer Reihe von links nach rechts, abwechselnd auf und ab - wie eine Wabe - bis das Ende einer Reihe erreicht ist.
Ungolfed mit Beschreibung (funktioniert in Firefox):
quelle
Rubin, 120
Erstellt ein Array aus 50 Zeichenfolgen mit 50 Leerzeichen und setzt dann 4 Zeichen in 3 Zeilen ein, um die Sechsecke hinzuzufügen:
Da die erste Zeile Leerzeichen enthält, können wir nach dem Zeichnen eines Sechsecks kein weiteres darunter zeichnen, da die Leerzeichen die vorherigen Sechsecke überschreiben würden.
Daher werden die Sechsecke in Form einer 16x16-Raute (verzerrtes Rechteck) von unten nach oben und von links unten nach rechts oben geneigt hinzugefügt.
Die Saite
" __ "
wird dann mit zusätzlichen überschrieben\
und/
wo nötig.Ungolfed im Testprogramm
Typische Ausgabe (n = 250)
Es sollten noch ein paar Zeilen Leerzeichen oben sein, um insgesamt 50 zu erhalten, aber ich weiß nicht, ob es eine Möglichkeit gibt, Stackexchange so zu formatieren, dass sie diese enthalten.
quelle