Wiederholte aufeinanderfolgende digitale Produktsummenkonvergenz


13

Bei einer positiven ganzen Zahl n( Beispiel:n=1234444999 )

  • In aufeinanderfolgende Ziffernfolgen aufteilen:
    • [1, 2, 3, 4444, 999]
  • Nehmen Sie das digitale Produkt jedes Laufs.
    • [1, 2, 3, 4*4*4*4, 9*9*9] = [1, 2, 3, 256, 729]
  • Fassen Sie es zusammen ...
    • 991
  • Wiederholen, bis dies zu einer einzelnen Zahl konvergiert:
    • 1234444999
    • 991
    • 82
    • 10
    • 1
  • Letzte Nummer zurückgeben.

Testfälle

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

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

Gewünschtes Beispiel:

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

Gewinnen?

Es ist , die niedrigste Byteanzahl ist der Gewinner.


Annnnnnnnnnnnnnnnnnd ... das ist NICHT der Sandkasten. Mist. Nun, nicht viel kann ich jetzt tun, sorry all ._.
Magic Octopus Urn

11
Es wäre gut, Testfälle zu haben, in denen nicht alle Ziffern der gleichen Art in einem fortlaufenden Teil enthalten sind.
Xnor

1
Können wir Eingaben als Ziffernliste nehmen? Einige Sprachen unterstützen keine ganzen Zahlen bis zu 11122233344455566677788899.
ETHproductions

@ETHproductions Sie können die maximale Ganzzahleingabe angeben, die in Ihrer Sprache zulässig ist, und Ihre Antwort muss gültig sein, wenn Sie die Begrenzung erläutern können.
Magic Octopus Urn

4
Wird die gleiche Ziffer evet in zwei verschiedenen Läufen erscheinen, zum Beispiel: 33445555666333?
Mr. Xcoder

Antworten:



5

Gelee, 9 Bytes

DŒgP€SµÐL

Probieren Sie es online aus

So funktioniert das:

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.

Warum vektorisiert P nicht automatisch? Das scheint seltsam ...
Esolanging Fruit

Nein, P vektorisiert automatisch, sodass Sie das nicht benötigen .
Esolanging Fruit


Oh, ich verstehe - Œgist inkonsistent, wenn es nur eine einzige Gruppe gibt. Was steckt dahinter?
Esolanging Fruit

Überhaupt keine Ahnung!
Zacharý

5

Mathematica, 55 42 Bytes

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

-13 Bytes von @JungHwan min . Vielen Dank!

Für den Fall, dass jemand dies als Zufallsgenerator verwenden möchte, finden Sie
hier die ersten 100.000 Zahlen

{{1, 17320}, {2, 4873}, {3, 10862}, {4, 11358}, {5, 10853}, {6, 9688}, {7, 11464}, {8, 10878}, { 9, 12704}}
oder wenn Sie spielen, setzen Sie Ihr Geld nicht auf 2!


5

Japt , 17 15 13 Bytes

e".+"_¬ò¦ x_×

Online testen! Nimmt die Eingabe als String.

Immer noch nicht zufrieden mit dieser Antwort ...

Erläuterung

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

Sie können es auch einfach als Ganzzahl nehmen und die maximal zulässige Eingabe angeben. Tut mir leid, ich habe meine Antwort geändert, nachdem ich sie auf meine Standardantwort für diese Frage gepostet habe.
Magic Octopus Urn

@MagicOctopusUrn Oh, hey, danke. Das spart jedenfalls zwei Bytes ...
ETHproductions

1
Auch die x_×Kombination mit brachte I'm unsatisfiedmich zum Lachen. Vielen Dank ;).
Magic Octopus Urn

Ich dachte, ßdas wäre der richtige Weg gewesen. Ich hab mich geirrt! (Mindestens um halb 6 morgens saß ich im Bus zum Flughafen!)
Shaggy

"Immer noch nicht unzufrieden" ... also ... bist du endlich zufrieden?
Zacharý


4

Brachylog , 8 Bytes

Ḋ|ẹḅ×ᵐ+↰

Probieren Sie es online!

Erläuterung

Ḋ          Input = Output = a digit
 |         Or
  ẹ        Split into a list of digits
   ḅ       Group consecutive equal elements together
    ×ᵐ     Map multiply
      +    Sum
       ↰   Recursive call

Sie würden nie erwarten, dass Brachylog Jelly hier übertrifft, oder?
Erik der Outgolfer

@EriktheOutgolfer Wenn Brachylog Jelly schlägt, ist meine erste Annahme, dass die Jelly-Antwort nicht optimal ist
Fatalize

Meins auch, außer ich habe es auch in Jelly versucht. Die Sache ist, nun, 05AB1E schlägt das immer noch. :)
Erik der Outgolfer

Gut. Es ist ein Byte, und die Antwort von Jelly stammt von mir. Ja, ich würde erwarten, dass Brachylog Jelly besiegt.
Zacharý



2

Schale , 8 Bytes

ωöṁΠgmis

Nimmt und gibt eine ganze Zahl zurück. Probieren Sie es online!

Erläuterung

Ein eingebautes 10-stelliges System wäre schön ...

ωöṁΠ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 Bytes

2 Bytes dank @CraigAyre gespart

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

Wie?

Die Eingabe s wird in einen arithmetischen Ausdruck umgewandelt mit:

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

Zum Beispiel 1234444999wird +1+2+3+4*4*4*4+9*9*9.

Wir werten diesen Ausdruck aus und führen einen rekursiven Aufruf mit dem Ergebnis durch, bis eine einzelne Dezimalstelle erreicht ist.

Testfälle


Können Sie durch einen Vergleich mit 9 ein paar Bytes sparen ?:f=s=>s>9?f(''+eval(s.replace(/(.)\1*/g,s=>'+'+[...s].join`*`))):s
Craig Ayre

@CraigAyre Scheint, als wäre meine Herangehensweise in der Tat etwas zu kompliziert. Vielen Dank!
Arnauld



1

R , 114 104 Bytes

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

liest von stdin; gibt die Antwort als String zurück.

Probieren Sie es online!


Sie könnten pasteanstelle von verwenden as.character. Ersteres erzwingt seine Eingabe in characterTyp ;-)
Frédéric

1

MATL, 11 Bytes

`!UY'^sVtnq

Probieren Sie es bei MATL Online aus

Erläuterung

        % 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 Bytes

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

Etwas anderer Ansatz als die andere Antwort mit R .

Diese Antwort nutzt die rle Funktion, diecompute[s] the lengths and values of runs of equal values in a vector .

-1 Bytes dank @Giuseppe!


1
**ist gleichbedeutend mit^
Giuseppe

1

Braingolf, 25 Bytes

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

Füge einen TIO-Link hinzu, sobald ich Dennis dazu bringe, die neueste Version zu installieren, indem er gierige Operatoren verwendet (...) herunterladen soll Schleifen derzeit bei TIO nicht funktioniert

Erläuterung

!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 Bytes

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

Probieren Sie es online!

Erläuterung:

=ò¦ 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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.