重复连续数字产品总和收敛


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 ...这不是沙盒。废话 好吧,我现在无能为力,对不起._。
魔术章鱼缸

11
最好有一个测试用例,其中相同种类的数字不是连续的。
xnor

1
我们可以将输入作为数字列表吗?某些语言不能支持最大为的整数11122233344455566677788899
ETHproductions'7

@ETHproductions您可以声明语言所允许的最大整数输入,并且如果可以解释边界,则答案有效。
魔术章鱼缸

4
将相同的数字EVET出现在2点不同的运行,如:33445555666333
Xcoder先生17年

Answers:



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 Fruit

不,P会自动向量化,因此您不需要
硕果累累

不,P无法向量化:tio.run
## y0rNyan8

哦,我知道- Œg只有一个组时不一致。这背后的原因是什么?
硕果累累

根本没有头绪!
扎卡里

5

Mathematica,55 42个字节

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

@JungHwan Min -13个字节。谢谢!

如果有人想将其用作随机数发生器,
这是前100.000个数字的总和

{{1,17320},{2,4873},{3,10862},{4,11358},{5,10853},{6,9688},{7,11464},{8,10878},{ 9,12704}}
或如果您赌博,请不要将钱花在2上!


5

Japt17 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

您也可以将其作为整数并说明最大允许输入,对不起,我在将其发布到该问题的默认答案后更改了答案。
魔术章鱼缸

@MagicOctopusUrn哦,嘿,谢谢。无论如何,这节省了两个字节……
ETHproductions'Jul 11​​'11

1
另外,x_×结合在一起I'm unsatisfied使我发笑。谢谢 ;)。
魔术章鱼缸

我以为ß可能是去这里的方式。我错了!(至少凌晨5点半,坐在我
去过

“还不满意”……那么……您终于满意了吗?
扎卡里


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在这里超越果冻,对吗?
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer当Brachylog击败Jelly时,我的第一个假设是Jelly的答案不是最佳
Fatalize

我的也是,除了我也尝试在Jelly中这样做。问题是,05AB1E仍然胜过这一点。:)
Erik the Outgolfer

好。这是一个字节,果冻的答案是我,是的,我希望Brachylog击败果冻。
扎卡里



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

JavaScript(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

R114104字节

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型;-)
弗雷德里克

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

-1个字节感谢@Giuseppe!


1
**等效于^
朱塞佩

1

Braingolf,25个字节

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

一旦让丹尼斯(Dennis)拉出最新版本,就会添加一个TIO链接,因为(...)在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.