Votre objectif est d'écrire un programme qui prend une entrée et, une fois enchaîné N
, effectue une "multiplication séquentielle". Qu'est-ce que la multiplication séquentielle, vous demandez-vous? C'est une séquence avec une graine a
définie comme suit:
f(0) = a
f(n+1) = f(n)*(f(n)-1)
Alors, laisse a = 5
. Ainsi, f(0) = 5
, f(1) = f(0)*(f(0)-1) = 5*4 = 20
et f(2) = f(1)*(f(1)-1) = 20*19 = 380
.
Si votre programme l'était ABC
, alors ABC
devrait prendre l'entrée a
et la sortie f(1)
. Le programme ABCABC
doit sortir f(2)
, etc. Votre série de programmes ne doit recevoir une entrée qu'une seule fois et une seule sortie.
Il s'agit d'un code-golf, donc le programme le plus court en octets l'emporte. Les failles standard sont interdites.
la source
if
etelse
.CJam, 5 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
pl, 5 octets
Essayez-le en ligne.
Serait de 4 octets si je n'avais pas été paresseux et non implémenté "assign to _" ...
Explication
la source
05AB1E , 3 octets
Code:
Explication:
Essayez-le en ligne!
la source
GolfScript, 5 octets
Essayez-le en ligne.
De-golfé et commenté:
L'interpréteur GolfScript lit automatiquement l'entrée et la place sur la pile, mais sous forme de chaîne et non sous forme de nombre. Par conséquent, nous devons transformer l'entrée en un nombre avec
~
, et la reformuler ensuite avec`
. À la fin, l'interprète imprimera automatiquement le numéro stringifié sur la pile.(Maintenant, si le défi avait été d'itérer
f(n+1) = f(n)*(-f(n)-1)
, j'aurais pu le faire en 4 octets avec~.~*
. Comprendre comment et pourquoi cela fonctionne est laissé comme un exercice. :)la source
JavaScript REPL,
2520 octetsVa travailler sur l'élimination d'un REPL
la source
Lua,
3518 octetsC'est quelque chose que Lua peut faire assez facilement pour une fois!
Edit: J'ai découvert beaucoup de choses à Lua depuis que je l'ai fait, donc je le mets à jour :)
...
contient l'argument de ligne de commande décompressé, en soulignant qu'il utilisera sa première valeur dans ce cas car il ne sera pas autorisé à dépenser, ce qui entraînera simplement l'impressionn*(n-1)
.la source
Y , 7 octets
Essayez-le ici!
Voici comment cela fonctionne:
j
prend une entrée numérique.z
active l'impression implicite.C
commence un nouveau lien.:
duplique la valeur de la pile et lat
diminue, nous laissant avec[a a-1]
. Ensuite, nous sortons[a*a-a]
de*
.!
saute la commande suivante; sur EOF, ça ne fait rien. Lorsqu'il est enchaîné, il saute la commande d'entrée et le processus recommence.la source
Jolf, 6 octets
Essayez-le ici!
Explication
la source
𝔼𝕊𝕄𝕚𝕟, 5 caractères / 7 octets
Try it here (Firefox only).
Dois-je vraiment expliquer cela? Eh bien, c'est parti ...
Explication
Il évalue essentiellement à
input*=--input;
JS.la source
Perl, 23 octets
Version alternative, 10 octets
Cela nécessite le
-p
commutateur. Je ne sais pas si c'est un jeu équitable dans une question de mise en page source .la source
Haskell,
1411 octetsExemple d'utilisation
Peut-être que ce n'est pas une fonction appropriée. Si vous tatouillez, vous pouvez aller avec
(*)=<<pred$id
(<-il y a un espace à la fin) pour 14 octets.Edit: @Zgarb a réécrit la fonction en utilisant la fonction monad et a enregistré 3 octets. Merci!
la source
(*)=<<pred$
enregistre 3 octets. En outre, il convient de noter que cela ne définit pas réellement une fonction et que la valeur d'entrée doit être placée directement après celle-ci.id
fait une fonction appropriée. J'ai mis une note dans ma réponse.Pure bash (pas d'utilitaires), 40
la source
TI-Basic,
65 octetsFonctionne sur les calculatrices TI-83/84
Ce programme fonctionne en raison du fait qu'une expression sur la dernière ligne d'un programme est imprimée au lieu du
Done
texte normal .la source
:Ans²-Ans
Mathcad, 39 "octets"
Du point de vue de l'utilisateur, Mathcad est en fait un tableau blanc 2D, avec des expressions évaluées de gauche à droite, de haut en bas. Mathcad ne prend pas en charge une entrée "texte" conventionnelle, mais utilise à la place une combinaison de texte et de touches spéciales / barre d'outils / éléments de menu pour insérer une expression, du texte, un tracé ou un composant. Par exemple, tapez ":" pour saisir l'opérateur de définition (affiché à l'écran sous la forme ": ="), "[" pour saisir un index de tableau ou "ctl-]" pour saisir un opérateur de boucle while (y compris les espaces réservés pour le condition de contrôle et une expression corporelle). Ce que vous voyez dans l'image ci-dessus est exactement ce qui apparaît sur l'interface utilisateur et comme "tapé".
À des fins de golf, le nombre "d'octets" est le nombre équivalent d'opérations au clavier requises pour entrer une expression.
Une chose dont je suis encore moins sûr (du point de vue de l'équivalence "octet") est de savoir comment compter pour créer une nouvelle région (par exemple, a: = 5 ou k: = 0..n-1). J'ai assimilé chaque déplacement à une nouvelle région comme étant égal à une nouvelle ligne, et donc 1 octet (en pratique, j'utilise la souris pour cliquer où je veux la région).
J'ai seulement inclus les instructions actives et non les commentaires, et j'ai inclus 2 octets chacun pour les entrées a et n mais pas les valeurs elles-mêmes (5 et 7 dans l'exemple).
la source
Haskell, 72 octets
Ce défi n'est pas convivial pour Haskell. Cependant, ce qui suit fonctionne si l'entrée est en unaire et que le code est exécuté dans GHCI:
Explication:
Unaire est toujours étrange, donc la première application sera convertie en décimal.
x*(x-1)
est toujours pair, donc sinon il retournex*(x-1)
, oùx
est l'entrée. Parce que Haskell est fortement typé et que les symboles `` spéciaux '' ne peuvent pas être appelés comme&1
, je pense que c'est à peu près la seule façon de le faire dans Haskell, à moins que l'on n'utilise des variables globales ou un formulaire d'entrée encore plus étrange.la source
C ++ (gcc) , 173/176 octets
Les deux versions ont une nouvelle ligne cruciale à la fin.
Version macro, 173 octets
Essayez-le en ligne!
Version du modèle, 176 octets
Un peu plus de C ++:
Essayez-le en ligne!
la source
Burlesque - 5 octets
la source