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.


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:



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.

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


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!


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

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

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

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.

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


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



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!


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


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!


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.