Wyzwanie:
Policz liczbę jedynek 1
w binarnej reprezentacji wszystkich liczb między zakresem.
Wejście :
Dwie nie dziesiętne dodatnie liczby całkowite
Wyjście:
Suma wszystkich 1
s w zakresie między dwiema liczbami.
Przykład:
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
Wyjaśniłem tylko pierwszy przykład, inaczej zajęłoby to dużo miejsca, gdybym spróbował wyjaśnić je wszystkie.
Uwaga :
- Liczby mogą być oddzielone o ponad 1000
- Wszystkie dane wejściowe będą prawidłowe.
- Minimalna moc wyjściowa będzie wynosić jeden.
- Możesz zaakceptować liczbę jako tablicę dwóch elementów.
- Możesz wybrać sposób uporządkowania liczb.
Kryteria wygranej:
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach dla każdego języka.
IntRange
w Kotlinie,Range
w Rubim)?1000 - 2000
daje 5938, ale obniżają sprawy przez 1000, wynik spada również przez 1000:0-1000 = 4938
. DowódOdpowiedzi:
JavaScript (ES6), 38 bajtów
Pobiera dane wejściowe w składni curry
(a)(b)
.Wypróbuj online!
Skomentował
źródło
Python 2 , 47 bajtów
Wypróbuj online!
źródło
>=
...Java (JDK 10) , 55 bajtów
Wypróbuj online!
źródło
IntStream.range(a,b+1).map(Integer::bitCount).sum()
a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()
przez całe 74 bajty. Nawet jeśli import nie był obowiązkowy, parametry są, więc musielibyśmy napisaća->b->IntStream.range(a,b+1).map(Integer::bitCount).sum()
, co liczy się jako 57 bajtówa->b->IntStream.range(a,b+1).map(Long::bitCount).sum()
ulepszyć o 1 bajt. Marginalna, ale wciąż jedna.a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()
(71 bajtów).05AB1E , 4 bajty
Wypróbuj online!
źródło
Python 2 , 45 bajtów
Wypróbuj online!
źródło
MATL ,
54 bajtówWypróbuj online!
Dzięki Luis Mendo za uratowanie bajtu!
źródło
R ,
4134 bajtówWypróbuj online!
Mocno zainspirowany innym rozwiązaniem R. autorstwa ngm . To stosuje inne podejście po konwersji na bity. Ogromne podziękowania dla Giuseppe za wskazanie możliwego rozwiązania 34-bajtowego.
źródło
sum
mable wektora - opublikuję, jeśli ty / ngm nie możesz jej znaleźć.sd
ivar
zmuszam, aby podwoić wszystko, co mogą.pryr::f
aby zapisać 4 bajty: tio.run/##K/qfZvu/…Galaretka , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Pyth ,
87 bajtów1 bajt dzięki Mr. Xcoder.
Wypróbuj online!
źródło
APL (Dyalog Unicode) , 16 bajtów
Wypróbuj online!
-1 dzięki H.PWiz .
Lewy argument = min
Prawy argument = maks
źródło
Python 3 ,
565452 bajtówMożna to pograć w golfa bardziej imo.-2 bajty dzięki Mr.Xcoder -2 więcej bajtów dzięki MI WrightWypróbuj online!
źródło
Stax , 6 bajtów
Uruchom i debuguj
źródło
Bash + wspólne narzędzia, 50
Wypróbuj online!
Przekształcanie liczb całkowitych na ciągi binarne zawsze jest trochę uciążliwe. Podejście tutaj jest nieco inne - zamień liczby całkowite na ósemkowe, a następnie zamień każdą cyfrę ósemkową na liczbę zawartych w niej liczb binarnych. Następnie możemy po prostu zsumować wszystkie przekonwertowane cyfry
źródło
APL + WIN,
3326 bajtówMonity o wektor liczb całkowitych:
Wypróbuj online! Dzięki uprzejmości Dalog Classic
Wyjaśnienie:
źródło
R ,
44 4037 bajtówWypróbuj online!
Poprzednio:
źródło
Oktawa z przybornikiem komunikacji, 21 bajtów
Wypróbuj online!
Kod powinien być dość oczywisty. Liczba niezerowych elementów w reprezentacji binarnej każdej liczby w zakresie.
Byłoby to
@(a,b)nnz(dec2bin(a:b)-48)
bez zestawu narzędzi komunikacji.źródło
Łuska , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Rubinowy , 38 bajtów
Wypróbuj online!
źródło
PHP, 97 bajtów
(na pewno można to skrócić, ale chciałem użyć funkcji)
Wypróbuj online
Kod
Wyjaśnienie
źródło
$argv[0]
to nazwa programu lub „-”; Powinieneś pracować z$argv[1]
i$argv[2]
. I możesz użyćjoin
zamiastimplode
, skracając to do 68 bajtów:<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
PowerShell , 72 bajty
Wypróbuj online!
Długi z powodu konwersji na binarną
[convert]::ToString($_,2)
i pozbycia się zer-replace0
. W przeciwnym razie po prostu bierzemy liczby wejściowe, tworzymy zakres$x..$y
i dla każdej liczby w zakresie konwertujemy ją na binarną, usuwamy zera, bierzemy.length
je (tj. Liczbę pozostałych) i dodajemy do naszego$o
narzędzia.źródło
count
zamiast tegolength
:)count
zawsze będzie,1
ponieważ liczymylength
ciąg, a nie tablicę.-replace0
jest bystry.Haskell , 42 bajty
Wypróbuj online!
źródło
Pip , 10 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Proton ,
4037 bajtówWypróbuj online!
źródło
Węgiel drzewny , 10 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Brachylog , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Bash + coreutils,
3832 bajtyDzięki @Cowsquack za grę w golfa z 6 bajtów!
Wypróbuj online!
źródło
seq -f2o%fp $*|dc|tr -cd 1|wc -c
K (ngn / k) ,
1913 bajtówWypróbuj online!
{
}
jest funkcją z argumentamix
iy
!1+y
jest lista 0 1 ... yx_
upuszcza pierwsze x elementów2\
koduje każdą liczbę całkowitą jako listę cyfr binarnych o tej samej długości (jest to specyficzne dla ngn / k)+/
suma+//
suma do konwergencji; w tym przypadku suma sumy wszystkich list cyfr binarnychźródło
Perl 6 ,
3230 bajtów-1 bajty dzięki Bradowi Gillbertowi
Wypróbuj online!
Wyjaśnienie:
źródło
[...](@_)
zamiast($^a..$^b)
J ,
16, 1514 bajtów1 bajt zapisany dzięki FrownyFrog!
Wypróbuj online!
Wyjaśnienie:
Czasownik dynamiczny, lewy argument jest dolną granicą
m
zakresu, prawy - górnąn
.źródło
}.
ale zawsze w widelcu, a nie w haczyku. Dzięki!QBasic,
95938382 bajtów@DLosc mnie
trochęocaliłodużo bajtów!Za pomocą tej techniki zapisano kolejny bajt !
Język miesiąca FTW!
Wyjaśnienie
Ostatnia skrzynka testowa od 1000 do 2000 faktycznie działa, w QBasic 4.5 działającym na Dosbox:
źródło