вход
Непустой массив натуральных чисел.
задача
Преобразуйте каждое целое число в двоичное, восьмеричное, десятичное или шестнадцатеричное, чтобы каждая цифра (от 0 до F ) использовалась не более одного раза.
Выход
Список баз, которые были использованы для решения головоломки.
Подробный пример
Ожидаемый результат для [16, 17] - [восьмеричное, десятичное] .
Вот почему:
- Мы не можем просто использовать десятичное число для обоих чисел, потому что они оба содержат 1 .
- 16 не может быть преобразован в двоичный файл, потому что его представление в этой базе ( 10000 ) содержит несколько 0 «с.
- 17 также нельзя преобразовать в двоичный файл, потому что его представление в этой базе ( 10001 ) содержит несколько 0 'ы и несколько 1 -х.
- 17 не может быть преобразовано в шестнадцатеричное, потому что его представление в этой базе ( 11 ) состоит из двух 1 .
Давайте рассмотрим все остальные возможности:
+---------+---------+--------+ | oct(16) | dec(16) | hex(16)| | = 20 | = 16 | = 10 | +--------------+---------+---------+--------+ | oct(17) = 21 | 20,21 | 16,21 | 10,21 | | dec(17) = 17 | 20,17 | 16,17 | 10,17 | +--------------+---------+---------+--------+
Единственное возможное решение - преобразовать 16 в восьмеричном ( 20 ) и сохранить 17 в десятичном ( 17 ). Таким образом, цифры 0 , 1 , 2 и 7 используются ровно один раз.
Разъяснения и правила
- Вклад гарантированно приведет к уникальному решению. Ваш код не должен поддерживать массивы, которые дают несколько решений или вообще не имеют решения.
- Вы можете выводить базы в любом приемлемом формате, например ["bin", "oct", "dec", "hex"] , ['b', 'o', 'd', 'h'] , "BODH " , [2,8,10,16] , [0,1,2,3] и т. Д. Но это должно быть четко объяснено в вашем ответе.
- Порядок оснований в выходных данных должен соответствовать порядку входных целых чисел.
- Если это помогает, вы можете предположить, что входные данные отсортированы от самого низкого до самого высокого или от самого высокого до самого низкого.
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
Контрольные примеры
Вам не нужно выводить результаты конвертации, перечисленные ниже. Они чисто информационные.
Input | Output | Conversion result
---------------------------------------+-----------------+------------------------
[ 119 ] | O | 167
[ 170 ] | D | 170
[ 64222 ] | H | FADE
[ 16, 17 ] | O/D | 20/17
[ 14, 64, 96 ] | H/H/D | E/40/96
[ 34, 37, 94 ] | O/D/H | 42/37/5E
[ 2, 68, 82 ] | B/D/H | 10/68/52
[ 22, 43, 96 ] | O/O/O | 26/53/140
[ 3639, 19086, 57162 ] | H/D/H | E37/19086/DF4A
[ 190, 229, 771 ] | O/H/O | 276/E5/1403
[ 2, 44, 69, 99 ] | B/H/H/H | 10/2C/45/63
[ 75, 207, 218, 357, 385 ] | H/H/H/D/O | 4B/CF/DA/357/601
[ 12, 28, 46, 78, 154, 188, 222, 240 ] | D/O/O/D/H/H/H/H | 12/34/56/78/9A/BC/DE/F0
Необработанный список ввода доступен здесь .
code-golf
base-conversion
Arnauld
источник
источник
Ответы:
JavaScript (Node.js) ,
192,155,154,152,151,145,136,113,99,9290 байтПопробуйте онлайн!
Объяснение:
[c,...a]
- Трюк @Arnauld для получения одного элемента за разc?***:" "
-> если c не определен, нам удалось достичь конечного результата - [] - если бы я поставил "", тогда находка не будет считаться законной. ([] + 5 = "5" JS FTW)[1,4,5,8].find
каждый раз, когда мы находим правильную базу (выходные данные будут из этого массива (1,4,5,8) -> (2,8,10,16) легитимны. Теперь, как работает поиск -> если он что-то находит, он возвращает элемент (1-8), а затем я добавляю результат внутреннего решения. Если он не находит, то он возвращает undefined + T теперь false -> NaN, который в родительский вызов будет считаться ложным!/(.).*\1/.test(n=t+b)
определить, есть ли в строке дубликаты, если так:f(a,n))
просто перейдите на следующий номер (теперь это array.slice (1)) с новой строкой (n)мы присваиваем результат T (temp) результата, потому что поиск останавливается, когда он находит, и поэтому мы знаем, что последним результатом будет f (), который является результатом B
источник
t="",B=""
чтобыt="",B=t
сохранить байт.trim()
).Perl 5
-alp
, 55 байтИспользует
%x
для шестнадцатеричной,%d
десятичной,%o
восьмеричной и%b
двоичнойПопробуйте онлайн!
источник
Рубин,
7271 байтФормат вывода - это некое чудовище обратного S-выражения:
Вместо этого он будет стоить еще 3 байта (добавление
*?/
).Этот формат происходит от структуры цикла, немного короче, чем более идиоматический
repeated_combination(a.size)
, который генерирует массив массивов символов и затем уменьшает его по сравнению с функцией перекрестного произведения.Редактировать: 1 байт благодаря Линн.
источник
Pyth,
2120 байтВозвращает список всех возможных списков баз (который всегда имеет длину 1).
Попробуй здесь
объяснение
источник
Wolfram Language (Mathematica) , 71 байт
Вернуть список баз.
Попробуйте онлайн!
источник
Желе ,
1716 байтовПопробуйте онлайн!
Вернуть список баз.
источник
Python 2 , 128 байт
Попробуйте онлайн!
источник
05AB1E , 17 байт
Попробуйте онлайн!
источник
8
символа'8'
, а остальные три - целое число? +1, хотя, кажется, работает очень хорошо, в том числе более длинные последние контрольные примеры.Python 2 ,
121117113111 байтовПопробуйте онлайн!
Кончик шляпы Линн, для
format
которого я забыл!источник
Шелуха , 19 байт
Попробуйте онлайн!
Возвращает списки баз
объяснение
источник