Intro
In den meisten Schriftarten alle die Großbuchstaben des Alphabets neben BDO
haben einzelne Linien etwa einige der vier Ecken des Charakters des Begrenzungsrechteck zu berühren: ACEFGHIJKLMNPQRSTUVWXYZ
.
Zum Beispiel A
berühren die beiden Beine die untere linke und die untere rechte Ecke des Charakters. Ebenso C
berührt es seine oberen und unteren rechten Ecken (es ist ein bisschen gebogen, aber es ist nah genug). L
Berührt nur die linke obere und rechte untere Ecke mit einzelnen Linien. Die untere linke Ecke von L
ist ein Eckpunkt, nicht das Ende einer einzelnen Linie.
Hier ist eine Tabelle, welche Zeichen welche Ecken berühren, entsprechend der Stack Exchange-Schriftart, die ich (und hoffentlich Sie) sehe. 1
ist für oben links, 2
ist für oben rechts, 3
unten links, 4
unten rechts.
A: 3 4
C: 2 4
E: 2 4
F: 2 3
G: 2
H: 1 2 3 4
I: 1 2 3 4
J: 1 3
K: 1 2 3 4
L: 1 4
M: 3 4
N: 2 3
P: 3
Q: 4
R: 3 4
S: 2 3
T: 1 2
U: 1 2
V: 1 2
W: 1 2
X: 1 2 3 4
Y: 1 2
Z: 1 4
Installieren
Stellen Sie sich vor, diese Eckberührungslinien verlaufen in Richtung der Ecke, die sie berühren, damit die Anordnungen dieser Zeichen in einem Raster "verbunden" werden können.
Zum Beispiel alle Zeichen in
A
C X
sind verbunden, weil die Verbindung links unten A
und rechts oben C
und die Verbindung rechts unten A
und links oben erfolgt X
.
Jedoch,
CAX
hat keine Verbindungen, da Verbindungen nur diagonal von einem Zeichen zum nächsten auftreten .
Herausforderung
Schreiben Sie das kürzestmögliche Programm (in Byte), das alle Zeichen ACEFGHIJKLMNPQRSTUVWXYZ
in einem großen, vollständig verbundenen Baum ausgibt , gemäß den obigen Regeln. Jedes Zeichen muss genau einmal vorkommen. Verwenden Sie Leerzeichen als Leerzeichen.
Beispiel
Alles in diesem 23-Buchstaben-Baum kann von irgendetwas anderem über die oben definierten diagonalen Verbindungen erreicht werden:
Q
A J R
C U S Y
I M N
E H X
F L T
G Z K P
V W
Anmerkungen
- Sie können Ihre Lösung fest codieren.
- Ihre Ausgabe sollte nur
ACEFGHIJKLMNPQRSTUVWXYZ
Leerzeichen und Zeilenumbrüche enthalten.BDO
wird nicht verwendet. - Führende / nachfolgende Leerzeichen sind in Ordnung, solange alle Verbindungen richtig positioniert sind.
- Das Ausgaberaster sollte nicht größer als 30 x 30 Zeichen sein (einschließlich Zeilenumbrüchen und Leerzeichen).
- Es werden nur Eckverbindungen berücksichtigt. Der Boden von
Y
verbindet sich mit nichts. Sie müssen die Eckverbindungen aus der obigen Tabelle verwenden. - Nicht alle verbindbaren Ecken müssen mit etwas verbunden werden. Verbindbare und nicht verbindbare Ecken können aneinander grenzen.
- Ausgabe auf Standardausgabe. Es erfolgt keine Eingabe.
- Das Einfügen eines Konnektivitätsdiagramms mit Schrägstrichen, wie es Peter Taylor getan hat, ist hilfreich, aber nicht erforderlich.
Update:
githubhagocyte hat auf Github eine Überprüfung der Gültigkeit des Alphabetbaums durchgeführt .
quelle
Antworten:
Pyth , 32
Ausgabe:
Verbindungen dank @githubphagocyte's checker:
Kombiniert den Null-Byte-Trick von @ grc mit der extrem kurzen Syntax von Pyth. Ich habe mein eigenes Gitter für die Hölle daraus gemacht.
Erläuterung:
j
ist der String-Join von Python.d
ist Raum.\0
ist die Escape-Sequenz für das Null-Byte. Es ist ein NOP, wenn es gedruckt wird, sodass die dritte Zeile genau zwei Leerzeichen vor sich hat. Beachten Sie auch, dass Strings in Pyth sowohl mit EOL als auch mit Anführungszeichen terminiert werden können.quelle
GolfScript (41 Zeichen)
Online-Demo
Konnektivitätsdiagramm:
quelle
Python, 49
Beispiel:
Ich denke, es verbindet sich jetzt richtig, aber ich kann wieder etwas verpasst haben.
quelle
F4
G1
Marbelous
164158143benutzt bmarks' Baum , da es für fast perfekt optimiert Marbelous . Code ist in diesem Fall nur der Ascci-Code für alle Zeichen (einschließlich Leerzeichen und Zeilenumbrüche) von links nach rechts, getrennt durch Leerzeichen.
Ausgabe:
Ein besserer Marbelous-Ansatz
135129Dieser gibt denselben Baum mit einem zusätzlichen Leerzeichen vor und nach jeder Zeile aus. Dabei werden die Literale in eine Unterroutine eingegeben, die vor dem Drucken des Literal ein Leerzeichen ausgibt. Und nur ein Leerzeichen drucken, wenn das Literal ein Leerzeichen ist (20 HEX)
quelle
BrainF * ck 669
Machte dieses für Kichern. Gibt genau das Gleiche wie im Beispiel aus.
Bietet später eine andere Lösung.Ich kann mir keine clevere Möglichkeit vorstellen, dies in Lua zu tun, also bleibe ich einfach bei dieser :)Ausgabe
quelle
PHP 46
Dies war eher eine Lösung für Rätsel als für das Programmieren, daher ist meine Antwort eher eine Lösung für Rätsel als für Code. Es ist jedoch ein gültiges PHP-Programm, also reiche ich es ein.
Aktualisieren Sie das gleiche in Perl. Länge bleibt noch 46:
quelle
HTML, 55
Code
Ausgabe:
quelle
Bash + Coreutils, 46
Jetzt schamlos @ core1024 optimalen Baum ausleihen :
Ausgabe:
quelle
STATA 63
Edit: jetzt meine eigene Lösung. Sollte alle Buchstaben sein.
quelle
Javascript 83
Ich beginne mit der Hardcodierung IHRER Lösung
quelle
alert
stattconsole.log
PHP, 69
gibt
quelle
"/\w/",'\0 '