Lặp đi lặp lại liên tục Tổng hợp sản phẩm kỹ thuật số


13

Cho một số nguyên dương n( Ví dụn=1234444999 :)

  • Tách thành các chữ số liên tiếp chạy:
    • [1, 2, 3, 4444, 999]
  • Lấy sản phẩm kỹ thuật số của mỗi lần chạy.
    • [1, 2, 3, 4*4*4*4, 9*9*9] = [1, 2, 3, 256, 729]
  • Tổng hợp ...
    • 991
  • Lặp lại cho đến khi điều này hội tụ đến một số duy nhất:
    • 1234444999
    • 991
    • 82
    • 10
    • 1
  • Trả lại số cuối cùng.

Các trường hợp thử nghiệm

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

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

Ví dụ yêu cầu:

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

Chiến thắng?

Đó là , số byte thấp nhất là người chiến thắng.


Annnnnnnnnnnnnnnnnnnd ... đây KHÔNG phải là hộp cát. Tào lao Chà, bây giờ tôi không thể làm được gì nhiều, xin lỗi tất cả ._.
Bạch tuộc ma thuật Urn

11
Sẽ rất tốt nếu có các trường hợp thử nghiệm trong đó các chữ số cùng loại không nằm trong một đoạn liên tiếp.
xnor

1
Chúng ta có thể lấy đầu vào là một danh sách các chữ số? Một số ngôn ngữ không thể hỗ trợ số nguyên cao như 11122233344455566677788899.
Sản xuất ETH

@ETHproductions bạn có thể nêu đầu vào số nguyên tối đa được cho phép bởi ngôn ngữ của bạn và câu trả lời của bạn là hợp lệ nếu bạn có thể giải thích giới hạn.
Bạch tuộc ma thuật Urn

4
Liệu cùng một chữ số evet sẽ xuất hiện trong 2 lần chạy khác nhau, ví dụ : 33445555666333?
Ông Xcoder

Câu trả lời:



5

Thạch, 9 byte

DŒgP€SµÐL

Dùng thử trực tuyến

Đây là cách nó hoạt động:

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.

Tại sao P không tự động vector hóa? Điều đó có vẻ lạ ...
Trái cây Esolanging

Không, P tự động vector hóa, vì vậy bạn không cần .
Trái cây Esolanging


Ồ, tôi hiểu rồi - Œgkhông nhất quán khi chỉ có một nhóm duy nhất. Lý do đằng sau đó là gì?
Trái cây Esolanging

Không có manh mối nào cả!
Zacharý

5

Toán học, 55 42 byte

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

-13 byte từ @JungHwan Min . Thanx!

trong trường hợp ai đó muốn sử dụng điều này như một trình tạo chữ số ngẫu nhiên,
đây là số liệu của 100.000 số đầu tiên

{{1, 17320}, {2, 4873}, {3, 10862}, {4, 11353}, {5, 10853}, {6, 9688}, {7, 11464}, {8, 10878}, { 9, 12704}}
hoặc nếu bạn đánh bạc, đừng đặt tiền của bạn vào 2!


5

Japt , 17 15 13 byte

e".+"_¬ò¦ x_×

Kiểm tra nó trực tuyến! Đưa đầu vào dưới dạng một chuỗi.

Vẫn không hài lòng với câu trả lời này ...

Giải trình

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

Bạn cũng có thể chỉ lấy nó làm số nguyên và nêu đầu vào cho phép tối đa, xin lỗi, tôi đã thay đổi câu trả lời của mình sau khi đăng nó thành câu trả lời mặc định cho câu hỏi đó.
Bạch tuộc ma thuật Urn

@MagicOctopusUrn Ồ, cảm ơn. Điều đó giúp tiết kiệm hai byte, dù sao ...
ETHproductions

1
Ngoài ra, x_×kết hợp với I'm unsatisfiedlàm cho tôi cười. Cảm ơn ;).
Bạch tuộc ma thuật Urn

