Учитывая 3 целых числа, определите наименьшую возможную основу для умножения первых двух целых чисел на третье. Если вы думаете об ответе на главный вопрос жизни, Вселенной и всего остального, 6 * 9 == 42 верно в Базе 13.
Входные данные могут включать любые числа, цифры которых используют символы 0-9, az и AZ, где a
равняется 10 в Base 10 и Z
61 в Base 10.
Входные данные должны вводиться любым удобным для вас способом (кроме жесткого кодирования), и вы можете написать либо отдельную функцию, либо всю программу.
Максимальная база, которая должна быть рассмотрена, - База 62, а минимальная база - База 2.
Можно предположить, что первые два значения меньше третьего. Можно также сделать вывод, что минимальное основание на единицу больше, чем самая высокая цифра / символ из входов (например, если это входы 3 1a 55
, минимальное основание будет основанием 11, поскольку a
это самая высокая цифра).
Если такой базы нет, верните ненужное значение по вашему выбору.
Это код гольф, поэтому выигрывает самый короткий код.
Тестовые случаи
6 9 42 --> 13
a a 64 --> 16
aA bB 36jk --> 41
2 3 20 --> <junk value>
10 10 100 --> 2
источник
b
в общем виде, напримерa_0 b^0 + a_1 b^1 + a_2 b^2 + ...
(гдеa_0
наименее значимая цифра), то база 1 определенно имеет смысл. Кроме того, заключение ОП будет также включать базу 1 в поиске, если наибольшая существующая цифра равна 0.Ответы:
CJam,
525148 байтовПроверьте это здесь. Онлайн тестер не поддерживает ввод через ARGV. Ближайшая альтернатива - поместить ввод как
6 9 42
в STDIN и использовать:Это печатается,
-1
если не может быть найдена действительная база до 62.Большое спасибо Питеру за разбор кода!
Я исправил много проблем, которые добавили 14 байтов к счету. Следующее объяснение все еще для моего первоначального представления, и я обновлю его завтра.
Индекс печатается автоматически в конце программы.
источник
32base~\[-16.35 9]=+
. Я знаю, что у CJam более короткое базовое преобразование.APL (Dyalog Unicode) , 30 байтов SBCS
Попробуйте онлайн!
Спасибо Адаму за помощь.
Объяснение:
Мы используем вспомогательную функцию,
In
чтобы получить ввод в более приемлемом формате. В противном случае на вход поступает матрица из 3 столбцов.'3 9 42'
даст, например (читать сверху вниз, затем слева направо):И для
'aA bB 36jk'
(то же самое здесь.a
10,b
11,A
36 и т. Д.)источник
Питон 2 -
197213Какой монстр ... (по сравнению с CJam)
К сожалению
int
, базовое преобразование может обрабатывать только базы до 36. Поэтому мне нужно было реализовать это самостоятельно. (Смотрите это замечательное решение .)источник
CJam, 53 байта
Принимает три входа от STDIN как
Печатает,
0
если продукт в любой базе не представляется возможнымПостараюсь в гольф это дальше.
Попробуй здесь
источник
JavaScript (E6) 129
139Рекурсивно попробуйте все базы от 2 до 62, возвращая -1, если никакое значение не в порядке.
Функция JavaScript parseInt работает с базой до 36, поэтому для больших баз требуется небольшая помощь.
Осторожно, параметры x, y, z являются строками, а не числами.
Это сложнее, чем кажется. Спасибо Мартину за то, что он указал на основную ошибку в первой версии.
Меньше гольфа
Проверьте в консоли FireFox / FireBug.
Тест пробует 1000 номеров с разными базами (до 36, а не 62). Стоит отметить, что найденная база может быть правильной, но меньше, чем база, сгенерировавшая тестовый пример.
источник
Древесный уголь , 28 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Выходы,
None
если не найдена действительная база. Объяснение:источник
⍘
этоAny
по какой - то причине ...Эрланг (escript) - 200
Добавьте два ведущих символа новой строки, которые должны присутствовать.
В читабельном:
Призвание:
источник
if Digit < Base -> … end
часть заботится об этом. Еслиif
блок не имеет истинной ветви, то генерируется исключение, которое попадает вtry … catch _:_ -> … end
.Haskell 216 символов (177?)
Пытался играть в гольф как можно больше. Если считается импорт, то это мой самый короткий код (216)
Однако если импорт не учитывался, то это моя лучшая версия (177):
Это рассматривает каждое число как полином P (x), где x - основание, при условии, что ни один коэффициент не больше x; Затем я оцениваю полиномы по каждому возможному основанию, останавливаясь, когда достигаю того, которое удовлетворяет равенству P (x) * Q (x) = R (x). Правило «база больше, чем самая большая цифра» применяется с последним охранником в сопоставлении с образцом, а именно
n>(m.map(m.f)$k)
. Я знаю, что разные задачи в области гольфа и разные лица, принимающие участие в конкурсе, имеют разную политику в отношении импорта по отношению к подсчетам очков, поэтому возьмите вторую с долей соли.источник
Пролог - 195 байт
В основном та же идея, что и мой ответ на Erlang:
В читабельном:
Призвание:
источник