1、2、3、14…还是15?


32

爱尔兰摇滚乐队U2的一著名歌曲开始,歌手Bono用西班牙语说“ 1、2、3、14 ” (“ uno,dos,tres,catorce ”)。

关于这些数字的含义,有各种 理论。显然官方的解释是“ 那天晚上我们喝太多了 ”。但是有一个更有趣的假设:Bono指的是OEIS中的一些整数序列,例如

A107083

k这样的整数10^k + 31就是素数。
12314184454,...

在一次采访中,当被问到不可避免的问题“为什么14”时,博诺承认他对这个数字有些厌倦。记者改用“ 15”,在那天晚上的音乐会上,歌词的确改为了“ 1、2、3、15”。(故事可以在这里用西班牙语阅读)。记者很有可能从

A221860

指数k这样prime(k) - k的幂2,其中prime(k)k个素数。
123153921194189897,...

挑战

用相同的语言编写两个程序。第一个应该输入n并输出A107083n-th项,即第一项。同样,第二个应输出A221860的-th项,即第一个项。nnn

得分总和长度的两个节目的,以字节为单位,加上正方形的的Levenshtein距离的两个节目的字节表示之间。

如果使用字符编码,每个字符对应一个字节,则可以使用此脚本测量Levenshtein距离。

例如,如果两个程序均为abcdefghbcdEEfg,则得分为8 + 7 + 4^2 = 31

最低分获胜。

附加规则

  • 对于每个序列,输出可以1基于-或- 0基于(因此,如果其中一个程序1基于-,而另一个程序基于-,则允许输出0)。

  • 每个程序可以一致但彼此独立地输出n-th项或first n项。

  • 程序或功能被允许,独立于每个序列。

  • 输入和输出方式和格式照常灵活禁止出现标准漏洞

Answers:


20

果冻,16 + 16 +1²= 33

A107083

⁵*+31ÆḍÆNB>/
1Ç#

在线尝试!

A221860

⁵*+31ÆạÆNB>/
1Ç#

在线尝试!

怎么运行的

1Ç#           Main link. Argument: n

1             Set the return value to 1.
 Ç#           Call the helper link with arguments k, k + 1, k + 2, ... until n of
              them return a truthy value. Return the array of n matches.


⁵*+31ÆḍÆNB>/  Helper link. Argument: k

⁵*            Yield 10**k.
  +31         Yield 10**k + 31.
     Æḍ       Count the proper divisors of 10**k + 31.
              This yields c = 1 if 10**k + 31 is prime, an integer c > 1 otherwise.
       ÆN     Yield the c-th prime.
              This yields q = 2 if 10**k + 31 is prime, a prime q > 2 otherwise.
         B    Binary; yield the array of q's digits in base 2.
          >/  Reduce by "greater than".
              This yields 1 if and only if the binary digits match the regex /10*/,
              i.e., iff q is a power of 2, i.e., iff 10**k + 31 is prime.


⁵*+31ÆạÆNB>/  Helper link. Argument: k

     Æ        Unrecognized token.
              The token, as well as all links to its left, are ignored.
       ÆN     Yield p, the k-th prime.
      ạ       Take the absolute difference of k and p, i.e., p - k.
         B    Binary; yield the array of (p - k)'s digits in base 2.
          >/  Reduce by "greater than".
              This yields 1 if and only if the binary digits match the regex /10*/,
              i.e., iff p - k is a power of 2.


4

果冻,12 + 12 +8²= 88字节

1,2,3,14

ÆN_µæḟ2=
1Ç#

在线尝试!

1,2,3,15

10*+31ÆP
1Ç#

在线尝试!


1)应该输出第n个项,而不是前n个项。2)嘿,我们的一个片段几乎是相同的!3)呃... 10感觉很长。
暴民埃里克(Erik the Outgolfer)

1)每个程序可以独立输出前n个项,而不是输出第n个项。
Leaky Nun

嗯,所以这会使我的答案得分更低。
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer抱歉,我将其合并到正文中以更加清楚(以前只是在“附加规则”下)
Luis Mendo


3

MATL,17 + 17 +7²= 83

1,2,3,14,...(17个字节)

0G:"`Q11qy^31+Zp~

在线尝试!

1,2,3,15,...(17个字节)

0G:"`QtYqy-Bzq~p~

在线尝试!

两者都采用类似的方案,0G:"`Q即当条件满足时,计数器运行并返回n。这样,实际程序就非常简单了。该15变体具有一些填充~p~符()以最大程度地减少Levenshtein距离,而该14程序采用11qy而不是t10w更好地匹配其他程序。

共享的部分:

0      % Push counter (initially zero)
 G:"   % Loop `n` times
    `  % Do .... while true
     Q % Increment counter

热门节目:

11q         % Push 10
   y        % Duplicate counter
    ^       % Power
     31+    % Add 31
        Zp  % isprime
          ~ % If not, implicitly continue to next iteration. 
            % Else, implicit display of counter.

底层程序:

tYq         % Nth prime based on counter
   y-       % Duplicate counter, subtract from nth prime.
     Bzq    % Number of ones in binary presentation, minus one (only zero for powers of two).
        ~p~ % Filler, effectively a NOP.
            % If not zero, implicitly continue to next iteration
            % Else, implicitl display of counter.

1

05AB1E(旧版),10 + 11 + 6 2 = 84 69 57 字节

1,2,3,14,...(A107083)

ε>а32<+p

在线尝试。

1,2,3,15,...(A221860)

ε>Ð<ØαD<&_

在线尝试。

两者都输出从1开始 ñ值。

使用05AB1E的旧版本,因为它½增加counter_variable1,如果堆栈的顶部是truthy)的每次迭代之后隐含µ-loops(counter_variable不等于一种但是,...)。

说明:

Î            # Push 0 and the input
 µ           # While the counter_variable is not equal to the input yet:
  >          #  Increase the top by 1
   Ð         #  Triplicate it (which is our `k`)
    °32<+    #  Take 10 to the power `k`, and add 31
         p   #  Check if this is a prime
             #  (implicit: if it is a prime, increase the counter_variable by 1)
             # (implicitly output the top of the stack after the while-loop)

Î            # Push 0 and the input
 µ           # While the counter_variable is not equal to the input yet:
  >          #  Increase the top by 1
   Ð         #  Triplicate it (which is out `k`)
           #  Get the 0-indexed k'th prime
      α      #  Get the absolute difference of this prime with the copied `k`
       D<&   #  Calculate `k` Bitwise-AND `k-1`
          _  #  And check if this is 0 (which means it's a power of 2)
             #  (implicit: if it is 0, increase the counter_variable by 1)
             # (implicitly output the top of the stack after the while-loop)
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.