Odio la hinchazón de código!
Así que he decidido reemplazar mi sistema Windows 7 por una versión de golf. Sin embargo, sé que no es fácil, así que construyamos un prototipo primero. Tomará una lista de ventanas del usuario y las mostrará usando una pantalla pseudográfica en la salida estándar.
Por ejemplo: entrada del usuario:
0,0,15,10 15,10,20,15 10,13,15,15 9,1,16,3 17,5,20,7 11,2,17,4 15,4,19,6 13,3,18,5
Las salidas de Code Golf® Window Manager ™:
┌──────────────┐ │ :::::::: ┌─────┴┐ │ :::::::: │: ┌────┴┐ │ :::::::: └─┤: ┌───┴┐ │ :::::::::: └─┤ :::: ├┐ │ :::::::::::: └─┬──┘├┐ │ :::::::::::::: ├─┬─┘│ │ :::::::::::::: │ └──┘ │ :::::::::::::: │ │ :::::::::::::: │ └──────────────┼────┐ │ :::: │ │ :::: │ ┌────┤ :::: │ │ :::: │ :::: │ └────┴────┘
Entrada:
- Tomado de la entrada estándar (o, si su sistema no tiene
stdin
, cualquier método que pueda proporcionar varias líneas de entrada) - Cada línea contiene 4 números, delimitados por comas - coordenadas de una ventana
- Primeros dos números: esquina superior izquierda; últimos dos números: esquina inferior derecha
- Usando
x,y
notación
Salida:
- Escríbalo en la salida estándar (o, si su sistema no tiene
stdout
, cualquier cosa que muestre texto monoespaciado) - Use caracteres de dibujo de recuadros individuales de la página de códigos 437 para dibujar los límites de la ventana
- Windows especificado más tarde en la entrada oculta los especificados anteriormente
- Rellene las ventanas con el carácter de dos puntos:
:
- Los espacios iniciales y finales están bien, siempre que no rompan la alineación de las ventanas
Notas:
- Resolución máxima que quiero admitir: 76 (horizontal) por 57 (vertical)
- No es necesario admitir entradas incorrectas
- Número máximo de ventanas: 255 (si necesita un límite)
- Mi
cmd
shell de Windows 7 muestra la página de códigos 437 caracteres por defecto; Si alguien tiene una manera de hacerlo en Linux (usandoxterm
o lo que sea), descríbalo aquí
Como referencia, los códigos de caracteres son:
┌da ─c4 ┬c2 ┐bf
│b3 :3a │b3 │b3
├c3 ─c4 ┼c5 ┤b4
└c0 ─c4 ┴c1 ┘d9
Total: 12 personajes diferentes.
javascript:$('pre').css('line-height','1em')
Respuestas:
Python, 397 caracteres
¡Cambie
C="...
aC=u"...
y se imprimirá en unicode en su lugar! Puede ser complicado hacer que el archivo se guarde correctamente porque los caracteres de la página de códigos 437 no se escapan (se requiere la primera línea de comentario de 'codificación').El enfoque es construir un mapa de forma incremental utilizando operadores de bits. Versión menos golfista con comentarios:
fuente
JavaScript ES6 (FF ≥ 31.0), 404 caracteres
Sin ES6:
w('0,0,15,10\n15,10,20,15\n10,13,15,15\n9,1,16,3\n17,5,20,7\n11,2,17,4\n15,4,19,6\n13,3,18,5');
emite correctamente el ejemplo del OP.Los bordes de las ventanas se crean utilizando operadores bit a bit (arriba = 8, abajo = 4, izquierda = 2, derecha = 1).
fuente
function w(s){...}
conviertew=(s)=>{...}
(y, de la misma manera, para todos los demás literales de funciones). Y la tabla de búsqueda de caracteres probablemente se puede reemplazar por una cadena con los mismos caracteres.Array.fill()
para inicializar en "escritorio".[].fill([].fill(0,0,76),0,57)
, lástima que no funcione. ¿Puedo escribir más corto quenew Array(57).fill(new Array(76).fill(0))
?new
operadores:Array(57).fill(Array(76).fill(0))
.Python, 672 caracteres
La versión menos legible:
Comenzó desde la versión a continuación:
fuente