Haga un programa que tome una longitud y una lista de intervalos y genere una regla de esa longitud con marcas más largas para cada intervalo utilizando los caracteres de dibujo lineal. ┌ ┬ ┐ │ ╵
- La primera fila de la salida debe comenzar con el tic para 0 con
┌
y terminar con un tic para la longitud con┐
, con un┬
uso para cada carácter intermedio. Habrá un total delength
+ 1 caracteres de dibujo lineal en esta primera fila. - Una marca debe alargarse verticalmente en incrementos de medio carácter usando
╵
y│
función de los intervalos de entrada. - Los intervalos se enumeran de menor a mayor, en relación con el intervalo anterior. Elaborar:
- El primer intervalo indica cuántas marcas base (la primera fila, un carácter por marca) hay en el segundo intervalo más pequeño (el intervalo más pequeño es 1). Por ejemplo, [3] alargará cada tercer tic en medio carácter.
- El segundo intervalo y los posteriores son en términos del siguiente intervalo más pequeño. Por ejemplo, [3, 5] alargará cada tick base 15 por un carácter completo y [3, 5, 2] alargará cada tick base 30 por un carácter y medio.
- Un subintervalo de 1 es válido y efectivamente significa que las últimas líneas de intervalo se alargan con un carácter completo en lugar de un medio carácter.
- Los ejemplos de casos de prueba deberían ayudar a aclarar cómo funciona esto.
Ejemplos / Casos de prueba
3, []:
┌┬┬┐
9, [3]:
┌┬┬┬┬┬┬┬┬┐
╵ ╵ ╵ ╵
30, [5, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │
32, [4, 2, 2, 2]:
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵ │ ╵ │
│ ╵ │
48, [5, 3, 2]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │ ╵ ╵ │ ╵ ╵ │
╵ ╵
24, [7, 3]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ ╵ │
17, [3, 2, 1]
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
│ ╵ │ ╵ │ ╵
╵ ╵ ╵
1, [23, 19, 13, 11, 7, 5, 3, 2, 1]
┌┐
│
│
│
│
╵
Otras reglas / notas
- La entrada y salida pueden usar cualquier formato conveniente
- La regla no tiene que terminar con una marca importante
- La lista de intervalos puede estar vacía.
- El tic cero siempre está dentro de todos los intervalos.
- Puede suponer que la longitud de la regla y los intervalos siempre serán enteros positivos menores que 120
- El espacio en blanco final está bien, pero el espacio en blanco inicial no lo está.
- Se permite cualquier espacio fijo de ancho único como un carácter de espaciado si, por alguna razón, desea utilizar algo distinto de los espacios ASCII.
¡Feliz golf!
Respuestas:
JavaScript (Node.js) , 123 bytes
Pruébalo en línea!
Use esta función como
f(20)([5, 2])
.Gracias Arnauld, ahorra 4 bytes.
fuente
Perl 6 ,
13012210292 bytes-10 bytes gracias a nwellnhof!
Pruébalo en línea!
Ah sí, mucho más corto que mi método anterior. Este es un bloque de código anónimo que devuelve una lista de líneas.
Explicación:
fuente
Dyalog APL,
66645852 bytesPruébalo en línea!
2814 bytes gracias a NGN !fuente
∊'┌'(1↓⍵⍴'┬')'┐'
->'┌┬┐'/⍨2⍵2-1
+⌿0=(×\⍺)∘.|⍳1+⍵
->⊥¨⍨0=(⍵+1)⍴⍳⌽⍺
. ahora se permite explícitamente la aceptación⍺
en orden inverso , por lo que también puede eliminar el⌽
('┌┬┐'/⍨2⍵2-1)
->'┌┬┐'[2,⍨×⍳⍵]
('┌┬┐'/⍨2⍵2-1)⍪⍉
->'┌┐'@0⍵@0⍉'┬',
Python 3 ,
173172 bytesPruébalo en línea!
fuente
05AB1E , 51 bytes
No estoy muy contento con la
I¯Qiεõ}}
solución alternativa para listas de entrada vacías ... Y definitivamente también se puede jugar golf en otras partes ...NOTA: Utiliza enteros comprimidos convertidos a los caracteres requeridos, porque usar los caracteres requeridos directamente significa que tendré que contar todo el programa en UTF-8, incrementándolo demasiado para todos los caracteres incorporados de 05AB1E también.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Vea esta sugerencia mía 05AB1E (sección ¿Cómo comprimir enteros grandes? ) Para comprender por qué
•5·W4•
es94749589
y•áΣ=Yô•
es948495169488
.fuente
×S
puede serи
sиS
funciona, pero desafortunadamente es un byte más largo en lugar de más corto. Es porque los enteros están en la pila primero, y las cadenas después. Con×
eso no importa si esint,string
ostring,int
, pero conи
eso esperastring,int
.и
! Será bueno saberlo en el futuro, no lo había visto usado antes de una de sus otras respuestas.Carbón de leña , 50 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Los caracteres de dibujo de recuadro tienen una representación de 3 bytes en Carbón, por lo que la cadena anterior tiene solo 40 caracteres de longitud. Explicación:
Calcular el producto acumulativo de los intervalos.
Imprima la primera fila de marcas de graduación. Los caracteres izquierdo y derecho están al revés porque el resultado se refleja más tarde.
Calcule el número de intervalos que son un factor de cada marca de verificación. Genere una cadena de
│
s de la mitad de esa longitud y agregue╵
para longitudes impares. Imprima cada cadena hacia abajo con las siguientes en columnas anteriores, es decir, en orden inverso.Refleje todo para obtener la regla en orden de izquierda a derecha.
fuente
Lienzo ,
424140 bytesPruébalo aquí! ( con una fuente que monoespacia la salida )
fuente
Emacs Lisp , 303 bytes
Use esta función como
(f '(30 (5 2)))
.Versión mejor legible:
fuente
Jalea ,
4241 bytesUn programa completo
Pruébalo en línea!
O vea un paquete de prueba
Nota: este código ha sido alterado de un programa completo -
ñ
(el siguiente enlace como una díada) ha sido reemplazado por1ŀ
(enlace en el índice 1 como díada) para permitir que el pie de página lo llame varias veces .¿Cómo?
fuente
Ruby , 126 bytes
Pruébalo en línea!
Parece bastante detallado con todas esas
each_slice
cosas, pero lo hará por ahora, a menos que logre encontrar un enfoque más golfista.Toma datos en cuanto
l
a longitud ei
intervalos, devuelve una matriz de cadenas.fuente
R ,
175170bytesPruébalo en línea!
Toma intervalos vacíos como
0
, devuelve una matriz de caracteres. El enlace TIO muestra la salida impresa.fuente
Haskell ,
167164149 bytesPruébalo en línea! Un enfoque diferente ligeramente golfista por Οurous .
Pruébalo en línea! Todavía hay algunas redundancias que parecen que podrían explotarse, pero hasta ahora resistieron todos los intentos de golf adicionales.
La solución anterior de 167 bytes es la misma, aparte del manejo de nueva línea y probablemente sea un poco mejor legible:
Pruébalo en línea!
fuente
PowerShell , 152 bytes
Pruébalo en línea!
Desenrollado:
fuente
C # (compilador interactivo de Visual C #) , 204 bytes
Pruébalo en línea!
Salidas, pero se atasca en un bucle infinito.
fuente
Limpio ,
221201195162 bytesPruébalo en línea!
Devuelve una lista de listas de caracteres UTF-8 (como cadenas, ya que Clean no tiene soporte UTF-8 innato).
Funciona generando la primera línea, luego tomando el producto de los prefijos de la lista proporcionada en grupos de dos, y comprueba qué marca dibujar en función de si el producto divide la posición actual del personaje.
Sin golf:
fuente