首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加-乘-加序列

加-乘-加序列
EN

Code Golf用户
提问于 2018-05-04 12:52:04
回答 11查看 1.8K关注 0票数 28

(相关)

给定整数n > 1

1)构造n, n-1, n-2, ... 3, 2, 1数的取值范围,计算和

2)取该数字的个别数字并计算乘积。

3)取该数字的个别数字并计算和。

4)重复步骤2和3,直到达到一位数为止。这个数字就是结果。

序列的前二十项如下:

代码语言:javascript
复制
3, 6, 0, 5, 2, 7, 9, 2, 7, 9, 1, 9, 0, 0, 9, 6, 7, 0, 0, 6

注:此序列不在OEIS中。

I/O与规则

  • 数字很快就会变大,所以解决方案必须能够处理多达100000个输入号,而不会失败(如果代码能够处理超过这个数字,那就好了)。
  • 输入输出可以由任何方便的方法给出。
  • 一个完整的程序或一个函数都是可以接受的。如果是函数,则可以返回输出,而不是打印输出。
  • 标准漏洞是禁止的。
  • 这是密码-高尔夫,所以所有常用的高尔夫球规则都适用,最短的代码(以字节为单位)获胜。

示例

代码语言:javascript
复制
n     output
1234   9
3005   3
5007   5
9854   8
75849  8
100000 0
EN

回答 11

Code Golf用户

发布于 2018-05-04 13:59:48

05AB1E,7字节

代码语言:javascript
复制
LOΔSPSO

在网上试试!

展开

代码语言:javascript
复制
L         # push range [1 ... input]
 O        # sum range
  Δ       # loop until top of stack stops changing
   SP     # product of digits
     SO   # sum of digits
票数 8
EN

Code Golf用户

发布于 2018-05-04 13:06:05

果冻,8字节

代码语言:javascript
复制
RSDPDƲÐL

在网上试试!

完整程序(它返回一个包含结果的单例数组,但括号在STDOUT中不可见)。

票数 4
EN

Code Golf用户

发布于 2018-05-04 13:18:24

JavaScript (ES6),60字节

代码语言:javascript
复制
f=(n,k=n*++n/2)=>k>9?f(!n,eval([...k+''].join('*+'[+!n]))):k

在网上试试!

评论

代码语言:javascript
复制
f = (                     // f = recursive function taking:
  n,                      //   n = original input
  k = n * ++n / 2         //   k = current value, initialized to sum(i=1..n)(i)
) =>                      //
  k > 9 ?                 // if k has more than 1 digit:
    f(                    //   recursive call to f() with:
      !n,                 //     a logical NOT applied to n
      eval(               //     the result of the expression built by:
        [...k + '']       //       turning k into a list of digits
        .join('*+'[+!n])  //       joining with '*' on even iterations or '+' on odd ones
      )                   //     end of eval()
    )                     //   end of recursive call
  :                       // else:
    k                     //   stop recursion and return the last value

替代版本,59字节(非竞争)

只适用于n< 236172的非递归版本。(它涵盖所请求的范围,但不限定为有效的泛型算法。)

代码语言:javascript
复制
n=>[...'*+*+'].map(o=>n=eval([...n+''].join(o)),n*=++n/2)|n

在网上试试!

票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/164156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档