Eine positive ganze Zahl N ist K -sparsam, wenn zwischen zwei aufeinanderfolgenden Einsen in ihrer binären Darstellung mindestens K 0s liegen.
Die Nummer 1010101 ist also 1-dünn, 101101 dagegen nicht.
Ihre Aufgabe ist es, die nächste 1-sparse-Nummer für die angegebene Eingangsnummer zu finden. Wenn der Eingang beispielsweise 12 ( 0b1100
) ist, sollte der Ausgang 16 ( 0b10000
) sein, und wenn der Eingang 18 ( 0b10010
) ist, sollte der Ausgang 20 ( 0b10100
) sein.
Das kleinste Programm oder die kleinste Funktion (in Bytes) gewinnt! Standardlücken sind nicht erlaubt.
code-golf
number
arithmetic
base-conversion
binary
articuno
quelle
quelle
Antworten:
Pyth, 9 Bytes
x & (x*2) != 0
Algorithmus aus @alephalphaMein erster Versuch bei Pyth:
Probieren Sie es hier aus
quelle
CJam,
1411 Bytes3 Bytes gespart dank DigitalTrauma.
Teste es hier.
Erläuterung
Dadurch bleibt die letzte Nummer auf dem Stapel, die am Ende des Programms automatisch gedruckt wird.
quelle
Python 2, 44 Bytes
Dies ist ein vollständiges Python-Programm, das n einliest und die Antwort ausgibt. Ich denke, dass es im Teilwettbewerb zur Lesbarkeit ganz gut läuft.
Die Testergebnisse:
quelle
Pyth,
1211 BytesProbieren Sie es online aus: Pyth Compiler / Executor .
quelle
"11"
in verwandeln`11
.Mathematica,
41-30Bytes11 Bytes gespart dank Martin Büttner.
quelle
Perl, 31
Oder von der Kommandozeile:
quelle
APL, 18 Bytes
Dies ergibt eine monadische Funktion. Probieren Sie es hier aus. Verwendung:
Erläuterung
quelle
J, 20 Zeichen
Ein monadisches Verb. Es wurde behoben, dass die Regeln eingehalten wurden.
Erläuterung
Zuerst ist dies das Verb mit Leerzeichen und dann etwas weniger golfen:
Lesen:
Ich berechne grundsätzlich, ob
1 1
in der Basis-2-Darstellung der Eingang auftritt. In diesem Fall erhöhe ich die Eingabe. Dies wird unter eine Leistungsgrenze gesetzt, was bedeutet, dass es angewendet wird, bis sich das Ergebnis nicht mehr ändert.quelle
{⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
.Javascript,
2519Unter Verwendung der Tatsache, dass für eine 1-sparse Binärzahl
x&2*x == 0
:quelle
JavaScript (ES6), 39
43Kein regulärer Ausdruck, keine Zeichenfolgen, rekursiv:
Iterative Version:
Es ist sehr einfach, indem Sie einfach die rechte Umschalttaste verwenden, um eine Sequenz von 11 zu finden. Wenn ich sie finde, springen Sie zur nächsten Nummer. Die rekursive Version leitet sich direkt von der iterativen ab.
Ungolfed und offensichtlicher. Zum Golfen ist es am schwierigsten, die inneren und äußeren Loops zu verbinden (zu Beginn müssen Sie x bis 3 einleiten).
quelle
%4>2
sieht aus wie eine Zauberei aus der Zahlentheorie. Kannst du das bitte erklären? || einen Link bereitstellen?Python 2, 37 Bytes
Verwendete die Logik
x & 2*x == 0
für 1-sparse-Zahl.Vielen Dank an @Nick und @CarpetPython.
quelle
JavaScript,
756662 BytesDanke an Martin Büttner für das Speichern von 9 Bytes und Pietu1998 für 4 Bytes!
So funktioniert es: Es wird eine
for
Schleife ausgeführt, beginnenda + 1
mit der Zeit, in der die aktuelle Nummer nicht 1-dünn ist. Ist dies der Fall, wird die Schleife unterbrochen und die aktuelle Nummer zurückgegeben. Um zu überprüfen, ob eine Zahl 1-dünn ist, konvertiert sie diese in eine Binärzahl und prüft, ob sie keine enthält11
.Code ohne Golf:
quelle
Julia, 40 Bytes
Dadurch wird eine anonyme Funktion erstellt, die eine einzelne Ganzzahl als Eingabe akzeptiert und die nächsthöhere Ganzzahl mit einer Teilung zurückgibt. Um es zu nennen, geben Sie ihm zB einen Namen
f=n->...
und tun Sief(12)
.Ungolfed + Erklärung:
Beispiele:
Anregungen und / oder Fragen sind wie immer willkommen!
quelle
> <> (Fisch) , 31 + 3 = 34 Bytes
Verwendung:
3 Bytes für das
-v
Flag hinzugefügt .quelle
JavaScript (ECMAScript 6), 40
Durch Rekursion:
JavaScript, 56
Gleiche ohne Pfeilfunktionen.
quelle
Scala, 65 Bytes
(Wenn eine benannte Funktion erforderlich ist, beträgt die Lösung 69 Byte.)
quelle
Python,
3933 BytesVersuchen Sie es hier: http://repl.it/gpu/2
In Lambda-Form (danke an xnor fürs Golfen):
Die Standardfunktionssyntax
erwies sich einmal als kürzer als ein Lambda!quelle
f=lambda x:1+x&x/2and f(x+1)or-~x
. Es stellt sich heraus , dass von Ihnen Verschiebung Bit rechts statt links, können Siex/2
statt ,(x+1)/2
weil der Unterschied immer in Null - Bits von istx+1
. Die Spezifikation fragt jedoch nach einem Programm.Java, 33 Bytes.
Verwendet die Methode in dieser Antwort
TIO
quelle
Rubin, 44
Ziemlich einfach. Ein Lambda mit einer Endlosschleife und einem regulären Ausdruck zum Testen der Binärdarstellung. Ich wünsche das
loop
ergab und Indexnummer.quelle
Matlab (
7774 Bytes)Anmerkungen:
m+1
zu2*m
, wom
der Eingang ist.~any(x)
istrue
ifx
enthält alle Nullen oder ifx
ist leerquelle
C (32 Bytes)
Rekursive Implementierung des gleichen Algorithmus wie so viele andere Antworten.
quelle
Perl, 16 Bytes
Kombiniere die
x&2*x
aus verschiedenen Antworten (ich denke, Nicks erste) mit Nutkisredo
Erträgen:Getestet in Strawberry 5.26.
quelle
Japt, 8 Bytes
Führen Sie es online aus.
quelle
Gelee , 7 Bytes
Ein vollständiges Programm, das eine einzelne, nicht negative Ganzzahl akzeptiert, die eine positive Ganzzahl ausgibt (als monadische Verknüpfung ergibt es eine Liste, die eine einzelne positive Ganzzahl enthält).
Probieren Sie es online!
Wie?
Beginnend mit
v=n+1
und inkrementierend, verdoppeln Siev
, um jedes Bit um eine Stelle nach oben und bitweise UND mit zu verschieben,v
und führen Sie dann das logische NICHT aus, um zu testen, obv
1-spärlich ist, bis eine solche Zahl gefunden wird.quelle
Stax , 5 Bytes
Führen Sie es aus und debuggen Sie es
Es funktioniert mit dieser Prozedur. Die Eingabe beginnt oben auf dem Stapel.
quelle