Inspiriert vom vierten Problem von BMO2 2009 .
Geben Sie bei einer positiven Ganzzahl n als Eingabe oder einem Parameter die Anzahl der positiven Ganzzahlen zurück, deren binäre Darstellungen als Blöcke in der binären Erweiterung von n auftreten .
Beispiel: 13 -> 6, da 13 in der Binärdatei 1101 ist und Teilzeichenfolgen enthält 1101, 110, 101, 11, 10, 1
. Wir zählen keine Binärzahlen, die mit Null beginnen, und wir zählen selbst keine Null.
Testfälle
13 -> 6
2008 -> 39
63 -> 6
65 -> 7
850 -> 24
459 -> 23
716 -> 22
425 -> 20
327 -> 16
Sie können n wie folgt aufnehmen:
- eine ganze Zahl
- eine Liste von Wahrheits- / Falschwerten für die Binärdarstellung
- ein String für die Binärdarstellung
- eine Base-10-Saite (obwohl ich nicht sicher bin, warum das jemand tun würde)
Machen Sie Ihren Code so kurz wie möglich.
Antworten:
Python 3,
5450 BytesVielen Dank an Rod und Jonathan Allan für das Speichern von vier Bytes.
quelle
+1
aus dem Bereich zu bewegenbin(i)
n
selbst und sind immer ausschließen0
unserer Zählung können wir stattdessen immer ausschließenn
und immer zählen0
(bin (n) beginnt'0b...'
), daher können wir das entfernen1,
und+1
ganz und verlassenbin(i)
als vier Bytes speichern Online ausprobieren!Gelee , 4 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als Liste von
0
s und1
s.Probieren Sie es online mit Zahlen!
Erläuterung:
Beweis, dass es funktioniert:
Dieses Programm wird eine Eingangsnummer, N . Das erste, was dieses Produkt tut, ist natürlich, die Teilzeichenfolgen von N 2 ( N in Basis 2 ) zu nehmen. Dies schließt doppelte Teilzeichenfolgen ein, die mit 0 oder 1 beginnen .
Danach nehmen wir einfach die eindeutigen Teilzeichenfolgen, indem wir nur das erste Vorkommen jedes Werts in der Teilzeichenfolgenliste beibehalten.
Dann summiert dieses Programm die ersten Elemente der Listen zusammen, dann die zweiten Elemente, dann die dritten, vierten usw., und wenn eine der Listen kein solches Element aufweist,
0
wird angenommen. Die eigentliche Herausforderung lautet: Wie viele eindeutige Teilzeichenfolgen, die mit 1 beginnen, hat diese Zahl in ihrer binären Form? . Da jedes erste Element, das gezählt werden soll1
, einfach summiert werden kann, anstatt nach geeigneten Teilzeichenfolgen zu filtern.Nun enthält das erste Element der resultierenden Liste der oben beschriebenen Summierung die Anzahl der ersten Bits der Teilzeichenfolgen, sodass wir sie einfach einfügen und schließlich zurückgeben.
quelle
Oktave ,
6261 BytesProbieren Sie es online!
Erläuterung
Bei der Eingabe
n
prüft der Code alle Zahlen von1
bis,n
um festzustellen, ob ihre Binärdarstellung eine Teilzeichenfolge der Binärdarstellung der Eingabe ist.quelle
05AB1E , 5 Bytes
Übernimmt die Eingabe als binäre Zeichenfolge.
Der Header konvertiert Ganzzahleingaben in Binärwerte, um das Testen zu vereinfachen.
Probieren Sie es online!
Erläuterung
quelle
bŒʒć}Ùg
aber nein, das ist besser.Perl 5 , 36 + 1 (
-p
) = 37 BytesProbieren Sie es online!
Übernimmt die Eingabe als binäre Zeichenfolge.
quelle
PowerShell ,
1039282 ByteProbieren Sie es online!
Nimmt Eingaben als Array von
1
und0
(wahr und falsch in PowerShell). Durchläuft$s
(dh wie viele Elemente im Eingabearray). Innerhalb der Schleife durchlaufen wir die Schleife von der aktuellen Nummer (gespeichert unter$i
) bis$s.count
. In jeder inneren Schleife-join
schneiden wir das Array in eine Zeichenfolge. Wir dannsort
mit der-u
Nique-Flagge (die kürzer ist alsselect
mit der-u
Nique-Flagge und es ist uns egal, ob sie sortiert sind oder nicht), nehmen diejenigen, die nicht anfangen0
, und nehmen den Overall.count
. Das bleibt in der Pipeline und die Ausgabe ist implizit.quelle
JavaScript (ES6), 55 Byte
Übernimmt die Eingabe als binäre Zeichenfolge.
Hier ist ein trauriger Versuch, dies mit Zahlen und rekursiven Funktionen zu tun:
Alter Ansatz, 74 Bytes
Nimmt auch Eingaben als Binärstring an.
quelle
Python 2 ,
11881 BytesVielen Dank an @Rod für das Speichern von 37 Bytes!
Übernimmt die Eingabe als binäre Zeichenfolge.
Probieren Sie es online!
Python 2 , 81 Bytes
Vielen Dank an @Rod!
Übernimmt die Eingabe als binäre Zeichenfolge.
Probieren Sie es online!
quelle
set(...)
mit{...}
undxrange
mitrange
+1
aus dem Bereich der Scheibe, und schalten Sie die wie dieses.startswith
int(s,2)
Gelee , 5 Bytes
Probieren Sie es online!
Nimmt die Eingabe als Liste von Einsen und Nullen. Die Fußzeile im Link wendet die Funktion auf jedes der Beispiele im Beitrag an.
Jonathan Allan wies darauf hin, dass
ẆḄQTL
es sich um eine 5-Byte-Alternative handelt, die dasT
Atom verwendet , das die Indizes aller wahrheitsgemäßen Elemente findet.Erläuterung
Nehmen Sie als Beispiel bin (13) = 1101. Eingabe ist
[1,1,0,1]
Hat die Idee "wahrheitsgemäß" (in diesem Fall unterschreiben) aus der 05AB1E-Antwort übernommen
quelle
T
, mitẆḄQTL
R ,
8877 BytesProbieren Sie es online!
Übernimmt die Eingabe als binäre Zeichenfolge.
using
mapply
generiert ein Array aller Teilzeichenfolgen der Eingabe.strtoi
konvertiert sie als Basis-2
Ganzzahlen und ich nehme die Summe der logischen Konvertierung (!!
) der Einträge im Ergebnis.quelle
Retina ,
3729 BytesProbieren Sie es online! Ich musste nur den
w
Modifikator von Retina 1.0 ausprobieren . Bearbeiten: 8 Bytes dank @MartinEnder gespeichert. Erläuterung:Konvertiert von dezimal zu unär.
Konvertieren Sie von unär nach binär mit
#
for0
und_
for 1.Erzeugen Sie Teilstrings, die mit
1
, ich meine, beginnen_
. Derw
Modifikator stimmt dann mit allen Teilzeichenfolgen überein, nicht nur mit der längsten bei jedem Start_
, während derp
Modifikator die Übereinstimmungen dedupliziert. Da dies die letzte Stufe ist, wird die Anzahl der Übereinstimmungen implizit zurückgegeben.quelle
q
(oderp
) verwendenw
. Sie müssen auch nichtC
explizit angeben , da dies der Standardphasentyp ist, wenn nur noch eine einzige Quelle vorhanden ist.M
, der Standard- Bühnentyp zu sein!C
irgendwie war es das, wasM
früher war. :)Pyth , 8 Bytes
Probieren Sie es hier aus!
Übernimmt die Eingabe als binäre Zeichenfolge.
.:
generiert alle Teilstrings,vM
wertet jeden aus ( dh konvertiert jeden aus dem Binären),{
dedupliziert,<space>#
filtert nach Identität undl
erhält die Länge.quelle
Wolfram Language (Mathematica) , 35 Byte
Das Zählen eindeutiger Teilsequenzen der Binärdarstellung, die mit einer beginnen, obwohl ich nicht sicher bin, ob dieser Code überhaupt eine Erklärung benötigt.
Probieren Sie es online!
quelle
___
das?Perl 6 , 47 Bytes
Probieren Sie es online!
quelle
Julia 0,6 , 37 Bytes
Probieren Sie es online!
Juliafizierung der Python-Antwort durch J843136028 unter Verwendung
.
einer elementweisen Funktionsanwendung mit Rundfunk. ( link )quelle
Java, 232 Bytes
Dabei ist n die Eingabe, b die Binärdarstellung und l eine Liste aller Teilzeichenfolgen. Zum ersten Mal hier posten, müssen auf jeden Fall verbessert werden, und zögern Sie nicht, auf Fehler hinzuweisen! Zur besseren Lesbarkeit leicht bearbeitet.
quelle
String b=...,t
undint i=...,j,k
Zeichen für wiederholte Deklarationen desselben Typs zu speichern. Ihr Code würde sich auch nicht als Eintrag qualifizieren, da es sich um ein Snippet handelt, weder um ein vollständiges Programm noch um ein funktionales Fragment. Sie müssen entweder eine Funktion schreiben oder Ihren Code in die Lambda-FormAttache , 35 Bytes
Probieren Sie es online!
Äquivalent:
Erläuterung
Ich werde die zweite Version erklären, da es einfacher ist zu folgen (explizit zu sein):
quelle
Ruby
41 3627 BytesÜbernimmt einen binären String als Eingabe
Ist ultra-ineffizient
Teilweise inspiriert von dieser Python 3-Antwort
Probieren Sie es online!
quelle
Java 8,
160159158 BytesEingabe als Binärstring.
Es muss einen kürzeren Weg geben ..>.>
Erläuterung:
Probieren Sie es online aus.
quelle
C ++, 110 Bytes
Dies ist eine rekursive Funktion. Wir verwenden a,
std::set
um Werte zu zählen, wobei Duplikate ignoriert werden. Die beiden rekursiven Aufrufe maskieren Bits links (f(n&i)
) und rechts (f(n/2)
) und erzeugen schließlich alle Teilzeichenfolgen als Ganzzahlen.Beachten Sie, dass, wenn Sie es erneut anrufen möchten,
s
zwischen den Anrufen gelöscht werden muss.Testprogramm
Ergebnisse
quelle
J , 34 Bytes
Probieren Sie es online!
quelle
J , 15 Bytes
Die Eingabe ist eine Binärliste. Probieren Sie es online!
quelle
Perl 6 , 34 Bytes
Probier es aus
Erweitert:
quelle