Herausforderung :
Zählen Sie die Anzahl der Einsen 1
in der binären Darstellung aller Zahlen zwischen einem Bereich.
Eingabe:
Zwei nicht dezimale positive ganze Zahlen
Ausgabe :
Die Summe aller 1
s im Bereich zwischen den beiden Zahlen.
Beispiel
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
Ich habe nur das erste Beispiel erklärt, sonst hätte es sehr viel Platz in Anspruch genommen, wenn ich versucht hätte, es für alle zu erklären.
Hinweis :
- Zahlen können um mehr als 1000 voneinander entfernt sein
- Alle Eingaben sind gültig.
- Die minimale Ausgabe wird eins sein.
- Sie können number als Array von zwei Elementen akzeptieren.
- Sie können wählen, wie die Nummern bestellt werden.
Gewinnkriterien:
Dies ist Code-Golf, so dass der kürzeste Code in Bytes für jede Sprache gewinnt.
IntRange
in Kotlin,Range
in Ruby)?1000 - 2000
ergibt 5938, aber den Fall von 1000 senken, ist das Ergebnis fällt auch durch 1000:0-1000 = 4938
. BeweisAntworten:
JavaScript (ES6), 38 Byte
Übernimmt Eingaben in der Currying-Syntax
(a)(b)
.Probieren Sie es online!
Kommentiert
quelle
Python 2 , 47 Bytes
Probieren Sie es online!
quelle
>=
...Java (JDK 10) , 55 Byte
Probieren Sie es online!
quelle
IntStream.range(a,b+1).map(Integer::bitCount).sum()
a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()
für ganze 74 Bytes. Auch wenn der Import nicht obligatorisch war, sind die Parameter, also müssten wir schreibena->b->IntStream.range(a,b+1).map(Integer::bitCount).sum()
, was wie 57 Bytes zählta->b->IntStream.range(a,b+1).map(Long::bitCount).sum()
für eine 1-Byte-Verbesserung haben. Marginal, aber immer noch einer.a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()
(71 Bytes).05AB1E , 4 Bytes
Probieren Sie es online!
quelle
Python 2 , 45 Bytes
Probieren Sie es online!
quelle
MATL ,
54 BytesProbieren Sie es online!
Danke an Luis Mendo für das Speichern eines Bytes!
quelle
R ,
4134 BytesProbieren Sie es online!
Stark inspiriert von der anderen R-Lösung von ngm . Dies erfolgt nach der Konvertierung in Bits auf andere Weise. Vielen Dank an Giuseppe für den Hinweis auf eine mögliche 34-Byte-Lösung.
quelle
sum
mable-Vektor - ich werde posten, wenn du / ngm ihn nicht finden kannst.sd
undvar
zwingen, was sie können, um zu verdoppeln.pryr::f
4 Bytes speichern: tio.run/##K/qfZvu/…Gelee , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Pyth ,
87 Bytes1 Byte danke an Herrn Xcoder.
Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 16 Byte
Probieren Sie es online!
-1 danke an H.PWiz .
Linkes Argument = min
rechtes Argument = max
quelle
Python 3 ,
565452 BytesDamit kann imo mehr Golf gespielt werden.-2 Bytes dank Mr.Xcoder -2 Weitere Bytes dank MI WrightProbieren Sie es online!
quelle
Stax , 6 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Bash + gemeinsame Dienstprogramme, 50
Probieren Sie es online!
Das Konvertieren von Ganzzahlen in binäre Zeichenfolgen bereitet im Bash immer einige Schmerzen. Die Vorgehensweise hier ist etwas anders - konvertieren Sie die Ganzzahlen in Oktal und ersetzen Sie dann jede Oktalziffer durch die Anzahl der darin enthaltenen binären Einsen. Dann können wir einfach alle umgerechneten Ziffern summieren
quelle
APL + WIN,
3326 BytesEingabeaufforderungen für den Vektor von ganzen Zahlen:
Probieren Sie es online! Mit freundlicher Genehmigung von Dalog Classic
Erläuterung:
quelle
R ,
44 4037 BytesProbieren Sie es online!
Vorher:
quelle
Oktave mit Kommunikationswerkzeugkasten, 21 Bytes
Probieren Sie es online!
Der Code sollte ziemlich offensichtlich sein. Anzahl der Nicht-Null-Elemente in der Binärdarstellung jeder der Zahlen im Bereich.
Dies wäre
@(a,b)nnz(dec2bin(a:b)-48)
ohne die Kommunikations-Toolbox.quelle
Schale , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ruby , 38 Bytes
Probieren Sie es online!
quelle
PHP, 97 Bytes
(Sicher, das kann gekürzt werden, wollte aber die Funktionen nutzen)
Probieren Sie es online aus
Code
Erläuterung
quelle
$argv[0]
ist der Programmname oder "-"; Sie sollten mit$argv[1]
und arbeiten$argv[2]
. Und Sie könnenjoin
stattdessen verwendenimplode
, um dies auf 68 Bytes zu verkürzen:<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
PowerShell , 72 Byte
Probieren Sie es online!
Lange wegen der Umstellung auf Binär
[convert]::ToString($_,2)
und Loswerden der Nullen-replace0
. Ansonsten nehmen wir einfach die eingegebenen Zahlen, bilden einen Bereich$x..$y
und wandeln ihn für jede Zahl im Bereich in Binär um, entfernen die Nullen, nehmen.length
die Anzahl der verbleibenden Einsen und addieren sie zu unserem$o
Ergebnis.quelle
count
stattdessen zu verwendenlength
:)count
wird immer sein,1
weil wir dielength
Zeichenfolge und nicht das Array zählen.-replace0
ist schlau.Haskell , 42 Bytes
Probieren Sie es online!
quelle
Pip , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Proton ,
4037 BytesProbieren Sie es online!
quelle
Kohle , 10 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Brachylog , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
Bash + Coreutils,
3832 BytesDanke an @Cowsquack für das Golfen mit 6 Bytes!
Probieren Sie es online!
quelle
seq -f2o%fp $*|dc|tr -cd 1|wc -c
K (NGN / k) ,
1913 BytesProbieren Sie es online!
{
}
ist eine Funktion mit Argumentenx
undy
!1+y
ist die Liste 0 1 ... yx_
Lässt die ersten x Elemente fallen2\
codiert jedes int als eine Liste von Binärziffern gleicher Länge (dies ist spezifisch für ngn / k)+/
Summe+//
Summe bis zur Konvergenz; in diesem Fall Summe der Summe aller Binärziffernlistenquelle
Perl 6 ,
32-30Bytes-1 Bytes dank Brad Gillbert
Probieren Sie es online!
Erläuterung:
quelle
[...](@_)
anstelle von($^a..$^b)
J ,
16, 15,14 BytesDank FrownyFrog 1 Byte gespart!
Probieren Sie es online!
Erläuterung:
Bei einem dyadischen Verb ist das linke Argument die untere Grenze
m
des Bereichs, das rechte die oberen
.quelle
}.
aber immer in einer Gabel und nicht in einem Haken. Vielen Dank!QBasic,
95938382 Bytes@ DLosc hat mir ein
paarBytes gespart !Mit dieser Technik ein weiteres Byte gespeichert !
Sprache des Monats FTW!
Erläuterung
Letzter Testfall von 1000 bis 2000 funktioniert tatsächlich in QBasic 4.5 unter Dosbox:
quelle