Su misión, si elige aceptarla, es ingresar una serie de pares de puntos que forman un gráfico, como este:
A, BC, AB, AA, DA, EF, GC, G
Luego debe generar una visualización ASCII del gráfico.
Por ejemplo, A,B C,A C,D
podría ser:
A-----------------B
\
\
C---------D
Editar: según los comentarios, aquí hay algunas restricciones de entrada:
- cada nodo tiene como máximo 5 conexiones (+20 si puede manejar más)
- el gráfico es plano, es decir, no se cruzan líneas (¡+200 si puedes manejar incluso un crossover!)
- hay como máximo 16 nodos (+20 si puede manejar más)
Su puntaje es 999 - (la longitud de su código) + (cualquier bonificación) .
Enciendan sus motores :)
code-golf
ascii-art
graphical-output
Soham Chowdhury
fuente
fuente
code-golf
,code-challenge
O qué? ¿Y cuál es / son los criterios / criterios ganadores?code-golf
/ 10charRespuestas:
Python 3, 168 caracteres, Puntuación = 999- 168 + 240 = 1071
Solo acortando la gran respuesta de Keith Randalls .
En Python 3,
print
es una función y, por lo tanto, se puede abreviarp=print
. Guarda el3 * (4 - 1) - 8 = 1
personaje.En Python 3,
input
se usa en lugar deraw_input
, guarda 4 caracteres.En lugar de
' '*len(V)
usted puede usar' '*80
(o algo similar). Esto lleva a un mayor número de espacios finales, pero a quién le importa ... ¡si salva otros 4 personajes!Ahora se pone interesante: ¡en lugar de cadenas, usa listas! Esto facilita mucho la actualización
S
, pero complica un poco la impresión. Llamaré a la listaT
para no confundirla con la cadenaS
de marinus.Comencemos convirtiendo los vértices en una lista, no en una cadena separada por espacios, que guarda 4 caracteres. La línea de salida
T
debe convertirse en una lista (T=[' ']*40
), que cuesta 2 caracteres.La impresión de la línea actual se
T
vuelve 5 caracteres más larga: necesito corchetes para concatenar las listas de cadenas correctamente, necesito dos-
caracteres más (porque x e y son solo la mitad de grandes ahora), y necesito un*
para hacer que laprint
función tome los elementos de la lista como argumentos separados e imprímalos separados por espacios (¡y no como una lista!). (Este paso fue difícil )La línea actual se puede actualizar con un simple en
T[x]=T[y]="|"
lugar deS=S[:x]+'|'+S[x+1:y]+'|'+S[y+1:]
, que ahorra 19 caracteres.Para imprimir
T
nuevamente, y para la impresión final espaciada de los vértices, se necesitan asteriscos, que cuesta 2 caracteres.Y justo mientras escribo esto, veo que no hay daño en tener un vértice invisible no conectado (
' '
). Esto permite crear el conjunto de vértices mucho más cortos, ahorrando 4 caracteres más.En total, el ahorro es
1 + 4 + 4 + 4 - 2 - 5 + 19 - 2 + 4 = 27
.Ejemplo que muestra el efecto de 9 .: la entrada
A,B A,C
conduce a la salidafuente
''.join()
basura que lo hizo más largo. No sabía que esa*T
cosa existía en python3. Próximo golf ...APL (
171166162 caracteres, todas las bonificaciones: 999 -171166162 + 20 + 20 + 200 =106810731077)Este es el programa APL de golf más largo que he escrito hasta ahora. Esto podría ser un poco engañoso, pero no hay nada en la pregunta que realmente lo rechace. Lo que estoy haciendo es poner todos los nodos en una línea vertical y dibujar el gráfico como un diagrama de arco. Sin embargo, obviamente todavía es un gráfico.
Todavía me tomó algunas horas.
Los nodos deben ser letras mayúsculas individuales, por lo que admite un máximo de 26 nodos. Puede manejar líneas cruzadas, y cada nodo puede tener tantas conexiones como la pantalla manejará.
Salida de ejemplo:
fuente
Python, 195 caracteres, puntaje = 999 - 195 + 20 + 200 + 20 = 1044
Cada borde obtiene una fila. S es una cadena con las conexiones verticales que debemos mantener a medida que construimos el gráfico.
Aquí hay algunos ejemplos de entrada / salida:
y robado de marinus:
fuente