연속 된 디지털 제품 합계 수렴


13

양의 정수 감안할 때 n( 예 :n=1234444999 )

  • 연속 숫자 런으로 분리 :
    • [1, 2, 3, 4444, 999]
  • 각 실행의 디지털 제품을 가져옵니다.
    • [1, 2, 3, 4*4*4*4, 9*9*9] = [1, 2, 3, 256, 729]
  • 요약하자면 ...
    • 991
  • 이것이 단일 숫자로 수렴 될 때까지 반복하십시오.
    • 1234444999
    • 991
    • 82
    • 10
    • 1
  • 마지막 숫자를 반환합니다.

테스트 사례

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

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

요청 된 예 :

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

승리?

그것은의 , 가장 낮은 바이트 수는 승자입니다.


Annnnnnnnnnnnnnnnnnnd ... 이것은 샌드 박스가 아닙니다. 쓰레기. 글쎄, 내가 할 수있는 일은 많지 않아, 미안해
매직 문어 Urn

11
같은 종류의 숫자가 모두 연속 된 청크가 아닌 테스트 사례를 갖는 것이 좋습니다.
xnor

1
숫자 목록으로 입력 할 수 있습니까? 일부 언어는 높은 정수를 지원할 수 없습니다 11122233344455566677788899.
ETHproductions

@ETHproductions 당신은 당신의 언어에 의해 허용되는 최대 정수 입력을 말할 수 있고 당신이 경계를 설명 할 수 있다면 당신의 대답이 유효 할 수 있습니다.
매직 문어 Urn

4
동일한 숫자 evet이 두 개의 다른 런에 표시 33445555666333됩니까? 예 : ?
Mr. Xcoder

답변:


7

05AB1E , 7 6 5 바이트

바이트를 저장해 준 Emigna 에게 감사합니다 !

vSγPO

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!


3
나는 방금 당신의 아바타가 총독 밈이라는 것을 처음 알았습니다.
매직 문어 Urn

@MagicOctopusUrn 그리고 당신은 저도 그 사실을 알아 차 렸습니다 ...
Socratic Phoenix

으로 교체 할 수 gF있습니다 v.
Emigna

물론 @Emigna Oohh! 감사합니다! :)
Adnan

5

젤리, 9 바이트

DŒgP€SµÐL

온라인으로 사용해보십시오

작동 방식은 다음과 같습니다.

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가 자동으로 벡터화되지 않는 이유는 무엇입니까? 이상한 것 같습니다 ...
Esolanging 과일

아니요, P는 자동으로 벡터화되므로을 (를) 필요로하지 않습니다 .
Esolanging 과일

아니오, P는 벡터화하지 않습니다 : tio.run/##y0rNyan8/9/l6KT0gOBDWw9P8Pn//78RKgAA
Zacharý

아, Œg하나의 그룹 만있을 때 일관성이 없습니다. 그 뒤에 추론은 무엇입니까?
Esolanging 과일

전혀 단서가 없습니다!
Zacharý

5

매스 매 티카, 55 42 바이트

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

@JungHwan 분에서 -13 바이트 . 고맙습니다!

누군가 이것을 임의의 숫자 생성기로 사용하려는 경우,
여기에 처음 100.000 숫자의 집계입니다

{{1, 17320}, {2, 4873}, {3, 10862}, {4, 11358}, {5, 10853}, {6, 9688}, {7, 11464}, {8, 10878}, { 9, 12704}} 또는 도박을하는 경우 2에 돈을 들이지
마십시오!


5

Japt , 17 15 13 바이트

e".+"_¬ò¦ x_×

온라인으로 테스트하십시오! 입력을 문자열로받습니다.

여전히이 답변에 만족하지 않습니다 ...

설명

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

정수로 가져 와서 최대 허용 입력을 지정할 수 있습니다. 죄송합니다. 해당 질문에 대한 기본 답변으로 게시 한 후에 답변을 변경했습니다.
매직 문어 Urn

@MagicOctopusUrn 아, 고마워. 어쨌든 2 바이트를 절약 할 수 있습니다.
ETHproductions

1
또한와 x_×결합하여 I'm unsatisfied나를 웃게 만들었습니다. 감사 ;).
매직 문어 Urn

나는 ß여기에 갈 길이 라고 생각했다 . 내가 틀렸어! (적어도 아침 5시 반에 나는 공항에 버스에 앉아 있었다!)
Shaggy

"아직도 만족하지 않습니다"... 그래서 ... 당신은 마침내 만족합니까?
Zacharý


4

Brachylog , 8 바이트

Ḋ|ẹḅ×ᵐ+↰

온라인으로 사용해보십시오!

설명

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

Brachylog가 Jelly를 능가하는 것을 결코 기대하지 않습니까?
Outgolfer Erik

@EriktheOutgolfer Brachylog가 Jelly를 이길 때, 나의 첫 번째 가정은 Jelly 답변이 최적이 아니라는 것입니다
Fatalize

젤리 에서도이 작업을 시도한 것을 제외하고는 광산. 문제는 05AB1E가 여전히이 점을 능가한다는 것입니다. :)
Outgolfer 에릭

잘. 그것은 1 바이트이고 젤리 대답은 나에 의한 것입니다. 예, Brachylog가 젤리를 이길 것으로 기대합니다.
Zacharý



2

껍질 , 8 바이트

ωöṁΠgmis

정수를 가져와 반환합니다. 온라인으로 사용해보십시오!

설명

기본 10 자리 숫자가 내장되어 있으면 좋을 것입니다 ...

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

자바 스크립트 (ES6), 77 73 67 65 바이트

@CraigAyre 덕분에 2 바이트 절약

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

어떻게?

입력 s 는 다음을 사용하여 산술 연산 식으로 변환됩니다.

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

예를 들어 1234444999됩니다 +1+2+3+4*4*4*4+9*9*9.

우리는이 표현을 평가하고 하나의 십진수로 끓을 때까지 결과를 재귀 호출합니다.

테스트 사례


9와 비교하여 몇 바이트를 절약 할 수 있습니까? :f=s=>s>9?f(''+eval(s.replace(/(.)\1*/g,s=>'+'+[...s].join`*`))):s
Craig Ayre

@CraigAyre 내 접근 방식이 실제로 약간 복잡해 보였습니다. 감사!
Arnauld



1

R , 114104 바이트

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

stdin에서 읽습니다. 답을 문자열로 반환합니다.

온라인으로 사용해보십시오!


paste대신에 사용할 수 있습니다 as.character. 전자는 입력을 character;-) 형식 으로 강제한다
Frédéric

1

MATL, 11 바이트

`!UY'^sVtnq

MATL Online 에서 사용해보십시오

설명

        % 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 바이트

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

R을 사용 하는 다른 답변 과 약간 다른 접근 방식 .

이 답변은 rle함수를 사용 compute[s] the lengths and values of runs of equal values in a vector합니다.

@Giuseppe 덕분에 -1 바이트!


1
**에 해당합니다^
주세페

1

Braingolf, 25 바이트

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

(...)루프 내부에서 욕심 많은 연산자를 사용하는 것이 현재 TIO에서 끊어지기 때문에 Dennis가 최신 버전을 가져 오면 TIO 링크를 추가합니다.

설명

!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 바이트

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

온라인으로 사용해보십시오!

설명:

=ò¦ 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.