Если задан неотрицательный целочисленный ввод, напишите программу, которая преобразует число в шестнадцатеричное и возвращает истинное значение, если шестнадцатеричная форма числа содержит только до A
конца символы, F
а в противном случае - значение Falsey.
Контрольные примеры
10
==> True (A in hexadecimal)
100
==> False (64 in hexadecimal)
161
==> False (A1 in hexadecimal)
11259375
==> True (ABCDEF in hexadecimal)
0
==> False (0 in hexadecimal)
Бонус: -40 байт, если ваша программа печатает Only letters
для задачи, описанной выше, Only numbers
если шестнадцатеричная версия номера содержит только цифры 0-9
и Mix
если шестнадцатеричное число содержит хотя бы одно число и хотя бы одну букву.
Это код гольф. Стандартные правила применяются. Самый короткий код в байтах побеждает. Возможны либо функции, либо полные программы.
NaN
MixOnlynumbersletters
21 строка символовОтветы:
Pyth, 43 - 40 = 3 байта
Тестирование
Это достигает бонуса.
Only numbers
и,Only letters
к счастью, отличаются только на 4 буквы. форматирование в стиле printf используется с%
.Система выбора осуществляется как путем пересечения гекса с
G
алфавитом, так и путем вычитанияG
. Если ни один из них не заканчивается ложно, это микс, а если пересечение ложное, это числа, а если вычитание ложное, это буквы.источник
Pyth, 6 байт
Проверьте это здесь
источник
Желе , 6 байт
Попробуйте онлайн!
Как это работает
источник
TeaScript , 11 байт
13 15 16Довольно просто Это использует TeaScript 2.0. Вы можете получить эту версию от Github
объяснение
Попробуйте онлайн (слегка измененная версия, которая работает в сети)
источник
Python, 24 байта
Преобразует входные данные в шестнадцатеричную строку (без
0x
префикса) с помощью'%x'%n
. Видит, если все его символы больше, чем'9'
(какие буквы), видя, еслиmin
выше'9'
.источник
'9'
равен 54. Поэтому, если вы можете написать,...>54
вы можете сохранить байт.МАТЛ , 10
Примеры
объяснение
Бонусное испытание: 53-40 = 13
Примеры
объяснение
источник
LabVIEW, 52-40 = 12 Примитивы LabVIEW
Хвала встроенным!
источник
C
464337 байтТеперь с большей рекурсией! (Спасибо Денис)
Бонус: еще короче (33 байта), но не для
x = 0
:F()
принимаетint
и возвращает0
(false) или ненулевое (true).Я даже не пытался получить бонус, занимал
"MixOnly lettersnumbers"
только 23 байта, отслеживание нового условия потребовало бы 9 дополнительных байтов,printf()
это 8 байтов, что в сумме составляет 40, сводя на нет усилия.Основной тест:
источник
?:
? Я должен был заменить это,||
чтобы заставить это скомпилировать. Кроме того, можете ли вы сохранить байт, заменив*
символ&
таким образом, чтобы избежать()
s слева (хотя тогда вам нужно добавить пробел)?a?:b
является расширение ГНУ , которое вычисляется ,a
еслиa
это значение truthy, в противном случаеb
. Подходит для обработки нулевых указателей, какsend(message ?: "(no message)");
. Я знаю, что это не переносимо, но переносимость кода никогда не вызывает проблем в коде гольф :)33
байтов, выполнив это:F(x){x=(x%16>9)*(x<16?:F(x/16));}
это приводит к ошибке (GCC), при которой, если в функции нет возвращаемой переменной и был задан основной аргумент, в некоторых случаях будет автоматически возвращаться главный аргумент ( основываясь на том, что логика была сделана), и это, случается, один из тех случаев! Попробуйте онлайн: bit.ly/2pR52UHPython 3,
3029 байт1 байт был удален благодаря sysreq и Python 3.
Просто
lambda
и нарезка.источник
Perl 6 , 18 байт
использование:
источник
Mathematica, 32 байта
Объяснение:
источник
Javascript, ES6, без регулярных выражений, 28 байт
Есть также эта 27-байтовая версия, но она возвращает обратное значение.
источник
F=n=>!n||n%16>9&F(n>>4)
F=n=>n%16>9&&n<16|F(n>>4)
тогда.||
, но я думаю, что вы могли бы избежать использования&
вместо&&
этого.Юлия, 18 байт
Это анонимная функция, которая принимает целое число и возвращает логическое значение. Чтобы назвать его, дайте ему имя, например
f=n->...
.Входные данные преобразуются в шестнадцатеричную строку с помощью
hex
, затем мы проверяем, состоит ли она целиком из буквенных символовisalpha
.источник
JavaScript ES6, 29
Нет бонуса
С новым значением -40 бонус теперь ближе ... но не достаточно. Бонусный балл 70
71- 40 => 3031Тестовый фрагмент (введите число в поле ввода)
источник
-n-1
=~n
, верно?~n == -1
а-n-1 == NaN
GS2 , 6 байт
Исходный код использует кодировку CP437. Попробуйте онлайн!
Как это работает
источник
Октава, 22 байта
источник
Java,
464438 байтДовольно простой однострочный, который преобразует целое число в шестнадцатеричную строку и использует регулярное выражение, чтобы определить, являются ли все символы буквами.
-2 байта благодаря @ Eng.Fouad.
источник
"[a-f]+"
сэкономит 2 байта.+
-IT трату байта.matches
возвращает true, если вся строка может быть сопоставлена заданным регулярным выражением.[a-f]
неверный знак «плюс» неверен, поскольку не соответствует всей строке, поскольку в нем содержится более одного символа; это будет, если и только если присутствует один действительный символ.CJam (
98 байт)Онлайн демо
источник
{Gb$N<!}
Рубин, 19 байт
Ungolfed:
Использование:
С бонусом 70 - 40 = 30 байт
Использование:
источник
'%x'%n!~/\d/
это более короткая проверка для первого решения, а воPerl, 69 - 40 = 29 байт
источник
Цейлон, 55 байт
Просто ... мы форматируем
n
шестнадцатеричное число (которое создает строку), вызываем для каждого символа этой строки.digit
число (которое возвращает true, если это цифра), затем проверяем, является ли какой-либо из них истиной, и затем отменяем это.Версия с бонусом имеет гораздо больший счет 119 - 25 = 94 :
Я не уверен, как кто-нибудь мог сделать бонусную версию достаточно короткой, чтобы быть лучше, чем без бонусная версия, даже у этих строк только длина 28. Может быть, язык, который действительно затрудняет создание истинного / ложного значения.
Вот отформатированная версия:
источник
Ржавчина, 70 байт
Потому что, знаете,
JavaRust.Это на самом деле довольно элегантно, хотя:
Но обидно, что шаблон определения функции так долго ....: P
источник
CJam, 44 байта - 40 бонусов = 4 байта
Попробуйте здесь ~
источник
Серьезно, 12 байт
Шестнадцатеричный дамп:
Попробуйте онлайн
Это так же, как и другие ответы на языке стека. Было бы всего 7 байт, если бы серьезно поддерживал вычитание строки.
РЕДАКТИРОВАТЬ: Серьезно теперь поддерживает вычитание строки, и теперь работает следующее 7-байтовое решение:
Шестнадцатеричный дамп:
Попробуйте онлайн
источник
4╙,¡#S;ú∩S=
(или4ª
или8τ
, много способов записать:16:
в два байта: P)05AB1E , 2 байта (не конкурирующие)
Код:
Ха! Это два байта! К сожалению, не конкурирует, потому что этот язык устарел :(
Объяснение:
Попробуйте онлайн! или проверьте все контрольные примеры!
источник
hdÔ©1åi•4?ŸâτΛ•}®0åi•4?ŸàpÕTà•}®g2Qi•²
•} 36B` для бонуса, в результате чего ... еще 6! Wooooo бонусы!Python 3, 28 байт
источник
Common Lisp, 40 байт
Попробуйте онлайн!
источник
SmileBASIC 3.2.1, 78 байт
источник
81
.0-127
, таким образом, ваш счетчик байтов равен81
.Japt, 12 байт
Попробуйте онлайн!
Как это работает
источник
!!UsG r"\\d
может работать и сохранить байтГема, 41 персонаж
В Gema нет логического значения, поэтому он просто выводит «t» или «f».
Образец прогона:
источник