四个螺旋轴


9

取数字0, 1, 2, 3, 4, ...并将它们按顺时针螺旋排列,从下开始,将每个数字写在其自己的单独正方形中。

然后,给定代表轴的四个不同且一致的ASCII字符(您的选择)之一,并输入整数n,输出n通过沿相应轴选择正方形来描述序列的第一项。

例如,下面是直到中间的排列螺旋29。假设我们使用u / d / l / r代表的四个字符up / down / left / right。然后,u作为输入,我们输出0, 5, 1, 4 ...(正y轴)直到n第t项。如果取而代之的l是我们,那么这将0, 3, 1, 1 ...取决于第三n个条件。

  2---3---2---4---2---5---2
  |                       |
  2   1---3---1---4---1   6
  |   |               |   |
  2   2   4---5---6   5   2
  |   |   |       |   |   |
  1   1   3   0   7   1   7
  |   |   |   |   |   |   |
  2   1   2---1   8   6   2
  |   |           |   |   |
  0   1---0---1---9   1   8
  |                   |   |
  2---9---1---8---1---7   2

这些是OEIS上的序列:

例子

d 19
[0, 1, 1, 8, 3, 7, 6, 2, 1, 5, 1, 1, 6, 2, 2, 1, 3, 4, 0]

r 72
[0, 7, 1, 7, 4, 2, 8, 1, 1, 3, 1, 2, 0, 2, 3, 1, 3, 4, 6, 5, 5, 5, 7, 7, 8, 8, 9, 6, 8, 1, 1, 1, 2, 3, 1, 8, 0, 6, 1, 7, 0, 9, 2, 8, 4, 3, 2, 1, 1, 7, 2, 6, 2, 1, 3, 3, 5, 5, 3, 2, 2, 0, 4, 3, 2, 5, 4, 6, 5, 0, 5, 1]

u 1
[0]

规则

  • 如果适用,您可以假定输入/输出将适合您语言的本机Integer类型。
  • 如果使用整数表示四个轴,则可以使用负整数而不违反规则。
  • 输入和输出可以通过任何方便的方法给出。
  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 禁止出现标准漏洞
  • 这是 因此所有常规的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。

我们可以在几个方向上取负整数吗?
mbomb007 '18

@ mbomb007当然可以。
AdmBorkBork

似乎不太实用,但是我们可以返回一个整数,该整数除了前导零(无论如何暗示)之外,它具有所需的数字?
暴民埃里克(Erik the Outgolfer)

@AdmBorkBork基本上,我没有想到这样的解决方案,只是想问一下。:)
暴民埃里克

挑战由输出判断。因此,如果不包括零,我认为那是错误的,因为如果字符串输出中排除了零,您会认为它是错误的。Python可以输出带有前导零的整数,所以为什么不能使用其他语言。
mbomb007 '18

Answers:


5

Python 2中94个 89 84 83 74 72 70字节

我使用WolframAlpha并确定5 n > 4n 2 + 3n 的上限似乎足够。可以免费将其更改为9 n。要尝试更大的输入,请使用9*n*n而不是以5**n避免耗尽内存。

lambda d,n:["".join(map(str,range(5**n)))[x*(4*x+d)]for x in range(n)]

在线尝试!

方向输入为:

  • 3:对
  • -3:下降
  • -1:左
  • 1:向上

借助Rod节省了14个
字节借助Jonathan Allan节省了2个字节



1

果冻 19  18 字节

使用mbomb007的Python答案中的5 n技巧

4,0jḅɗ@€ị5*D€FʋṖ0;

双向链接n,位于左侧d,整数取自:[-3,-1,1,3]:[v,<,^,>]

在线尝试!

一个20字节的替代方案,它既快又不会对这么小的n进行段错误,它是:

²×5D€ƲFị@4,0jḅɗ@€Ṗ0;

在线尝试!

怎么样?

4,0jḅɗ@€ị5*D€FʋṖ0; - Link: integer, n; integer, d
     ɗ@€           - last three links as a dyad with sw@pped arguments for €ach (of implicit range [1,n])
4,0                -   literal list [4,0]
   j               -   join with d = [4,d,0]
    ḅ              -   convert from base n = 4*n^2+d*n+0
        ị          - index into...
              ʋ    - last four links as a monad:
         5         -   five
          *        -   exponentiate = 5^n
           D€      -   decimal list of each (in implicit range [1,5^n])
            F      -   flatten into a single list of the digits
               Ṗ   - pop (drop the final element)
                0; - prepend a zero

1

将工作相当大的n(例如+1000)

JavaScript(Node.js),104字节

f=(d,n)=>--n?[...f(d,n),C(n*(4*n+d))]:[0]
C=(n,N=i=0)=>n>N?C(n-N,(p=10**i)*9*++i):+((p+--n/i|0)+"")[n%i]

在线尝试!

说明

  • 3:对
  • -3:下降(根据评论,-3合法)
  • -1:左
  • 1:向上(例如@ mbomb007)

Champernowne常数的C位数字

________________________________________________________

效率较低的方法(无法使用1000+)

JavaScript(Node.js),81字节

f=(d,n)=>eval(`for(r=[],s=i=I="";I<n;)(s+=i++)[u=I*(4*I+d)]&&r.push(s[I++,u]),r`)

在线尝试!


0

Stax,13 个字节

â╞ê←τ"(]]⌐┘?N

运行并调试

它接受带有方向的输入,然后是计数。右,上,剩下而下135,和7分别。运行三个提供的测试用例需要一整分钟的时间。

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.