Cel, powód
Chodzi o to, aby podać kod niezbędny do odwzorowania 32-bitowej liczby całkowitej na / z wymawianego słowa o długości maksymalnie 9 znaków. Może to być przydatne na przykład w celu ułatwienia zapamiętania numeru seryjnego lub wpisania formularza.
Wymagana jest zarówno metoda translacji liczby całkowitej na odpowiednie słowo, jak i translacja słowa z powrotem na odpowiednią liczbę całkowitą.
Zasady
Pomiędzy liczbami całkowitymi a słowami musi istnieć odwzorowanie jeden na jeden, a cały zestaw 32-bitowych liczb całkowitych (lub, inaczej mówiąc, dowolna liczba całkowita od 0 do 4294967295) musi być odwzorowalna. Chociaż oczywiście nie wszystkie słowa będą znaczące, a wprowadzanie słów, które nie są odwzorowane na liczbę całkowitą, może mieć nieokreślone zachowanie.
Możesz swobodnie decydować, który zestaw wyrazów „wymawialnych” ma znaczenie, i jak wykonać mapowanie, ale słowa muszą co najmniej przestrzegać następujących zasad:
- Jako znaki należy używać tylko podstawowych 26 liter (A ... Z). Akcenty, obudowa itp. Nie powinny być używane do rozszerzania możliwych kombinacji.
- Maksymalnie 9 znaków na słowo.
- dwie spółgłosek (BCDFGHJKLMNPQRSTVWXZ - 20 możliwości) nie powinny być umieszczone obok siebie (muszą być otoczone samogłosek).
- dwie samogłoski (AEIOUY - 6 możliwości) nie powinny być umieszczane obok siebie (muszą być otoczone spółgłosek).
Uwaga: najprostszy schemat, w którym wszystkie słowa są konstruowane jako CVCVCVCVC
( C
spółgłoska i V
samogłoska) daje 4147200000 kombinacji, a 32-bitowa liczba całkowita ma 4294967296 możliwych wartości, więc to nie wystarczy. Musisz zwiększyć liczbę kombinacji, dopuszczając krótsze słowa lub też dopuszczając VCVCVCVCV
kombinacje.
Obowiązują inne standardowe zasady, a standardowe luki są zabronione.
Wejścia wyjścia
Do każdego zgłoszenia należy podać dwa fragmenty kodu:
- Taki, który przyjmuje liczbę całkowitą jako argument / dane wejściowe i zwraca / drukuje odpowiednie słowo
- Taki, który przyjmuje słowo jako argument / input i zwraca / wypisuje odpowiednią liczbę całkowitą
Alternatywnie możesz przesłać pojedynczy fragment kodu, który obsługuje obie operacje:
- Gdy podano liczbę całkowitą jako dane wejściowe, wyprowadza odpowiednie słowo
- Gdy podano ciąg jako dane wejściowe, wypisuje odpowiednią liczbę całkowitą
Warunki wygranej
To jest golfowy kod , odpowiedź, która ma najmniej bajtów (przy sumowaniu obu fragmentów kodu, dla rozwiązań wybierających oddzielne fragmenty kodu) wygrywa.
Odpowiedzi:
JavaScript (ES6), 205 bajtów
Punkt odcięcia między CVCVCVCVC i VCVCVCVCV wynosi 4e9, więc zaczyna się mylnie przy 5244160000 (wprowadzanie numeryczne) lub
zesuwurib
(wprowadzanie ciągów).źródło
PHP, 353 bajtów
Kodowanie + dekodowanie
is_numeric($argn)
zawiera wartość logiczną. Prawdą jest, jeśli wejście jest liczbą całkowitą.PHP, 190 bajtów (kodowanie) + 195 bajtów (dekodowanie) = 385 bajtów
Kodowanie
5391360000 = 26 * 120 ** Dostępne są 4 kombinacje
Kodowanie wersji online bez E_NOTICE
Rozszerzony
Dane wejściowe => Dane wyjściowe
Jeśli trzeba zawsze 9 wynik Byte proszę wymienić
while($a)
zwhile(strlen($r)<9)
+ 10 bajtówRozszyfrowanie
Rozszerzony
Dane wejściowe => Dane wyjściowe
Dekodowanie wersji online bez E_NOTICE
Dodatkowa kontrola
Jeśli potrzebujemy sprawdzić, czy ciąg jest prawidłowy.
Dodaj
$x.=$b?:0;
na końcu pętli dekodującej + 10 bajtówZastąpić
echo$s;
wecho!preg_match('#([01])\1$#',$x)?$s:_;
+ 32 bajtówźródło
R, 165 bajtów
Kodowanie i dekodowanie w jednej funkcji.
Ta funkcja wykorzystuje metodę brute-force do tworzenia wszystkich możliwych wartości, a następnie po prostu zwraca indeks, gdy podano dane wejściowe ciągu i zwraca ciąg, gdy dane wejściowe są liczbami całkowitymi. W rezultacie jest bardzo wolny i zużywa ponad 16 GB pamięci!
Możliwe są 4 354 560 000 wartości. Obejmuje to wszystkie ciągi formularza CVCVCVCV (C), przy czym ostatnie C jest opcjonalne.
źródło