Sua missão, se você optar por aceitá-la, é inserir uma série de pares de pontos que formam um gráfico, assim:
A, BC, AB, AA, DA, EF, GC, G
Você deve então gerar uma visualização ASCII do gráfico.
Por exemplo, A,B C,A C,D
poderia ser:
A-----------------B
\
\
C---------D
Edit: Conforme os comentários, aqui estão algumas restrições de entrada:
- cada nó tem no máximo 5 conexões (+20 se você puder lidar com mais)
- o gráfico é plano, ou seja, nenhuma linha se cruza (+200 se você pode lidar com até uma passagem!)
- existem no máximo 16 nós (+20 se você puder lidar com mais)
Sua pontuação é 999 - (o tamanho do seu código) + (qualquer bônus) .
Ligue seus motores :)
code-golf
ascii-art
graphical-output
Soham Chowdhury
fonte
fonte
code-golf
,,code-challenge
ou o que? E qual é / são os critérios / critérios vencedores?code-golf
/ 10charRespostas:
Python 3, 168 caracteres, Pontuação = 999- 168 + 240 = 1071
Apenas encurtando a ótima resposta de Keith Randalls .
No Python 3,
print
é uma função e, portanto, pode ser abreviada porp=print
. Salva o3 * (4 - 1) - 8 = 1
personagem.No Python 3,
input
é usado em vez deraw_input
, salva 4 caracteres.Em vez de
' '*len(V)
você pode usar' '*80
(ou algo semelhante). Isso leva a um aumento no número de espaços à direita, mas quem se importa ... se salvar outros 4 caracteres!Agora fica interessante: em vez de cadeias, use listas! Isso facilita muito a atualização
S
, mas complica um pouco a impressão. Vou ligar para a listaT
para não confundi-la com a cordaS
de marinus.Vamos começar transformando os vértices em uma lista, não em uma string separada por espaço, que salva 4 caracteres. A linha de saída
T
precisa se tornar uma lista (T=[' ']*40
), que custa 2 caracteres.A impressão da linha atual
T
se torna mais 5 caracteres: preciso de colchetes para concatenar as listas de strings corretamente, preciso de mais dois-
caracteres (porque xey são apenas cerca da metade do tamanho agora) e preciso de uma função*
para que aprint
função funcione os elementos da lista como argumentos separados e imprima-os separados por espaços (e não como uma lista!). (Esta etapa foi difícil .)A linha atual pode ser atualizada com um simples em
T[x]=T[y]="|"
vez deS=S[:x]+'|'+S[x+1:y]+'|'+S[y+1:]
, que salva 19 caracteres.Para imprimir
T
novamente e para a impressão final espaçada dos vértices, são necessários asteriscos, que custam 2 caracteres.E enquanto estou digitando isso, vejo que não há mal em ter um vértice invisível (
' '
) não conectado . Isso permite criar o conjunto de vértices muito mais curtos, economizando mais 4 caracteres.Ao todo, a economia é
1 + 4 + 4 + 4 - 2 - 5 + 19 - 2 + 4 = 27
.Exemplo mostrando o efeito de 9 .: entrada
A,B A,C
leva à saídafonte
''.join()
lixo que o tornou mais longo. Eu não sabia que*T
isso existia em python3. Próximo golfe ...APL (
171166162 caracteres, todos os bônus: 999 -171166162 + 20 + 20 + 200 =106810731077)Este é o programa APL mais longo que eu escrevi até agora. Isso pode ser um pouco trapaceiro, mas não há nada na pergunta que realmente não permita isso. O que estou fazendo é colocar todos os nós em uma linha vertical e desenhar o gráfico como um diagrama de arco. Obviamente, ainda é um gráfico.
Ainda me levou algumas horas.
Os nós devem ter letras maiúsculas simples, para suportar no máximo 26 nós. Ele pode manipular linhas cruzadas e cada nó pode ter tantas conexões quanto o monitor manipular.
Exemplo de saída:
fonte
Python, 195 caracteres, pontuação = 999 - 195 + 20 + 200 + 20 = 1044
Cada aresta recebe uma linha. S é uma string com as conexões verticais que precisamos manter ao construir o gráfico.
Aqui estão alguns exemplos de entrada / saída:
e roubado de marinus:
fonte