Convergence répétée consécutive de la somme des produits numériques

13

Etant donné un entier positif n( Exemple:n=1234444999 )

  • Séparer en séries de chiffres consécutifs:
    • [1, 2, 3, 4444, 999]
  • Prenez le produit numérique de chaque course.
    • [1, 2, 3, 4*4*4*4, 9*9*9] = [1, 2, 3, 256, 729]
  • En résumé ...
    • 991
  • Répétez jusqu'à ce que cela converge vers un seul numéro:
    • 1234444999
    • 991
    • 82
    • dix
    • 1
  • Retourne le dernier numéro.

Cas de test

BASE CASES:
0 = 0
...
9 = 9

OTHER CASES:
1234444999                     = 1
222222222222222                = 8
111222333444555666777888999000 = 9
11122233344455566677788899     = 8
1112223334445                  = 6
14536                          = 1
99                             = 9

Exemple demandé:

334455553666333
9+16+625+3+216+27
896
8+9+6
23
2+3
**5**

Gagnant?

C'est le de , le nombre d'octets le plus bas est le gagnant.

Urne de poulpe magique
la source
Annnnnnnnnnnnnnnnnnnd ... ce n'est PAS le bac à sable. Merde. Eh bien, je ne peux pas faire grand-chose maintenant, désolé tous ._.
Magic Octopus Urn
11
Il serait bon d'avoir des cas de test où les chiffres du même type ne sont pas tous dans un bloc consécutif.
xnor
1
Pouvons-nous prendre la saisie comme une liste de chiffres? Certaines langues ne peuvent pas prendre en charge des entiers aussi élevés que 11122233344455566677788899.
ETHproductions
@ETHproductions, vous pouvez indiquer l'entrée entière maximale autorisée par votre langue et faire valider votre réponse si vous pouvez expliquer la limite.
Magic Octopus Urn
4
Le même chiffre apparaîtra-t-il dans 2 séries différentes, par exemple 33445555666333:?
M. Xcoder

Réponses:

7

05AB1E , 7 6 5 octets

Merci à Emigna d' avoir enregistré un octet!

vSγPO

Utilise l' encodage 05AB1E . Essayez-le en ligne!

Adnan
la source
3
Je viens de remarquer pour la première fois que votre avatar est un mème doge.
Magic Octopus Urn
@MagicOctopusUrn et vous venez de me le faire remarquer aussi ...
Socratic Phoenix
Vous pouvez remplacer gFpar v.
Emigna
@Emigna Oohh bien sûr! Je vous remercie! :)
Adnan
5

Gelée, 9 octets

DŒgP€SµÐL

Essayez-le en ligne

Voici comment ça fonctionne:

D  - input as a list of digits
Œg - group runs of equal elements
P€ - the product of each element
S  - the sum of the list
µ  - syntax stuff to separate the left from the right
ÐL - repeat until we get a result twice, then return that result.
Zacharý
la source
Pourquoi P ne vectorise-t-il pas automatiquement? Cela semble étrange ...
Esolanging Fruit
Non, P vectorise automatiquement, vous n'avez donc pas besoin de .
Esolanging Fruit
Non, P ne vectorise pas: tio.run/##y0rNyan8/9/l6KT0gOBDWw9P8Pn//78RKgAA
Zacharý
Oh, je vois - Œgest incohérent quand il n'y a qu'un seul groupe. Quel est le raisonnement derrière cela?
Esolanging Fruit
Aucun indice!
Zacharý
5

Mathematica, 55 42 octets

#//.i_:>Tr[Times@@@Split@IntegerDigits@i]&

-13 octets de @JungHwan Min . Merci!

au cas où quelqu'un voudrait l'utiliser comme générateur de chiffres aléatoires,
voici le décompte des 100.000 premiers chiffres

{{1, 17320}, {2, 4873}, {3, 10862}, {4, 11358}, {5, 10853}, {6, 9688}, {7, 11464}, {8, 10878}, { 9, 12704}}
ou si vous jouez, ne mettez pas votre argent sur 2!

