Rekursive binäre Beschreibung
Kürzlich habe ich meinen ersten Beitrag zu OEIS geleistet, indem ich der Sequenz A049064 eine B-Datei hinzugefügt habe . Die Sequenz beginnt mit 0
und die nächsten Werte werden aus einer "binären Beschreibung" des letzten Elements abgeleitet.
Zum Beispiel wäre der zweite Term 10
, weil es einen 0
im ersten Element gab. Die dritte Amtszeit wäre 1110
, weil es eins 1
und eins gab 0
. Der vierte wäre 11110
. denn es gibt drei ( 11
in binären!) 1
s und eins 0
. Nachfolgend finden Sie eine Aufschlüsselung des fünften Terms, um diesen Prozess zu verdeutlichen:
> 11110
> 1111 0 (split into groups of each number)
> 4*1 1*0 (get count of each number in each group)
> 100*1 1*0 (convert counts to binary)
> 100110 (join each group back together)
Und hier ist ein Beispiel für den Übergang vom 6. zum 7. Semester:
> 1110010110
> 111 00 1 0 11 0
> 3*1 2*0 1*1 1*0 2*1 1*0
> 11*1 10*0 1*1 1*0 10*1 1*0
> 111100111010110
Sie können ein Referenzprogramm φ auschecken, das ich erstellt habe, um die Terme zu berechnen.
Deine Arbeit
Sie müssen ein Programm oder eine Funktion erstellen, die eine Zahl n
über Standardeingabe oder Funktionsargumente aufnimmt und die Sequenz von 1st
Begriff zu (n+1)th
Begriff, durch einen Zeilenumbruch getrennt, ausgibt. Wenn Sie sich die niedrigeren Zahlen ansehen möchten, können Sie sich auf die B-Datei auf der OEIS-Seite beziehen. Ihr Programm / Ihre Funktion sollte dies jedoch unterstützen 0 <= n <= 30
, dh bis zur 31. Amtszeit. Dies ist keine Kleinigkeit, da δA049064(30)
mehr als 140.000 Stellen lang ist . Wenn Sie sehen möchten, wie das 31. Semester aussehen soll, habe ich es auf Pastebin gesetzt .
Beispiel I / O
func(10)
0
10
1110
11110
100110
1110010110
111100111010110
100110011110111010110
1110010110010011011110111010110
1111001110101100111001011010011011110111010110
1001100111101110101100111100111010110111001011010011011110111010110
func(0)
0
func(3)
0
10
1110
11110
Es gibt nur eine Regel: Keine Standardlücken!
Das ist Code-Golf , also gewinnt die niedrigste Bytezahl.
φ - Gist gefunden werden kann hier , und eine ideone Demo ist hier .
δ - Nur für den Fall, dass Sie sich wundern sollten, meine Schätzungen für die Länge des 100. Terms haben ergeben, dass es sich um ungefähr 3,28 x 10 250 Zeichen handelt, was für jedermann eine Menge zu berechnen wäre.
[0]\n[1, 0]\n[1, 1, 1, 0]\n...
Antworten:
CJam,
1817 BytesDanke an @ MartinBüttner für das Golfen von einem Byte!
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Pyth,
1817 BytesProbieren Sie es online aus: Demonstration
Vielen Dank an @isaacg für das Speichern eines Bytes.
Erläuterung:
Dies nutzt die Tatsache, dass 0 und 1 in binär auch 0 und 1 sind.
quelle
V
anstelle von.u
:J]0VQjk~JsjR2srJ8
Python 2,
125116110 Bytes1 Byte dank @ Sp3000 und 5 Byte durch Entfernen eines redundanten
int
Anrufs eingespart .Ältere Version:
Viele, viele Bytes gespart dank @ Vioz-!
Originalfassung:
quelle
Ruby,
807269 BytesAls eine Funktion:
Nennen Sie es zum Beispiel mit:
f[6]
quelle
->m{l=?0;0.upto(m){puts l;l.gsub!(/1+|0+/){$&.size.to_s(2)+$&[0]}}}
upto
und!
- Danke :)Python 2, 102 Bytes
Irgendwie die Kombination von
itertools
länger alsre
undgroupby
zurückkehrgrouper
Objekte mittels daß regex verwendet , ist ein bisschen kürzer ...quelle
Cobra - 128
quelle
Haskell,
136130 Bytesquelle