Fais-moi un arbre alphabet

14

Intro

Dans la plupart des polices tous les caractères de l' alphabet en majuscules en plus BDOavoir des lignes qui touchent à peu près quelques - uns des quatre coins du rectangle de délimitation du personnage: ACEFGHIJKLMNPQRSTUVWXYZ.

Par exemple, les deux jambes d'un A"toucher" les coins inférieur gauche et inférieur droit du personnage. De même, Ctouche ses coins supérieur et inférieur droit (il est un peu incurvé mais il est assez proche). Lne touche que ses coins supérieur gauche et inférieur droit avec des lignes simples. Le coin inférieur gauche de Lest un sommet, pas la fin d'une seule ligne.

Voici un tableau de quels caractères touchent quels coins selon la police Stack Exchange que je vois (et j'espère que vous) voyez. 1est en haut à gauche, en 2haut à droite, en 3bas à gauche, en 4bas à droite.

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

Installer

Imaginez que ces lignes se touchant se prolongent dans le sens du coin qu'elles touchent afin que les dispositions de ces caractères sur une grille puissent être «connectées».

Par exemple, tous les caractères de

 A
C X

sont connectés parce que le coin inférieur gauche Aet le coin supérieur droit de la Cconnexion, ainsi que le coin inférieur droit et le coin Asupérieur gauche de la Xconnexion.

cependant,

CAX

n'a pas de connexions car les connexions se produisent uniquement en diagonale d'un caractère au suivant .

Défi

Écrivez le programme le plus court possible (en octets) qui génère tous les caractères ACEFGHIJKLMNPQRSTUVWXYZdans une grande arborescence entièrement connectée, selon les règles ci-dessus. Chaque personnage doit apparaître exactement une fois. Utilisez des espaces pour l'espace vide.

Exemple

Tout dans cet arbre de 23 lettres est accessible à partir de n'importe quoi d'autre via les connexions diagonales définies ci-dessus:

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

Remarques

  • Vous pouvez coder en dur votre solution.
  • Votre sortie ne doit contenir que des ACEFGHIJKLMNPQRSTUVWXYZespaces et des retours à la ligne. BDOne sera pas utilisé.
  • Les espaces de début / fin sont corrects tant que toutes les connexions sont correctement positionnées.
  • La grille de sortie ne doit pas dépasser 30 caractères sur 30 (y compris les retours à la ligne et les espaces).
  • Seules les connexions d'angle sont prises en compte. Le bas de Yne se connecte à rien. Vous devez utiliser les connexions d'angle du tableau ci-dessus.
  • Tous les coins connectables n'ont pas besoin de se connecter à quelque chose. Les coins connectables et non connectables peuvent se border.
  • Sortie vers sortie standard. Il n'y a aucune entrée.
  • Inclure un graphique de connectivité fait avec des barres obliques comme l' a fait Peter Taylor est une touche utile mais non requise.

Mise à jour:
githubhagocyte a fait un vérificateur de validité de l'arbre alphabétique sur Github .

Loisirs de Calvin
la source
Vous pouvez coder en dur votre solution?
edc65
2
@ edc65 Vous pouvez coder en dur votre solution.
Calvin's Hobbies
7
C'est drôle comme ces 2 phrases n'ont qu'un seul caractère différent: P
Teun Pronk
1
@githubphagocyte, ce serait mieux comme addendum à la question que comme réponse, étant donné que ce n'est pas une réponse.
Peter Taylor
1
Beau golf, @ Calvin'sHobbies. Celui-ci est très amusant pour voir les réponses.
Jordan

Réponses:

1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Production:

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

Connexions, grâce au vérificateur de @ githubphagocyte:

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

Combine le tour d'octet nul de @ grc et la syntaxe extrêmement courte de Pyth. J'ai fait ma propre grille pour l'enfer.

Explication:

jest la jointure de chaîne de python. dest l'espace. \0est la séquence d'échappement de l'octet nul. Il s'agit d'un NOP une fois imprimé, donc la troisième ligne a exactement deux espaces devant. Notez également que les chaînes peuvent être terminées en fin de vie en Pyth, ainsi que terminées par des guillemets.

isaacg
la source
12

GolfScript (41 caractères)

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

Démo en ligne

Graphique de connectivité:

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
la source
11

Python, 49

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

Exemple:

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

Je pense qu'il se connecte correctement maintenant, mais j'ai peut-être encore raté quelque chose.

grc
la source
F4semble connecté à G1, ce qui n'est pas valide
Tymric
@Timmy Mais F2 est connecté à A3. Tout me semble connecté.
Calvin's Hobbies
@ Calvin'sHobbies Je pense que j'ai mal compris les exigences. Est-il permis d'avoir des coins adjacents qui ne sont pas connectés?
Tymric
2
@Timmy Sure. Ces paires de coins ne comptent tout simplement pas comme connectées, mais les deux lettres peuvent être connectées d'une autre manière.
Calvin's Hobbies
9

Marbelous 164 158 143

utilise l'arbre des bmarks car il est presque parfaitement optimisé pour Marbelous . Dans ce cas, le code n'est que les codes ascci de tous les caractères (y compris les espaces et les nouvelles lignes) de gauche à droite, délimités par des espaces.

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

Production:

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

Une meilleure approche Marbelous 135 129

Celui-ci génère le même arbre avec un espace supplémentaire avant et après chaque ligne, il fonctionne en introduisant les littéraux dans un sous-programme qui imprime un espace avant d'imprimer le littéral. Et juste imprimer un espace si le littéral est un espace (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
suracteur
la source
Cette réponse descendra à 96 lorsque les espaces entre les cellules ne seront plus nécessaires pour le code source Marbelous, ce qui sera le cas plus tard dans la journée.
suracteur
1
L'utilisation de langues ou de fonctionnalités linguistiques postérieures à la question est considérée comme une fraude.
Peter Taylor
4
@PeterTaylor Pour l'instant, cette réponse utilise uniquement des fonctionnalités qui ont été implémentées lorsque la question a été posée.
suracteur
7

BrainF * ck 669

J'ai fait celui-ci pour rire. Produit exactement la même chose que l'exemple.
Fournira une autre solution plus tard. Je ne peux pas penser à un moyen intelligent de le faire à Lua, je vais donc m'en tenir à celui-ci :)

++++[->++++++++<]>..[-->+++++<]>+.>++++++++++.[->+++<]>++.[->++<]>+.-[-->+<]>.+++++[->++<]>.--[->++++<]>...>-[--->+<]>---.>++++++++++.+[->++++++<]>+.-[-->+<]>-.>-[--->+<]>.[----->++<]>--...>-[--->+<]>--.+[--->+<]>++++.--[->+++<]>-.[->+++<]>-.[->+++<]>++.++++[->++<]>+.-[->++++<]>.++++++[->++<]>+.-----[->++++<]>.[-->+++++<]>--.>++++++++++.[->+++++++<]>-.-[-->+<]>--.++++[->++<]>.[->++++<]>.[++++>---<]>.>++++++++++.[->+++<]>++.+++[->++<]>.[-->+<]>---.++++++[->++<]>.[-->+<]>------.>-[--->+<]>-.>++++++++++.[->+++++++<]>+.+[->++++<]>...--[->+++<]>.[--->+<]>++.--[-->+++++<]>.---[->++++<]>.[-->+++++<]>.>++++++++++.[->+++<]>++.....>+[--->++<]>.+[--->+<]>+++.---[->+++<]>.

Production

  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
la source
2
Peu importe à quel point le défi du codegolf est fou, il y a presque toujours une réponse de brainfuck. Je dois l'aimer +1
Pharap
@AndoDaan Non, ce ne serait pas le cas. Mais je ne l'ai pas utilisé. J'ai fait mon propre brainf * ck comme je le fais toujours. J'ai beaucoup utilisé cela et j'ai appris la plupart des astuces que j'utilise toujours lors de l'écriture de BF, donc je ne serais pas surpris si cela avait l'air simulaire.
Teun Pronk
Pas simulaire, identique. Les deux 669 octets de longueur. Les deux utilisent la même méthode caractère par caractère (pas d'optimisation du tout), et sont également identiques à l'endroit où vont tous les symboles plussy, miney et autres trucs.
AndoDaan
2
Ça doit être une coïncidence alors. Je participe pour le plaisir du défi et je ne vois pas le plaisir de générer un BF. La seule façon que même pourrait être amusant un peu est quand vous avez écrit vous - même générateur.
Teun Pronk
6

PHP 46

Cela ressemblait plus à la résolution de casse-tête qu'à la programmation, donc ma réponse ressemble plus à une solution de casse-tête qu'à du code. Cependant, c'est un programme PHP valide, donc je le soumets.

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

Mettez à jour la même chose en Perl. La longueur reste encore 46:

print"CAQSRPMJ
 XZIFKNH
GTUVWYEL"=~s/\S/$& /rg
core1024
la source
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

production:

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

Bash + coreutils, 46

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

Emprunter sans vergogne Emprunter l'arbre optimal @ core1024 :

Production:

$ ./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
$
Traumatisme numérique
la source
2

STATA 63

Edit: maintenant ma propre solution. Doit être toutes les lettres.

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
bmarks
la source
1

Javascript 83

Je vais commencer par coder en dur VOTRE solution

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
la source
raccourcir avec alertau lieu deconsole.log
Mark Gabriel
2
@MarkGabriel J'aimerais le raccourcir de manière plus intelligente. Alert n'a pas la bonne police pour afficher l'art ascii.
edc65
1
Je vois. Vous avez oublié que la mise en forme de l'alerte est différente. :)
Mark Gabriel
1

PHP, 69

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

donne

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L
La victoire
la source
Vous n'avez aucune connexion diagonale dans votre sortie
edc65
@ MartinBüttner - merci, cela m'a coûté un octet à réparer.
Victoire
Le problème avec cette réponse (et bien d'autres) est que la sortie est plus courte que le code (voir core1024 php)
edc65
Vous pouvez raser deux octets en remplaçant votre regex par"/\w/",'\0 '
ATaco