Prosta część: Biorąc pod uwagę ciąg wejściowy zawierający tylko drukowalne znaki ASCII (spacja - tylda), policz liczbę wystąpień każdego znaku i zwróć wynik w dowolnym dogodnym formacie. Wynik na sznurku a%hda7a
powinno być coś takiego: a:3, %:1, h:1, 7:1, d:1
. Sortowanie nie jest konieczne, separatory i formaty są opcjonalne, ale należy łatwo zrozumieć, która liczba odpowiada danemu znakowi. Nie należy dołączać znaków, które nie znajdują się w ciągu wejściowym ( a:3, b:0, c:0, d:1, ...
nie jest OK).
Prawdziwe wyzwanie:
Konwertuj każdy znak w kodzie na 8-bitową liczbę binarną (lub 16-bitową, jeśli używasz UTF-16 lub podobnego) i wyliczaj każdy znak począwszy od 0
.
Dla każdego znaku ( i
jest to moduł wyliczający) i%7
-bit 1 musi być 1
. Bity są ponumerowane z prawej strony. Wszystkie inne bity mogą być czymkolwiek chcesz.
Użyjmy następującego kodu jako przykładu:
[f]-xif)#f
Konwertując to na binarne, otrzymujemy tablicę poniżej. Pierwszy numer (reprezentujący [
ma 1
pozycję 0, więc jeden jest OK. Drugi numer (reprezentujący f
ma 1
pozycję 1, więc jeden też jest OK. Kontynuuj w ten sposób, a zobaczysz że powyższy kod jest prawidłowy.
C 76543210 Numer bitu - -------- ---------- [0101101 1 0 - OK f 011001 1 0 1 - OK ] 01011 1 01 2 - OK - 0010 1 101 3 - OK x 011 1 1000 4 - OK i 01 1 01001 5 - OK f 0 1 100110 6 - OK ) 0010100 1 0 - OK # 001000 1 1 1 - OK f 01100 1 10 2 - OK
Jeśli zmienimy kod na: ]f[-xif)#f
otrzymamy następujący początek sekwencji:
C 76543210 Bit number
- -------- ----------
] 01011101 0 <- OK
f 01100110 1 <- OK
[ 01011011 2 <- Not OK
- 00101101 3 <- OK
Jak widzimy, trzeci znak [
nie ma 1
na 2 pozycji (indeksowany od zera), a zatem ten kod jest nieprawidłowy.
Przypadki testowe:
Input:
This is a string containing some symbols: ".#!".#&/#
Output:
! " # & / : T a b c e g h i l m n o r s t y .
7 1 2 3 1 1 1 1 2 1 1 1 2 1 5 1 2 4 3 1 6 2 1 2
Każdy rozsądny format wyjściowy jest OK (cokolwiek najbardziej dla ciebie wygodne). Możesz na przykład mieć: :7, !:1, ":2, #:3, &:1, /:1, T:1, a:2 ...
lub [ ,7][!,1][",2][#,3][&,1]...
. Wyjście odbywa się w dowolny standardowy sposób (powrót z funkcji, wydruk do STDOUT itp.)
1i
moduł 7
.
To jest code-golf , więc najkrótszy kod w bajtach wygra ref .
00001010
. To też może być przydatne! :)
n%7
miejscu trzecim