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 .
źródło
n%7
miejscu trzecim00001010
. To też może być przydatne! :)Odpowiedzi:
PYKE,
16 bajtówWypróbuj tutaj!
Połowa tego kodu to po prostu brak operacji ...
źródło
'abc'==['a','b','c']
, ponieważ może być również w Pyke ...?Pyth,
1287 bajtów-1 bajt dzięki @Loovjo
reprezentacja binarna
Wypróbuj tutaj
źródło
13
dla111
wygląda dziwnie, ale to nie może być źle (nie może być dowolny pojedynczy znak13
, który jest używany 1 raz), więc jest to całkowicie poprawny!Befunge-93, 150 bajtów
Wypróbuj online!
Zacząłem od napisania tego jako zwykłego programu Befunge, który grałem jak najwięcej w golfa. Następnie dodałem padding, aby różne znaki w programie pojawiały się tylko w dozwolonych pozycjach. To wypełnienie polegało na tym, że nieobsługiwane polecenia są ignorowane w Befunge-93, więc potrzebowałem tylko sekwencji nieużywanych znaków, których bity były zgodne z wymaganymi pozycjami (sekwencją, której użyłem
={}{}{}
).Skomplikowane było to, że różne odgałęzienia między liniami potrzebne do prawidłowego wyrównania (np.
v
Strzałka w jednej linii, musiałyby zrównać się ze<
strzałką poniżej). Było to dodatkowo skomplikowane przez fakt, że polecenia bridge (#
) nie można było oddzielić od sąsiedniej strzałki rozgałęziającej. Początkowo próbowałem programowo wygenerować padding, ale ostatecznie był to głównie proces ręczny.Ze względu na rozmiar programu nie wymienię pełnej analizy znaków, ale jest to próbka od początku i na końcu:
Podziały linii są traktowane jako znaki nowej linii, więc będą znajdować się na pozycji 1 lub 3.
źródło
MATL , 17 bajtów
Wyświetla liczbę, a następnie odpowiedni znak, wszystkie oddzielone znakiem nowej linii. Największą trudnością jest to,
@
co jest0b01000000
; Mam nadzieję, że uda mi się znaleźć sposób na obejście się bez tego.Wypróbuj online!
Wyjaśnienie:
MATL, 15 bajtów (wątpliwe wyjście)
Jeśli dozwolone jest pozostawienie na stosie dwóch wektorów wierszy (zachowanie podobne do funkcji jak w tym poście Meta), możemy przejść do
Ale tutaj wyjście nie jest tak starannie uporządkowane.
źródło
D
„d,Gu
pod koniec programu), a nie jestem pewien, czy w wersji 15-bajtowy jest wystarczająco różne.CJam, 14 bajtów
Wypróbuj tutaj.
Spacja przed
@
is
po niej są znakami wypełniającymi wstawianymi, aby kody ASCII pasowały do wymaganego wzorca: spacja nic nie robi, a pos
prostu konwertuje ciąg na ciąg. Poza tym jest to dość prosta i bezpośrednia realizacja zadania wyzwania:Dla danych wejściowych
foobar123
ten kod jest generowany[['f 1] ['o 2] ['b 1] ['a 1] ['r 1] ['1 2] ['2 2] ['3 1]]
. Jeśli po prostu drukujesz liczby w jednym wierszu, a odpowiednie znaki w drugim, jak w:jest uważany za akceptowalny format wyjściowy, wówczas
]z
można pominąć zapisywanie dwóch bajtów, w sumie 12 bajtów . Tak, skrócony kod nadal spełnia wymagania dotyczące wzorca bitowego.Ps. Napisałem również prosty moduł sprawdzający kod źródłowy dla tego wyzwania. Biorąc pod uwagę wiersz kodu jako dane wejściowe, najpierw wyśle echo tego wiersza, a następnie wydrukuje ten sam wiersz, a każdy znak zostanie zastąpiony jego ( n % 7) -tym bitem ASCII. Jeśli drugi wiersz to wszystkie, dane wejściowe są prawidłowe.
źródło
Galaretka , 6 bajtów na stronie kodowej Jelly
Wypróbuj online!
Ta funkcja zwraca listę par (znak, liczba). (Galaretka reprezentuje takie listy jak tekst, np. Jeśli są wysyłane do standardowego wyjścia, łącząc elementy, dlatego należy traktować to jako funkcję, a nie jako pełny program. ( Oto ten sam program z pewnym kodem dołączonym do wywołaj funkcję, a następnie wydrukuj wewnętrzną strukturę na standardowe wyjście, co dowodzi, że dane wyjściowe są w jednoznacznym formacie).
Reprezentacja binarna i objaśnienie:
Można zauważyć, że druga, trzecia i czwarta postać znoszą się nawzajem i są tylko po to, aby zachować potrzebny nam wzorzec bitowy.
Œr
jest po prostu zbyt wygodne, a wypełnienie programu tak, abyśmy mogli go użyć, prawdopodobnie daje nam krótszy program niż próba rozwiązania problemu bez wbudowanego.źródło