J42161217
la source
5

Japt , 17 15 13 octets

e".+"_¬ò¦ x_×

Testez-le en ligne! Prend l'entrée sous forme de chaîne.

Toujours pas satisfait de cette réponse ...

Explication

e".+"_  ¬ ò¦  x_  ×
e".+"Z{Zq ò!= xZ{Zr*1}}

e".+"                     Repeatedly replace all matches of /.+/ (the entire string)
     Z{               }   Z with this function:
       Zq                   Split Z into chars.
          ò!=               Partition at inequality; that is, split into runs of equal items.
              xZ{    }      Take the sum of: for each item in Z:
                 Zr*1         the item reduced by multiplication (i.e. the product).
                          This procedure is repeated until the same result is yielded twice.
                          Implicit: output result of last expression
ETHproductions
la source
Vous pouvez également le prendre comme un entier et indiquer l'entrée maximale autorisée, désolé, j'ai changé ma réponse après l'avoir publiée dans ma réponse par défaut pour cette question.
Magic Octopus Urn
@MagicOctopusUrn Oh, hé, merci. Cela économise deux octets, de toute façon ...
ETHproductions
1
De plus, la x_×combinaison avec I'm unsatisfiedm'a fait rire. Merci ;).
Magic Octopus Urn
Je pensais ßque c'était peut-être la voie à suivre ici. J'avais tort! (Au moins à 5 h 5 du matin, je me suis assis dans le bus pour l'aéroport, j'étais!)
Shaggy
"Toujours pas insatisfait" ... alors ... tu es enfin satisfait?
Zacharý
4

Brachylog , 8 octets

Ḋ|ẹḅ×ᵐ+↰

Essayez-le en ligne!

Explication

Ḋ          Input = Output = a digit
 |         Or
  ẹ        Split into a list of digits
   ḅ       Group consecutive equal elements together
    ×ᵐ     Map multiply
      +    Sum
       ↰   Recursive call
Fatalize
la source
Vous ne vous attendriez jamais à ce que Brachylog devance Jelly ici, n'est-ce pas?
Erik the Outgolfer
@EriktheOutgolfer Lorsque Brachylog bat Jelly, ma première hypothèse est que la réponse de Jelly n'est pas optimale
Fatalize
Le mien aussi, sauf que j'ai essayé de le faire aussi dans Jelly. Le fait est, eh bien, 05AB1E bat toujours cela. :)
Erik the Outgolfer
Bien. c'est un octet, et la réponse de Jelly est de moi, ouais, je m'attendrais à ce que Brachylog batte Jelly.
Zacharý
2

PHP , 113 octets

for(;9<$a=&$argn;$a=$s){$s=0;preg_match_all('#(.)\1*#',$argn,$t);foreach($t[0]as$v)$s+=$v[0]**strlen($v);}echo$a;

Essayez-le en ligne!

Jörg Hülsermann
la source
Êtes-vous développeur PHP à temps plein?
Magic Octopus Urn
@MagicOctopusUrn Non J'ai de l'expérience depuis quelques années
Jörg Hülsermann
2

Husk , 8 octets

ωöṁΠgmis

Prend et retourne un entier. Essayez-le en ligne!

Explication

Avoir un intégré pour les chiffres de base 10 serait bien ...

ωöṁΠgmis
ω         Iterate until a fixed point is found
 ö        the composition of the following four functions:
       s   convert to string,
     mi    convert each digit to integer,
    g      group equal adjacent integers,
  ṁΠ       take product of each group and sum the results.
Zgarb
la source
2

JavaScript (ES6), 77 73 67 65 octets

Enregistré 2 octets grâce à @CraigAyre

f=s=>s>9?f(''+eval(s.replace(/(.)\1*/g,s=>'+'+[...s].join`*`))):s

Comment?

L'entrée s est transformée en une expression arithmétique avec:

s.replace(/(.)\1*/g, s => '+' + [...s].join`*`)

Par exemple, 1234444999devient +1+2+3+4*4*4*4+9*9*9.

