Você não ama aqueles diagramas de vista explodida nos quais uma máquina ou um objeto é desmontado em suas partes menores?
Vamos fazer isso com uma string!
O desafio
Escreva um programa ou função que
- insere uma string contendo apenas caracteres ASCII imprimíveis ;
- disseca a string em grupos de caracteres iguais a não espaço (as "partes" da string);
- gera esses grupos em qualquer formato conveniente, com algum separador entre os grupos .
Por exemplo, dada a sequência
Ah, abracadabra!
a saída seria os seguintes grupos:
! , UMA aaaaa bb c d h rr
Cada grupo na saída contém caracteres iguais, com espaços removidos. Uma nova linha foi usada como separador entre grupos. Mais sobre os formatos permitidos abaixo.
Regras
A entrada deve ser uma sequência ou uma matriz de caracteres. Ele conterá apenas caracteres ASCII imprimíveis (o intervalo inclusivo do espaço ao til). Se o seu idioma não suportar isso, você poderá inserir a entrada na forma de números que representam códigos ASCII.
Você pode supor que a entrada contenha pelo menos um caractere não espacial .
A saída deve consistir em caracteres (mesmo que a entrada seja por meio de códigos ASCII). Deve haver um separador inequívoco entre os grupos , diferente de qualquer caractere não espacial que possa aparecer na entrada.
Se a saída for via retorno de função, também poderá ser uma matriz ou seqüências de caracteres, ou uma matriz de matrizes de caracteres ou estrutura semelhante. Nesse caso, a estrutura fornece a separação necessária.
Um separador entre os caracteres de cada grupo é opcional . Se houver um, a mesma regra se aplica: ele não pode ser um caractere não espacial que pode aparecer na entrada. Além disso, não pode ser o mesmo separador usado entre os grupos.
Fora isso, o formato é flexível. aqui estão alguns exemplos:
Os grupos podem ser cadeias separadas por novas linhas, como mostrado acima.
Os grupos podem ser separados por qualquer caractere não ASCII, como
¬
. A saída para a entrada acima seria a string:!¬,¬A¬aaaaa¬bb¬c¬d¬h¬rr
Os grupos podem ser separados por n > 1 espaços (mesmo que n seja variável), com caracteres entre cada grupo separados por um único espaço:
! , A a a a a a b b c d h r r
A saída também pode ser uma matriz ou lista de seqüências retornadas por uma função:
['!', 'A', 'aaaaa', 'bb', 'c', 'd', 'h', 'rr']
Ou uma matriz de matrizes de caracteres:
[['!'], ['A'], ['a', 'a', 'a', 'a', 'a'], ['b', 'b'], ['c'], ['d'], ['h'], ['r', 'r']]
Exemplos de formatos que não são permitidos, de acordo com as regras:
- Uma vírgula não pode ser usada como separator (
!,,,A,a,a,a,a,a,b,b,c,d,h,r,r
), porque a entrada pode conter vírgulas. - Não é aceito descartar o separador entre grupos (
!,Aaaaaabbcdhrr
) ou usar o mesmo separador entre grupos e dentro de grupos (! , A a a a a a b b c d h r r
).
Os grupos podem aparecer em qualquer ordem na saída. Por exemplo: ordem alfabética (como nos exemplos acima), ordem da primeira aparição na sequência, ... A ordem não precisa ser consistente nem determinística.
Observe que a entrada não pode conter caracteres de nova linha A
e a
são caracteres diferentes (o agrupamento diferencia maiúsculas de minúsculas ).
O menor código em bytes vence.
Casos de teste
Em cada caso de teste, a primeira linha é inserida e as linhas restantes são a saída, com cada grupo em uma linha diferente.
Caso de teste 1:
Ah, abracadabra! ! , UMA aaaaa bb c d h rr
Caso de teste 2:
\ o / \ o / \ o / /// \\\ ooo
Caso de teste 3:
Um homem, um plano, um canal: Panamá! ! ,, : UMA P aaaaaaaaa c ll milímetros nnnn p
Caso de teste 4:
"Mostre-me como você faz esse truque, aquele que me faz gritar", disse ela "" , S aaaaa cc dd eeeeeee hhhhhh ii kk mmmm n ooooo rr ssss tttttt você ww y