Fil de flics
Dans ce fil, votre tâche consiste à créer un programme / fonction basé sur la récursivité pour générer une série entière. Les voleurs essaieront de trouver une solution non récursive plus courte dans le fil des voleurs .
Synopsis du défi
Dans de nombreux langages, les fonctions récursives peuvent simplifier considérablement une tâche de programmation. Cependant, la surcharge de syntaxe pour une récursivité appropriée peut limiter son utilisation dans le code-golf.
Les flics créeront un programme ou une fonction prenant un seul entier n
, qui générera les premières n
entrées d'une série entière, en utilisant uniquement la récursivité 1 . Ils doivent également s'assurer qu'il existe un moyen non récursif plus court de générer la séquence afin de marquer leur entrée comme sûre.
Les voleurs essaieront de trouver un programme ou une fonction plus courte dans le même langage, générant la même série d'entiers, sans récurrence 2 .
Si la soumission des flics n'est pas fissurée dans les dix jours (240 heures), le flic prouvera qu'il était en fait possible d'avoir une approche non récursive plus courte en révélant leur propre solution. Ils peuvent ensuite marquer leur soumission comme sûre .
Le gagnant du défi des flics sera la soumission basée sur la récursivité la plus courte (selon le code-golf ) marquée comme sûre.
Le vainqueur du défi des voleurs sera le voleur qui a trouvé le plus de solutions.
1: Il doit seulement être récursif dans sa syntaxe; vous n'avez pas à vous soucier par exemple de l'optimisation des appels de queue.
2: Encore une fois, non récursif dans la syntaxe; vous ne pouvez donc pas publier une solution récursive et revendiquer sa compilation dans une boucle grâce à l'optimisation des appels de queue.
Conditions de soumission
Chaque soumission prendra un seul entier n
(zéro ou basé sur un). La soumission affichera ou renverra alors les premières n
entrées d'une série entière de choix. (notez que cette série entière ne doit pas dépendre n
). La méthode d'entrée et de sortie peut différer entre l'approche récursive et non récursive. La série entière peut être toute série déterministe d'une longueur d'au moins 5. La série doit être expliquée correctement.
Votre soumission ne doit pas nécessairement fonctionner pour une taille arbitraire n
, mais devrait fonctionner au moins n=5
. L'approche non récursive doit pouvoir fonctionner au moins au même niveau n
que l'approche récursive, ou jusqu'à la n=2^15-1
plus petite des deux.
Récursivité
Pour relever ce défi, la récursivité est définie comme la création de la séquence souhaitée à l'aide d'une fonction (ou d'une construction de type fonction) qui s'appelle elle-même (ou appelle une séquence de fonctions qui finit par s'appeler elle-même; cela inclut des constructions comme le combinateur Y). La profondeur de récursivité doit aller à l'infini comme n
à l'infini. L'approche non récursive est tout ce qui n'est pas récursif.
la source
for
se fait par récursif derrière, estfor
récursif ou en boucle?n
s'il est théoriquement correct, mais qu'il ne peut pas être exécuté en raison de contraintes de temps ou de mémoire?n=5
doit être calculéxfor
soit disponible via une sorte d'importation?) Donc peut-être que cette langue ne peut pas rivaliser.Réponses:
Python 3 , 65 octets (sûr)
Essayez-le en ligne!
Un autre essai en Python.
La séquence est "le nombre de façons de remplir un tableau 2 par n avec des dominos en trois couleurs, de sorte qu'il n'y ait pas deux dominos de même couleur qui se touchent". Pas sur OEIS.
Disons
n=6
. Le tableau ressemble à:et ce sont des carrelages domino valides en trois couleurs (
1-3
représentent une couleur chacun):mais ce n'est pas le cas (deux dominos de même couleur se touchent):
La séquence compte tous les pavages de dominos possibles qui satisfont aux règles de chacun
n
.Solution prévue, 58 octets
Essayez-le en ligne!
Malheureusement, personne ne semble avoir pris la peine de simplifier la relation de récurrence, ce qui était clairement indiqué dans le code récursif. Faire un programme avec la double récurrence telle quelle ne fonctionne pas car c'est Python 3.
la source
Octave , 47 octets, fissuré par l4m2
Essayez-le en ligne!
À titre d'exemple, voici une entrée Octave qui génère les premiers
n
entiers positifs, https://oeis.org/A000027 .la source
l4m2
vous a battu.Python 3 , 75 octets, craqué par xnor
Essayez-le en ligne!
Les fameux numéros de Hamming, alias numéros à 5 lisses ( A051037 ).
Solution fissurée, 51 octets
Essayez-le en ligne!
Solution prévue, 74 octets
Essayez-le en ligne!
la source
Forth (gforth) , 39 octets, craqué par NieDzejkob
Essayez-le en ligne!
la source
[1,2,...,n]
vous connaissez, n'est-ce pas?Röda , 40 octets
Essayez-le en ligne!
Cette fonction donne la séquence finie suivante (les 90 premiers nombres de Fibonacci):
Je sais que cela peut générer plus de nombres de Fibonacci, mais aux fins de ce défi, il suffit de produire ces nombres.
la source
JavaScript (Node.js) , 91 octets, fissuré par l4m2
Essayez-le en ligne!
Imprime les n premiers termes de la séquence OEIS A022559 (à partir de i = 1).
l4m2 fit 3 pour les boucles dans
7472 octets et a craqué mon poste de flic:Cependant, ma réponse prévue n'a en fait que 2 pour les boucles:
Essayez-le en ligne!
la source
Fonction x86 .COM, 12 octets, fissurée par NieDzejkob
Entrée DX, sortie [DI] ~ [DI + 2 * DX-1]
Solution de Cracker:
Solution envisagée:
la source
Python 3 , 62 octets, fissuré par mwchase
Essayez-le en ligne!
J'ai l'impression que celui-ci va être trop facile ...
La séquence est la séquence de Fibonacci
f(n) = f(n-1) + f(n-2)
avecf(0) = f(1) = 1
la source
Gol> <> , 15 octets, craqué par mbomb007
Essayez-le en ligne!
La série est
0,1,2,3,4,5
mais chaque élément est suivi par autant de 0.Par exemple, les premières valeurs sont:
la source
JavaScript, 63 octets, fissuré
Essayez-le en ligne!
Renvoie les n premiers éléments d'un tableau inversé
la source
Windows .BAT, 80 octets
Usage:
La version de la boucle peut supposer dans le dictionnaire actuel, mais doit initialiser ou réinitialiser
la source
Python, 82 octets; fissuré
Il s'agit d'une implémentation Python récursive de la séquence OEIS A004001 en 82 octets. Vous trouverez plus d'informations sur cette série sur Mathworld de Wolfram .
Les 30 premiers nombres de cette séquence sont:
la source