Nous évaluons cette expression et effectuons un appel récursif avec le résultat jusqu'à ce qu'il soit réduit à un seul chiffre décimal.

Cas de test

Arnauld
la source
Pouvez-vous économiser quelques octets en comparant contre 9?:f=s=>s>9?f(''+eval(s.replace(/(.)\1*/g,s=>'+'+[...s].join`*`))):s
Craig Ayre
@CraigAyre On dirait que mon approche était en effet un peu trop compliquée. Merci!
Arnauld
2

Haskell , 103 70 69 octets

import Data.List
until(<10)$sum.map product.group.map(read.pure).show

Essayez-le en ligne!

Bartavelle
la source
1
Vous pouvez raccourcir cela beaucoup en utilisant until(<10). Le map(read.pure)peut également être déplacé avant show, ce qui enregistre les parenthèses.
Ørjan Johansen
Ouais, c'est beaucoup mieux!
bartavelle
1
Vous pouvez utiliser à la $place des parenthèses externes.
Ørjan Johansen
1

R , 114 104 octets

n=scan(,'');while(nchar(n)>1){n=el(strsplit(n,''));b=table(n);n=as.character(sum(strtoi(names(b))^b))};n

lit à partir de stdin; renvoie la réponse sous forme de chaîne.

Essayez-le en ligne!

Giuseppe
la source
Vous pouvez utiliser à la pasteplace de as.character. Le premier contraint son entrée en charactertype ;-)
Frédéric
1

MATL, 11 octets

`!UY'^sVtnq

Essayez-le sur MATL Online

Explication

        % Implicitly grab input as a string
`       % Do...while loop
  !U    % Convert the string to an array of numbers (the digits)
  Y'    % Perform run-length encoding
  ^     % Raise the digits to the power corresponding to the number of times they
        % occurred consecutively
  s     % Sum the result
  V     % Convert to a string
  tn    % Duplicate and determine the number of characters in the string
  q     % Subtract one, causes the loop to continue until it's a single digit
        % Implicit end of do...while loop and display
Suever
la source
1

R, 97 96 octets

a=scan(,"");while(nchar(a)>1){a=paste(sum(strtoi((b<-rle(el(strsplit(a,""))))$v)^strtoi(b$l)))}a

Approche légèrement différente de l' autre réponse en utilisant R .

Cette réponse utilise la rlefonction, quicompute[s] the lengths and values of runs of equal values in a vector .

-1 octets grâce à @Giuseppe!

Frédéric
la source
1
**est équivalent à^
Giuseppe
1

Braingolf, 25 octets

!L1-Mv[RG(d&*)&+!L1-Mv>]R

Ajoutera un lien TIO une fois que j'aurai Dennis pour extraire la dernière version, car l'utilisation d'opérateurs gourmands à l'intérieur des (...)boucles est actuellement interrompue sur TIO

Explication

!L1-Mv[RG(d&*)&+!L1-Mv>]R  Implicit input from commandline args
!L1-M                      Push length of input minus 1 to stack2
     v                     Switch to stack2
      [.........!L1-Mv>]   While length of input > 1..
       RG                  Split into digit runs
         (d&*)             Product of digits of each item in stack
              &+           Sum stack
                        R  Return to stack1
                           Implicit output from stack
Skidsdev
la source
1

Japt , 19 octets

=ò¦ m¬®×Ãx)<A?U:ßUs

Essayez-le en ligne!

Explication:

=ò¦ m¬®×Ãx)<A?U:ßUs
=                    // Implicit U (input) =
 ò¦                  //   Split the input into an array of consecutive digit runs
    m¬               //   Split each inner array: ["1","22","333"] -> [["1"],["2","2"],["3","3","3"]]
      ®              //   Map; At each item:
       ×             //     Get the product of each run
        Ã            //   }
         x           //   Sum
           <A        // <10
             ?       // If true:
              U      //   return U
               :     // Else:
                ß    //   Run the program again; Pass:
                 Us  //     U, cast to a string
Oliver
la source