Die Folge enthält die dezimale Darstellung der Binärzahlen der Form:, 10101...
wobei der n-te Term n Bits hat.
Die Reihenfolge lässt sich wahrscheinlich am einfachsten erklären, indem nur die Beziehungen zwischen der binären und der dezimalen Darstellung der Zahlen gezeigt werden:
0 -> 0
1 -> 1
10 -> 2
101 -> 5
1010 -> 10
10101 -> 21
101010 -> 42
Herausforderung:
Nehmen Sie eine Ganzzahl n
und geben Sie die ersten n Zahlen in der Folge zurück. Sie können wählen, ob die Sequenz 0-indiziert oder 1-indiziert sein soll.
Testfälle:
n = 1 <- 1-indexed
0
n = 18
0, 1, 2, 5, 10, 21, 42, 85, 170, 341, 682, 1365, 2730, 5461, 10922, 21845, 43690, 87381
Erklärungen sind wie immer erwünscht.
Dies ist OEIS A000975 .
[85,[42,[21,[10,[5,[2,[1,0]]]]]]]
?Antworten:
Python 2 , 36 Bytes
Probieren Sie es online! Erläuterung: Die binäre Darstellung von istso, dass es einfach bleibt, es mit einer geeigneten Potenz von 2 zu multiplizieren und den ganzzahligen Teil zu nehmen.23
0.101010101...
quelle
05AB1E , 4 Bytes
2 Bytes werden mit Neils 2/3 Trick gespeichert
Probieren Sie es online!
Erläuterung
05AB1E , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
Gelee ,
...4 BytesDanke Meilen für -1 Byte!
Probieren Sie es online!
Erläuterung:
Gelee , 4 Bytes
Jonathan Allans Version.
Probieren Sie es online!
Eine Version, die auf Neils 2/3-Trick basiert, liefert 5 Bytes (siehe Versionsverlauf).
quelle
ḶḂḄƤ
Das Präfix quick wurde dafür erstelltḶ€ḂḄ
würde auch funktionieren.MATL , 5 Bytes
Basierend auf Neils Antwort .
Erläuterung
Probieren Sie es online!
MATL , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
453736 Bytes-3 Byte dank user202729
-1 Byte dank mathmandan
Probieren Sie es online!
quelle
s
ist dasselbe wie das Hinzufügens
zu sich selbst. Ich glaube, Sie könnens+=s+~s%2
ein Byte speichern.Python 3,
6861544843 BytesVielen Dank an user202729 für die Unterstützung beim Speichern von 19 Bytes und an ovs für die Unterstützung beim Speichern von 6 Bytes.
Probieren Sie es online
quelle
x == 0
gleichbedeutend mitnot x
ifx
ist, werden durch Vertauschen der Operanden (dhx if c else y
=y if not c else x
) weitere Bytes eingespart.i%2
und1-r%2
stattdessen verwendeni
.Schale , 7 Bytes
Probieren Sie es online!
1-basiert, also liefert Eingabe n die ersten n Ergebnisse.
Erläuterung
quelle
APL (Dyalog Unicode) , 11 Byte SBCS
Nimmt an
⎕IO
( I ndex O rigin) zu sein0
, was auf vielen Systemen Standard ist. Anonyme implizite Präfixfunktion. 1-indiziert.Probieren Sie es online!
⍳
ɩndices 0… n − 1(
…)¨
Wenden auf jede die folgende implizite Funktion an⍴∘1 0
Stellen Sie die Liste zyklisch[1,0]
auf diese Länge um2⊥
konvertiere von Basis 2 (binär) zu normaler Zahlquelle
Perl
v5.10
-n
, 24 + 1 Bytes-3 Bytes danke an Nahuel Fouilleul !
Probieren Sie es online!
Dieselbe Logik wie meine Ruby-Version, aber kürzer, weil Perl übersichtlicher ist. Aus irgendeinem seltsamen Grund
print
würde ich keinen Separator machen (verdammt!), Also musste ichsay
from verwendenv5.10;
, damit dies lief. Ich bin mir nicht sicher, wie ich dies bewerten soll, also lasse ich es fürs Erste aus. ..Erläuterung
quelle
-n
) = 28 Bytes, denn um einen Perl-Einzeiler zu betreiben, sollte-e
man 5.10 verwenden und man muss nur 5.10 verwenden-E
, das ist die gleiche Länge$|--
anstelle von($.^=1)
Haskell , 33 Bytes
Probieren Sie es online!
quelle
APL (Dyalog) , 7 Bytes
Probieren Sie es online!
APL (Dyalog) , 11 Bytes
Probieren Sie es online!
Verwendet
⎕IO←0
.quelle
⎕IO←0
(aber behaupten Sie, es ist 1-indiziert!) Und wechseln Sie0,
zu1+
:(2⊥2|⍳)¨1+⍳
C ,
81 5559 Bytes1 indiziert.
Volles Programm, weniger Golf:
Probieren Sie es online!
EDIT 2: Ich war unter der Annahme, dass Funktionen nicht wiederverwendbar sein müssten, jetzt, wo ich darüber nachdenke, macht es vollkommen Sinn, dass sie wiederverwendbar sein müssten: P
EDIT: Ich hatte die falsche Vorstellung, dass ich das gesamte Programm in die Antwort einbeziehen musste. Es stellte sich heraus, dass ich nur die Funktion brauchte, die das macht. Das ist schön.
Ich bin mir ziemlich sicher, dass ich hier und da ein paar Bytes abschneiden kann. Ich habe schon ein paar Tricks angewendet. Ein großer Teil des Programms dient dazu, das Argument in ein int zu verwandeln. Dies ist mein erster Code Golf. Wenn ich etwas falsch mache, sag mir: P
quelle
i++
und Wechseli&1
zui++&1
. Auch wenn sie globale Variablen sindi
undj
anfänglich auf Null initialisiert werden, müssen sie innerhalb der Funktion initialisiert werden, da Funktionsübermittlungen wiederverwendbar sein müssen .i,j;f(c){for(i=j=0;i<c;)printf("%d ",j+=j+i++%2);}
Probieren Sie es online!Haskell ,
47405349444034 Bytes-4 Bytes dank user202729
-6 Bytes dank Laikoni
Probieren Sie es online!
quelle
otherwise
mit zB1>0
(otherwise == True
)Rubin , 26 Bytes
Probieren Sie es online!
Schlägt alle älteren Rubin-Antworten.
Erläuterung
1/3
in binär sieht0.01010101...
so aus, wenn Sie es mit Zweierpotenzen multiplizieren, erhalten Sie:Aber Ruby setzt die Zahlen auf int division und gibt mir die Reihenfolge, die ich brauche.
quelle
J 9 Bytes
Wie es funktioniert?
i.
- Liste 0..n-12|
- die Listenelemente mod 2\
- Alle Präfixe#.
- zu dezimal[:
- verschließt die Gabel (da ich gerade Anzahl (4) von Verben habe)Probieren Sie es online!
quelle
Retina , 28 Bytes
Probieren Sie es online!
0-basiert, also gibt der Eingang n den ersten n + 1 Ergebnisse.
Erläuterung
Verwendet die Rekursion von OEIS:
Lass uns das Programm durchgehen:
Dies ist eine konstante Phase: Sie verwirft die Eingabe und setzt den Arbeitsstring auf
0
den Anfangswert der Sequenz. Das)
schließt diese Etappe in eine Gruppe. Diese Gruppe selbst führt nichts aus, aber fast jede Phase (einschließlich Gruppenphasen) zeichnet das Ergebnis in einem Protokoll auf, und wir benötigen zwei Kopien des0
Protokolls, damit das Programm funktioniert.Hier gibt es eine Reihe von Konfigurationen:
"$+"+
Wickelt die Bühne in eine Schleife. Das"$+"
wird als Substitution behandelt und$+
bezieht sich auf die Eingabe des Programms, dh n . Dies bedeutet, dass die Schleife ausgeführt wird n- mal ausgeführt wird.Anschließend wird
¶<
jede Iteration in eine Ausgangsstufe eingeschlossen, die die Stufen druckt Eingang mit einem nachgestellten Zeilenvorschub druckt (die erste Iteration druckt die Null, die zweite Iteration druckt das Ergebnis der ersten Iteration usw.).Die Bühne selbst ersetzt den gesamten Arbeitsstring durch die Ersetzung in der letzten Zeile. Dass man verwendet eine implizite schließenden Klammer und implizite Argumente für den Wiederholungsoperator
*
, es ist so tatsächlich die Abkürzung für:Das Zeug in den Klammern kann in drei Teile zerlegt werden:
$&*_
: gibt eine Zeichenfolge von a (n-1)_
s._
: gibt eine Single_
.2*$-1*_
: ergibt eine Zeichenkette von 2 * a (n-1)_
. Das$-1
bezieht sich auf das vorletzte Ergebnis im Ergebnisprotokoll, dh die Schleifeniteration vor dem letzten. Aus diesem Grund mussten wir zunächst Kopien der Null im Protokoll erstellen, da sich dies sonst auf die Eingabe des Programms bei der ersten Iteration beziehen würde.Dann
$.(…)
misst die Länge des resultierenden Strings. Mit anderen Worten, wir haben berechnet,a(n) = a(n-1) + 1 + 2*a(n-2)
indem wir durch unary gegangen sind (obwohl nicht wirklich:$.(…)
ist faul und wertet den Inhalt nicht wirklich aus, wenn es die resultierende Länge direkt durch Arithmetik bestimmen kann, was sogar sehr effizient ist).Das Ergebnis der letzten Schleifeniteration (das n + 1- te Element der Sequenz) wird aufgrund der impliziten Ausgabe von Retina am Ende des Programms gedruckt.
quelle
Brain-Flak , 36 Bytes
Probieren Sie es online!
Erläuterung:
Die nächste Nummer in der Sequenz erhalten Sie mit
n*2+1
odern*2+0
.quelle
Ruby
42 41 43 41 37 35 31 3330 Bytes-2 Bytes dank Unihedron
-3 Bytes dank GB
Probieren Sie es online!
quelle
->x{a=0;x.times{a-=~a+p(a)%2}}
> <> , 22 + 3 (-v Flag) Bytes
Probieren Sie es online!
Erläuterung
Der Stapel wird mit dem Schleifenzähler initialisiert.
quelle
Java 8,
115818052 BytesPort von @Neils Python 2 Antwort .
1-indiziert und direkt ausgegeben, jeder Wert in einer separaten Zeile.
Erläuterung:
Probieren Sie es online aus.
Alte 80-Byte-Antwort:
1-indizierte Eingabe und durch Leerzeichen getrennte
String
AusgabeErläuterung:
Probieren Sie es online aus.
quelle
Perl 6 ,
35 30 27 2520 BytesProbieren Sie es aus (35)
Probieren Sie es aus (30)
Probieren Sie es aus (30)
Probieren Sie es aus (27)
Probieren Sie es aus (25)
Probieren Sie es aus (20)
Erweitert:
quelle
Python 2 , 33 Bytes
Probieren Sie es online!
Python 2 , 34 Bytes
Probieren Sie es online!
Rückgabe in umgekehrter Reihenfolge.
quelle
C
4746 BytesDer Akku
a
beginnt mit Null. Bei jedem Schritt verdoppeln wir es (a+=a
) und addieren eins, wenn das vorhergehende niedrigstwertige Bit Null war (!(a%2)
oder gleichwertig-(~a)%2
).Testprogramm
Ergebnisse
quelle
Japt ,
10976 BytesAlles unabhängig von anderen Lösungen abgeleitet.
1-indiziert.
Versuch es
Erläuterung
Versuch es
7-Byte-Version
Versuch es
9-Byte-Version
Versuch es
quelle
Haskell , 52 Bytes
Probieren Sie es online!
quelle
MATL , 7 Bytes
Probieren Sie es online!
Erläuterung:
Die Ausgabe wäre,
0, 1, 2, 5 ...
wennP
am Ende (flip
) hinzugefügt wurde , was 8 Bytes ergibt.quelle
&+
Rubin
-n
,3230 + 1 BytesDa wir genau 1 Eingabezeile haben,
$.
ist das göttlich praktisch!BEARBEITEN: Ich bin erstaunt, dass ich es geschafft habe, mich zu übertreiben, aber es scheint, als würde "using"
-n
als 1 gelten ( gemäß Regel 2 unter speziellen Standardbedingungen) , da Ruby mitruby -e 'full program'
(also-n
1) ausgeführt werden kann, wobei alle Instanzengets
nur einmal verwendet werden können Ich glaube, dies ist ein Meilenstein für Ruby. Sprechen Sie uns bitte an, wenn Sie mit diesem Gedankengang nicht einverstanden sind, bevor ich ihn in Zukunft wiederholt wieder verwende.Probieren Sie es online!
Erläuterung
quelle
AWK
a=0
, 31 BytesProbieren Sie es online!
Verwendet die Formel, die schamlos aus dieser anderen Ruby-Antwort gestohlen wurde .
Wenngleich dies nicht
a=0
funktionieren würde (awk behandelt "leer" als 0), wird das erste Element von 0 nicht gedruckt und ist stattdessen eineempty
Zeile. Ich würde behaupten, dass eine gültige Ausgabe wahrscheinlich nicht übergeben wird, also gibt esa=0
welche als Kommandozeilenargument eingefügt werden.quelle
C, 52 Bytes
1-indiziert
Probieren Sie es online!
quelle
Brainfuck , 40 Bytes
Probieren Sie es online!
0-indiziert. Eingabe als Zeichencode, Ausgabe als unär mit Null-Bytes, die eine Reihe von Zeichencodes von 1 trennen. Nimmt 8-Bit-Zellen an, es sei denn, Sie möchten über 255 eingeben. Nimmt negative Zellen an, obwohl dies auf Kosten mehrerer Bytes behoben werden könnte.
Bisher 50 Bytes
Probieren Sie es online!
Eingaben als Zeichencode, Ausgaben als Zeichencode. 1-indiziert. Wahrscheinlich könnte ein wenig Golf gespielt werden.
@Unihedron weist darauf hin, dass ich vergessen habe anzugeben, dass dies Zellen mit unendlicher Größe benötigt, andernfalls wird es an der achten Stelle aufgefüllt.
quelle