书面数字序列


17

这是一个合理的琐碎序列,不在在线整数序列百科全书中

从一个空序列开始,然后将每个术语定义为用英文写出到目前为止序列中所有数字的字符数,这些数字不带空格。*

供参考(英文的所有(十进制)数字的字符数):

zero   one    two    three  four   five   six    seven  eight  nine
4      3      3      5      4      4      3      5      5      4

(这是A52360A5589的开始。)

由于空序列中存在零位,因此这使第一项a(0)=0

这使得第二个条目a(1)=4因为它需要四个字符来写入“零”,这是迄今为止唯一的数字。

这使第三个条目a(2)=8因为要再花四个字符来写“四个”,总共要八个字符才能写“ zerofour”。

这使第四个条目a(3)=13因为要再花五个字符才能写“八”,总共要十三个字才能写“ zerofoureight”。

这使第五个条目a(4)=21,这是因为要花更多的八个字符才能写“ onethree”,总共要花21个字符才能写“ zerofoureightonethree”。

...等等。以下是前100个条目:

0, 4, 8, 13, 21, 27, 35, 44, 52, 59, 67, 75, 84, 93, 102, 112, 121, 130, 142, 152, 162, 171, 182, 193, 205, 216, 225, 235, 247, 259, 270, 282, 293, 305, 318, 331, 344, 357, 371, 384, 398, 412, 422, 432, 444, 456, 467, 479, 492, 503, 516, 526, 536, 548, 561, 571, 583, 597, 610, 620, 630, 642, 652, 662, 671, 682, 693, 705, 718, 731, 744, 757, 771, 784, 798, 812, 823, 836, 849, 862, 873, 888, 903, 916, 926, 936, 948, 961, 971, 983, 997, 1010, 1024, 1038, 1055, 1070, 1086, 1101, 1114, 1127

*我们可以将其定义为其他语言和/或其他基础或有空格

挑战

给定n输出,以尽可能少的代码字节,以下任何一项:

  • 序列的前n项(适用于非负整数)
  • a(n)的值 (适用于非负整数)
  • 序列的第n项(应对正整数有效-即a(n1)

这是因此每种语言的最短答案以字节为单位,而最短的答案以字节为单位。无论是实用的语言还是深奥的语言,都不要让高尔夫语言阻止您输入喜欢的语言!


对于第一种选择,您是说1)1应该输出[0]并且0应该输出[]还是2)0应该输出[0](就像我以前的回答一样)?
Erik the Outgolfer

@EriktheOutgolfer我的意思是(1),因为它应该返回前n个项。即,选项是“输出直到但不包括a(n)的序列”,“输出a(n)”或“输出a(n-1)”。
乔纳森·艾伦

因此,a(x)= a(x-1)+ f(a(x-1))其中f(x)是写x所需的字符数?
FireCubez

@FireCubez是的,如果a(0)= 0并且f(x)是非空格字符以写入x的数字
Jonathan Allan

Answers:


12

Perl 6、45字节

{({[+] @_.join.uninames>>.comb X-6}...*)[$_]}

在线尝试!

当您可以直接获取数字名称时,无需花哨的模数!匿名代码块,该代码块返回序列的第n个值,或者您可以传递范围以获取值列表

说明:

{(                                     )[$_]}  # Index input into:
  {                               }...*        # An infinite sequence
                                               # Where each element is
   [+]   # The sum of
       @_.join  # All previous elements joined together
              .uninames  # The unicode names for each character
                         # These are names in the form "DIGIT ONE"
                       >>.comb  # Split each to lists of characters
                               X-6  # Subtract 6 from each

@JonathanAllan啊,我以为您已允许无限顺序返回,对不起。我会解决这个问题
乔金

很好,很好:)
乔纳森·艾伦

真好!»是一个字节,对不对?另外,[+]可能更有趣,并暗示二进制操作将如何变成减少器,但是sum它也是三个字节,并且与解决方案的其余部分保持一致,这可能不是最短的,但肯定是最优雅的高尔夫imo。
雷夫

@raiph »是两个字节,因此可以互换。
Jo King

也许这是作弊,但Rakudo不能正确处理Latin1源代码吗?如果是这样,请注意say '»'.encode('latin1').bytes 显示1。:)
raiph

8

JavaScript(ES6),69 68 61 58字节

