La séquence de Sylvester, OEIS A000058 , est une séquence entière définie comme suit:
Chaque membre est le produit de tous les membres précédents plus un. Le premier membre de la séquence est 2.
Tâche
Créez le plus petit programme possible qui prend un n et calcule le nième terme de la séquence de Sylvester. L'entrée, la sortie et les failles standard s'appliquent. Étant donné que le résultat augmente très rapidement, vous ne devez pas prendre de terme dont le résultat entraînerait un débordement dans la langue choisie.
Cas de test
Vous pouvez utiliser zéro ou une indexation. (Ici, j'utilise l'indexation zéro)
>>0
2
>>1
3
>>2
7
>>3
43
>>4
1807
n
renvoie lenth
numéro de la séquence est-il accepté?Réponses:
Brain-Flak ,
7668585246 octetsEssayez-le en ligne!
Utilise cette relation à la place:
qui dérive de cette relation modifiée de celle fournie dans la séquence:
a(n+1) = a(n) * (a(n) - 1) + 1
.Explication
Pour une documentation de ce que fait chaque commande, veuillez visiter la page GitHub .
Il y a deux piles dans Brain-Flak, que je nommerai respectivement pile 1 et pile 2.
L'entrée est stockée dans la pile 1.
Pour l'algorithme de génération:
Version alternative à 46 octets
Cela utilise une seule pile.
Essayez-le en ligne!
la source
Gelée , 5 octets
Il utilise l'indexation basée sur 0 et la définition de la spécification de défi.
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
Hexagonie , 27 octets
Déplié:
Essayez-le en ligne!
Explication
Examinons la séquence
b(a) = a(n) - 1
et faisons un petit réarrangement:Cette séquence est très similaire mais nous pouvons reporter l'incrément à la toute fin, ce qui arrive à enregistrer un octet dans ce programme.
Voici donc le code source annoté:
Créé avec HexagonyColorer de Timwi .
Et voici un diagramme de mémoire (le triangle rouge montre la position et l'orientation initiales du pointeur de mémoire):
Créé avec de Timwi EsotericIDE .
Le code commence sur le chemin gris qui enveloppe le coin gauche, donc le bit linéaire initial est le suivant:
Ensuite, le code frappe le
<
qui est une branche et indique le début (et la fin) de la boucle principale. Tant que le bord N a une valeur positive, le chemin vert sera exécuté. Ce chemin fait plusieurs fois le tour de la grille, mais il est en fait entièrement linéaire:Il
.
n'y a pas d'opérations, donc le code réel est:Une fois cette décrémentation réduite
N
à0
, le chemin rouge est exécuté:la source
J,
181412 octetsCette version grâce à randomra. J'essaierai d'écrire une explication détaillée plus tard.
J, 14 octets
Cette version grâce aux miles. Utilisez l'adverbe de puissance
^:
au lieu d'un agenda comme ci-dessous. Plus d'explications à venir.J, 18 octets
0 indexé.
Exemples
Explication
Voici un programme qui ressemble à ceci:
(Généré en utilisant
(9!:7)'┌┬┐├┼┤└┴┘│─'
alors5!:4<'e'
)Décomposition:
En utilisant la branche du haut comme gérondif
G
et le bas comme sélecteurF
, c'est:Celui-ci utilise la fonction constante
2:
lorsque0 = * n
, c'est-à-dire lorsque le signe est nul (doncn
nul). Sinon, nous utilisons cette fourchette:Ce qui est un plus la série au sommet suivante:
Décomposant davantage, il s'agit du produit (
*/
) sur l'auto-référence ($:
) sur la plage (i.
).la source
2(]*:-<:)^:[~]
14 octets en utilisant la formulea(0) = 2
eta(n+1) = a(n)^2 - (a(n) - 1)
. Pour calculer des valeurs plus grandes, le2
au début devra être marqué comme un entier étendu.v`$:@.u
format récursif. J'ai toujours utilisé un^:v
format souvent plus complexe. @miles, je n'ai jamais non plus utilisé cette(]v)
astuce. Il m'a fallu 5 bonnes minutes pour le comprendre.2(]*:-<:)~&0~]
(ou2:0&(]*:-<:)~]
). Et en les combinant 13 octets]0&(]*:-<:)2:
.0&(]*:-<:)2:
. (Désolé, je ne devrais pasPerl 6 , 24 octets
Explication
Usage:
la source
$_
? De quelle sorcellerie s'agit-il?Haskell, 26 octets
Exemple d'utilisation:
f 4
->1807
.la source
Java 7,
4642 octetsUtilise l'indexation 0 avec la formule habituelle. Je troqué
n*n-n
pourn*(n-1)
bien, puisque Java ne comportaient pas d'opérateur de puissance à portée de main, et lesf()
appels obtenions longtemps.la source
f(n)*~-f(n)
devrait marcher.return--n<0
enregistre un octet de plus.Haskell, 25 octets
la source
SILOS , 60 octets
Essayez-le en ligne!
Port de ma réponse en C .
la source
Brain-Flak ,
158154octetsLeaky Nun m'a fait battre ici
Essayez-le en ligne!
Explication
Mettez un deux sous l'entrée a (0)
Alors que l'entrée est supérieure à zéro, soustrayez un de l'entrée et ...
Silencieusement...
Mettez-en un sur l'autre pile pour servir de catalyseur à la multiplication <> (()) <>
Alors que la pile n'est pas vide
Déplacez le haut de la liste et copiez
Multipliez le catalyseur par la copie
Ajoute un
Remettez la séquence dans la pile appropriée
Supprimer tout sauf le dernier élément (c'est-à-dire le dernier numéro créé)
la source
C, 32 octets
Utilise l'indexation basée sur 1. Testez-le sur Ideone .
la source
En fait , 9 octets
Essayez-le en ligne!
Utilise cette relation à la place:
qui dérive de cette relation modifiée de celle fournie dans la séquence:
a(n+1) = a(n) * (a(n) - 1) + 1
.la source
R,
44 4241 octets2 octets d'économie grâce à JDL
Sauvegarde de 1 octet grâce à user5957401
la source
n
est garanti qu'il n'est pas négatif, la condition peut être réduite den>0
justen
.f(n-1)
est de 6 octets. Je pense que vous enregistrez un octet en l'attribuant à quelque chose. ieifelse(n,(a=f(n-1))^2-a+1,2)
Oasis , 4 octets (non concurrent)
Probablement ma dernière langue de la famille du golf! Non compétitif, car la langue est postérieure au défi.
Code:
Solution alternative grâce à Zwei :
Version étendue:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne!
la source
b<*>2
utilisera(n-1)*(a(n-1)+1)-1
b
car il sera automatiquement rempli (plutôt que l'entrée) :).Python,
3836 octets2 octets grâce à Dennis.
Ideone ça!
Utilise plutôt cette relation modifiée par rapport à celle fournie dans la séquence:
a(n+1) = a(n) * (a(n) - 1) + 1
Explication
0**n*2
renvoie2
quandn=0
et0
sinon, car0**0
est défini pour être1
en Python.la source
Cheddar , 26 octets
Essayez-le en ligne!
Assez idiomatique.
Explication
la source
CJam, 10 octets
Utilise l'indexation basée sur 0. Essayez-le en ligne!
la source
05AB1E , 7 octets
A expliqué
Utilise une indexation à base zéro.
Essayez-le en ligne!
la source
Prolog, 49 octets
la source
SILOS 201 octets
N'hésitez pas à l' essayer en ligne!
la source
Gelée , 7 octets
Essayez-le en ligne!
Utilise plutôt cette relation fournie dans la séquence:
a(n+1) = a(n)^2 - a(n) + 1
Explication
la source
C, 46 octets
Ideone ça!
Utilise
p
comme stockage temporaire du produit.Fondamentalement, j'ai défini deux séquences
p(n)
etr(n)
, oùr(n)=p(n-1)+1
etp(n)=p(n-1)*r(n)
.r(n)
est la séquence requise.la source
R,
50 4644 octetsPlutôt que de suivre toute la séquence, nous suivons simplement le produit, qui suit la règle de mise à jour quadratique donnée tant que
n> 1n> 0. (Cette séquence utilise la convention "start atonezero")L'utilisation de la convention de démarrage à zéro permet d'économiser quelques octets car nous pouvons utiliser if (n) plutôt que if (n> 1)
la source
Méduse , 13 octets
Essayez-le en ligne!
Explication
Commençons par le bas:
Ceci est un crochet, qui définit une fonction
f(x) = (x-1)*x
.Cela compose le crochet précédent avec la fonction d'incrémentation de sorte qu'il nous donne une fonction
g(x) = (x-1)*x+1
.Enfin, cela génère une fonction
h
qui est une itération de la fonction précédenteg
, autant de fois que donné par l'entrée entière.Et enfin, nous appliquons cette itération à la valeur initiale
2
. Lep
haut imprime simplement le résultat.Alternative (également 13 octets)
Cela reporte l'incrément jusqu'à la fin.
la source
C,
43,34, 33 octets1 indexé:
Test principal:
la source
Brachylog , 13 octets
Essayez-le en ligne!
Utilise cette relation à la place:
qui dérive de cette relation modifiée de celle fournie dans la séquence:
a(n+1) = a(n) * (a(n) - 1) + 1
.la source
Mathematica, 19 octets
Ou 21 octets:
la source
Array
solution est magique. Dommage, ce##0
n'est pas une chose. ;)Labyrinthe , 18 octets
Crédits à Sp3000 qui a trouvé la même solution indépendamment.
Essayez-le en ligne!
la source
En fait ,
1412 octetsCela a utilisé l'indexation 0. Les suggestions de golf sont les bienvenues. Essayez-le en ligne!
Ungolfing:
la source
GolfScript ,
1210 octets2 octets grâce à Dennis.
Essayez-le en ligne!
Utilisations
a(n) = a(n-1) * (a(n-1)-1) + 1
.la source
(
est l'abréviation de1-
;)
est l'abréviation de1+
.