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 XbYdla Xdowolnej liczby i Ydowolnego ciągu alfanumerycznego, to J będzie interpretował Yjako Xliczbę podstawową , gdzie 0poprzez 9mają swoje zwykłe znaczenie i oznaczają aprzez z10 do 35.
A kiedy mówię Xdowolną liczbę, mam na myśli dowolną liczbę. Na potrzeby tego pytania ograniczę się Xdo 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ą
Nod 1 do 4 294 967 295 (= 2 32 -1) jako dane wejściowe i zwraca / zwraca najkrótszą reprezentację postaciXbY, gdzieXdodatnia liczba całkowita,Yto ciąg składający się z znaków alfanumerycznych (0-9 i az, bez rozróżniania wielkości liter) iYzinterpretowany wXrówności podstawowejN.Jeśli długość każdej reprezentacji
XbYreprezentacji jest większa lub równa liczbie cyfrN, wówczasNwypisuje. 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":87brgzpta 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
Nmniejszych 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 ,Nbę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
35bzzzzzz892 332 260 używa nietypowej cyfry dla tej bazy, ale36bvan8x0ma tę samą długość.