Jak działa kodowanie
Biorąc pod uwagę listę bitów:
- Hold the prime (zaczynając od
2
) - Mam listę
- Dla każdego bitu na wejściu
- Jeśli jest taki sam jak poprzedni bit, dodaj liczbę pierwszą, którą trzymasz na liście
- Jeśli jest inaczej, przytrzymaj następną liczbę pierwszą i dodaj ją do listy
- Zwróć iloczyn wszystkich liczb z listy
- Dla pierwszego bitu załóżmy, że poprzedni był
0
Uwaga: te kroki mają wyłącznie charakter ilustracyjny, nie musisz ich przestrzegać.
Przykłady
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
Kilka innych przykładów:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
Wyzwanie
Napisz koder i dekoder dla tej metody kodowania.
(Dekoder odwraca proces enkodera).
Wejście wyjście
Koder może przyjmować dane wejściowe w dowolnym rozsądnym formacie
Koder musi wyprowadzać liczbę całkowitą lub ciąg znaków
Dekoder musi pobierać dane wejściowe w tym samym formacie, w jakim koder podaje
Dekoder musi wysyłać ten sam format, który koder przyjmuje jako dane wejściowe
Innymi słowy decoder( encoder( input ) ) === input
Notatki
- Dekoder może założyć, że jego wejście jest dekodowalne
- Twoja odpowiedź musi dotyczyć liczb całkowitych, które Twój język może natywnie obsługiwać bez użycia (
long
,bigInt
itp.), Być rozsądna, jeśli Twój język obsługuje tylko liczby całkowite do 1, być może ponownie rozważ opublikowanie odpowiedzi
Punktacja
Twój wynik jest sumą długości w bajtach enkodera i dekodera.
Jeśli musisz zaimportować moduł, import można policzyć tylko raz, pod warunkiem, że Twój koder i dekoder mogą współistnieć w tym samym pliku i zostać ponownie użyte (podobnie jak funkcje).
Domyślne luki są zabronione.
To jest golf golfowy, więc wygrywa najkrótszy wynik dla każdego języka.