Hazme un árbol del alfabeto

14

Introducción

En la mayoría de las fuentes de todos los caracteres del alfabeto en mayúsculas, además BDOcuenta con líneas individuales de aproximadamente tocar algunas de las cuatro esquinas del rectángulo de delimitación del personaje: ACEFGHIJKLMNPQRSTUVWXYZ.

Por ejemplo, las dos patas de un A"toque" las esquinas inferior izquierda e inferior derecha del personaje. Del mismo modo, Ctoca sus esquinas superior e inferior derecha (es un poco curva pero está lo suficientemente cerca). Lsolo toca sus esquinas superiores izquierda e inferior derecha con líneas simples. La esquina inferior izquierda de Les un vértice, no el final de una sola línea.

Aquí hay una tabla de qué personajes tocan qué esquinas de acuerdo con la fuente de Stack Exchange que veo (y espero que veas). 1es para arriba a la izquierda, 2es para arriba a la derecha, 3abajo a la izquierda, 4abajo a la derecha.

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

Preparar

Imagine que estas líneas que tocan las esquinas se extienden en la dirección de la esquina que tocan para que los arreglos de estos caracteres en una cuadrícula se puedan "conectar".

Por ejemplo, todos los personajes en

 A
C X

están conectados porque la parte inferior izquierda Ay superior derecha de Cconnect y la parte inferior derecha Ay superior izquierda de Xconnect.

Sin embargo,

CAX

no tiene conexiones porque las conexiones solo ocurren diagonalmente de un personaje a otro .

Desafío

Escriba el programa más corto posible (en bytes) que muestre todos los caracteres ACEFGHIJKLMNPQRSTUVWXYZen un gran árbol completamente conectado, de acuerdo con las reglas anteriores. Cada personaje debe aparecer exactamente una vez. Use espacios para espacios vacíos.

Ejemplo

Se puede llegar a todo en este árbol de 23 letras desde cualquier otra cosa a través de las conexiones diagonales definidas anteriormente:

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

Notas

  • Puede codificar su solución.
  • Su salida solo debe contener ACEFGHIJKLMNPQRSTUVWXYZespacios y líneas nuevas. BDONo será utilizado.
  • Los espacios iniciales / finales están bien siempre que todas las conexiones estén colocadas correctamente.
  • La cuadrícula de salida no debe tener más de 30 por 30 caracteres (incluidas líneas nuevas y espacios).
  • Solo se consideran las conexiones de esquina. La parte inferior de Yno se conecta a nada. Debe usar las conexiones de esquina de la tabla anterior.
  • No todas las esquinas conectables necesitan conectarse a algo. Las esquinas conectables y no conectables pueden bordearse entre sí.
  • Salida a stdout. No hay entrada
  • Incluir un gráfico de conectividad hecho con barras como lo ha hecho Peter Taylor es un toque útil, pero no es obligatorio.

Actualización:
githubhagocyte ha realizado un verificador de validez de árbol alfabético en Github .

Pasatiempos de Calvin
fuente
¿Puede codificar su solución?
edc65
2
@ edc65 Puede codificar su solución.
Aficiones de Calvin
77
Es curioso cómo esas 2 frases solo tienen 1 personaje diferente: P
Teun Pronk
1
@githubphagocyte, eso sería mejor como una adición a la pregunta que como una respuesta, dado que no es una respuesta.
Peter Taylor
1
Buen golf, @ Calvin'sHobbies. Es muy divertido ver las respuestas.
Jordania

Respuestas:

1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Salida:

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

Conexiones, gracias al corrector 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 

Combina el truco de byte nulo de @ grc y la sintaxis extremadamente corta de Pyth. Hice mi propia cuadrícula por el placer de hacerlo.

Explicación:

jes la unión de cuerdas de python. des el espacio \0es la secuencia de escape para el byte nulo. Es un NOP cuando se imprime, por lo que la tercera línea tiene exactamente dos espacios al frente. Además, tenga en cuenta que las cadenas pueden terminarse en EOL en Pyth, así como también entre comillas.

isaacg
fuente
12

GolfScript (41 caracteres)

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

Demostración en línea

Gráfico de conectividad:

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

Python, 49

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

Ejemplo:

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

