首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算术周期

算术周期
EN

Code Golf用户
提问于 2018-04-13 11:37:41
回答 7查看 1.2K关注 0票数 13

输入:

整数n,是>=0>=1 (f(0)是可选的)

输出:

以下序列中的n'th数,或直到并包含n'th数的序列。

序列:

代码语言:javascript
复制
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99

这个序列是如何构建的?

f(n=0) = 0 (可选)

f(n=1) = f(0) + nf(n=1) = 1

f(n=2) = f(1) - n

f(n=3) = f(2) * n

f(n=4) = f(3) / n

f(n=5) = f(4) + n

等。

或者用伪码:

代码语言:javascript
复制
function f(integer n){
  Integer result = 0
  Integer i = 1
  Loop as long as i is smaller than or equal to n
  {
    if i modulo-4 is 1:
      result = result plus i
    if i modulo-4 is 2 instead:
      result = result minus i
    if i modulo-4 is 3 instead:
      result = result multiplied with i
    if i modulo-4 is 0 instead:
      result = result integer/floor-divided with i
    i = i plus 1
  }
  return result
}

但是,正如您可能已经注意到的,序列中有两种模式:

代码语言:javascript
复制
0, ,-1,  ,0, ,-1,  ,0, ,-1,   ,0,  ,-1,   ,0,  ,-1,   ,...
 ,1,  ,-3, ,5,  ,-7, ,9,  ,-11, ,13,  ,-15, ,17,  ,-19,...

因此,任何其他导致相同序列的方法当然也是完全好的。

挑战规则:

  • 0-索引输入和1-索引输入将导致相同的结果(这就是为什么f(0)对于0索引输入是可选的,如果您想包含它)。
  • 您可以输出该序列的n'th号,或者整个序列向上并包含n'th数。(因此f(5)可以生成50,1,-1,-3,0,5。) 。
    • 如果您选择输出到并包含n'th号的序列,则输出格式是灵活的。可以是列表/数组、逗号/空格/新行分隔字符串或打印到STDOUT,等等。

  • 除法(/)是整数/地板除法,其舍入为0(而不是某些语言中的负无穷大)。

一般规则:

  • 这是密码-高尔夫,所以最短的答案(以字节为单位)-- wins. --不要让代码-高尔夫语言阻止你用非代码处理语言发布答案。试着为“任意”编程语言提供一个尽可能短的答案。
  • 适用标准规则作为您的答案,因此您可以使用STDIN/STDOUT,函数/方法具有适当的参数和返回类型的完整程序。你说了算。
  • 违约漏洞是禁止的。
  • 如果可能,请为您的代码添加一个带有测试的链接。
  • 此外,如有必要,请补充说明。

n=100:

之上的附加测试用例

代码语言:javascript
复制
Input     Output

1000      0
100000    0
123       -123
1234      -1
12345     12345
123456    0
EN

回答 7

Code Golf用户

发布于 2018-04-13 11:57:11

JavaScript (ES6),19字节

代码语言:javascript
复制
n=>[0,n,-1,-n][n&3]

在网上试试!

证明

假设我们对4的n个倍数有以下关系。这些关系在序列的第一个项上得到了很小的验证。

代码语言:javascript
复制
f(n)   = 0
f(n+1) = n+1
f(n+2) = -1
f(n+3) = -(n+3)

设N=n+ 4,那么,根据定义:

代码语言:javascript
复制
f(N)   = f(n+4) = f(n+3) // (n+4) = -(n+3) // (n+4) = 0
f(N+1) = f(n+5) = f(n+4) + (n+5)  = 0 + (n+5)       = N+1
f(N+2) = f(n+6) = f(n+5) - (n+6)  = (n+5) - (n+6)   = -1
f(N+3) = f(n+7) = f(n+6) * (n+7)  = -1 * (n+7)      = -(N+3)

通过数学归纳法,证明了该关系适用于4的任意N倍数。

票数 19
EN

Code Golf用户

发布于 2018-04-13 11:43:28

05AB1E,8字节

输出nth号码

代码语言:javascript
复制
ÎD(®s)sè

在网上试试!

05AB1E,14字节

使用序列中的模式输出到N的数字列表

代码语言:javascript
复制
ÅÉāÉ·<*āÉ<‚øí˜

在网上试试!

解释

使用N=7的示例

代码语言:javascript
复制
ÅÉ               # List of odd numbers upto N
                 # STACK: [1,3,5,7]
  ā              # Enumerate 1-based
   É             # is odd?
                 # STACK: [1,3,5,7],[1,0,1,0]
    ·<           # double and decrement
                 # STACK: [1,3,5,7],[1,-1,1,-1]
      *          # multiply
                 # STACK: [1,-3,5,-7]
       āÉ<       # enumerate, isOdd, decrement
                 # STACK: [1,-3,5,-7],[0,-1,0,-1]
          ‚ø     # zip
                 # STACK: [[1, 0], [-3, -1], [5, 0], [-7, -1]]
            í    # reverse each
             ˜   # flatten
                 # RESULT: [0, 1, -1, -3, 0, 5, -1, -7]
票数 4
EN

Code Golf用户

发布于 2018-04-13 12:11:17

J,12字节

Arnauld港的答复:

代码语言:javascript
复制
4&|{0,],_1,-

在网上试试!

J,28字节

天真的解决方案:

代码语言:javascript
复制
{(0 _1$~]),@,.(_1^i.)*1+2*i.

输出第n个数字

在网上试试!

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

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

复制
相关文章

相似问题

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