Язык 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 до 4 294 967 295 (= 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 322 260 использует необычную цифру для этой базы, но36bvan8x0
имеет ту же длину.