Cualquier hexágono regular puede ser embaldosado con diamantes, por ejemplo, así:
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Consideraremos lo anterior como un mosaico de tamaño 1
(ya que los lados de los diamantes están hechos de uno /
o \
cada uno). El mismo mosaico de tamaño 2
se vería así:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Su tarea es recibir un mosaico de arte ASCII (de tamaño 1
) como entrada, junto con un entero positivo N
(en decimal o unario), especificando el tamaño de la salida deseada. A continuación, debe generar una versión ampliada del mismo mosaico.
Tenga en cuenta que el hexágono puede ser de cualquier tamaño y tan pequeño como 1x1x1 (que contiene tres diamantes).
Ni la entrada ni la salida deben contener espacios finales, ni más espacios iniciales que los necesarios para alinear la forma del hexágono. Tanto la entrada como la salida pueden contener opcionalmente una nueva línea final (esta opción no tiene que ser la misma para la entrada y la salida).
Puede escribir un programa o función, tomando la entrada a través de STDIN (o la alternativa más cercana), argumento de línea de comando o argumento de función y generando el resultado a través de STDOUT (o la alternativa más cercana), el valor de retorno de la función o el parámetro de función (out).
Este es el código de golf, por lo que la respuesta más corta (en bytes) en victorias.
Ejemplos de inclinaciones
Aquí hay un puñado de inclinaciones de entrada que puede usar para probar su envío.
__
/_/\
\_\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
El siguiente fragmento contiene las salidas correspondientes para las entradas a N = 1
través N = 6
.
__
/_/\
\_\/
____
/ /\
/___/ \
\ \ /
\___\/
______
/ /\
/ / \
/_____/ \
\ \ /
\ \ /
\_____\/
________
/ /\
/ / \
/ / \
/_______/ \
\ \ /
\ \ /
\ \ /
\_______\/
__________
/ /\
/ / \
/ / \
/ / \
/_________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\_________\/
____________
/ /\
/ / \
/ / \
/ / \
/ / \
/___________/ \
\ \ /
\ \ /
\ \ /
\ \ /
\ \ /
\___________\/
____
/_/\_\
/\_\/_/\
\/_/\_\/
\_\/_/
________
/ /\ \
/___/ \___\
/\ \ / /\
/ \___\/___/ \
\ / /\ \ /
\/___/ \___\/
\ \ / /
\___\/___/
____________
/ /\ \
/ / \ \
/_____/ \_____\
/\ \ / /\
/ \ \ / / \
/ \_____\/_____/ \
\ / /\ \ /
\ / / \ \ /
\/_____/ \_____\/
\ \ / /
\ \ / /
\_____\/_____/
________________
/ /\ \
/ / \ \
/ / \ \
/_______/ \_______\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \_______\/_______/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\/_______/ \_______\/
\ \ / /
\ \ / /
\ \ / /
\_______\/_______/
____________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/_________/ \_________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \_________\/_________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/_________/ \_________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\_________\/_________/
________________________
/ /\ \
/ / \ \
/ / \ \
/ / \ \
/ / \ \
/___________/ \___________\
/\ \ / /\
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \ \ / / \
/ \___________\/___________/ \
\ / /\ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\ / / \ \ /
\/___________/ \___________\/
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\ \ / /
\___________\/___________/
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
__________________
/ / /\ \
/ / / \ \
/_____/_____/ \_____\
/ /\ \ /\ \
/ / \ \ / \ \
/_____/ \_____\/ \_____\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \_____\/_____/ \/_____/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\/_____/ \_____\/_____/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\_____\/_____/ \_____\/
\ \ \ / /
\ \ \ / /
\_____\_____\/_____/
________________________
/ / /\ \
/ / / \ \
/ / / \ \
/_______/_______/ \_______\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/_______/ \_______\/ \_______\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_______\/_______/ \/_______/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_______/ \_______\/_______/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_______\/_______/ \_______\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_______\_______\/_______/
______________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/_________/_________/ \_________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/_________/ \_________\/ \_________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \_________\/_________/ \/_________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/_________/ \_________\/_________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\_________\/_________/ \_________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\_________\_________\/_________/
____________________________________
/ / /\ \
/ / / \ \
/ / / \ \
/ / / \ \
/ / / \ \
/___________/___________/ \___________\
/ /\ \ /\ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/ / \ \ / \ \
/___________/ \___________\/ \___________\
/\ \ / /\ / /\
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \ \ / / \ / / \
/ \___________\/___________/ \/___________/ \
\ / /\ \ / /\ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\ / / \ \ / / \ /
\/___________/ \___________\/___________/ \/
\ \ / /\ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\ \ / / \ \ /
\___________\/___________/ \___________\/
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\ \ \ / /
\___________\___________\/___________/
________
/_/\_\_\_\
/\_\/\_\_\_\
/\/_/\/_/_/\_\
/\/\_\/_/_/\/\_\
\/\/_/\_\_\/\/_/
\/\_\/_/\_\/_/
\/\_\_\/_/_/
\/_/_/_/_/
________________
/ /\ \ \ \
/___/ \___\___\___\
/\ \ /\ \ \ \
/ \___\/ \___\___\___\
/\ / /\ / / /\ \
/ \/___/ \/___/___/ \___\
/\ /\ \ / / /\ /\ \
/ \/ \___\/___/___/ \/ \___\
\ /\ / /\ \ \ /\ / /
\/ \/___/ \___\___\/ \/___/
\ /\ \ / /\ \ / /
\/ \___\/___/ \___\/___/
\ /\ \ \ / / /
\/ \___\___\/___/___/
\ / / / / /
\/___/___/___/___/
________________________
/ /\ \ \ \
/ / \ \ \ \
/_____/ \_____\_____\_____\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \_____\/ \_____\_____\_____\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \/_____/ \/_____/_____/ \_____\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \/ \_____\/_____/_____/ \/ \_____\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\/ \/_____/ \_____\_____\/ \/_____/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\/ \_____\/_____/ \_____\/_____/
\ /\ \ \ / / /
\ / \ \ \ / / /
\/ \_____\_____\/_____/_____/
\ / / / / /
\ / / / / /
\/_____/_____/_____/_____/
________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_______/ \_______\_______\_______\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_______\/ \_______\_______\_______\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_______/ \/_______/_______/ \_______\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_______\/_______/_______/ \/ \_______\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_______/ \_______\_______\/ \/_______/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_______\/_______/ \_______\/_______/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_______\_______\/_______/_______/
\ / / / / /
\ / / / / /
\ / / / / /
\/_______/_______/_______/_______/
________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/_________/ \_________\_________\_________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \_________\/ \_________\_________\_________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/_________/ \/_________/_________/ \_________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \_________\/_________/_________/ \/ \_________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/_________/ \_________\_________\/ \/_________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \_________\/_________/ \_________\/_________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \_________\_________\/_________/_________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/_________/_________/_________/_________/
________________________________________________
/ /\ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/ / \ \ \ \
/___________/ \___________\___________\___________\
/\ \ /\ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \ \ / \ \ \ \
/ \___________\/ \___________\___________\___________\
/\ / /\ / / /\ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \ / / \ / / / \ \
/ \/___________/ \/___________/___________/ \___________\
/\ /\ \ / / /\ /\ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \ / \ \ / / / \ / \ \
/ \/ \___________\/___________/___________/ \/ \___________\
\ /\ / /\ \ \ /\ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\ / \ / / \ \ \ / \ / /
\/ \/___________/ \___________\___________\/ \/___________/
\ /\ \ / /\ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\ / \ \ / / \ \ / /
\/ \___________\/___________/ \___________\/___________/
\ /\ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\ / \ \ \ / / /
\/ \___________\___________\/___________/___________/
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\ / / / / /
\/___________/___________/___________/___________/
N-1
líneas vacías iniciales . :(Respuestas:
CJam,
85797672 bytesEl tamaño debe estar en la primera línea. Y el diamante sigue.
No jugaba muy bien ... Y la mitad de los personajes provenían de los detalles.
Explicaciones (de la versión anterior)
fuente
Pitón 2, 164
Salida en casos de prueba.
Entonces, ¿qué está pasando aquí?
La idea principal es que cada personaje en el original explota en un
n*n
bloque. Por ejemplo, para n = 4,/
podría convertirse enEl carácter original aparece una vez en cada línea, y hay relleno a cada lado. Aquí, está
a la izquierda
y
_
a la derecha. Solo se puede rellenar la fila inferior'_'
; El resto es siempre' '
.La principal dificultad es que el relleno de la derecha puede depender del próximo símbolo. Específicamente,
'/ '
tiene un relleno diferente'/_'
, por lo que necesitaríamos un poco de anticipación. Además, para evitar espacios finales, tendríamos que tener en cuenta que estamos en el último símbolo y abstenerse de rellenar a la derecha.Superamos estos dos problemas solo rellenando a la izquierda del personaje actual. Cuando lo hacemos, también realizamos el relleno derecho del carácter anterior utilizando el símbolo de relleno actual. Entonces, imprimimos el relleno derecho que se debe al carácter anterior, el relleno izquierdo del carácter actual y luego el carácter actual. También almacenamos la cantidad de "deuda" de relleno que el próximo personaje deberá pagar.
Ahora repasemos el código.
La cadena de entrada es
s
y el factor de escala esn
. Vamos línea por línea, imprimiendon
líneas para cada línea de entradaW
, con las copias indexadasj=n,n-1,...,2,1
. La primera línea solo se copia una vez, lo que logramos al inicializarj
a 1 pero cambiarla an
cada ciclo.Iteramos a través de la línea de entrada, acumulando la línea para imprimir
O
. Primero, descubrimos el carácter de relleno apropiadoq
, que es un guión bajo si estamos en la línea inferior y si el carácter actual o anterior es un guión bajo y, de lo contrario, un espacio.Luego, decidimos la cantidad de relleno a la izquierda (
e
). Para/
, esj-1
(disminuyendo con la disminución del número de línea-copia), y la complementarian-j
para\
. Tratamos a otros personajes de la misma manera. Por ejemplo, aunque_
parece que da una fila den
guiones bajos, en realidad da un solo guión bajo, rellenado por guiones bajos a la izquierda y a la derecha. Esto parece ineficiente, pero nos permite trabajar con_
yen el mismo marco que
/
y\
La posición del subrayado "central" no importa, por lo que lo agrupamos ycon
\
; Esta opción también hace que la fila superior funcione sin una carcasa especial.A continuación, agregamos a la cadena de salida. Hemos descubierto el símbolo de relleno
q
y la cantidad de relleno actuale
, pero también debemos recordar la deuda de rellenod
del símbolo anterior. Entonces, agregamosq*(e+d)
. Luego, agregamos el símbolo actualc
, excepto que debemos evitar los guiones bajos en una fila que no sea inferior, lo que arreglamos convirtiendo los guiones bajos en el símbolo de relleno.Finalmente, registramos el monto de la deuda de relleno, que complementa
n+~d
el monto actual del margen izquierdo. También registramos el símbolo actual enp
, para que luego sepamos si el símbolo anterior era_
.fuente
JavaScript ( ES6 ) 274281
289 338fuente
Pitón 2,
2172111951941906 bytes gracias a Sp3000.
Llame
m
con el primer argumento como el diamante como una cuerda, y el segundo argumento como el número de repetición.Esto se basa en una secuencia de reemplazo de cadena de 3 pasos:
/\
con/ \
, con el número de espacios intermedios que van de 2 a 2 * (n-1) sobre las líneas.\/
con\ /
, con el número de espacios intermedios que van de 2 * (n-1) a 2 sobre las líneas.Luego, hay una gran variedad de estupideces para obtener los espacios iniciales correctos y para obtener la primera línea correcta.
Tenga en cuenta que la línea final del programa debe ser una pestaña, no 4 espacios. Markdown no admite pestañas.
fuente
(i+(n-i+~i)*(d[-1]>f)) --> [i,n+~i][d[-1]>f]
y solo los usa'_'
una vez, por lo que desperdicia un byte definiéndolo.Python,
272238228243 bytesVersión actualizada, ahora toma una sola cadena como entrada, en lugar de una secuencia de cadena. También elimina los espacios en blanco finales que estaban presentes en la versión anterior. Lamentablemente, estos cambios aumentan el tamaño.
Versión con espacios en blanco y declaraciones divididas en unidades más pequeñas para facilitar la lectura:
El enfoque básico aquí es:
N
, generando una línea de salida en cada iteración de bucle. Hay un caso especial para la primera línea, donde solo se genera la última línea de salida, para evitar generar líneas vacías al comienzo de la salida.N
caracteres, donde:N
espacios.N
espacios para las primerasN -1
iteraciones del bucle yN
guiones bajos para la última iteración del bucle.N - 1
espacios o guiones bajos.La parte más difícil aquí es que el relleno para las barras inclinadas / barras invertidas utiliza espacios o guiones bajos dependiendo del carácter de entrada siguiente (para barras inclinadas) o anterior (para barras inclinadas invertidas). Eso no parecía encajar bien con la estrategia de sustitución de cuerdas.
Lo que hice para resolver esto es que primero reemplazo ciertas combinaciones de dos caracteres con diferentes caracteres, para poder tratarlos de manera diferente durante la sustitución real. Por ejemplo,
/_
se reemplaza por(_
. Después de esto,(
es efectivamente una "barra inclinada seguida de un guión bajo", que luego puede sustituirse en consecuencia.Programa principal utilizado para probar la función:
fuente
n-1-k
esn+~k
.rstrip()
para 9 caracteres más. Espero poder hacerlo mejor, y también encontré una forma de recortar 5 caracteres.sys.stdin
no es un parámetro de entrada permitido; debe manipular la cadena en sí.sys.stdin
yint(sys.argv[1])
que no vas a obtener de forma gratuita al esperar que se pasan como las variables (si eso era un juego justo, entonces también podría esperar aliasrange
y replace` y todo lo que necesita para estar predefinido) .stdin
y una lista de cadenas son secuencias de cadenas.Perl, 132
Entrada combinada STDIN y ARGV. Ejemplo:
fuente
Rubí 236
237Prueba en línea: http://ideone.com/e6XakQ
Este es el código antes de jugar al golf:
fuente