Creo que ahora se conecta correctamente, pero es posible que haya perdido algo nuevamente.

grc
fuente
F4parece conectado a G1, que no es válido
Tymric
@Timmy Pero F2 está conectado a A3. Todo parece estar conectado a mí.
Aficiones de Calvin
@ Calvin'sHobbies Creo que entendí mal los requisitos. ¿Está permitido tener esquinas adyacentes que no están conectadas?
Tymric
2
@Timmy Claro. Esos pares de esquinas simplemente no cuentan como conectados, pero las dos letras pueden estar conectadas de otra manera.
Aficiones de Calvin
9

Marbelous 164 158 143

utilizaba el árbol de marcas, ya que estaba casi perfectamente optimizado para Marbelous . El código en este caso es solo el código ascci para todos los caracteres (incluidos los espacios y las nuevas líneas) de izquierda a derecha, delimitados por espacios.

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

Salida:

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

Un mejor enfoque de Marbelous 135 129

Éste genera el mismo árbol con un espacio adicional antes y después de cada línea, funciona alimentando los literales en una subrutina que imprime un espacio antes de imprimir el literal. Y solo imprime un espacio si el literal es un espacio (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
overactor
fuente
Esta respuesta se reducirá a 96 cuando los espacios entre celdas ya no sean necesarios para el código fuente de Marbelous, que será el caso más tarde hoy.
overactor
1
El uso de idiomas o características de idioma que son posteriores a la pregunta se considera trampa.
Peter Taylor
44
@PeterTaylor Por ahora, esta respuesta solo usa características que se implementaron cuando se hizo la pregunta.
overactor
7

BrainF * ck 669

Hecho este para las risas. Emite exactamente lo mismo que el ejemplo.
Proporcionará otra solución más tarde. No puedo pensar en una forma inteligente de hacer esto en Lua, así que me limitaré a este :)

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

Salida

  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
fuente
2
No importa cuán loco sea el desafío del codegolf, casi siempre hay una respuesta mental. Tengo que amarlo +1
Pharap
@AndoDaan No, no lo haría. Aunque no usé eso. Hice mi propio brainf * ck como siempre lo hago. Lo usé mucho y aprendí la mayoría de los trucos que siempre uso cuando escribo BF, por lo que no me sorprendería si parece simular.
Teun Pronk
No simular, idéntico. Ambos 669 bytes de longitud. Ambos usan el mismo carácter por método de carácter (sin optimización en absoluto), y también idénticos a donde van todos los símbolos de plussy, miney y otras cositas.
AndoDaan
2
Debe ser una coincidencia entonces. Participo por la diversión del desafío y no veo la diversión de generar un BF. La única forma en que incluso podría ser divertido es escribir el generador usted mismo.
Teun Pronk
6

PHP 46

Esto se parecía más a la resolución de acertijos que a la programación, por lo que mi respuesta se parece más a la solución de acertijos que al código. Sin embargo, es un programa PHP válido, así que lo estoy enviando.

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

Actualiza lo mismo en Perl. La longitud sigue siendo 46:

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

HTML, 55

código

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

salida:

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

Bash + coreutils, 46

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

Ahora prestando descaradamente el árbol óptimo de @ core1024 :

Salida:

$ ./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
$
Trauma digital
fuente
2

STATA 63

Editar: ahora mi propia solución. Deberían ser todas las letras.

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
comentarios
fuente
1

Javascript 83

Comenzaré por codificar SU solución

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
fuente
hacerlo más corto con en alertlugar deconsole.log
Mark Gabriel
2
@ MarkGabriel Me gustaría acortarlo de una manera más inteligente. La alerta no tiene la fuente correcta para mostrar arte ascii.
edc65
1
Veo. Olvidé que el formato de alerta es diferente. :)
Mark Gabriel
1

PHP, 69

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

da

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L
Victoria
fuente
No tiene conexiones diagonales en absoluto en su salida
edc65
@ MartinBüttner: gracias, me costó un byte solucionarlo.
Victoria
El problema con esta (y muchas otras) respuestas es que la salida es más corta que el código (vea core1024 php)
edc65
Puede reducir dos bytes reemplazando su expresión regular con"/\w/",'\0 '
ATaco