¿No te encantan los diagramas de vista explosionada en los que una máquina u objeto se desarma en sus piezas más pequeñas?
¡Hagámosle eso a una cuerda!
El reto
Escribir un programa o función que
- ingresa una cadena que contiene solo caracteres ASCII imprimibles ;
- disecciona la cadena en grupos de caracteres sin espacio (las "piezas" de la cadena);
- genera esos grupos en cualquier formato conveniente, con algún separador entre grupos .
Por ejemplo, dada la cadena
Ah, abracadabra!
la salida sería los siguientes grupos:
! , UNA aaaaa cama y desayuno do re h rr
Cada grupo en la salida contiene caracteres iguales, con espacios eliminados. Se ha usado una nueva línea como separador entre grupos. Más información sobre los formatos permitidos a continuación.
Reglas
La entrada debe ser una cadena o una matriz de caracteres. Solo contendrá caracteres ASCII imprimibles (el rango inclusivo desde el espacio hasta la tilde). Si su idioma no lo admite, puede tomar la entrada en forma de números que representan códigos ASCII.
Puede suponer que la entrada contiene al menos un carácter no espacial .
La salida debe constar de caracteres (incluso si la entrada se realiza mediante códigos ASCII). Tiene que haber un separador inequívoco entre grupos , diferente de cualquier carácter que no sea espacio que pueda aparecer en la entrada.
Si la salida es a través del retorno de función, también puede ser una matriz o cadenas, o una matriz de matrices de caracteres, o una estructura similar. En ese caso, la estructura proporciona la separación necesaria.
Un separador entre los caracteres de cada grupo es opcional . Si hay uno, se aplica la misma regla: no puede ser un carácter no espacial que pueda aparecer en la entrada. Además, no puede ser el mismo separador que se usa entre grupos.
Aparte de eso, el formato es flexible. Aquí hay unos ejemplos:
Los grupos pueden ser cadenas separadas por nuevas líneas, como se muestra arriba.
Los grupos pueden estar separados por cualquier carácter no ASCII, como
¬
. La salida para la entrada anterior sería la cadena:!¬,¬A¬aaaaa¬bb¬c¬d¬h¬rr
Los grupos pueden estar separados por n > 1 espacios (incluso si n es variable), con caracteres entre cada grupo separados por un solo espacio:
! , A a a a a a b b c d h r r
La salida también puede ser una matriz o una lista de cadenas devueltas por una función:
['!', 'A', 'aaaaa', 'bb', 'c', 'd', 'h', 'rr']
O una matriz de matrices de caracteres:
[['!'], ['A'], ['a', 'a', 'a', 'a', 'a'], ['b', 'b'], ['c'], ['d'], ['h'], ['r', 'r']]
Ejemplos de formatos que no están permitidos, de acuerdo con las reglas:
- Una coma no se puede usar como separador (
!,,,A,a,a,a,a,a,b,b,c,d,h,r,r
), porque la entrada puede contener comas. - No se acepta soltar el separador entre grupos (
!,Aaaaaabbcdhrr
) o usar el mismo separador entre grupos y dentro de grupos (! , A a a a a a b b c d h r r
).
Los grupos pueden aparecer en cualquier orden en la salida. Por ejemplo: orden alfabético (como en los ejemplos anteriores), orden de la primera aparición en la cadena, ... El orden no tiene por qué ser coherente o incluso determinista.
Tenga en cuenta que la entrada no puede contener caracteres de nueva línea A
y a
son caracteres diferentes (la agrupación es sensible a mayúsculas y minúsculas ).
El código más corto en bytes gana.
Casos de prueba
En cada caso de prueba, se ingresa la primera línea y las líneas restantes son la salida, con cada grupo en una línea diferente.
Caso de prueba 1:
Ah, abracadabra! ! , UNA aaaaa cama y desayuno do re h rr
Caso de prueba 2:
\ o / \ o / \ o / /// \\\ ooo
Caso de prueba 3:
Un hombre, un plan, un canal: ¡Panamá! ! ,, ,, : UNA PAGS aaaaaaaaa do ll mm nnnn pags
Caso de prueba 4:
"Muéstrame cómo haces ese truco, el que me hace gritar" dijo "" , S aaaaa cc dd eeeeeee hhhhhh ii kk mmmm norte ooooo rr ssss tttttt tu ww y