Dado un número entero, genera una tienda al revés.
La entrada determina tanto el tamaño de la tienda (valor absoluto) como si la entrada está en el lado izquierdo (números negativos) o en el lado derecho (números positivos).
If input = -1:
____
\/_/
If input = -2:
________
\ / /
\/___/
If input = -3:
____________
\ / /
\ / /
\/_____/
If input = 1:
____
\_\/
If input = 2:
________
\ \ /
\___\/
If input = 3:
____________
\ \ /
\ \ /
\_____\/
et cetera
Tenga en cuenta que la parte superior de la tienda (es decir, la última línea) tiene 2 * abs(input) - 1
guiones bajos.
No puede haber ninguna espacios iniciales, de tal manera que la primera línea comienza directamente con un guión bajo.
Suponga que la entrada nunca será 0
.
Su código debe ser lo más corto posible.
Este desafío se basa en un mini desafío de chat de Helka Homba , que puede usarse en desafíos reales bajo las condiciones de la Licencia pública de pasatiempos de Calvin .
3
por ejemplo?Respuestas:
MATL ,
55535251 bytesPruébalo en línea!
Explicación
Deje
N
denotar la entrada. El código procede en tres pasos.Primero , la primera línea de
4*N
guiones bajos se construye como una cadena y se muestra (lo que la elimina de la pila).Segundo , el "marco" de la tienda se construye usando los dos tipos de barras. Para hacer esto, se crea una matriz numérica 2D que contiene
1
y2
corresponde a los dos tipos de barras, y0
para el espacio.Esto se hace concatenando cuatro matrices:
abs (N)
;2
en el antidiagonal;Concatenando estas cuatro matrices verticalmente da, usando
N=3
como ejemplo, la siguiente4*N × N
matriz:(que, transpuesta, comienza a parecerse a la tienda).
Ahora nos encargamos del signo de la entrada. Si es positivo, simplemente transponemos la matriz y el índice anteriores en la cadena
'\/ '
. La indexación se basa en 1 y es modular, por lo que se1
convierte'\'
, se2
convierte'/'
y se0
convierte' '
, produciendo la matriz de caracteres 2DPor otro lado, si la entrada es negativa, volteamos verticalmente y negamos aritméticamente la
4*N × N
matriz, produciendoEl índice
-1
ahora se refiere a'/'
y-2
a'\'
. Es decir, los dos tipos de barras han sido intercambiados, según sea necesario. Una vez más, la transposición y la indexación en la cadena'\/ '
da la carpa invertida:Tercero , los guiones bajos deben completarse en parte de la última fila de la matriz de caracteres 2D. La posición horizontal de esta línea depende del signo de la entrada, y su longitud es
abs(N)
.Una vez que los espacios correspondientes han sido reemplazados por guiones bajos, el resultado se muestra implícitamente, debajo de la línea inicial de guiones bajos que ya se mostró en el primer paso.
fuente
Javascript (ES6), 139 bytes
Construye la carpa recursivamente:
Ungolfed y comentó
Ejemplos
fuente
Python 2,
143 141 139 138137 bytes-2 bytes gracias a @ Sp3000 (no es necesario paréntesis exec en Python 2)
-1 byte gracias a @ Sp3000 (uso
cmp
)Pruébalo en ideone
Primero vemos si
n
es negativo y hacemosd
+1
si es y-1
si no.Luego seleccionamos las dos barras inclinadas,
a
yb
, usandod
tal quea='\', b='/'
cuandon
sea positivo ya='/', b='\'
cuandon
sea negativo.A continuación establecemos lo
s=abs(n)
que puede lograrse mediantes=n*d
.Luego calculamos el número
_
en la parte superior (parte inferior de la imagen), que también es el númeroen el costado de la tienda como
x=2*s-1
.Luego calculamos el número
_
en la base de la tienda (parte superior de la imagen), y lo almacenamos comoy=4*s
se usará en el bucle para crear el resto de la tienda.Ahora imprimimos la base de la tienda usando
print'_'*y
.Luego imprimimos el resto de la tienda ejecutando
s
declaraciones de impresión con una variable de buclei
inicializada a la0
que se incrementa1
para cada declaración de impresión.El resto de la carpa tiene
y-3-x-i-i
espacios en la puerta yx
espacios en el cuerpo hasta que se alcanza la parte superior, cuando ses-i>1
evalúa como Falso, eligiendo el_
de'_ '
.Para una carpa positiva de puerta izquierda, toda la carpa, excluyendo los espacios iniciales, es de atrás hacia adelante, por lo que se invierte mientras que la carpa positiva de `` puerta derecha '' no está
[::d]
.fuente
cmp(0,0)
regresa0
Python 2, 121 bytes
Solo mucho formato de cadena.
fuente
C #,
215214 bytesExiste la posibilidad de guardar algunos bytes cuando se usa de
using s=string;
antemano.que sería 15 (usando) + 184 (método) = 199 bytes.
fuente
var
dentro del ciclo forstring
, puede eliminar el segundovar
(incluyendo espacio para guardar el byte). Entonces sevar f
vuelvestring f
y se;var p=
vuelve,p=
.TSQL, 195 bytes
Golfizado:
Sin golf:
Violín
fuente
V , 66 bytes
Pruébalo en línea!
Este es un enfoque bastante ingenuo, así que intentaré jugarlo más tarde hoy. Esta solución contiene caracteres no imprimibles, así que aquí hay un hexdump:
fuente
05AB1E , 52 bytes
Explicación
Pruébalo en línea!
fuente
PowerShell v2 +,
217205190187184 bytesToma la entrada
$b
como un entero. Tenga en cuenta que si$b
es negativo, debe rodearlo explícitamente con parens para emitirlo adecuadamente (ver ejemplos), de lo contrario, PowerShell pensará que es una cadena.Independientemente de en qué dirección esté mirando la carpa, la primera línea es la misma, un montón de guiones bajos; exactamente
4*abs(input)
muchos de ellos, en realidad. Ese número también se almacena$a
para su uso posterior. Además, ahora que tenemos el valor absoluto de$b
almacenado en$a
, nos convertimos$b
en un booleano para su signo y elegimos nuestras barras almacenadas en$y
y$z
.La siguiente línea es la construcción y formulación de la salida, y es un doozy, así que vamos a desglosarlo.
Básicamente, estamos indexando en una matriz de dos elementos,
(big long calculations saved into $x)
o$x
, en base a$b
.Los cálculos son donde se construye el cuerpo de la tienda. Hacemos un bucle desde
1..$a|%{...}
. Cada iteración estamos construyendo una línea del cuerpo de la tienda. Comenzamos con una cantidad de espacios igual a la línea # en la que estamos-1
, para que esté alineada a la izquierda de manera apropiada. Eso se almacena$w
para más adelante, y se concatena con la barra inclinada apropiada ($ z, según$b
), luego el número de espacios en el marco de la puerta, luego la otra barra inclinada$y
, luego los guiones bajos o espacios dependiendo de si estamos en la línea de fondo o no, luego otra barra oblicua$y
, y finalmente el número apropiado de espacios finales ($w
) para construir una cadena rectangular. Esa matriz resultante de cadenas se almacena en$x
.Si se selecciona la mitad izquierda de la matriz (es decir,
$b
esFalse
desde la entrada era positivo), entonces tenemos que bucle a través de$x
y revertir cada elemento de línea - aquí es donde los espacios finales entran en juego; nos permite simplemente invertir las líneas en lugar de volver a calcular distancias.Si
$b
es asíTrue
, se selecciona la mitad derecha de la matriz$x
.En cualquier caso, la tubería ahora contiene una serie de cadenas. La salida implícita a través de
Write-Output
ocurre al finalizar el programa, con una nueva línea predeterminada entre los elementos.Ejemplos
fuente
Haskell,
187184183 bytesSiento que este no es un gran puntaje para Haskell, por lo que cualquier idea de mejora es bienvenida.
Sin golf
fuente
main
para que aceptestdin
como entrada?:
carácter. es decir, cambiar"\\" ++ entrance...
a'\\':entrance
.|1>0=(2*(n-i-1))%' '
a|q<-2*(n-i-1)=q%' '
.C,
240207193 BytesEsta vez optimicé la función g (...) para usar un solo bucle for.
Esta vez, la macro X está mejor como una función g (...) y dado que y y z son parámetros en un nuevo alcance, puedo disminuirlos en el alcance de g.
Prueba con esta función principal; Esto debería ser mucho más pequeño.
fuente
C #
241231 BytesGuardado 10 bytes gracias a @Kevin Cruijssen
Versión antigua:
Originalmente tenía el
new string(...)
como unFunc<char,int,string>
byte guardado pero usando el constructor. Deseoint
->char
estaba implícitoEstoy bastante seguro de que mis matemáticas también se pueden arreglar de alguna manera, pero no puedo verlo
fuente
int
antesz=
añadiéndolo al bucle for-:int j=0,z
. Y como usasstring
bastante, puedes usar un alias para queusing s=System.String;
el total sea:using s=System.String;s f(int N){var f=N<0;N=N>0?N:-N;var o=new s('_',N*4);for(int j=0,z;j<N;){z=-2*j+2*N-2;var O=j>N-2?'_':' ';o+='\n'+new s(' ',j)+'\\'+new s(' ',z)+(f?'/':O)+new s(O,j++*2)+(f?O:'\\')+new s(' ',z)+'/';}return o;}
( 231 bytes )Swift 2.2 421 bytes
Bueno ... Esto fue un intento.
Golfizado:
Sin golf:
fuente
PHP, 143 bytes
corre con
php -r '<code>' <parameter>
Descompostura
fuente
Lote, 289 bytes
Toma entrada en STDIN. Comienza creando una cadena de
2*(abs(n)-1)
guiones bajos. Esto se repite más 4 guiones bajos adicionales para la base de la tienda. El resto de la tienda consiste en una sangría (que aumenta en 1 en cada línea), a\
, el centro de la tienda y a/
. El centro de la tienda comienza como2*(abs(n)-1)
espacios, más uno\
o/
más un espacio (que no puedo representar en Markdown), más otros2*(abs(n)-1)
espacios. Reutilizo la cadena de subrayado y la cambio a espacios por conveniencia, pero luego cambio los espacios a guiones bajos para la última línea. Cada línea elimina dos espacios de un lado del centro de la tienda, aunque es un poco más golfista mover los dos espacios al inicio de la cuerda primero si es necesario.fuente
Lienzo , 25 bytes.
Pruébalo aquí!
fuente