La séquence de Kuznetsov
(I made the name up, don't bother with Wikipedia or Google)
Étant donné n'importe quel nombre n > 0
, r
représentons l'inverse du nombre n
. Itérer jusqu'à ce que le résultat final soit nul, en passant le résultat de chaque itération dans la fonction en utilisant la récursivité ou une méthodologie de votre choix en effectuant l'opération ci-dessous:
- Si
r > n
pour cette itération le résultat estr % n
. - Si
n > r
pour cette itération le résultat estn % r
. - Si
n % r = 0
our % n = 0
, vous mettez fin à l'itération.
Prenez le résultat intermédiaire de chaque exécution et stockez-les dans un tableau pour la réponse finale. Le nombre initial n
ne fait pas partie de la séquence, pas plus 0
; les exemples devraient rendre tout un peu plus évident.
Permet de parcourir un exemple où n=32452345
.
54325423 % 32452345 = 21873078 # r > n, uses r % n
87037812 % 21873078 = 21418578 # r > n, uses r % n
87581412 % 21418578 = 1907100 # r > n, uses r % n
1907100 % 17091 = 9999 # n > r, uses n % r
9999 % 9999 = 0 # r % n = n % r = 0, terminated
Result: [21873078, 21418578, 1907100, 9999]
Un autre exemple n=12345678
:
87654321 % 12345678 = 1234575 # r > n, uses r % n
5754321 % 1234575 = 816021 # r > n, uses r % n
816021 % 120618 = 92313 # n > r, uses n % r
92313 % 31329 = 29655 # n > r, uses n % r
55692 % 29655 = 26037 # r > n, uses r % n
73062 % 26037 = 20988 # r > n, uses r % n
88902 % 20988 = 4950 # r > n, uses r % n
4950 % 594 = 198 # n > r, uses n % r
891 % 198 = 99 # r > n, uses r % n
99 % 99 = 0 # r % n = n % r = 0, terminated
Result: [1234575, 816021, 92313, 29655, 26037, 20988, 4950, 198, 99]
Un dernier exemple n=11000
:
11000 % 11 = 0 # n % r = 0, terminated
Result: []
Il s'agit du nombre de victoires par nombre d'octets le plus bas du code-golf .
Réponses:
05AB1E , 11 octets
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
PowerShell v2 +, 89 octets
Solution itérative. Longue car il n'y a pas de moyen facile d'inverser un tableau, nous le stringifions et l'indexons à l'envers pour le stocker
$r
. Ensuite, un pseudo-ternaire pour retirer le modulo approprié et le ré-stocker$n
pour le prochain tour. Cependant, si le résultat est nul, cela signifie que le!($n...)
sera$true
, donc nousexit
au lieu de$n
. Les nombres sont laissés sur le pipeline et (implicitement) retournés sous forme de tableau, mais sans pipeline d'encapsulation ni enregistrement des résultats dans une variable, la valeur par défautWrite-Output
colle une nouvelle ligne entre.Essayez-le en ligne! (Oui, très sérieux.)
PowerShell est maintenant sur TIO! Vous devez lui donner une seconde ou deux, car PowerShell est une bête au démarrage, mais maintenant vous, oui vous , pouvez vérifier le code PowerShell directement dans votre navigateur!
la source
Perl,
4338 + 1 = 39 octetsCourir avec le
-n
drapeauEssayez-le en ligne! Comprend les deux exemples non vides.
Tableau explicatif
-n
: Encapsule l'intégralité du programmewhile(<>){ ... ;}
. Cela transforme le code ci - dessus dans la ligne suivante:while(<>){say while$_=($;=reverse)>$_?$;%$_:$_%$;}
. Notez qu'un point-virgule a été ajouté à la fin$
, il devient donc une instance de la variable$;
. Dans l'état d'unewhile
boucle,<>
lit automatiquement une ligne d'entrée et l'enregistre dans la$_
variable. Voyons maintenant ce que l'interprète lit à l'intérieur de lawhile
boucle externe :Code original, enregistré pour la postérité: 43 + 1 = 44 octets
la source
$%>$_?$%%$_:$_%$%
Avez-vous choisi la$%
variable exprès juste pour cette ligne?Pyth,
1312 octetsMerci à @TheBikingViking.
Essayez-le en ligne: Démonstration
Mon ancien code:
Essayez-le en ligne: Démonstration
Explication:
la source
t.u|%F_S,s_<backtick>
. TestGelée ,
15 1413 octetsTryItOnline
Comment?
la source
Gelée ,
1312 octetsIl s'agit d'un lien / fonction monadique qui s'imprime sur STDOUT.
Essayez-le en ligne!
Comment ça fonctionne
la source
Python 2,
9287817361 octetsSolution récursive:
Essayez-le en ligne
Solution itérative: (également 61 octets )
Essayez-le en ligne
la source
while n:
. Sinon, vous pouvez le faire avec 61 octets .MATL , 16 octets
Essayez-le en ligne!
Explication
la source
PHP, 78 octets
la source
Lot, 140 octets
Prend l'entrée sur STDIN et sort la séquence sur des lignes séparées. Batch a des instructions conditionnelles (qui sont quelque peu verbeuses) mais pas d'expressions conditionnelles, il est donc plus facile (malgré la citation du
%
s) de calculerr%n%r
(qui est égal àr%n
ifn<r
ou zéro ifn>r
) etn%r%n
(qui est égal àn%r
ifn>r
ou zero ifn<r
) et d'ajouter eux autres ensemble.la source
Mathematica, 68 octets
Merci à Greg Martin d' avoir suggéré d'utiliser
FixedPointList
plutôt queNestWhileList
:Le plus court avec lequel j'ai pu obtenir ma solution d'origine
FixedPointList
était de 73 octets:la source
11000
). Vous pouvez contourner ce problème en passant à la technique décrite dans votre dernier paragraphe. Mais je ne vois pas comment m'en débarrasserRest
ouMost
de cette façon. D'un autre côté, ilFixedPointList[ Mod[(r = IntegerReverse@#)~Max~#, r~Min~#] &, #][[2 ;; -4]] &
n'est que de 68 octets une fois les espaces supprimés (lance quelques erreurs, nbd).{a,b,c,d}[[2;;-4]]
donneraient une erreur plutôt que la liste vide (j'ai probablement utilisé une virgule plutôt que;;
). J'ai appris quelque chose.Sort
:FixedPointList[-Mod@@Sort@-{#,IntegerReverse@#}&,#][[2;;-4]]&
JavaScript,
7270 octetsÉdité:
-2 octets : l'opérateur d'étalement attend la concaténation de chaînes.
la source
R,
126117 octetsMalheureusement, inverser un nombre (
as.double(paste(rev(el(strsplit(c(x,""),""))),collapse="")))
) est assez verbeux. Le repos est assez facile. Permetsort
de vérifier indirectement ce qui est le plus élevé.Le reste est simple, il continue de boucler jusqu'à
x=0
et imprime toutes les étapes.la source
C, 87 octets
t
est temporaire pour inverser. La boucle intérieure décaler
1 chiffre vers la gauche et ajoute le dernier chiffre det
jusqu'à ce qu'il soit épuisé. La sortie est après la première itération et uniquement si elle est différente de zéro pour empêcher l'affichage du premier et du dernier élément.Non golfé et utilisation:
la source
Mathematica, 64 octets
Le code ci-dessus représente une fonction pure qui prend une seule entrée et retourne la séquence kuznetsovs. La chose vraiment belle à propos de mathématique est que vous pouvez mettre couche sur couche de fonctions pures ... Permettez-moi d'expliquer le code;)
Chaque terme de la séquence elle-même est calculé avec la fonction ci-dessous, qui prend une entrée et renvoie le terme suivant.
Le code
IntegerReverse@#
génère juste r, la valeur inversée. Le code#2~If[#<=#2,Mod,#0]~#&
est une fonction qui prend deux entrées et effectue l'opération de modification, ou inverse les entrées et se rappelle. Une autre façon de l'écrire estIf[#<=#2, Mod, #0][#2, #]&
, ou elle pourrait être écrite comme une fonction régulière comme celle-ci:k[a_, b_] := If[a <= b, Mod, k][b, a]
la source
Raquette 180 octets
Non golfé:
Essai:
Sortie:
la source