Tôi nghĩ ßcó lẽ đã là cách để đi đến đây. Tôi đã sai! (Ít nhất là vào lúc 5 giờ sáng ', ngồi trên xe buýt đến sân bay!)
Shaggy

"Vẫn không hài lòng" ... vậy ... cuối cùng bạn có hài lòng không?
Zacharý


4

Brachylog , 8 byte

Ḋ|ẹḅ×ᵐ+↰

Hãy thử trực tuyến!

Giải trình

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

Bạn sẽ không bao giờ mong đợi Brachylog vượt qua Jelly Jelly ở đây chứ?
Erik the Outgolfer

@EriktheOutgolfer Khi Brachylog đánh bại Jelly, giả định đầu tiên của tôi là câu trả lời của Jelly không tối ưu
Fatalize

Của tôi cũng vậy, ngoại trừ tôi cũng cố gắng làm điều này trong Jelly. Vấn đề là, tốt, 05AB1E vẫn đánh bại điều này. :)
Erik the Outgolfer

Tốt. đó là một byte và câu trả lời của Jelly là của tôi, ừ, tôi mong Brachylog sẽ đánh bại Jelly.
Zacharý



2

Husk , 8 byte

ωöṁΠgmis

Lấy và trả về một số nguyên. Hãy thử trực tuyến!

Giải trình

Có tích hợp sẵn 10 chữ số cơ bản sẽ rất tuyệt ...

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

Đã lưu 2 byte nhờ @CraigAyre

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

Làm sao?

Các s đầu vào được chuyển thành biểu thức số học với:

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

Ví dụ, 1234444999trở thành +1+2+3+4*4*4*4+9*9*9.

Chúng tôi đánh giá biểu thức này và thực hiện một cuộc gọi đệ quy với kết quả cho đến khi nó được rút gọn thành một chữ số thập phân duy nhất.

Các trường hợp thử nghiệm


Bạn có thể lưu một vài byte bằng cách so sánh với 9 không?:f=s=>s>9?f(''+eval(s.replace(/(.)\1*/g,s=>'+'+[...s].join`*`))):s
Craig Ayre

@CraigAyre Có vẻ như cách tiếp cận của tôi hơi quá phức tạp. Cảm ơn!
Arnauld


2

Haskell , 103 70 69 byte

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

Hãy thử trực tuyến!


1
Bạn có thể rút ngắn điều đó rất nhiều bằng cách sử dụng until(<10). Ngoài ra map(read.pure)có thể được di chuyển trước show, mà lưu dấu ngoặc đơn.
Ørjan Johansen

Yup, nó tốt hơn rất nhiều!
bartavelle

1
Bạn có thể sử dụng $thay vì dấu ngoặc đơn bên ngoài.
Ørjan Johansen

1

R , 114 104 byte

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

đọc từ stdin; trả về câu trả lời dưới dạng chuỗi

Hãy thử trực tuyến!


Bạn có thể sử dụng pastethay vì as.character. Cái trước ép buộc đầu vào của nó thành characterloại ;-)
Frédéric

1

MATL, 11 byte

`!UY'^sVtnq

Hãy thử nó tại MATL Online

Giải trình

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

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

Cách tiếp cận hơi khác so với câu trả lời khác sử dụng R .

Câu trả lời này sử dụng rlechức năng, trong đó compute[s] the lengths and values of runs of equal values in a vector.

-1 byte nhờ @Giuseppe!


1
**tương đương với^
Giuseppe

1

Braingolf, 25 byte

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

Sẽ thêm một liên kết TIO khi tôi nhận được Dennis để kéo phiên bản mới nhất, vì việc sử dụng các toán tử tham lam bên trong (...)các vòng lặp hiện đang bị hỏng trên TIO

Giải trình

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

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

Hãy thử trực tuyến!

Giải trình:

=ò¦ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.