Há uma rede de até 26 nós (chamados A
para Z
ou a
a z
conforme seu desejo). Cada par de nós pode ser conectado ou desconectado. Um nó pode estar conectado a no máximo 4 outros nós. Sua tarefa é desenhar a rede em um diagrama 2D. A entrada será fornecida de forma que esta tarefa seja possível (veja mais restrições na seção de saída).
Formato
Entrada
- Pares de letras (
A
aZ
, oua
az
conforme seu desejo). Eles não são classificados em nenhuma ordem. - Opcional - número de pares
Saída
- Um desenho ASCII que mostra os links reais entre os nós. Nós são fornecidos por
a
paraz
ouA
paraZ
. Use-
para links horizontais e|
verticais. Os links podem ter qualquer comprimento (diferente de zero), mas devem ser linhas horizontais / verticais retas que não dobram . É possível adicionar espaços, desde que não desfigurem a imagem.
Você não pode usar built-ins que ajudam no layout do gráfico. Outros embutidos relacionados a gráficos podem ser permitidos (embora as soluções sem embutidos sejam mais apreciadas). O menor código vence.
Dados de amostra
Entrada
A B
B F
B L
F K
L K
K R
K S
R P
S J
S P
J A
T V
V N
Saída
A - B - F T - V
| | | |
| L - K - R N
| | |
J ----- S - P
Entrada
H C
G H
A B
B F
B C
F G
C D
D A
Saída
A - B ----- F
| | |
D - C - H - G
code-golf
ascii-art
graph-theory
ghosts_in_the_code
fonte
fonte
H A
e essa borda não está na saída especificada. Editar: problema identificado e corrigido.Respostas:
CJam, 142
Você não pediu uma solução ótima, determinística ou rápida, então aqui está:
Experimente online
Isso gera coordenadas aleatórias para cada letra e testa se o layout é aceitável (bordas alinhadas e sem interseções), até que seja. Fica incrivelmente lento à medida que você adiciona mais arestas.
As duas
D
letras no código especificam o máximo de coordenadas x e y; EscolhiD
(= 13) porque acho que deve ser suficiente para todos os casos; sinta-se à vontade para provar que estou errado. Mas você pode alterá-los para outros valores para acelerar o programa, por exemplo, o segundo exemplo deve terminar em um minuto ou dois se você usar 3 e 4.fonte
C, 813 bytes
Recebe entrada como argumentos da linha de comando, por exemplo:
Nem um pouco competitivo com a resposta do aditsu por tamanho, mas muito mais eficiente!
Isso forçará a força bruta de todas as soluções possíveis, mas reconhecerá rapidamente as falhas à medida que elas avançam. Para os dois casos de teste, ele termina quase imediatamente e parece levar apenas alguns segundos em entradas mais estranhas. Ele também não tem limitação para os nomes de nós aceitos (embora você não possa nomear um espaço
|
ou-
) e não tem limite para o número de nós (desde que todos os nomes se ajustem a um byte, o limite prático é de 252 nós, e vai ficar lento muito antes de atingir tantos).Há muito espaço para acelerar isso; muita saída de curto-circuito foi perdida para o golfe, e há partes que podem ser removidas dos pontos quentes. Além disso, algumas observações de simetria podem reduzir drasticamente o posicionamento dos 2 primeiros nós, entre outras coisas.
Demolir:
fonte