Escriba un programa (o función) que tome una cadena no vacía de cualquier carácter ASCII imprimible .
Imprima (o devuelva) una cadena en zigzag de los caracteres en la cadena con cada par de caracteres vecinos unidos por:
/
si el primer carácter aparece antes del segundo carácter en el orden ASCII normal. p.ejB / A
\
si el primer carácter aparece después del segundo carácter en el orden ASCII normal. p.ejB \ A
-
si el primer y el segundo personaje son iguales. p.ejA-A
Entonces la salida para Programming Puzzles & Code Golf
sería
o
/ \
r z-z o e G l
/ \ / \ / \ / \ / \
P o r m-m n u l s & C d f
\ / \ / \ / \ / \ / \ / \ /
g a i g P e
\ /
Si solo hay un carácter en la cadena de entrada, la salida sería ese carácter.
Su programa debe tratar ,
/
, \
, y -
lo mismo que todos los demás caracteres.
Por ejemplo, -\//-- \ //-
debe producir:
\
/ \
- /-/
/ \
- --- \ /-/
\ / \ / \
-
\
No debería haber nuevas líneas extrañas en la salida, excepto una nueva línea final opcional. (Tenga en cuenta que la línea vacía en el ejemplo anterior contiene el último espacio en la cadena y, por lo tanto, no es ajena). Puede haber espacios finales en cualquier línea en cualquier disposición.
El código más corto en bytes gana.
Un ejemplo más - Entrada:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Salida:
9 9 8 6 6
/ \ / \ / \ / \ / \
9 6 8 7 3 3 4 2 4 8 9 8-8
/ \ / \ / \ / \ / \ / \ / \
4 5 2 5 5 2 3-3 3 7 5 2 4 9 9 9-9 7
/ \ / \ / \ / \ / \ / \ / \ / \ / \
3 1 1 3 2 0 1 7 6 3 3 5 8 8 6
\ / \ / \ / \ / \ / \
. 1 1 5 2 9 9 3 7 1 4 6 8 9
\ / \ / \ / \ / \ / \ / \ / \ /
0 0 7 9 5 2 0 0 2 6 9-9 8 5 4 7
\ / \ / \ / \ / \ / \ / \ /
4 4-4 2 8 8 4 2 3 2 7 6
\ / \ / \ / \ /
0 6 8 3 1-1 0
\ / \ /
2 0
'\n'
con una cadena de plantilla como estafor
bucles se pueden aplastar mucho. No desperdicie un bloque completo de código requerido coni++
. En su lugar, ejecuta la mayor parte de tufor
código allí. Además, no necesita llaves alrededor de una sola línea de código.l
es calculars.length*2-1
y lo hace dos veces. ¿Por qué no almacenar ese valor en su lugar?<br>
está justo allí, por lo que aparece en la versión HTML; si miras detenidamente, en su lugar utilizo una cadena de plantilla en la entrada real. Además, no es un requisito: "Imprimir (o devolver) ..."Python, 393 bytes
Correr como:
z("Zigzag")
fuente
JavaScript (ES6), 202
Usando cadenas de plantillas. Los espacios de sangría y las nuevas líneas no se cuentan, excepto la última nueva línea dentro de los backticks que son significativos y contados.
Nota habitual: pruebe ejecutar el fragmento en cualquier navegador compatible con EcmaScript 6 (en particular, no Chrome ni MSIE. Probé en Firefox, Safari 9 podría funcionar)
fuente
CJam, 79 bytes
Pruébalo en línea
Esto construye la salida columna por columna y transpone el resultado al final para obtener la salida fila por fila. Esto fue bastante doloroso en general.
Explicación:
fuente
Perl 5,
230214Prueba
fuente
K, 86
.
Sin golf:
fuente
Rubí, 158
Guardado 6 bytes gracias a histocrat . ¡Gracias!
fuente
->s,*i{
. Y si reemplazass[0]
cons[/./]
, creo que puedes reemplazars[1..-1]
con$'
.Python con Numpy: 218 bytes
Vale la pena desperdiciar 19 bytes para importar numpy.
Golfizado:
Sin golf:
fuente