Język J ma bardzo głupią składnię do określania stałych . Chcę skupić się w szczególności na jednej fajnej funkcji: umiejętności pisania w dowolnych podstawach.
Jeśli piszesz XbY
dla X
dowolnej liczby i Y
dowolnego ciągu alfanumerycznego, to J będzie interpretował Y
jako X
liczbę podstawową , gdzie 0
poprzez 9
mają swoje zwykłe znaczenie i oznaczają a
przez z
10 do 35.
A kiedy mówię X
dowolną liczbę, mam na myśli dowolną liczbę. Na potrzeby tego pytania ograniczę się X
do bycia liczbą całkowitą dodatnią, ale w J możesz użyć wszystkiego: liczb ujemnych, ułamków, liczb zespolonych, cokolwiek.
Dziwne jest to, że możesz używać liczb od 0 do 35 jako cyfr bez względu na bazę, ponieważ twoja kolekcja użytecznych symboli składa się tylko z 0-9 i az.
Problem
Chcę, aby program pomógł mi przy użyciu tej metody magicznych liczb golfowych, takich jak 2 933,774,030,998 . Cóż, okej, może nie aż tak duże, nie będę się nudzić. Więc...
Twoim zadaniem jest napisanie programu lub funkcji, która przyjmuje (zwykle dużą) liczbę dziesiętną
N
od 1 do 4 294 967 295 (= 2 32 -1) jako dane wejściowe i zwraca / zwraca najkrótszą reprezentację postaciXbY
, gdzieX
dodatnia liczba całkowita,Y
to ciąg składający się z znaków alfanumerycznych (0-9 i az, bez rozróżniania wielkości liter) iY
zinterpretowany wX
równości podstawowejN
.Jeśli długość każdej reprezentacji
XbY
reprezentacji jest większa lub równa liczbie cyfrN
, wówczasN
wypisuje. We wszystkich innych powiązaniach możesz wyprowadzać dowolny niepusty podzbiór najkrótszych reprezentacji.
To jest golf golfowy, więc krótszy jest lepszy.
Przypadki testowe
Input | Acceptable outputs (case-insensitive)
------------+-------------------------------------------------------
5 | 5
|
10000000 | 79bkmom 82bibhi 85bgo75 99bauua 577buld
| 620bq9k 999baka
|
10000030 | 85bgo7z
|
10000031 | 10000031
|
12345678 | 76bs9va 79bp3cw 82bmw54 86bjzky 641buui
|
34307000 | 99bzzzz
|
34307001 | 34307001
|
1557626714 | 84bvo07e 87brgzpt 99bglush 420blaze
|
1892332260 | 35bzzzzzz 36bvan8x0 37brapre5 38bnxkbfe 40bij7rqk
| 41bgdrm7f 42bek5su0 45bablf30 49b6ycriz 56b3onmfs
| 57b38f9gx 62b244244 69b1expkf 71b13xbj3
|
2147483647 | 36bzik0zj 38br3y91l 39bnvabca 42bgi5of1 48b8kq3qv
(= 2^31-1) | 53b578t6k 63b2akka1 1022b2cof 1023b2661 10922bio7
| 16382b8wv 16383b8g7 32764b2gv 32765b2ch 32766b287
| 32767b241
|
2147483648 | 512bg000 8192bw00
|
4294967295 | 45bnchvmu 60b5vo6sf 71b2r1708 84b12mxf3 112brx8iv
(= 2^32-1) | 126bh5aa3 254b18owf 255b14640 1023b4cc3 13107bpa0
| 16383bgwf 21844b9of 21845b960 32765b4oz 32766b4gf
| 32767b483 65530b1cz 65531b1ao 65532b18f 65533b168
| 65534b143 65535b120
Jeśli nie masz pewności, czy reprezentacja jest równa jakiejś liczbie, możesz użyć dowolnego interpretera języka J, takiego jak ten w Try It Online . Wystarczy wpisać, stdout 0":87brgzpt
a J wypluje z powrotem 1557626714
. Zauważ, że J akceptuje tylko małe litery, nawet jeśli w tym problemie nie jest rozróżniana wielkość liter.
Jakaś pomocna teoria
- Dla wszystkich
N
mniejszych niż 10 000 000 reprezentacja dziesiętna jest tak krótka jak każda inna, a zatem jest jedynym akceptowalnym wynikiem. Aby cokolwiek zapisać, musisz być co najmniej o cztery cyfry krótszy w nowej bazie, a nawet więcej, jeśli baza jest większa niż 99. - Wystarczy sprawdzić podstawy do sufitu pierwiastka kwadratowego
N
. W przypadku każdej większej bazy B ,N
będą miały najwyżej dwie cyfry w bazie B , więc pierwszy raz otrzymasz coś z poprawną pierwszą cyfrą w okolicach B ≈N
/ 35. Ale przy tym rozmiarze zawsze będziesz co najmniej tak duży jak reprezentacja dziesiętna, więc nie ma sensu próbować. Mając to na uwadze, ceil (sqrt (największa liczba, o którą poproszę cię o rozwiązanie tego problemu)) = 65536. - Jeśli masz jakąkolwiek reprezentację w bazie mniejszej niż 36, wówczas podstawowa reprezentacja 36 będzie co najmniej tak krótka. Nie musisz się więc martwić przypadkowymi krótkimi rozwiązaniami w bazach mniejszych niż 36. Na przykład reprezentacja 1
35bzzzzzz
892 332 260 używa nietypowej cyfry dla tej bazy, ale36bvan8x0
ma tę samą długość.