Polizistenthread
In diesem Thread besteht Ihre Aufgabe darin, ein rekursionsbasiertes Programm / eine rekursionsbasierte Funktion zum Generieren beliebiger ganzzahliger Reihen zu erstellen. Räuber werden versuchen, eine kürzere nicht-rekursive Lösung im Räuber-Thread zu finden .
Inhaltsangabe der Challenge
In vielen Sprachen können rekursive Funktionen eine Programmieraufgabe erheblich vereinfachen. Der Syntax-Overhead für eine ordnungsgemäße Rekursion kann jedoch die Verwendbarkeit in Code-Golf einschränken.
Die Cops erstellen ein Programm oder eine Funktion, die eine einzelne Ganzzahl verwendet n
und die ersten n
Einträge einer Ganzzahlserie generiert , wobei nur die Rekursion 1 verwendet wird . Sie sollten auch sicherstellen, dass es eine kürzere nicht-rekursive Möglichkeit gibt, die Sequenz zu generieren, um ihren Eintrag als sicher zu kennzeichnen.
Die Räuber werden versuchen, ein kürzeres Programm oder eine kürzere Funktion in derselben Sprache zu finden und dabei dieselbe Ganzzahlserie ohne Rekursion 2 zu erzeugen .
Wenn die Vorlage der Polizei nicht innerhalb von zehn Tagen (240 Stunden) geknackt wird, wird der Polizist nachweisen, dass es tatsächlich möglich war, einen kürzeren nicht-rekursiven Ansatz zu verfolgen, indem er seine eigene Lösung enthüllt. Sie können dann ihre Einreichung als sicher markieren .
Der Gewinner der Cops Challenge ist die kürzeste (laut Code-Golf ) rekursionsbasierte Einsendung, die als sicher eingestuft wird.
Der Gewinner der Räuberherausforderung wird der Räuber sein, der die meisten Lösungen geknackt hat.
1: Es muss nur in der Syntax rekursiv sein; Sie müssen sich zum Beispiel keine Gedanken über die Optimierung von Tail Calls machen.
2: Wieder nicht rekursiv in der Syntax; Sie können also dank der Tail-Call-Optimierung keine rekursive Lösung veröffentlichen und behaupten, dass sie zu einer Schleife kompiliert wurde.
Anforderungen für die Vorlage
Für jede Übermittlung wird eine einzelne Ganzzahl n
(null- oder einsbasiert) verwendet. Die Übermittlung wird dann die ersten n
Einträge einer ganzzahligen Reihe der Wahl ausgeben oder zurückgeben . (Beachten Sie, dass diese Ganzzahlserie nicht davon abhängen darf n
). Die Eingabe- und Ausgabemethode kann sich zwischen dem rekursiven und dem nicht rekursiven Ansatz unterscheiden. Die ganzzahlige Reihe kann jede deterministische Reihe mit einer Länge von mindestens 5 sein. Die Reihe sollte richtig erklärt werden.
Ihre Einreichung muss nicht für beliebig große n
funktionieren, sollte aber zumindest funktionieren n=5
. Der nicht-rekursive Ansatz muss in der Lage sein, mindestens den gleichen Wert n
wie der rekursive Ansatz oder den n=2^15-1
kleineren zu erreichen.
Rekursion
Um dieser Herausforderung willen wird Rekursion so definiert, dass die gewünschte Sequenz mit einer Funktion (oder einem funktionsähnlichen Konstrukt) erstellt wird, die sich selbst aufruft (oder eine Folge von Funktionen aufruft, die sich letztendlich selbst aufruft; dazu gehören Konstrukte wie der Y-Kombinator). Die Rekursionstiefe sollte unendlich sein, ebenso n
wie unendlich. Der nicht rekursive Ansatz ist alles, was nicht rekursiv ist.
quelle
for
wird rekursiv hinter, istfor
rekursiv oder Schleife getan ?n
wenn er theoretisch korrekt ist, aber aus Zeit- oder Speichergründen nicht ausgeführt werden kann?n=5
muss berechnet werdenxfor
sei denn, dies ist durch einen Import möglich?). Daher kann diese Sprache möglicherweise nicht mithalten.Antworten:
Python 3 , 65 Bytes (sicher)
Probieren Sie es online!
Ein weiterer Versuch in Python.
Die Folge ist "die Anzahl der Möglichkeiten, eine 2-mal-n-Tafel mit Dominosteinen in drei Farben zu füllen, so dass sich keine zwei gleichfarbigen Dominosteine berühren". Nicht bei OEIS.
Sagen wir mal
n=6
. Das Board sieht aus wie:und dies sind gültige Dominokacheln in drei Farben (
1-3
stellen jeweils eine Farbe dar):aber das sind nicht (zwei gleichfarbige Dominosteine berühren sich):
Die Sequenz zählt alle möglichen Dominokacheln, die den jeweiligen Regeln entsprechen
n
.Geplante Lösung, 58 Bytes
Probieren Sie es online!
Leider hat sich anscheinend niemand die Mühe gemacht, die Wiederholungsbeziehung zu vereinfachen, was im rekursiven Code deutlich gezeigt wurde. Das Erstellen eines Programms mit der angegebenen doppelten Wiederholung funktioniert nicht, da es sich um Python 3 handelt.
quelle
Oktave , 47 Bytes, geknackt von l4m2
Probieren Sie es online!
Hier ist als Beispiel ein Octave-Eintrag, der die ersten
n
positiven Ganzzahlen generiert : https://oeis.org/A000027 .quelle
l4m2
dich geschlagen.Python 3 , 75 Bytes, geknackt von xnor
Probieren Sie es online!
Die berühmten Hamming-Zahlen, auch bekannt als 5-glatte Zahlen ( A051037 ).
Gebrochene Lösung, 51 Bytes
Probieren Sie es online!
Geplante Lösung, 74 Bytes
Probieren Sie es online!
quelle
Forth (gforth) , 39 Bytes, geknackt von NieDzejkob
Probieren Sie es online!
quelle
[1,2,...,n]
darfst andere Integer-Reihen als , weißt du das richtig?Röda , 40 Bytes
Probieren Sie es online!
Diese Funktion liefert die folgende endliche Folge (die 90 ersten Fibonacci-Zahlen):
Ich weiß, dass es mehr Fibonacci-Zahlen erzeugen kann, aber für diese Herausforderung reicht es aus, diese Zahlen zu produzieren.
quelle
JavaScript (Node.js) , 91 Byte, Gebrochen von l4m2
Probieren Sie es online!
Gibt die ersten n Terme der OEIS-Sequenz aus A022559 aus (beginnend mit i = 1).
l4m2 hat 3 for loops in
7472 bytes gepasst und meinen cop post geknackt:Meine beabsichtigte Antwort enthält jedoch nur 2 for-Schleifen:
Probieren Sie es online!
quelle
x86 .COM Funktion, 12 Bytes, Cracked von NieDzejkob
Eingang DX, Ausgang [DI] ~ [DI + 2 * DX-1]
Crackers Lösung:
Beabsichtigte Lösung:
quelle
Python 3 , 62 Bytes, Cracked von mwchase
Probieren Sie es online!
Ich fühle mich wie dieses wird zu einfach sein ...
Die Sequenz ist die Fibonacci-Sequenz
f(n) = f(n-1) + f(n-2)
mitf(0) = f(1) = 1
quelle
Gol> <> , 15 Bytes, geknackt von mbomb007
Probieren Sie es online!
Die Serie ist
0,1,2,3,4,5
aber auf jedes Element folgen so viele Nullen.Die ersten Werte sind beispielsweise:
quelle
JavaScript, 63 Bytes, Gebrochen
Probieren Sie es online!
Gibt die ersten n Elemente in einem umgekehrten Array zurück
quelle
Windows .BAT, 80 Bytes
Verwendung:
Die Schleifenversion kann im aktuellen Wörterbuch annehmen, muss aber initialisiert oder zurückgesetzt werden
quelle
Python, 82 Bytes; geknackt
Dies ist eine rekursive Python-Implementierung der OEIS-Sequenz A004001 in 82 Bytes. Weitere Hintergrundinformationen zu dieser Serie finden Sie in Wolframs Mathworld .
Die ersten 30 Zahlen in dieser Reihenfolge sind:
quelle