Mach mir einen Alphabetbaum

14

Intro

In den meisten Schriftarten alle die Großbuchstaben des Alphabets neben BDOhaben einzelne Linien etwa einige der vier Ecken des Charakters des Begrenzungsrechteck zu berühren: ACEFGHIJKLMNPQRSTUVWXYZ.

Zum Beispiel Aberühren die beiden Beine die untere linke und die untere rechte Ecke des Charakters. Ebenso Cberührt es seine oberen und unteren rechten Ecken (es ist ein bisschen gebogen, aber es ist nah genug). LBerührt nur die linke obere und rechte untere Ecke mit einzelnen Linien. Die untere linke Ecke von List 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. 1ist für oben links, 2ist für oben rechts, 3unten links, 4unten 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 Aund rechts oben Cund die Verbindung rechts unten Aund 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 ACEFGHIJKLMNPQRSTUVWXYZin 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 ACEFGHIJKLMNPQRSTUVWXYZLeerzeichen und Zeilenumbrüche enthalten. BDOwird 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 Yverbindet 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 .

Calvins Hobbys
quelle
Sie können Ihre Lösung fest codieren?
Edc65
2
@ edc65 Sie können Ihre Lösung fest codieren.
Calvins Hobbys
7
Lustig, wie diese 2 Sätze nur 1 unterschiedlichen Charakter haben: P
Teun Pronk
1
@githubphagocyte, das wäre besser als Ergänzung zu der Frage als als Antwort, da es keine Antwort ist.
Peter Taylor
1
Schönes Golfen, @ Calvin'sHobbies. Dies ist eine Menge Spaß, die Antworten zu sehen.
Jordanien

Antworten:

1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Ausgabe:

Q A P M F R L Z 
 U I N K S H X J 
  G T C V E W Y

Verbindungen dank @githubphagocyte's checker:

Q   A   P   M   F   R   L   Z   
 \ / \ /   / \ /   / \   \   \  
  U   I   N   K   S   H   X   J   
     / \ /   / \ /   / \ / \ /    
    G   T   C   V   E   W   Y 

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:

jist der String-Join von Python. dist Raum. \0ist 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.

isaacg
quelle
12

GolfScript (41 Zeichen)

'QZENRPMALHIFKSXJTUVWYGC'8/{' '*n' '+:n}/

Online-Demo

Konnektivitätsdiagramm:

Q   Z   E   N   R   P   M   A
 \   \   \ /   / \ /   / \ / \
  L   H   I   F   K   S   X   J
   \ / \ / \ /   / \ /   /   /
    T   U   V   W   Y   G   C
Peter Taylor
quelle
11

Python, 49

print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')

Beispiel:

>>> print' '.join('  MQRCNAF\n XZHLKSIP\n\0GJWVUYET')
    M Q R C N A F 
   X Z H L K S I P 
  G J W V U Y E T

Ich denke, es verbindet sich jetzt richtig, aber ich kann wieder etwas verpasst haben.

grc
quelle
F4G1
scheint
@Timmy Aber F2 ist mit A3 verbunden. Alles scheint mit mir verbunden zu sein.
Calvins Hobbys
@ Calvin'sHobbies Ich glaube ich habe die Anforderungen falsch verstanden. Darf es benachbarte Ecken geben, die nicht verbunden sind?
Tymric
2
@ Timy Sicher. Diese Eckpaare zählen einfach nicht als verbunden, aber die beiden Buchstaben können auf andere Weise verbunden werden.
Calvins Hobbys
9

Marbelous 164 158 143

benutzt 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.

43 20 46 20 50 20 4D 20 51 20 52 20 45 20 41 14 20 58 20 48 20 4e 20 4C 20 4B 20 5A 20 49 20 53 14 47 20 59 20 56 20 20 20 55 20 4A 20 54 20 57

Ausgabe:

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W

Ein besserer Marbelous-Ansatz 135 129

Dieser 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)

