Tekrarlanan Ardışık Dijital Ürün Toplamı Yakınsama


13

Pozitif bir tamsayı verilen n( Örnek:n=1234444999 )

  • Ardışık basamak çalışmalarına ayırın:
    • [1, 2, 3, 4444, 999]
  • Her çalışmanın dijital ürününü alın.
    • [1, 2, 3, 4*4*4*4, 9*9*9] = [1, 2, 3, 256, 729]
  • Özetle ...
    • 991
  • Bu, tek bir sayıya yaklaşana kadar tekrarlayın:
    • 1234444999
    • 991
    • 82
    • 10
    • 1
  • Son numarayı döndür.

Test Durumları

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

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

İstenen Örnek:

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

Kazanan?

Bu , en düşük bayt-sayısı kazanır.


Annnnnnnnnnnnnnnnnnnd ... bu korumalı alan DEĞİL. Bok. Canimdi yapabileceđim pek bir ţey yok, üzgünüm hepsi ._.
Sihirli Ahtapot Urn

11
Aynı tür basamakların ardışık bir yığın içinde olmadığı test durumlarına sahip olmak iyi olurdu.
xnor

1
Girdileri bir rakam listesi olarak alabilir miyiz? Bazı diller, kadar yüksek tam sayıları destekleyemez 11122233344455566677788899.
ETHproductions

@ETHproductions, dilinizin izin verdiği maksimum tamsayı girdisini belirtebilir ve sınırlamayı açıklayabilirseniz cevabınızın geçerli olmasını sağlayabilirsiniz.
Sihirli Ahtapot Urn

4
Aynı rakam evet 2 farklı çalışmada görünecek 33445555666333mi , örneğin:?
Bay Xcoder

Yanıtlar:



5

Jöle, 9 bayt

DŒgP€SµÐL

Çevrimiçi deneyin

Şöyle çalışır:

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.

P neden otomatik olarak vektörleşmiyor? Bu tuhaf görünüyor ...
Esolanging Fruit

Hayır, P otomatik olarak vektörleşir, böylece ihtiyacınız yoktur .
Esolanging Fruit


Oh, anlıyorum - Œgsadece tek bir grup olduğunda tutarsız. Bunun arkasındaki sebep nedir?
Esolanging Fruit

Hiç ipucu yok!
Zacharý

5

Mathematica, 55 42 bayt

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

@JungHwan Min . 'Den -13 bayt Thanx!

Birisinin bunu rastgele haneli bir jeneratör olarak kullanmak
istemesi durumunda, ilk 100.000 sayının çetelesi

{{1, 17320}, {2, 4873}, {3, 10862}, {4, 11358}, {5, 10853}, {6, 9688}, {7, 11464}, {8, 10878}, { 9, 12704}} veya kumar oynarsanız
paranızı 2'ye koymayın!


5

Japt , 17 15 13 bayt

e".+"_¬ò¦ x_×

Çevrimiçi test edin! Girişi dize olarak alır.

Bu cevaptan hala memnun kalmadım ...

açıklama

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

Ayrıca sadece bir tamsayı olarak alabilir ve izin verilen maksimum girişi bildirebilirsiniz, üzgünüm, bu soru için varsayılan cevabımı gönderdikten sonra cevabımı değiştirdim.
Sihirli Ahtapot Urn

@MagicOctopusUrn Oh, hey, teşekkürler. Bu yine de iki bayt tasarruf ...
ETHproductions

1
Ayrıca, x_×birlikte ile I'm unsatisfiedbeni güldürdü. Teşekkürler ;).
Sihirli Ahtapot Urn

Buraya ßgitmenin bir yolu olabileceğini düşündüm . Ben hatalıydım! (En azından sabahın 5'inde ', havaalanına giden otobüse oturdum!)
Shaggy

“Hâlâ tatmin olmadım” ... yani ... sonunda tatmin oldun mu?
Zacharý


4

Brachylog , 8 bayt

Ḋ|ẹḅ×ᵐ+↰

Çevrimiçi deneyin!

açıklama

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

Brachylog'un Jelly'den daha fazla çıkmasını beklemezdin, değil mi?
Outgolfer Erik

@EriktheOutgolfer Brachylog Jelly'yi yendiğinde, ilk varsayım Jelly cevabının optimal olmadığıdır
Ölümcül

Benim de hariç, bunu Jelly'de de yapmaya çalıştım. Mesele şu ki, 05AB1E hala bunu yeniyor. :)
Outgolfer Erik

İyi. bu bir bayt ve Jelly cevabı bana göre, evet, Brachylog'un Jelly'i yenmesini beklerdim.
Zacharý



2

Kabuk , 8 bayt

ωöṁΠgmis

Bir tam sayı alır ve döndürür. Çevrimiçi deneyin!

açıklama

10 basamaklı bir taban için yerleşik olması güzel olurdu ...

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

@CraigAyre sayesinde 2 bayt kaydedildi

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

Nasıl?

Giriş s , aşağıdakilerle birlikte bir aritmetik ifadeye dönüştürülür:

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

Örneğin, 1234444999olur +1+2+3+4*4*4*4+9*9*9.

Bu ifadeyi değerlendiririz ve tek bir ondalık basamağa kadar kaybolana kadar sonuçla özyinelemeli bir çağrı yaparız.

Test senaryoları


9 ile karşılaştırarak birkaç bayt kurtarabilir misiniz ?:f=s=>s>9?f(''+eval(s.replace(/(.)\1*/g,s=>'+'+[...s].join`*`))):s
Craig Ayre

@CraigAyre Benim yaklaşımım biraz fazla karmaşık gibi görünüyor. Teşekkürler!
Arnauld



1

R , 114104 bayt

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

stdin'den okur; cevabı dize olarak döndürür.

Çevrimiçi deneyin!


Bunun pasteyerine kullanabilirsiniz as.character. Eski; girdisini charactertipine zorlar ;-)
Frédéric

1

MATL, 11 bayt

`!UY'^sVtnq

MATL Online'da deneyin

açıklama

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

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

R kullanarak diğer cevaptan biraz farklı bir yaklaşım .

Bu cevap rleişlevi kullanır compute[s] the lengths and values of runs of equal values in a vector.

@Giuseppe sayesinde -1 bayt!


1
**ile eşdeğer^
Giuseppe

1

Braingolf, 25 bayt

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

(...)Döngülerdeki açgözlü operatörleri kullanmak şu anda TIO'da bozulduğu için Dennis'i en son sürümü çektiğinde bir TIO bağlantısı ekleyeceğim

açıklama

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

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

Çevrimiçi deneyin!

Açıklama:

=ò¦ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.