При написании кода-гольфа программ я обычно использую некоторые числовые константы. Я всегда помещаю их в десятичную дробь, потому что я так думаю, но я только что понял, что мой язык поддерживает другие числовые форматы, которые могут позволить мне немного сократить код.
Вызов
Если неотрицательное целое число меньше 2 ^ 53-1, решите, имеет ли это целое кратчайшее представление в:
- Десятичный
- шестнадцатеричный
- Научная нотация
Десятичный
Поскольку это формат по умолчанию для моего языка, для этого формата не требуется никаких дополнительных обозначений. Каждое число представляется как обычно для десятичного числа.
шестнадцатеричный
Мои языки используют 0x
префикс для шестнадцатеричных констант. Это означает, что если число имеет 4 шестнадцатеричных цифры, для представления этого числа потребуется 6 байтов.
Научная нотация
Мой язык использует следующий формат для научной нотации:
[Действительная база] e [Целочисленный показатель 10]
Например, 700
будет представлен как 7e3
и 699
будет представлен как 6.99e3
, потому что основание должно быть между -10 и 10 (не включительно). Для целей этой задачи основание всегда будет по крайней мере 0, так как введенное число неотрицательно.
Выход
Вы должны вернуть способ определения, какой формат самый короткий (т. Е. 0 для десятичного числа, 1 для шестнадцатеричного, 2 для научного). Кроме того, вы можете вывести наименьшее представление самого числа.
Контрольные примеры
Decimal | Hexadecimal | Scientific | Winner
--------------|--------------|-------------------|-------------
0 | 0x0 | 0e0 | Decimal
15 | 0xF | 1.5e1 | Decimal
6999 | 0x1B57 | 6.999e3 | Decimal
7000 | 0x1B58 | 7e3 | Scientific
1000000000000 | 0xE8D4A51000 | 1e12 | Scientific
1000000000001 | 0xE8D4A51001 | 1.000000000001e12 | Hexadecimal
1000000001000 | 0xE8D4A513E8 | 1.000000001e12 | Hexadecimal
1000001000000 | 0xE8D4B45240 | 1.000001e12 | Scientific
счет
Это код-гольф , поэтому выигрывает ответ в кратчайших байтах для каждого языка.
источник
2^63-1
может быть трудным для некоторых языков. Подумайте об уменьшении этого значения до более низкого значения, например2^32-1
(чтобы значения соответствовали типу данных с двойной плавающей запятой)double
. Просто предложение; делай, как считаешь нужным1000001000000
также может быть написано как1000001e6
будто.Ответы:
05AB1E , 23 байта
Попробуйте онлайн!
-1 спасибо Эмигне .
0
для шестнадцатеричной,1
для десятичной,2
для научных.источник
'.ìÁ0
.05AB1E , 27 байт
Попробуйте онлайн!
объяснение
источник
len(hex(input)) + 2
, если это поможет.¹
вместоDs
:g¹hgÌ
Желе , 28 байт
Монадическая ссылка возвращение
1
,2
или3
шестнадцатеричный, научной или десятичный соответственно.Попробуйте онлайн! или посмотрите набор тестов .
Я думал, что это будет короче, но я не вижу этого, поэтому пишу.
Как работает это чудовище ...
источник
JavaScript (ES6), 90 байт
Возвращает 0 для десятичного числа, 1 для шестнадцатеричного, -1 для научного.
Показать фрагмент кода
объяснение
log(n) / log(10)
: основание-10 логарифмn
; примерно длинаn
как десятичная дробь.log(n) / log(16) + 2
: основание-16 логарифмn
плюс 2; примерно длинаn
шестнадцатеричного плюс добавленный0x
.n.toExponential().length - 1
:n.toExponential()
возвращает строку сn
в научном формате (например7e+3
), но мы вычитаем 1 из ее длины, чтобы учесть посторонние+
.Теперь, когда мы имеем длину всех 3 -х представлений
D
,H
иS
мы сравниваем:S<H?-(S<D):+(H<D)
JavaScript (ES6), 97 байт
Этот выводит число в формате с самой короткой длиной. Вдохновленный удаленной попыткой @ Shaggy .
Показать фрагмент кода
источник
C #,
1069796143132 байтаДосадно в C #
ulong.ToString
спецификатор форматаe
теряет точность при старших числах, поэтому мне пришлось делать это вручную. Вероятно, есть более короткий способ сделать это, но пока это работает. Он также форматирует его неправильно для этой задачи, поэтому мне все равно придется вручную обрезать вывод.Если я установлю строку в значение, так
n
какvar s=n+"";
она работает дольше из-за явного возврата и дополнительных фигурных скобок.Он возвращает самое короткое значение из массива каждого другого значения, где
[0] = decimal, [1] = hexadecimal, [2] = scientific
.Полная / Отформатированная версия:
Правильный способ расчета научных результатов:
Тем не менее, видя, что
0
короче, чем0e0
я могу удалить этот особый случай.источник
Python 2,
8377 байтВыводит наименьшее представление числа.
Попробуйте онлайн
Ungolfed:
При необходимости регулярное выражение удаляет завершающие нули и десятичную точку, а также знак плюс и начальный ноль от показателя степени, если он есть.
источник
L
к большим числам в пределах диапазона ввода.str
бы избежать этого.int
представлении Python . Длинные начинаются примерно2**63
.+
символы сstr.replace
?+
пока я в нем.Ом 35 байт
Попробуйте онлайн!
Выходы 0 для десятичной, 1 для шестнадцатеричной и 2 для научной.
Объяснение:
источник
PHP , 90 байт
печатает 0 для десятичной, 1 для шестнадцатеричной и 2 для научной
в случае галстука будет напечатано наибольшее число
Попробуйте онлайн!
PHP , 91 байт
печатает 0 для десятичной, 1 для шестнадцатеричной и 2 для научной
в случае галстука будет напечатано наименьшее число
Попробуйте онлайн!
PHP , 103 байта
печатает 0 для десятичной, 1 для шестнадцатеричной и 2 для научной
в случае галстука будут напечатаны все номера
Попробуйте онлайн!
PHP , 109 байт
Выведите массив с кратчайшими решениями
Попробуйте онлайн!
источник
C
187185 байтрасжатая:
Выводит 0 для десятичной дроби, 1 для шестнадцатеричной, 2 для научной записи.
источник
TI-Basic, 130 байт
Или, альтернативно:
Или в шестнадцатеричном виде:
Выводит 0 для десятичной дроби, 1 для шестнадцатеричной, 2 для научной записи
источник