Вызов :
Подсчитайте количество единиц 1
в двоичном представлении всех чисел в диапазоне.
Вход:
Два недесятичных натуральных числа
Выход :
Сумма всех 1
s в диапазоне между двумя числами.
Пример :
4 , 7 ---> 8
4 = 100 (adds one) = 1
5 = 101 (adds two) = 3
6 = 110 (adds two) = 5
7 = 111 (adds three) = 8
10 , 20 ---> 27
100 , 200 ---> 419
1 , 3 ---> 4
1 , 2 ---> 2
1000, 2000 ---> 5938
Я объяснил только первый пример, иначе он занял бы огромное количество места, если бы я попытался объяснить для всех них.
Замечания :
- Числа могут быть разделены более чем на 1000
- Все входные данные будут действительными.
- Минимальный выход будет один.
- Вы можете принять число в виде массива из двух элементов.
- Вы можете выбрать порядок номеров.
Критерии победы:
Это код-гольф, поэтому выигрывает самый короткий код в байтах для каждого языка.
IntRange
в Kotlin,Range
в Ruby)?1000 - 2000
дает 5938, но опустить случай на 1000, то результат также снижается на 1000:0-1000 = 4938
. доказательствоОтветы:
JavaScript (ES6), 38 байт
Принимает ввод в синтаксис карри
(a)(b)
.Попробуйте онлайн!
комментарии
источник
Python 2 , 47 байт
Попробуйте онлайн!
источник
>=
...Ява (JDK 10) , 55 байт
Попробуйте онлайн!
источник
IntStream.range(a,b+1).map(Integer::bitCount).sum()
a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()
, на целых 74 байта. Даже если импорт не был обязательным, параметры есть, поэтому мы должны были бы написатьa->b->IntStream.range(a,b+1).map(Integer::bitCount).sum()
, что считается 57 байтамиa->b->IntStream.range(a,b+1).map(Long::bitCount).sum()
улучшение на 1 байт. Маргинальный, но все же один.a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()
(71 байт).05AB1E , 4 байта
Попробуйте онлайн!
источник
Python 2 , 45 байт
Попробуйте онлайн!
источник
MATL ,
54 байтаПопробуйте онлайн!
Спасибо Луису Мендо за сохранение байта!
источник
R ,
4134 байтаПопробуйте онлайн!
Сильно вдохновлен другим решением R от ngm . Это использует другой подход после преобразования в биты. Огромное спасибо Джузеппе за подсказку о возможном решении 34 байта.
источник
sum
вектор mable - я опубликую, если вы / ngm не можете его найти.sd
иvar
принуждать все, что они могут удвоить.pryr::f
для сохранения 4 байта: tio.run/##K/qfZvu/…Желе , 4 байта
Попробуйте онлайн!
объяснение
источник
Pyth ,
87 байтов1 байт благодаря мистеру Xcoder.
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 16 байт
Попробуйте онлайн!
-1 спасибо H.PWiz .
Левый аргумент = min
правый аргумент = max
источник
Python 3 ,
565452 байтаЭто может быть игра в гольф больше IMO.-2 байта благодаря Mr.Xcoder -2 Больше байтов благодаря MI WrightПопробуйте онлайн!
источник
Stax , 6 байт
Запустите и отладьте его
источник
Баш + коммунальные услуги, 50
Попробуйте онлайн!
Преобразование целых чисел в двоичные строки всегда немного затрудняет работу bash. Подход здесь немного другой - преобразуйте целые числа в восьмеричные, затем замените каждую восьмеричную цифру числом двоичных 1, которые в ней содержатся. Тогда мы можем просто сложить все преобразованные цифры
источник
APL + WIN,
3326 байтЗапрашивает вектор целых чисел:
Попробуйте онлайн! Предоставлено Dalog Classic
Объяснение:
источник
R ,
44 4037 байтПопробуйте онлайн!
Ранее:
источник
Октава с инструментарием связи, 21 байт
Попробуйте онлайн!
Код должен быть довольно очевидным. Количество ненулевых элементов в двоичном представлении каждого из чисел в диапазоне.
Это было бы
@(a,b)nnz(dec2bin(a:b)-48)
без инструментов коммуникации.источник
Шелуха , 4 байта
Попробуйте онлайн!
объяснение
источник
Рубин , 38 байт
Попробуйте онлайн!
источник
PHP, 97 байт
(конечно, это можно сократить, но хотел использовать функции)
Попробуйте онлайн
Код
объяснение
источник
$argv[0]
название программы или "-"; Вы должны работать с$argv[1]
и$argv[2]
. И вы можете использоватьjoin
вместоimplode
, сокращая это до 68 байтов:<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
PowerShell , 72 байта
Попробуйте онлайн!
Долго из-за преобразования в двоичный код
[convert]::ToString($_,2)
и избавления от нулей-replace0
. В противном случае мы просто берем входные числа, создаем диапазон$x..$y
и для каждого числа в диапазоне преобразуем его в двоичный, удаляем нули, берем.length
их (т. Е. Количество оставшихся единиц) и добавляем их в наш$o
utput.источник
count
вместо этогоlength
:)count
всегда будет,1
потому что мы считаемlength
строку, а не массив.-replace0
умныйHaskell , 42 байта
Попробуйте онлайн!
источник
Пип , 10 байт
Попробуйте онлайн!
объяснение
источник
Протон ,
4037 байтПопробуйте онлайн!
источник
Древесный уголь , 10 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
источник
Брахилог , 8 байт
Попробуйте онлайн!
объяснение
источник
Bash + coreutils,
3832 байтаСпасибо @Cowsquack за удаление 6 байтов!
Попробуйте онлайн!
источник
seq -f2o%fp $*|dc|tr -cd 1|wc -c
K (нгн / к) ,
1913 байтПопробуйте онлайн!
{
}
это функция с аргументамиx
иy
!1+y
список 0 1 ... уx_
отбрасывает первые х элементов2\
кодирует каждое целое как список двоичных цифр одинаковой длины (это специфично для ngn / k)+/
сумма+//
сумма до схождения; в этом случае сумма суммы всех двоичных списков цифристочник
Perl 6 ,
3230 байт-1 байт благодаря Брэду Гилберту
Попробуйте онлайн!
Объяснение:
источник
[...](@_)
вместо этого($^a..$^b)
J ,
16, 1514 байтов1 байт сохранен благодаря FrownyFrog!
Попробуйте онлайн!
Объяснение:
Диадический глагол, левый аргумент - нижняя граница
m
диапазона, правый - верхнийn
.источник
}.
но всегда в вилке, а не в крючке. Благодарность!QBasic,
95938382 байта@DLosc спас мне
немногомного байт!Сохраненный другой байт, используя эту технику !
Язык месяца FTW!
объяснение
Последний тестовый сценарий от 1000 до 2000 действительно работает, в QBasic 4.5, работающем на Dosbox:
источник