Escreva um programa (ou função) que receba uma sequência não vazia de qualquer caractere ASCII imprimível .
Imprima (ou retorne) uma cadeia de caracteres em zigue-zague na cadeia de caracteres com todos os pares de caracteres vizinhos vinculados por:
/
se o primeiro caractere ocorrer antes do segundo caractere na ordem ASCII normal. por exemploB / A
\
se o primeiro caractere ocorrer após o segundo caractere na ordem ASCII normal. por exemploB \ A
-
se o primeiro e o segundo caracteres forem iguais. por exemploA-A
Portanto, a saída para Programming Puzzles & Code Golf
seria
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
\ /
Se houver apenas um caractere na sequência de entrada, a saída seria apenas esse caractere.
Seu programa deve tratar ,
/
, \
, e -
da mesma forma como todos os outros personagens.
por exemplo, -\//-- \ //-
deve produzir:
\
/ \
- /-/
/ \
- --- \ /-/
\ / \ / \
-
\
Não deve haver novas linhas estranhas na saída, exceto por uma única nova linha à direita opcional. (Observe que a linha vazia no exemplo acima mantém o último espaço na cadeia e, portanto, não é estranha.) Pode haver espaços à direita em qualquer linha em qualquer disposição.
O código mais curto em bytes vence.
Mais um exemplo - Entrada:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Resultado:
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'
por uma string de modelo como estafor
loops podem ser esmagados muito. Não desperdice um bloco inteiro de código necessárioi++
. Em vez disso, execute a maior parte do seufor
código lá. Além disso, você não precisa de chaves em torno de linhas únicas de código.l
é calculars.length*2-1
e faz isso duas vezes. Por que não armazenar esse valor?<br>
é apenas lá, por isso aparece na versão HTML; se você olhar atentamente, utilizarei uma sequência de modelos na entrada real. Além disso, não é um requisito: "Imprimir (ou devolver) ..."Python, 393 bytes
Correr como:
z("Zigzag")
fonte
JavaScript (ES6), 202
Usando seqüências de caracteres de modelo. Os espaços de recuo e as novas linhas não são contados, exceto a última nova linha dentro dos backticks que é significativa e contada.
Nota habitual: teste de execução do snippet em qualquer navegador compatível com EcmaScript 6 (principalmente o Chrome, não o MSIE. Eu testei no Firefox, o Safari 9 pode ir)
fonte
CJam, 79 bytes
Experimente online
Isso cria a saída coluna por coluna e transpõe o resultado no final para obter a saída linha por linha. Isso foi bastante doloroso no geral.
Explicação:
fonte
Perl 5,
230214Teste
fonte
K, 86
.
Ungolfed:
fonte
Ruby, 158
Economizou 6 bytes graças ao histocrat . Obrigado!
fonte
->s,*i{
. E se você substituirs[0]
pors[/./]
, acho que pode substituirs[1..-1]
por$'
.Python com Numpy: 218 bytes
Vale a pena desperdiçar 19 bytes para importar numpy.
Golfe:
Ungolfed:
fonte