Вопрос:
Вам дадут начальные и конечные целые числа последовательности, и вы должны вернуть количество целых чисел в ней, которые не содержат цифры 5
. Начальные и конечные числа должны быть включены!
Примеры:
1,9 → 1,2,3,4,6,7,8,9 → Результат 8
4,17 → 4,6,7,8,9,10,11,12,13,14,16,17 → Результат 12
50,60 → 60 → Результат 1
-59, -50 → → Результат 0
Результат может содержать пять.
Начальный номер всегда будет меньше конечного. Оба числа могут быть также отрицательными!
Мне очень интересно ваше решение и то, как вы его решаете. Возможно, кто-то из вас найдет простое решение по чистой математике.
Редактировать Это задача игры в гольф, поэтому выигрывает самый короткий код.
50, 59 -> 0
.Ответы:
JavaScript (ES6),
3633 байтаПринимает ввод с синтаксисом карри
(a)(b)
.Отформатировано и прокомментировано
Контрольные примеры
Показать фрагмент кода
источник
test
более ,exec
когда вам нужно только логическое значение.)b<a
предназначен для остановки рекурсии после подсчета всех чисел отb
доa
, поэтому ее удаление вызовет бесконечную рекурсию.a
качестве аргумента и возвращаетF
функцию, которая в свою очередь принимает вb
качестве аргумента и - как вы заметили - вызывается рекурсивно для итерации отb
доa
, увеличивая счетчик для всех целых чисел, которые не содержат5
в своей десятичной дроби представление.Желе ,
87 байт-1 байт благодаря Деннису (используйте тот факт, что индексирование по числу обрабатывает это число как десятичный список)
TryItOnline!
Как?
* Абсолютное значение атома
A
необходимо, так как отрицательное число, приведенное к десятичному списку, имеет отрицательные записи, ни одна из которых никогда не будет5
(данный пример будет считать все восемь, а не два).источник
rAw€5¬S
сохраняет байт.w
преобразует целочисленный аргумент в десятичные цифрыBash + grep, 17 байт
Попробуйте онлайн!
источник
2sable ,
65 байтСохранил байт благодаря Аднану
Попробуйте онлайн!
объяснение
Примечание. Это работает из-за ошибки в
¢
применении функции к каждому элементу вместо подсчета соответствующих элементов в списке.источник
`
как он ведет себя так же на массивах: p.Python2,
59555251474342 байтаРекурсивное решение. Спасибо @xnor за мотивацию для поиска решения с использованием логических операторов! Кроме того, спасибо @JonathanAllan и @xnor за то, что они направили меня и обрезали байт с 43 до 42!
Другие попытки на 43 байта
источник
if!`x`.count('5')
работать?not
оператор, который находится!
на C-подобных языках, но занимает 3 байта :(and
иor
.not
.Утилиты Bash / Unix, 21 байт
Попробуйте онлайн!
источник
05AB1E ,
876 байтСохранил байт благодаря Аднану
Попробуйте онлайн!
объяснение
источник
å
, то есть.å
вы можете сделатьŸ5.å_O
для 6 байтов.negate
смысл-n
илиn==0?1:0
?n==0?1:0
Pyth,
98 байтСохраненный байт благодаря FryAmTheEggman!
Объяснение:
Попробуйте онлайн!
источник
Perl 6 , 23 байта
Попробуйте онлайн!
Как это работает
источник
Haskell , 39 байт
Попробуйте онлайн! Использование:
Объяснение:
источник
R, 33 байта
Использование:
источник
Октава , 36 байт
Попробуйте онлайн!
источник
Groovy,
47454340 байтЭто безымянное закрытие.
findAll
похоже на добавлениеif
условия в понимание списка в python.Попробуйте онлайн!
источник
PHP 7.1,
5755 байтБежать с
php -r '<code>' <a> <b>
источник
Mathematica,
464442 байтаСпасибо alephalpha и DavidC за сохранение 2 байта каждый!
Безымянная функция, принимающая два целочисленных аргумента и возвращающая целое число.
IntegerDigits@Range@##
преобразует все числа между входами в списки цифр;FreeQ@5
проверяет эти списки, чтобы решить, какие из них не содержат5
. ЗатемBoole
преобразует логические значения в нули и единицы иTr
суммирует результаты.Другие решения (44 и 47 байтов):
IntegerDigits@x~FreeQ~5
определяет, свободен ли список цифр числа от 5 с, иCount[Range@##,x_/;...]&
подсчитывает, сколько чисел между входами проходит этот тест.1##&@@IntegerDigits@#-5
берет список цифр числа, вычитает 5 из всех и умножает ответы вместе;Sign[...]^2
затем преобразует все ненулевые числа в 1.источник
Count[Range@##,x_/;IntegerDigits@x~FreeQ~5]&
Tr@Boole[FreeQ@5/@IntegerDigits@Range@##]&
Рубин,
3635 байтThx IMP1 за -1 байт
источник
?5
('5'
символ) вместо/5
/ в поиске, чтобы сохранить байт.Java 7,
8078 байтUngolfed:
Тестовый код:
Попробуй это здесь.
Выход:
источник
PowerShell,
4241 байтВызывается из командной строки как. \ No5s.ps1 1 20
источник
-replace3
или-split1
или-notmatch5
).Python 2,
6156 байт-5 байт благодаря tukkaaX
источник
not "5" in
:) Кроме того, если вы используете Python2, вы можете заключать вx
кавычки `` вместо выполненияstr(x)
.[]
. Вам также не нужно пространство раньшеif
.lambda a,b:sum(not"5"in`n`for n in range(a,b+1))
работает хоть. tio.run/nexus/…Swift 52 байта
источник
Пакетный, 95 байтов
Зацикливание вручную сохраняет некоторые байты, потому что в любом случае мне нужен счетчик цикла в переменной.
источник
PHP, 56 байт
Запустите так:
Версия для PHP 7.1 будет 53 байта (кредиты для Тита):
объяснение
источник
trim
снова забыл о втором параметре.CJam "легкое чистое математическое решение", 60
Попробуйте онлайн
Он принимает числа в любом порядке, в массиве.
Объяснение:
Одной из основных проблем является вычисление f (n) = числа не 5 чисел от 1 до n (включительно) для любого положительного n. И ответ таков: возьмите десятичные цифры n, замените все цифры после первых 5 (если есть) на 9, затем замените все цифры 5..9 на 4..8 (уменьшение) и преобразуйте из базы 9. Например, 1752 → 1759 → 1648 → 1 * 9 ^ 3 + 6 * 9 ^ 2 + 4 * 9 + 8 = 1259. По сути, каждая позиция цифры имеет 9 допустимых значений, и 5xxxx эквивалентен 49999, потому что между ними больше нет действительных чисел.
Как только мы решили это, у нас есть несколько случаев: если входные числа (скажем, a и b, a <b) (строго) положительны, то результатом будет f (b) -f (a-1). Если они отрицательные, то мы можем взять абсолютные значения, изменить их порядок и использовать тот же расчет. И если a <= 0 <= b, то результатом будет f (-a) + f (b) +1.
Программа сначала реализует функцию F, как описано выше (но применяется к каждому числу в массиве), затем читает входные данные, преобразует числа в абсолютное значение и переупорядочивает их, и использует одно из 2 приведенных выше вычислений, основываясь на том, * b> 0 изначально.
источник
Python 2 , 54 байта
Попробуйте онлайн!
Не самый короткий ответ Python Использует тот же алгоритм, но другой способ реализации с циклом while и не является лямбда-функцией.
источник
Java 7, 77 байт
Это улучшение Kevins Answer , но, поскольку у меня пока нет репутации комментировать, этот новый ответ придется делать.
Итак, что я сделал:
indexOf
операторыcontains
(-1 байт)цикл for ( 77 байт ):
рекурсивный ( 79 байт ):
Выход:
Проверьте это здесь !
источник
(""+a).contains("5")?0:1
быть заменен!(""+a).contains("5")
?(""+a).contains("5")||r++
?C #, 67 байт
источник
for(int c=0;...)
но потом не удалось скомпилировать, потому что возвращение выходит за рамкиc
JavaScript (ES6),
58 5649 байтГольф 7 байтов благодаря ETHproductions .
источник
c+=!/5/.test(s++)
чтобы сохранить несколько байтов :-)MATL , 10 байт
Попробуйте онлайн!
объяснение
источник
C #, 77 байт
Анонимный лямбда-звонок.
Использует
n
(первое число) иm
(последнее число) в качестве входных данных, а затем проверяет с помощью включения строки ("".Contains("")
).источник
5
в своем номере, поэтому10
(что ваш ответ не будет учитываться) следует учитывать.g
должно быть инициализировано, когда указано, как оно названо,var
так что вам нужно,var g="";
и вы можете использовать каррирование, т.е.n=>m=>
На самом деле , 13 байтов
Попробуйте онлайн!
Объяснение:
источник