Faça de mim uma árvore de alfabeto

14

Introdução

Na maioria dos tipos de letra todos os caracteres do alfabeto maiúsculas além de BDOter linhas simples aproximadamente tocando alguns dos quatro cantos do retângulo delimitador do personagem: ACEFGHIJKLMNPQRSTUVWXYZ.

Por exemplo, as duas pernas de um A"toque" nos cantos inferior esquerdo e inferior direito do personagem. Da mesma forma, Ctoca nos cantos superior e inferior direito (é um pouco curvado, mas está próximo o suficiente). Lapenas toca nos cantos superior esquerdo e inferior direito com linhas únicas. O canto inferior esquerdo de Lé um vértice, não o fim de uma única linha.

Aqui está uma tabela de quais caracteres tocam em quais cantos, de acordo com a fonte I do Stack Exchange (e espero que você) veja. 1é para superior esquerdo, 2é para superior direito, 3inferior esquerdo, 4inferior direito.

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

Configuração

Finja que essas linhas de toque dos cantos se estendem na direção do canto em que tocam, para que as disposições desses caracteres em uma grade possam ser "conectadas".

Por exemplo, todos os caracteres em

 A
C X

estão conectados porque o canto inferior esquerdo Ae o canto superior direito da Cconexão e o canto inferior direito e o canto Asuperior esquerdo da Xconexão.

Contudo,

CAX

não possui conexões porque as conexões ocorrem apenas na diagonal de um caractere para o próximo .

Desafio

Escreva o programa mais curto possível (em bytes) que gera todos os caracteres ACEFGHIJKLMNPQRSTUVWXYZem uma grande árvore totalmente conectada, de acordo com as regras acima. Cada personagem deve aparecer exatamente uma vez. Use espaços para espaço vazio.

Exemplo

Tudo nesta árvore de 23 letras pode ser acessado de qualquer outra coisa através das conexões diagonais definidas acima:

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

Notas

  • Você pode codificar sua solução.
  • Sua saída deve conter apenas ACEFGHIJKLMNPQRSTUVWXYZespaços e novas linhas. BDOnão será usado.
  • Espaços iniciais / finais são bons, desde que todas as conexões estejam posicionadas corretamente.
  • A grade de saída não deve ter mais que 30 x 30 caracteres (incluindo novas linhas e espaços).
  • Somente conexões de canto são consideradas. A parte inferior do Ynão se conecta a nada. Você deve usar as conexões de canto da tabela acima.
  • Nem todos os cantos conectáveis ​​precisam se conectar a algo. Cantos conectáveis ​​e não conectáveis ​​podem se unir.
  • Saída para stdout. Não há entrada.
  • Incluir um gráfico de conectividade feito com barras como Peter Taylor fez é um toque útil, mas não obrigatório.

Atualização: o
githubhagocyte fez um verificador de validade da árvore do alfabeto no Github .

Passatempos de Calvin
fonte
Você pode codificar sua solução?
edc65
2
@ edc65 Você pode codificar sua solução.
Hobbies de Calvin
7
Engraçado como esses 2 frases têm apenas 1 personagem diferente: P
Teun Pronk
1
@githubphagocyte, seria melhor um adendo à pergunta do que uma resposta, já que não é uma resposta.
Peter Taylor
1
Bom golfe, @ Calvin'sHobbies. É muito divertido ver as respostas para isso.
Jordânia

Respostas:

1

Pyth , 32

jd"QAPMFRLZ\nUINKSHXJ\n\0GTCVEWY

Resultado:

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

Conexões, graças ao verificador 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 o truque de byte nulo do @ grc e a sintaxe extremamente curta do Pyth. Fiz minha própria grade para o inferno.

Explicação:

jé a junção de string do python. dé espaço. \0é a sequência de escape para o byte nulo. Como um NOP é impresso, a terceira linha tem exatamente dois espaços à frente. Além disso, observe que as seqüências de caracteres podem ser terminadas com EOL no Pyth, assim como terminadas com aspas.

isaacg
fonte
12

GolfScript (41 caracteres)

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

Demonstração online

Gráfico de conectividade:

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

Python, 49

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

Exemplo:

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