57
54
4A
55
20
56
59
47
14
53
49
5A
4B
4C
4E
48
58
20
14
41
45
52
51
4D
50
46
43
Sp
Sp:
20 I0
.. =V
Überakteur
quelle
Diese Antwort wird auf 96 sinken, wenn für Marbelous-Quellcode keine Leerzeichen zwischen Zellen mehr erforderlich sind, was später heute der Fall sein wird.
Overactor
1
Die Verwendung von Sprachen oder Sprachfeatures, nach deren Datum die Frage gestellt wird, wird als Betrug angesehen.
Peter Taylor
4
@PeterTaylor Derzeit werden in dieser Antwort nur Funktionen verwendet, die implementiert wurden, als die Frage gestellt wurde.
Overactor
7

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

  Q
 A J   R
C U   S Y
 I M N
E H X
 F L T
G   Z K P
     V W
Teun Pronk
quelle
2
Egal wie verrückt die Codegolf-Herausforderung ist, es gibt fast immer eine brainfuck-Antwort.
Muss ich
@AndoDaan Nein, würde es nicht. Das habe ich aber nicht benutzt. Ich habe mein eigenes Gehirn gemacht, wie ich es immer getan habe. Ich habe das oft benutzt und die meisten Tricks gelernt, die ich beim Schreiben von BF immer benutzte, sodass ich nicht überrascht wäre, wenn es ähnlich aussieht.
Teun Pronk
Nicht gleich, identisch. Beide 669 Bytes lang. Beide verwenden dieselbe Zeichen-für-Zeichen-Methode (überhaupt keine Optimierung) und beide sind identisch mit den Plussy-, Miney- und anderen Dingsymbolen.
AndoDaan
2
Muss also ein Zufall sein. Ich nehme aus Spaß an der Herausforderung teil und sehe keinen Spaß daran, einen BF zu generieren. Der einzige Weg, der sogar ein bisschen Spaß machen könnte , ist, wenn Sie den Generator selbst geschrieben haben.
Teun Pronk
6

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.

C A Q S R P M J
 X Z I F K N H
G T U V W Y E L

Aktualisieren Sie das gleiche in Perl. Länge bleibt noch 46:

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg
core1024
quelle
4

HTML, 55

Code

<pre>C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W

Ausgabe:

C F P M Q R E A
 X H N L K Z I S
G Y V   U J T W
xem
quelle
3

Bash + Coreutils, 46

sed 's/\S/ &/g'<<<"CAQSRPMJ
 XZIFKNH
GTUVWYEL"

Jetzt schamlos @ core1024 optimalen Baum ausleihen :

Ausgabe:

$ ./alphatree.sh
 C A Q S R P M J
  X Z I F K N H
 G T U V W Y E L
$
Digitales Trauma
quelle
2

STATA 63

Edit: jetzt meine eigene Lösung. Sollte alle Buchstaben sein.

di 'C F P M Q R E A' di ' X H N L K Z I S' di 'G Y V   U J T W'

 C F P M Q R E A 
  X H N L K Z I S 
 G Y V   U J T W
Markierungen
quelle
1

Javascript 83

Ich beginne mit der Hardcodierung IHRER Lösung

console.log('  Q\n A J   R\nC U   S Y\n I M N\nE H X\n F L T\nG   Z K P\n     V W')
edc65
quelle
mach es kürzer mit alertstattconsole.log
Mark Gabriel
2
@MarkGabriel Ich würde es gerne etwas kürzer machen. Alert hat nicht die richtige Schriftart, um ASCII-Kunst anzuzeigen.
Edc65
1
Aha. Vergessen, dass die Formatierung der Warnung anders ist. :)
Mark Gabriel
1

PHP, 69

<?php echo preg_replace("/(\w)/",'\1 ',"CAQSRPMJ
 XZIFKNH
GTUVWYEL");

gibt

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L
Sieg
quelle
Sie haben überhaupt keine diagonalen Verbindungen in Ihrer Ausgabe
edc65
@ MartinBüttner - danke, die Reparatur hat mich ein Byte gekostet.
Sieg
Das Problem mit dieser (und vielen anderen) Antwort ist, dass die Ausgabe kürzer ist als der Code (siehe core1024 php)
edc65
Sie können zwei Bytes rasieren, indem Sie Ihren "/\w/",'\0 '
regulären Ausdruck