返回a(n)

f=(n,s=0)=>n?f(n-1,[...s+''].map(d=>s+=(d+10)%23%3+3)|s):s

在线尝试!

怎么样?

将数字d转换为字母n

n=(((d×100+10)mod23)mod3)+3

 d | *100 | +10 | MOD 23 | MOD 3 | +3 | word
---+------+-----+--------+-------+----+-------
 0 |    0 |  10 |   10   |   1   |  4 | zero
 1 |  100 | 110 |   18   |   0   |  3 | one
 2 |  200 | 210 |    3   |   0   |  3 | two
 3 |  300 | 310 |   11   |   2   |  5 | three
 4 |  400 | 410 |   19   |   1   |  4 | four
 5 |  500 | 510 |    4   |   1   |  4 | five
 6 |  600 | 610 |   12   |   0   |  3 | six
 7 |  700 | 710 |   20   |   2   |  5 | seven
 8 |  800 | 810 |    5   |   2   |  5 | eight
 9 |  900 | 910 |   13   |   1   |  4 | nine

因为数字被分成数字字符,所以我们可以通过加10(作为字符串串联)来处理d×100+1010


7

Stax14 13 字节

┴♥7[╘⌂←─üTJ‼√

运行并调试

这里的关键见解是数字d需要((4 - 2 * d) // 3) % 3 + 3字母来拼写。(这是python整数除法和python样式的非负模数)


5

,21字节

Lai+:$+4335443554@^Pi

ññ

说明

Lai+:$+4335443554@^Pi
                       a is 1st cmdline arg; i is 0 (implicit)
La                     Loop (a) times:
                   Pi   Print i
                  ^     Split it into a list of characters (i.e. digits)
       4335443554@      Use each digit to index into this number, giving the length of the
                        name of the digit (0 -> 4, 1 -> 3, etc.)
     $+                 Sum the results
  i+:                   Increment i by that amount

2
我读完这篇文章后,large constant to the power of pi印象深刻。(它仍然令人印象深刻,但我最初的解释只是..更多)
世纪

4

Wolfram语言(Mathematica),57个字节

Nest[#+Tr@StringLength@IntegerName@IntegerDigits@#&,0,#]&

在线尝试!

Tr@StringLength@IntegerName@IntegerDigits@#&列出的数字#,将每个数字转换为英文名称,计算长度,并对结果求和。列表上有很多东西,这非常令人兴奋。然后,我们只是迭代地应用该定义。

TIO抱怨说它没有Internet连接,但是我不确定为什么,因为无论如何它都能找到正确的答案。也许它正在检查整数名称的更新?

a(n)a(0),a(1),,a(nNestNestList



4

05AB1E15 14字节

ÎFD•16\|/•sSèOO

在线尝试!

说明

Î                # initialize stack with 0 and input
 F               # input times do:
  D              # duplicate the current number
         sSè     # and use one copy to index into
   •Qb₁ñ•        # 433544355
            OO   # sum digits and sum the stack

4

APL(Dyalog Unicode)29 28字节

{{⍵++/3+3|⌊3÷⍨4-2×⍎¨⍕⍵}⍣⍵⊢0}

在线尝试!

f(input

感谢@The APL Orchard提供的帮助:

@ngn 2个字节;@ H.PWiz 3 4个字节。

现在使用@recursive的公式。

怎么样:

{{⍵++/3+3|⌊3÷⍨4-2×⍎¨⍕⍵}⍣⍵⊢0}  Main fn

 {                     }⍣⍵⊢0  Starting with 0, repeat (⍣) the inner fn input times
      3+3|⌊3÷⍨4-2×⍎¨⍕⍵       @recursive's formula
  ⍵++/                       ⍝ Sum with the input.

3

Python 2,61个字节

n=0
exec"for c in`n`:n+=(4-2*int(c))/3%3+3\n"*input()
print n

在线尝试!

使用递归的数字计数映射


Python 2,63个字节

f=lambda n:n and f(n-1)+sum((4-2*int(c))/3%3+3for c in`f(n-1)`)

在线尝试!

递归函数版本。由于要对进行两次递归调用,因此它花费了指数时间f(n-1)


真好!我很好奇您之前提到的表达式查找脚本是否找到了该表达式(或者可能是一个更短的表达式?)
Lynn

@Lynn我已经运行了脚本,但没有找到更好的脚本。13个字符对于完整搜索来说太大了,最长找不到9个字符。当我切断+3并将其限制为算术运算符(无逐位运算)且数字<= 4时,我发现了此解决方案,但没有什么短的或什至相同的长度(等效项除外)。
xnor18年

3

Python 2,71个字节

f=lambda n,k=0:n and f(n-1,k+sum(632179420>>3*int(d)&7for d in`k`))or k

在线尝试!


f=lambda n,k=0:n and f(n-1,k+sum(632179420>>3*int(d)&7for d in`k`))or k是相同的计数,但避免输出附件列表。
乔纳森·艾伦

从他们的staxx答案看来,递归算法将节省2个字节。我确实喜欢这个!
乔纳森·艾伦

3

MathGolf,17个字节

0\{_▒♀*♂+L%3%3+Σ+

在线尝试!

这使用Arnauld的方法。输出序列的第n个元素。如果空字符串对于可以a(0),那么我们可以0\在开头删除。

说明:

0\                 Setup 0 as the counter
  {                Loop input times
   _▒              Duplicate counter and split to list of digits
     ♀*            Multiply each element by 100
       ♂+          Add 10
         L%        Modulo by 23
           3%      Modulo by 3
             3+    Add 3
               Σ   Sum list
                +  And add to counter

3

腐霉菌,21个字节

u+Gs@L+L3jC\᯻3jGTQ0

在这里在线尝试。

u+Gs@L+L3jC\᯻3jGTQ0   Implicit: Q=eval(input()), T=10

u                Q0   Starting at 0, repeat the following Q times, with current value as G:
          C\᯻           Get character code 7163
         j   3          Convert the above to base 3, yields [1, 0, 0, 2, 1, 1, 0, 2, 2]
      +L3               Add 3 to each to generate digit length dictionary
              jGT       Get digits of G (convert to base 10)
    @L                  Lookup each value in the above in the dictionary, modular indexing
   s                    Take the sum
 +G                     Add G to the above

在Pyth的代码页中很可能不是一个字节。(我认为它使用UTF-8,在这种情况下,它是3个字节,并且j7163 3具有相同的长度;但是tio.run说Pyth具有SBCS。很神秘!)
Lynn

@Lynn你是完全正确的,我忘了字节数,我不好。我现在将代码保留原样并更新字节数
Sok






1

J,37个字节

(+1#.|(3+3|23|10+100*]),.&.":)@]^:[&0

在线尝试!

使用Arnauld的方法

说明:

参数是 n

                                 ^:    - apply the verb on the left hand site
                                   [   - n times
                                    &0 - to a starting value 0
 (                             )@]     - calculate for the current value of the argument
                         ,.&.":        - convert to string and then each char to digit
        (3+3|23|10+100*])              - map each digit to its word length
       |                               - a filler for the fork
    1#.                                - sum the lengths 
   +                                   - add them to the current value

1

在第一个评论后编辑。

打印所有条款

Scala,76个字节

def^(n:Int)=(1 to n).scanLeft(0)((y,_)=>y+(y+"").map(x=>(x*9+1)%13%3+3).sum)

在线尝试!

打印 n

Scala,72个字节

def^(n:Int)=Stream.iterate(0)(x=>x+(x+"").map(x=>(x*9+1)%13%3+3).sum)(n)

Scala,69个字节

def^(n:Int)=(0/:(1 to n))((y,_)=>y+(y+"").map(x=>(x*9+1)%13%3+3).sum)

Scala,67个字节

def s(b:Int):Stream[Int]=b#::s(b+(b+"").map(x=>(x*9+1)%13%3+3).sum)

Scala,67个字节

val s:Stream[Int]=0#::s.map(x=>x+(x+"").map(x=>(x*9+1)%13%3+3).sum)

在线尝试!


1
我不了解Scala,但我认为这既不是程序也不是函数,而是代码段(即,一旦n定义,它就可以在REPL上运行)。如果您知道Scala,可能很容易修复。另请注意,在Scala问题中一些打高尔夫球技巧可能会有所帮助。最后,发布一个在线解释器的链接很不错,TIO有Scala,很多PPCG成员都在使用。
乔纳森·艾伦

1
@JonathanAllan,谢谢,这非常有帮助。
Y Wit博士
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.