Eu acho que se conecta corretamente agora, mas posso ter perdido alguma coisa novamente.

grc
fonte
F4olhares conectados a G1, que é inválido
Tymric
@ Timmy Mas o F2 está conectado ao A3. Tudo parece conectado a mim.
Hobbies de Calvin
@ Calvin'sHobbies Acho que não entendi bem os requisitos. É permitido ter cantos adjacentes que não estão conectados?
Tymric
2
@ Timmy Sure. Esses pares de cantos simplesmente não contam como conectados, mas as duas letras podem ser conectadas de outra maneira.
Hobbies de Calvin
9

Marbelous 164 158 143

usou a árvore dos marcadores, pois quase perfeitamente otimizada para o Marbelous . O código nesse caso é apenas o código ascci para todos os caracteres (incluindo espaços e novas linhas) da esquerda para a direita, delimitado por espaços.

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

Resultado:

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

Uma abordagem Marbelous melhor 135 129

Este gera a mesma árvore com um espaço extra antes e depois de cada linha, funciona alimentando os literais em uma sub-rotina que imprime um espaço antes de imprimir o literal. E apenas imprimindo um espaço se o literal for um espaço (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
fonte
Essa resposta será reduzida para 96 ​​quando os espaços entre as células não forem mais necessários para o código-fonte Marbelous, que será o caso ainda hoje.
overactor
1
O uso de idiomas ou recursos de idiomas que pós-datam a pergunta é considerado trapaça.
Peter Taylor
4
@ PeterPaylor Por enquanto, esta resposta usa apenas recursos que foram implementados quando a pergunta foi feita.
overactor
7

BrainF * ck 669

Feito este para rir. Produz exatamente o mesmo que o exemplo.
Fornecerá outra solução posteriormente. Não consigo pensar em uma maneira inteligente de fazer isso em Lua, então vou me ater a este :)

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

Resultado

  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
fonte
2
Não importa o quão louco seja o desafio do codegolf, quase sempre há uma resposta cerebral.
Tem
@AndoDaan Não, não seria. Eu não usei isso embora. Eu fiz meu próprio cérebro como sempre faço. Eu usei muito isso e aprendi a maioria dos truques que sempre uso ao escrever BF, para não me surpreender se parecer simulado.
Teun Pronk
Não é idêntico, idêntico. Ambos os 669 bytes de comprimento. Ambos usando o mesmo caractere pelo método do caractere (sem otimização), e também os dois idênticos aonde todos os símbolos plussy, miney e outros são.
AndoDaan
2
Deve ser uma coincidência então. Participo pela diversão do desafio e não vejo a graça de gerar um namorado. A única maneira que até poderia ser divertido um pouco é quando você escreveu o gerador de si mesmo.
Teun Pronk
6

PHP 46

Isso foi mais como resolver quebra-cabeças do que como programação, então minha resposta é mais como solução de quebra-cabeça do que como código. No entanto, é um programa PHP válido, por isso estou enviando.

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

Atualize o mesmo no Perl. O comprimento ainda permanece 46:

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

resultado:

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

Bash + coreutils, 46

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

Agora, emprestando descaradamente a árvore ideal do core1024 :

Resultado:

$ ./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
fonte
2

STATA 63

Edit: agora minha própria solução. Devem ser todas as 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
marcações
fonte
1

Javascript 83

Vou começar com a codificação da SUA solução

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
fonte
torná-lo mais curto com alertem vez deconsole.log
Mark Gabriel
2
@ MarkGabriel Eu gostaria de torná-lo mais curto de uma maneira mais inteligente. O alerta não tem a fonte correta para exibir ascii art.
Edc65
1
Entendo. Esqueceu que a formatação do alerta é diferente. :)
Mark Gabriel
1

PHP, 69

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

C A Q S R P M J 
 X Z I F K N H 
G T U V W Y E L
Vitória
fonte
Você não tem conexões diagonais em tudo na sua saída
edc65
@ MartinBüttner - obrigado, custou-me um byte para corrigir.
Victory
O problema com isto (e muitos outros) a resposta é que a saída é menor do que o código (veja php core1024)
edc65
Você pode depilar dois bytes substituindo seu regex por"/\w/",'\0 '
ATaco