Czy nie podobają Ci się diagramy w widoku rozstrzelonym, w których maszyna lub obiekt są rozbierane na najmniejsze części?
Zróbmy to z łańcuchem!
Wyzwanie
Napisz program lub funkcję, która
- wprowadza ciąg zawierający tylko drukowalne znaki ASCII ;
- dzieli ciąg na grupy znaków spacji równych („części” ciągu);
- wysyła te grupy w dowolnym dogodnym formacie, z pewnym separatorem między grupami .
Na przykład, biorąc pod uwagę ciąg
Ah, abracadabra!
dane wyjściowe będą następujące grupy:
! , ZA aaaaa nocleg ze śniadaniem do re h rr
Każda grupa wyjściowa zawiera równe znaki, ze spacjami usuniętymi. Nowa linia została użyta jako separator między grupami. Więcej informacji o dozwolonych formatach poniżej.
Zasady
Dane wejściowe powinny być ciągiem znaków lub tablicą znaków. Będzie zawierał tylko znaki drukowalne ASCII (obejmujący zakres od spacji do tyldy). Jeśli twój język tego nie obsługuje, możesz wprowadzić dane w postaci liczb reprezentujących kody ASCII.
Możesz założyć, że dane wejściowe zawierają co najmniej jeden znak spacji .
Dane wyjściowe powinny składać się ze znaków (nawet jeśli dane wejściowe są dokonywane za pomocą kodów ASCII). Musi istnieć jednoznaczny separator między grupami , inny niż jakikolwiek znak spacji, który może pojawić się na wejściu.
Jeśli dane wyjściowe są przekazywane przez funkcję return, może to być również tablica lub ciągi znaków, lub tablica tablic znaków lub podobna struktura. W takim przypadku struktura zapewnia niezbędną separację.
Separator między znakami każdej grupy jest opcjonalny . Jeśli istnieje, obowiązuje ta sama zasada: nie może to być znak spacji, który może pojawić się na wejściu. Ponadto nie może być tego samego separatora, co używany między grupami.
Poza tym format jest elastyczny. Oto kilka przykładów:
Grupy mogą być ciągami oddzielonymi znakami nowej linii, jak pokazano powyżej.
Grupy mogą być oddzielone dowolnym znakiem spoza ASCII, takim jak
¬
. Dane wyjściowe dla powyższego wejścia to ciąg:!¬,¬A¬aaaaa¬bb¬c¬d¬h¬rr
Grupy mogą być oddzielone n > 1 spacjami (nawet jeśli n jest zmienna), a znaki między każdą grupą oddzielone pojedynczą spacją:
! , A a a a a a b b c d h r r
Wyjściem może być również tablica lub lista ciągów zwracanych przez funkcję:
['!', 'A', 'aaaaa', 'bb', 'c', 'd', 'h', 'rr']
Lub tablica znaków char:
[['!'], ['A'], ['a', 'a', 'a', 'a', 'a'], ['b', 'b'], ['c'], ['d'], ['h'], ['r', 'r']]
Przykłady formatów, które są niedozwolone, zgodnie z zasadami:
- Przecinka nie można użyć jako separatora (
!,,,A,a,a,a,a,a,b,b,c,d,h,r,r
), ponieważ dane wejściowe mogą zawierać przecinki. - Niedopuszczalne jest upuszczanie separatora między grupami (
!,Aaaaaabbcdhrr
) lub używanie tego samego separatora między grupami i wewnątrz grup (! , A a a a a a b b c d h r r
).
Grupy mogą pojawić się w dowolnej kolejności na wyjściu. Na przykład: kolejność alfabetyczna (jak w powyższych przykładach), kolejność pierwszego pojawienia się w ciągu, ... Kolejność nie musi być spójna, a nawet deterministyczna.
Zauważ, że dane wejściowe nie mogą zawierać znaków nowego wiersza A
i a
są różnymi znakami (w grupowaniu rozróżniana jest wielkość liter ).
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
W każdym przypadku testowym wprowadzany jest pierwszy wiersz, a pozostałe wiersze są danymi wyjściowymi, a każda grupa znajduje się w innym wierszu.
Przypadek testowy 1:
Ach, abrakadabra! ! , ZA aaaaa nocleg ze śniadaniem do re h rr
Przypadek testowy 2:
\ o / \ o / \ o / /// \\\ ooo
Przypadek testowy 3:
Mężczyzna, plan, kanał: Panama! ! ,, : ZA P. aaaaaaaaa do ll mm nnnn p
Przypadek testowy 4:
„Pokaż mi, jak sobie radzisz z tą sztuczką, która sprawia, że krzyczę” - powiedziała „” , S. aaaaa cc dd eeeeeee hhhhhh ii kk mmmm n ooooo rr ssss tttttt u w W y