Вызов
Вот простой.
Напишите функцию или программу, когда в качестве входных данных будет указано число из базы 10, она вернет или напечатает значение этого числа в шестнадцатеричном формате .
Примеры
15 -> F
1000 -> 3E8
256 -> 100
правила
- Никаких встроенных шестнадцатеричных функций вообще
- Буквы могут быть строчными или прописными
- Вам нужно будет беспокоиться только о неотрицательных целых числах, без отрицательных или надоедливых десятичных дробей
- Он должен работать с любым произвольно большим числом вплоть до ограничения по умолчанию для языка.
- Новая строка не обязательна
- Как обычно, это код-гольф , поэтому выигрывает самый короткий код в байтах!
code-golf
math
base-conversion
hexadecimal
Случайный парень
источник
источник
000003E8
?Ответы:
APL (Dyalog APL) , 17 байтов
Должен работать с
⎕IO←0
, что по умолчанию во многих системах APL.Попробуйте онлайн!
(⎕D,⎕A)[
...]
D igits сцеплены для A lphabet, затем индексируются ...16⊥⍣¯1
обратное значение от 16 к основанию, то есть от числа к основанию 16⊢
применительно к⎕
числовой вводисточник
Машинный код Тьюринга, 412 байт
Как обычно, я использую синтаксис таблицы правил, определенный здесь. Вы можете протестировать его на этом сайте или, альтернативно, используя эту реализацию Java.
Обратный отсчет от входа в базе 10 при подсчете от 0 в базе 16. При уменьшении нуля он стирает блок ввода и завершается.
источник
10*n + 33
инструкции для выполнения любого произвольногоn
. Я не понимаю код, хотя.Ява,
9289 байтисточник
Javascript,
4943 байта.6 байтов сохранено пользователем 81655 .
Проверьте это здесь .
Это имеет два ведущих нуля, что разрешено правилами.
Вот версия без начальных нулей: (47 байт).
Проверьте это здесь .
Оба они используют точно такой же подход, как и мой ответ на Python .
источник
i&15
автоматически преобразует в целое число, сбрасывая десятичные дроби. Не нужно~~
h=i=>i&&h(i>>4)+"0123456789abcdef"[i&15]
CJam,
2221 байтСпасибо @ MartinBüttner за игру в 1 байт!
Попробуйте онлайн!
Как это работает
источник
ri{Gmd_9>7*sc+\}h;]W%
Pyth,
33262120 байтЭто было весело.
Попробуйте онлайн.
Разъяснение:
источник
С (функция), 51
Рекурсивная функция принимает входное целое число в качестве параметра:
Тестовый водитель:
источник
Хаскелл,
5958434139 байтПример использования:
sequence(s<$s)!!) $ 1000
->"00000000000003E8"
.Это создает список всех шестнадцатеричных чисел до 16 шестнадцатеричных цифр. К счастью, это происходит по порядку, поэтому мы можем просто выбрать
n
один.Редактировать: @Mauris выжал 2 байта. Благодарность!
источник
s="0123456789ABCDEF";(sequence(s<$s)!!)
DC, 37
Рекурсивно делит на 16, помещая остаток в стек, пока не останется ничего для деления. Затем напечатайте каждый элемент стека, используя divmod на 10, чтобы получить цифры AF. Вероятно, более подробно завтра ... (и, надеюсь, меньше байтов).
источник
Python,
5958 байт1 байт сохранен CarpetPython
Беги как:
print h(15)
Проверьте это здесь (Ideone.com).
Объяснение:
источник
h=lambda i:(i>15 and h(i/16)or'')+"0123456789abcdef"[i%16]
.h=lambda i:(i>15 and h(i/16)or'')+chr(48+i%16+i%16/10*7)
C (gcc) ,
4544 байтаПопробуйте онлайн!
источник
Баш (функция), 62
Спасибо @manatwork за предложение использовать рекурсию.
источник
h(){ x=({0..9} {A..F});echo `(($1>15))&&h $[$1/16]`${x[$1%16]}; }
()
вместо{ ;}
всей функции тела экономит еще больше :)Perl 6 ,
5348 байтовЭто создает последовательность значений, которые являются целочисленным делением (
div
), пока результат не0
исключит0
из последовательностиЗатем она пересекает (
X
) эту последовательность, используя оператор модуля (%
) с16
Эти значения используются в качестве индексов в виде плоского списка, состоящего из двух диапазонов
0..9
и'A'..'Z'
Наконец, он объединяет
~
их, используяR
мета-оператор reverse ( ).Если это приводит к значению False (пустой строке), вернуть
0
Использование:
источник
MATL , 27 байт
При этом используется версия 5.1.0 языка / компилятора, которая является более ранней, чем эта проблема.
пример
объяснение
источник
𝔼𝕊𝕄𝕚𝕟, 31 символ / 62 байта
Try it here (Firefox only).
Хорошо, я разобрался с еще кое-чем, что помогло.
объяснение
По сути, это то же решение, что и решение ES6 @ SuperJedi224, но с чем-то другим.
Видишь
⩥ḊĀⒸª⩥⁽ṁṇ⸩⨝
? Это действительно необычный способ написания"0123456789ABCDEF"
.⩥Ḋ
создает диапазон от 0 до 10,Ⓒª⩥⁽ṁṇ⸩
создает диапазон от 65 до 71 и преобразует его в строку ASCII, иĀ...⨝
объединяет два диапазона и объединяет их в одну строку. Это была, наверное, самая крутая часть моего решения.Бонусная неконкурентная версия, 24 символа / 45 байт
Я решил добавить строку алфавита, как в Pyth.
источник
sed, 341 байт
Это не очевидный язык для этой задачи, но он имеет преимущество в том, что поддерживает входные числа вплоть до (в зависимости от вашей реализации) между 4000 цифрами и пределом доступной (виртуальной) памяти вашей системы. Я преобразовал RSA-1024 в гекс за 0,6 секунды, поэтому он достаточно хорошо масштабируется.
Он работает, используя последовательное деление на два, накапливая каждые 4 бита переноса в шестнадцатеричное число. Мы используем небуквенные символы для представления нашего вывода, так что мы всегда накапливаем перенос между десятичным вводом и шестнадцатеричным выводом и преобразуем в обычный шестнадцатеричный код в самом конце.
источник
PHP,
65 66 64 + 1 6259 байтфункция рекурсивной печати, печатает ведущий ноль (вставьте
>16
перед тем, как&&
его удалить)программы, 64 байта +1 для
-R
(работать как труба с-nR
)требует PHP 5.6 или новее (5.5 не может индексировать строковые литералы)
или
требует PHP 5.6 или 7.0 (7.1 понимает отрицательные строковые индексы)
Запустите как трубу с
-nR
или попробуйте их онлайн .источник
echo+$s
для ввода 0+
знак обрезает вывод по первой букве ... итак ..?:0
Юлия, 55 байт
Это базовая рекурсивная реализация функции. Он принимает целое число и возвращает строку.
Если входное значение меньше 15, пол разделите его на 16 и рекурсивно, в противном случае возьмите пустую строку. Прикрепите это к передней части соответственно выбранного шестнадцатеричного символа.
источник
Pyre , 98 байт
Делать это на языке без арифметических операторов, вероятно, было ошибкой.
Используйте как это:
Ungolfed:
источник
Рубин, 48 символов
(Копия ответа Loovjo 's Python .)
Образец прогона:
источник
Серьезно, 35 байтов
Шестнадцатеричный дамп:
Попробуйте онлайн
Объяснение:
Обратите внимание, что
;7ªD+@9<7*+c
это эквивалентно4ª▀E
, что сэкономило бы 8 байт, но я подумал, что, возможно, функция, которая выдвигает цифры b в виде строки, может считаться слишком большой частью «шестнадцатеричного встроенного».источник
Javascript ES6,
6458 байтСохранено 6 байтов благодаря ן n useruɐɯɹɐ ן oɯ и user81655.
источник
v=>eval('for(z="";v;v=v/16|0)z="0123456789ABCDEF"[v%16]+z')
v=>{for(z="";v>0;v=v/16|0)z=btoa``Ó]·ã»óÐ1``[v%16]+z;return z}
(двойные тильды - одиночные тильды) ==> 64 символа, 71 байт. Не стоит того.v=v/16|0
это просто сложный способ написанияv>>=4
.Befunge-93, 58
В первый раз, выполняя настоящую игру в гольф в Бефунге, могу поспорить, что для этого уложен однострочник, так как все места в середине второй линии кажутся расточительными.
Вы можете пройти через это здесь . Частичное объяснение:
&
: Принять вход.:88+%
: Возьми остаток по модулю 16."0"+
: Добавьте его к значению ASCII, равному 0.:"9"`
: Если результат больше, чем значение ASCII 9 ...7*+
: Добавить 7, чтобы преобразовать его в букву.\
: Сохранить полученный символ в стеке.8/2/
: Разделить на 16 округления.:!#|_
: Выйти из цикла, если результат равен 0.#
: В противном случае вернитесь к шагу модуля.>:#,_@
(обтекание): По окончании выведите стопку в порядке LIFO.источник
> <> , 46 + 3 = 49 байтов
Это было бы короче, если бы> <> имело целочисленное деление, которое мы теперь должны эмулировать, вычитая по модулю 1. Тем не менее, я думаю, что для этого используются довольно аккуратные обтекания трюков!
Попробуйте онлайн!
объяснение
Первый цикл
Первый цикл выполняет классическое преобразование в шестнадцатеричный алгоритм. Это делает по модулю 16 (
:f1+%
) и проверяет, если результат <10 (:a(?
). Если это не так, нам нужно добавить 7 (7+
), чтобы перейти от десятичного знака к прописному алфавиту в таблице ASCII. Иначе, мы можем продолжить, добавив значение ASCII для 0 ("0"+
) и сместив символ для вывода в конец стека, потому что мы должны будем выводить их в обратном порядке. Затем верхнее значение заменяется результатом целочисленного деления на 16. Это эмулируется путем вычисления a / b - (a / b)% 1 (f1+,:1%-
). Когда цикл завершен, стек содержит шестнадцатеричные символы в обратном порядке вывода и 0.Второй цикл
Второй цикл переворачивает список и проверяет, равен ли верхний элемент 0. Если это так, мы знаем, что все ненулевые были напечатаны, и мы должны завершиться. Иначе, мы выводим символ и снова обращаемся к списку, чтобы подготовиться к следующей итерации. При
:
входе во второй цикл дублируется 0, что не имеет никакого эффекта.источник
SpecBAS - 110 байт
Это использует алгоритм, который я нашел на WikiHow (2-й метод).
Строки в SpecBAS основаны на 1, следовательно,
+1
чтобы выбрать правильный элемент.источник
C (лязг) , 83 байта
Попробуйте онлайн!
Альтернативный раствор в С
источник
Рубин, 40 байт
Украдено уInspired ответом manatwork, но с использованием интересной лазейки, чтобы сделать его короче.источник
REXX,
8078 байтисточник
C, 48 байтов
Это не совсем оригинально, я сбил 5 байтов от версии Digital Trauma.
источник
APL (NARS), символы 34, байты 68
тест:
источник