Reto
Dado un operador ASCII de la lista a continuación y un número n, dibuje una representación ASCII del operador utilizando ese operador como el carácter con los segmentos de línea del operador que tienen una longitud n .
Entrada
Un carácter ASCII de la lista = + - x /
y un número entero n
donde n >= 1
. (Estoy usando en x
lugar de *
y en /
lugar de ÷
, pero podría usar cualquiera de los dos, lo que sea más fácil). Para +
y x
, solo tiene que manejar números impares para evitar problemas con la alineación.
Salida
Un dibujo ASCII del operador compuesto por el personaje con segmentos de longitud n. Las porciones horizontales deben tener espacios entre los caracteres para compensar las diferencias de distancia vertical / horizontal.
Reglas
Este es el código de golf , por lo que gana el código más corto en bytes. Las lagunas estándar están prohibidas.
Ejemplos
Entrada: + 3
+
+ + +
+
Entrada: = 4
= = = =
= = = =
Entrada: = 10
= = = = = = = = = =
= = = = = = = = = =
Entrada: - 2
- -
Entrada: / 10
/
/
/
/
/
/
/
/
/
/
Entrada: x 7
x x
x x
x x
x
x x
x x
x x
= 10
?Respuestas:
Pip ,
625956 bytes55 bytes de código, +1 para
-S
bandera.Tenga en cuenta que esta solución funciona con la entrada de
÷
para división y*
multiplicación, aunque utiliza esos caracteres para dibujar ASCII-art/
yx
, respectivamente. OP ha aclarado que esto está bien.Pruébalo en línea!¿Cómo?
Aquí hay una versión parcialmente separada y comentada . Tenga en cuenta que
a
yb
son los argumentos de la línea de comandos, es decir, el operador y el tamaño, respectivamente. El-S
indicador controla cómo se generan las listas: primero se une a las nuevas líneas, pero se une a cualquier lista anidada en los espacios.Y aquí están las secciones individuales:
Multiplicación
Para cada fila de la figura, generamos una cadena de espacios y luego reemplazamos dos de ellos con el carácter de entrada. Para la fila
i
, queremos reemplazar los espacios en el índicei
yb-1-i
; pero tenga en cuenta que este último puede usar el índice negativo-1-i
. (Es aún más corto porque la variablev
está preinicializada a negati v e 1.)Adición
Usando la estrategia de mi Draw a hollow square answer, definimos una función que envuelve a
+
enb/2
copias de su argumento y devuelve el resultado como una lista de caracteres. (La división de enteros//
no es necesaria porque el operador de repetición de cadenasX
se trunca automáticamente a entero). Primero, llamamos a esta función en un espacio, dando[" ";" ";"+";" ";" "]
; luego, asignamos la misma función a ese resultado, dando[" ";" ";"+";" ";" "]
en la mayoría de las líneas pero["+";"+";"+";"+";"+"]
en la línea central. Esta lista anidada se genera, debido a la-S
bandera, con espacios entre todos los caracteres en una fila y líneas nuevas entre filas.División
Cada fila tiene espacios entre
b-1
y0
, seguidos del carácter de entradaa
.Sustracción
Haga una fila separada por espacios del carácter de entrada. Guarda una copia para más tarde.
Igual a
El paso de resta almacenó la mitad de lo que necesitamos,
y
solo el doble.Los
x
valores ficticios están allí para rellenar la lista principal de modo que la indexación modular proporcione un índice único para cada carácter de entrada+-*÷=
.fuente
V ,
78, 72, 71, 68, 65, 63, 62, 61 bytesPruébalo en línea!
Como siempre, ¡la batalla de cuello con cuello con 05AB1E es realmente divertida!
Como esto contiene caracteres no ASCII, aquí hay un hexdump:
Esto crea espacios iniciales en la salida para
=
y-
, pero parece estar permitido . Si esto no está permitido, siéntase libre de comentar y lo revertiré.Explicación
El "comando global" (por ejemplo
ç
) aplica un determinado conjunto de comandos a cada línea que coincide con una expresión regular determinada. La sintaxis esEsta es la forma más fácil de simular una declaración condicional / modificada. En mi respuesta original, simplemente creé todo el arte ASCII en el lado derecho para cada personaje diferente que necesitamos buscar. Sin embargo, muchas de estas salidas requieren comandos similares. Entonces los combiné. El primer comando ('Ç') es en realidad el inverso del comando global, aplica el comando a cada línea que no coincide con la expresión regular. Entonces el primer comando es:
El siguiente comando es para las entradas '=' y '-'. Estos dos son convenientemente fáciles y similares. Después de este comando, no necesitamos más procesamiento para
-
.Desde aquí solo hacemos algunos comandos adicionales para cada entrada posible individual. Para
+
:El comando para iguales es muy sencillo. Simplemente lo duplicamos con
Ä
. Para/
:El último es el más complicado. Básicamente es un puerto de esta respuesta .
fuente
ç
comando (así como buscar y reemplazar,/
y?
) todos simulan parte de la línea de comando de vim, donde debe presionar enter para ejecutar el comando05AB1E ,
8176747370696865646260595756 bytesActualmente en guerra con la respuesta V . Voy por usted Dr. McMoylex: p.
También en guerra con la respuesta Pip . Te estaré observando Sr. DLosc.
Código:
O en una forma más legible:
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
Python 3,
304283278 bytesBastante simple, solo hace una matriz de caracteres y aplica las diferentes operaciones en función de cuál es. El
=
y-
tienen espacios finales si eso no es tan malo.EDITAR: ¡Gracias a @Shebang y @Rod por sus sugerencias que terminaron ahorrando 21 bytes!
EDIT2: ¡Gracias a @Artyer por guardar 5 bytes!
fuente
if'-'==t
línea de condición y reemplazando la que está arriba conif t in'=-':b=[[t+' ']*s]*(2*(t>'-'))
(creo).exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])
para guardar ~ 18 bytes.split()
(No hay divisiones de args en espacios en blanco). En la línea 6, te perdiste un espacio (b=[[x+' 'for
). Puede hacer la última líneaprint(*map(''.join,b),sep='\n')
por 1 bytes menos.JavaScript (ES6),
238225215202196 bytesProbablemente podría jugar al golf, pero es un comienzo.
fuente
Scala, 275 bytes
Uso:
Explicación:
El código prueba el valor ascii del carácter para elegir la forma correcta de generar la imagen. Los valores ascii de los operadores en cuestión son:
('+' -> 43), ('-' ->45), ('/' -> 47), ('=' -> 61), ('x' -> 120)
fuente
JavaScript (ES6), 156 bytes
Donde
\n
representa el carácter literal de nueva línea.fuente
SyntaxError: invalid property id
lo que está escrito actualmente, pero el cambio de los backticks alrededor de la barra diagonal a los apóstrofes solucionó eso. (¿Por qué tienes backticks allí en lugar de apóstrofes?)+
,-
y se=
ven diferentes a las que exige el desafío: "Las porciones horizontales deben tener espacios entre los caracteres para compensar las diferencias de distancia vertical / horizontal".Dyalog APL ,
9186 bytesNecesidades
⎕IO←0
, lo cual es predeterminado en muchos sistemas. Toma n como argumento izquierdo, y uno de + - × ÷ = como argumento derecho.Explicación
fuente
Mathematica, 191 bytes
Función anónima. Toma una cadena y un número como entrada, y devuelve una cadena como salida. No es el más corto de lejos, pero sigue siendo divertido de escribir.
fuente
C, 396 bytes
Llamar con:
fuente
SOML ,
104100 bytes (no competitivos)Esto es bastante competitivo, ya que estoy bastante seguro de que todo lo que usé aquí tiene documentos en github antes de la fecha de publicación de estas preguntas, pero el analizador no tiene soporte para algunas funciones que usé tan idk.
fuente
PHP,
306292281282281275270 bytesOoh, esto es voluminoso ... necesita más golf.
Podría guardar 4 bytes con saltos de línea físicos o un byte al poner "\ n" en una variable.
fuente
C #, 744 bytes
Creo que tiene 1 millón de caracteres, pero no me importa, estoy tan feliz de haber resuelto esto ...
Golfizado:
Sin golf:
Pruebas:
Demasiado para pegar y formatear aquí, creé un pastebin:
Pastebin
fuente
C, 331 bytes
El operador se pasa como código ASCII
o
y el recuento de caracteresn
. Solo agregué espacios entre caracteres consecutivos horizontalmente en el signo más, ya que este era el único donde la salida se habría distorsionado si no lo hubiera hecho y en la tarea solo decía "debería". Yo uso dos bucles anidados en cuenta regresiva (a excepción de-
donde solo necesito una línea).=
Tres líneas, una de ellas vacía, directa+
utilizandoprintf
debido a los espacios-
sencillo/
haga que el bucle interno se imprima en cero y comience en el contador del bucle externox
tener la impresión del bucle interno en el contador del bucle externo y su "inverso"n-i
. Todavía necesito ver por qué estoy fuera de uno aquí.Llamada de muestra:
fuente
Lua,
402344312 bytes312:
344:
402:
Se reducen 90 caracteres y ahora es doloroso verlos incluso cuando se expanden. : |
fuente