Мова J має дуже нерозумний синтаксис для визначення констант . Я хочу зосередити увагу на одній крутій особливості, зокрема: вмінні писати у довільних базах.
Якщо ви пишете XbY
для X
будь-якого числа і Y
будь-якого рядка буквено-цифрових значень, то J буде інтерпретувати Y
як базове X
число, де 0
через 9
мають своє звичайне значення і a
через z
представляють 10 по 35.
І коли я кажу X
будь-яке число, я маю на увазі будь-яке число. Для цілей цього питання я буду обмежуватись X
цілим числом, але в J ви можете використовувати що завгодно: від’ємні числа, дроби, складні числа, що завгодно.
Дивна річ - це те, що ви можете використовувати лише цифри від 0 до 35 як базові цифри, оскільки ваша колекція корисних символів складається лише з 0-9 та az.
Проблема
Я хочу, щоб програма могла допомогти мені магічні цифри гольфу на зразок 2,933,774,030,998 за допомогою цього методу. Ну гаразд, може, не так вже й багато, я на тебе легко пітиму. Так...
Ваше завдання полягає в тому, щоб написати програму або функцію , яка приймає (зазвичай велике) десяткове число
N
між 1 і 4294967295 (= 2 32 -1) в якості вхідних даних, і виводить / повертає найкоротший уявлення видуXbY
, деX
є позитивним цілим числом,Y
є рядок, що складається з буквено-цифрових значень (0-9 та az, нечутливий до регістру), іY
інтерпретується в базовіX
рівніN
.Якщо довжина кожного представлення
XbY
подання більша або дорівнює кількості цифрN
,N
замість цього виведіть . У всіх інших зв'язках ви можете виводити будь-яке непусте підмножина найкоротших зображень.
Це кодовий гольф, тому коротше - краще.
Тестові справи
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
Якщо ви коли-небудь не впевнені в тому, чи дорівнює деяке представлення деякій кількості, ви можете скористатися будь-яким J-перекладачем, як, наприклад, у Try It Online . Просто введіть stdout 0":87brgzpt
і J виплюне назад 1557626714
. Зауважте, що J приймає лише малі регістри, навіть якщо ця проблема нечутлива до регістру.
Деякі корисні теорії
- Для всіх
N
менше 10 000 000 десяткове представлення є коротким, ніж будь-яке інше, і, отже, є єдиним прийнятним результатом. Щоб зберегти що-небудь, вам потрібно буде принаймні на чотири цифри коротше у новій базі і навіть більше, якщо база перевищує 99. - Досить перевірити основи до стелі квадратного кореня
N
. Для будь-якого більшого підстави B ,N
буде не більше два цифр в базовій B , тому в перший раз , ви отримаєте що - то з дійсної першою цифрою близько B ≈N
/ 35. Але при такому розмірі ви завжди будете принаймні настільки ж великі, як і десяткове представлення, тому немає сенсу намагатися. Маючи на увазі, ceil (sqrt (найбільша кількість, яку я прошу вирішити цю проблему)) = 65536. - Якщо у вас є будь-яке представлення в базі менше 36, представлення базового 36 буде принаймні таким же коротким. Таким чином, вам не доведеться турбуватися про випадково короткі рішення в базах менше 36. Наприклад, представлення
35bzzzzzz
на 1,892,332,260 використовує незвичну цифру для цієї бази, але36bvan8x0
має однакову довжину.