Dada uma sequência, sua tarefa é recolhê-la em uma estrutura em zigue-zague, conforme descrito abaixo.
Dobrando em ziguezague
Tomaremos a string "Mississippi"
como exemplo:
Primeiro, imprima o prefixo mais longo, composto apenas por caracteres únicos:
Mis
Quando você alcança o primeiro caractere duplicado C , ignore-o e gere o prefixo mais longo que consiste em caracteres únicos da string restante (
issippi
) verticalmente, abaixo da primeira ocorrência de C :Mis i s
Repita o processo, alternando entre a continuação horizontal e vertical. Mas agora tenha cuidado (na etapa 1) para continuar produzindo horizontalmente a partir da ocorrência mais recente do caractere duplicado, que não é necessariamente o último, como neste caso:
Mis i sip ----- Mis i sip i
Regras
- A sequência conterá apenas caracteres ASCII imprimíveis, mas não conterá nenhum tipo de espaço em branco.
- Você pode competir em qualquer linguagem de programação e pode receber e fornecer saída por qualquer método padrão e em qualquer formato razoável 1 , observando que essas brechas são proibidas por padrão. Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
- 1 Entrada: String / Lista de caracteres / qualquer outra coisa que seu idioma use para representar strings. Saída: sequência de linhas múltiplas, lista de sequências que representam linhas ou lista de listas de caracteres / sequências de comprimento 1, mas inclua uma versão bonita do seu código na sua resposta, se possível.
- Em relação a espaços adicionais, a saída pode conter:
- Novas linhas iniciais / finais
- Espaços finais em cada linha / no final
- Um número consistente de espaços à esquerda em cada linha
- Você deve começar a produzir horizontalmente, talvez não seja iniciado verticalmente.
Casos de teste
Entradas:
"Perfeito" "Mississippi" "Extravagâncias" "Trivialidades" "Cthulhu" "PPCG" "pOpOpOpOpOpOp" "ABCCCE" "ABCCCECCEEEEC" "abcdcebffg" "abca" "AAAAAAAA"
Saídas correspondentes:
Perf c t
Mis Eu trago Eu
Od ies t
Triv uma eu ies t
Cthul você
P C G
pO OpO pOp p
abc C E
abc CCE E CE
abcd e b fg
abc
UMA AA UMA
b
, pois só deve considerar duplicatas na string restante , ou seja, depois de "ramificar". Quando você alcança o segundoc
, gera o prefixo mais longo de caracteres únicos da string restante , que éebffg
(assim, produzindoebf
verticalmente e continuando horizontalmente depois disso), para que você não precise se preocupar com os caracteres da parte da string que já foi emitido antes de mudar de orientação. Se ainda não está claro para você, farei outro exemplo passo a passo com este caso de teste.ABCcde
"A" ≠ "a"
. A saída paraABCcde
apenas seriaABCcde
AAAAAAAA
Respostas:
Wolfram Language (Mathematica) , 143 bytes
Experimente online!
Contém
0xF8FF
, o que corresponde ao\[Transpose]
operador.Ufa, foi difícil transformar o resultado em uma sequência. Obter cada ramo não é tão difícil:
#//.{q___,a_,r___,a_,Longest@s___}:>{q,a,{r},{s}}&
fonte
Python 2 , 131 bytes
Experimente online!
-1 graças a Lynn .
Imprime como uma tupla de listas de cadeias de comprimento 1. Saída bonita impressa .
fonte
Python 2 ,
184176175168 bytes-5 bytes graças ao Sr. Xcoder
Experimente online!
fonte
\
? Além disso, você pode exibir como uma lista de listas de cadeias de comprimento 1, como eu faço na minha solução, pelo OP.CJam , 81 bytes
Experimente online!
fonte