Как, вы не можете вспомнить 6 или 7-значный номер телефона, который появился на экране телевизора на секунду ?! Используя специальную технику, описанную ниже, вы превратитесь в прогулочную телефонную книгу!
Очевидно, что число 402
легче запомнить, чем число 110010010
, а число 337377
легче запомнить, чем число 957472
. Это означает, что запомненный номер, с одной стороны, должен содержать как можно меньше цифр, а с другой стороны, желательно, чтобы номер содержал как можно больше повторяющихся чисел.
В качестве критерия сложности запоминания мы берем сумму числа цифр в числе и числа разных цифр в номере. Запомненный номер можно записать в другой системе счисления, возможно, тогда его будет легче запомнить. Например, число 65535
в шестнадцатеричной записи выглядит следующим образом FFFF
.
задача
Вам необходимо написать программу для выбора базы системы счисления, чтобы минимизировать критерий сложности. Основа системы счисления должна быть выбрана в диапазоне от 2 до 36, тогда цифры 0-9
и английские буквы A-Z
могут использоваться для представления числа.
вход
Входные данные содержат десятичное целое число от 1 до 999999999.
Выход
Выходные данные должны содержать базу системы счисления (от 2 до 36), минимизирующую критерий сложности запоминания, и число в выбранной системе счисления, разделенное одним пробелом. Если несколько базисов дают одно и то же значение критерия, то выберите наименьшее из них.
Примечания
- Буквы должны быть заглавными (
A-Z
).
Тестовые случаи
Ввод, вывод
1
2 1
2
3 2
65535
16 FFFF
123
12 A3
источник
a-z
вместоA-Z
?A-Z
?Ответы:
Perl 6 ,
5554 байта-1 байт благодаря Джо Кингу.
Попробуйте онлайн!
источник
@$_
на,@_
и это все еще работает.Python 2 ,
150149127144 байтовПопробуйте онлайн!
Python 3 , 136 байт
Попробуйте онлайн!
Python 3.8 (предварительная версия) , 131 байт
Попробуйте онлайн!
c
преобразует число 10 в любое основание (2-36), и первая (анонимная) функция находит наименьший результат.источник
05AB1E ,
1614 байтов-1 байт благодаря Кевину Круйссену
Попробуйте онлайн!
Или добавьте R) »в конце, чтобы точно соответствовать указанному выходному формату, но большинство других ответов не беспокоили.
Объяснение:
источник
₆L©B®ø
вместо₆LεBy‚}
ā
, кажется, вы всегда забываете об этом.JavaScript (ES6),
87 85101 байтИзменить: +16 бесполезных байтов, чтобы соответствовать строгому формату вывода
Попробуйте онлайн!
источник
Japt v2.0a0
-gS
,2423 байтаНе красиво, но это делает работу. +2 байта за абсолютно ненужное требование, чтобы вывод был в верхнем регистре.
Попытайся
источник
PHP ,
124119 байтПопробуйте онлайн!
Позор в +12 байтах в PHP для вывода в верхнем регистре ... но ... в любом случае.
источник
Zsh , 85 байт
Для этого числа выражений внутри цикла for значение
...&&...&&...
короче, чем{...;...;...;}
.Попробуйте онлайн!
Вот 81-байтовое решение, которое печатает
[base]#[num]
вместо формы :Попробуйте онлайн!
источник
J 67 байт
Попробуйте онлайн!
источник
Древесный уголь , 38 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Введите целое число.
Преобразовать его из базы 2 в базу 36 ...
... дедуплицировать, объединить и взять длину.
Возьмите индекс минимальной сложности и добавьте 2, чтобы получить базу.
Выведите основание и целое число, преобразованное в это основание в верхнем регистре.
источник
Stax , 19 байт
Запустите и отладьте его
Никакого сложного алгоритма, просто грубая сила. Около трети программы - форматирование для точных правил вывода.
Бонусная программа: Выход за [1..1000]
источник
Желе , 25 байт
Попробуйте онлайн!
Монадическая ссылка, принимающая целое число в качестве аргумента и возвращающая строку Jelly нужного формата. Если список из двух элементов был приемлемым выводом (согласно большинству проблем), можно было бы сэкономить 2 байта. Если бы база 1 была приемлемой для случая края 1 в качестве входных данных, можно было бы сохранить еще 2 байта.
источник
Брахилог , 44 байта
Попробуйте онлайн!
Больно немного писать.
источник
Perl 5 , 161 байт
Попробуйте онлайн!
источник
Python 2 ,
140135 байтовПопробуйте онлайн!
источник
Perl 5
-Minteger -MList::Util=uniq,first -ap
,123112 байтПопробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
109111 байт+2: исправлено. Спасибо за улов @Roman
OrderingBy
был представлен в Mathematica 12.0, которую TIO, похоже, еще не обновил.источник
OrderingBy
Не соответствует этому требованию.MinimalBy
, как это ?123
ваше решение печатает36 3F
вместо требуемого12 A3
. ОтOrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]
ответа я получаю{36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}
, поэтому обычное предположение об отсутствии переупорядочения эквивалентных записей здесь, похоже, здесь игнорируется. Мой$Version
«12.0.0 для Mac OS X x86 (64-разрядная версия) (7 апреля 2019 г.)».C (лязг) , 165 байтов
Попробуйте онлайн!
п // вход
, i = 2 // итератор от базы 2 до 36
, j // текущая сложность
, p = 99 // лучшая сложность
, r // результат = итератор
, m // временная копия n
, х; // м% я
char * g // текущая строка ptr
, * _ // лучший str ptr
, Б [74] [37]; // буфер
/ * [37 + 37] = [полученные строки + проверка используемых символов] * /
т (п) {
for (; g = b [i], // переместить ptr
для (j = 0, m = n; m; m / = i, // извлечь цифру
J + = Ь [I + 36] [х = т% я] ++ 1: 2; // увеличиваем байт относительно символа
// и, если это было 0, увеличивает j на 2: 1 для нового используемого символа и 1 для числа цифр
// иначе только цифры на счет + указатель перемещения
// printf ("% s -", g); // тест
// printf ("r% ip% ij% i \ n", r, p, j); // тест
}
Е ( "% I,% s", г, _); // выход
}
источник
Japt v2.0a0, 31 байт
Попытайся
источник