CJam, 32 30 29 28 bytes
ri_"/\ /"2/f*)@,\f>+_z..e>N*
Pruébalo aquí.
Estaba tratando de ayudar a Reto a responder su respuesta de CJam, pero terminé con una solución que no tenía nada que ver con la suya, así que pensé que podría publicarla yo mismo.
Explicación
Esto hace uso de la simetría de la salida. En particular, el hecho de que la salida es la misma que su transposición.
Primero, generamos las primeras N+1
líneas, pero sin el borde izquierdo:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
Ahora tenemos una serie de cadenas que representan la siguiente cuadrícula:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
La transposición de eso se ve así:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
Juntos, estos tienen todos los caracteres no espaciales que necesitamos. Ahora podemos usar la punta de rad de Dennis para combinar dos cuadrículas ASCII en una, tomando el máximo de cada par de caracteres correspondiente. En todas las posiciones en las que las dos cuadrículas difieren, una tendrá un espacio (o nada) y la otra tendrá el personaje que estamos buscando. Cuando una lista en una operación vectorizada es más larga que la otra, los elementos adicionales de la lista más larga simplemente se mantendrán, que es justo lo que estamos buscando. En los otros casos, el carácter sin espacio siempre será el máximo de los dos caracteres:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
s.Python 2, 80 bytes
fuente
Mathematica,
123122121 bytesProbablemente podría jugar más golf.
fuente
Java - 141 bytes
No es el más corto, por supuesto, pero es bueno tener una solución Java:
Sin golf
Entrada
Salida
fuente
Pyth, 30 bytes
Probarlo aquí .
fuente
JavaScript,
128125123114 bytesDe-golf (también convertido a ES5) + demo:
fuente
Ruby, 50 bytes.
En programa de prueba:
El bucle imprime 2 filas para cada iteración de i = 0 a i = n-1.
La segunda fila siempre es
'\'
seguida por incidencias de'/ '
.La primera fila es la misma que la segunda fila de la iteración anterior, pero con la que
'\'
falta (por lo que almacenamos este valors
cuando imprimimos la segunda fila de la iteración anterior).La única excepción es la iteración cero, que se maneja inicializando
s
en'/\'*n
.fuente
Javascript (ES6),
10710410098979190 bytes¡Primera publicación aquí!
Solía usar pero ahora usa , similar al de Ruby .
Array(len)
.
join(str)
String.repeat(len)
operator*(str,len)
Sin golf:
Gracias a:
107 => 104 bytes: @ inserciónusernamehere
97 => 90 bytes: @ user81655
fuente
p=>{s=Array(++p).join('/\\')+'\n';for(i=p;i>2;i--,s+='\\'+o+o)o=Array(i).join('/ ')+'\n';return s+'\\/'}
.repeat
método.Python 2, 66 bytes
Muy claro. El valor
n
es el número de/
en la línea yb
dice si la línea comienza con\
. El valor deb
alterna entre 0 y 1, yn
disminuye cada segundo paso. La condición de terminación fea se detiene cuandon=1, b=0
. La alternativa de unexec
bucle tendría el problema de necesitar muchos escapes"'\\\\'"
.Me sorprendió encontrar este enfoque más corto que usar un solo número
k=2*n+b
. Esto es 68 bytes:Una estrategia alternativa evitaría una separación
print
para la línea superior, pero no vi una manera concisa.fuente
Minkolang 0.14 , 46 bytes
Estoy seguro de que esto podría jugar golf, pero son las 4 am aquí y necesito ir a la cama.
Pruébalo aquí
Explicación
fuente
Lote, 121 bytes
O si unary es aceptable, 107 bytes:
Invocar con el número apropiado de 1s.
fuente
Matlab, 122 bytes
fuente
Haskell, 99 bytes
Dos soluciones de igual longitud.
Llamar
f
.y
fuente
Haskell, 96
Esto no es realmente competitivo con la solución Haskell existente porque ahorra 5 caracteres al devolver en lugar de imprimir una cadena. Lo publico solo para mostrar cómo el enfoque de patrón infinito se compara con el enfoque basado en coordenadas. Notas:
p
se puede alinear sin cambios de longitud.[t n l|(n,l)<-...]
ahorra 2 más(map(uncurry t)$...)
.fuente
Ceilán, 100
Esto presenta una "lista de argumentos con nombre" para
join
(sin ningún argumento con nombre, pero una comprensión iterable en su lugar), y varios usosString.repeat
(uno de los cuales en realidad significa "incluir solo para impari
").Formateado:
fuente
PHP, 117 bytes
Asume que los avisos están desactivados y la entrada se toma de la línea de comando.
Sin golf:
Los comentarios son bienvenidos :)
fuente