在Prime中查找程序


9

让我们将数字0到94分配给95个可打印的ASCII字符

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

空格为0,!为1,依此类推,直到~94。我们还将为Tab(\t)分配95,将newline(\n)分配给96 。

现在考虑无限字符串,其第N个字符是已分配给第N个质数模97 的字符。我们将其称为S。

例如,第一个素数是2,而2 mod 97是2,并且将2分配给",因此S的第一个字符是"。类似地,第30个素数是113,而113 mod 97是16,并且分配了16 0,所以S的第30个字符是0

S的前1000个字符如下:

"#%'+-137=?EIKOU[]cgiosy $&*,0>BHJTV\bflrt~
#%1=ACGMOY_ekmswy"046:HNXZ^dlrx|!)-5?AKMSW]eiko{"&.28DFX^hntv|%+139?CEQ[]agmo{  $,6>HPV\`hnrz~+5ACMOSU_mqsw$(*.BFNX`djp~!'-5;GKQS]_eoq{}"48:>DJRX^tv
'17=EQU[aciu    026<>DHJNZ\b#)/7ISaegkqy}   $0:<@BFLXdlx~!'/3;?MQWY]ceku(.24LPR\hjt|!'-?EIKWamu$28<>BDNZ`fxz)+AGOUY[_gmwy"0:@LNRT^jl|~#')3;Meiow&(,4DFJRX^bnp%+-37=KQUW]agsy    ,06BJPTn
)15;=CYegw  ".<FHLTZ`dfjpx|~#-/9AES]ikquw&48>FLPbjtz
'1=KOU[]y{$,0>BJV\hlr%/1A[_amsw"(04<RTXZf!#)/59?AMQ]_ik{},2FV^bdhj
'39CEIOQWacoy{$28<BJPVfrtx%+/7AIOUkqs}*.4FHR`dfp~!);?EGKQS_cw,8:>DJLRhjp
%139EUW[aosu&>HNPZ\fhrxz#%/5=[egqy  (:@LXZlrv|!35?MSWY]uw"(8@FL^nptz|!'17COacim &>BDHNP\`n+5;GU[eqsw}$*46:HNTX^`jl|'/AEKWY_ek&,:>FPXdvz|
7CIK[agu    ,0NTZ`hnrt
%)+1GMOSegkwy   "<BHLT^~-/59;?AKY_cku{.24:X\dntz!'37=?EIOQ[]ms&*6D`fz~/7=AGU[akmw"*46@HT^vx|#)-5GQW]_eo{}&,28@FPVX^djt|39OQcgoy6>PTV`fhnr#+7IY_ams} (*0:HLdfvx!#-AEGKScioq},48>\^hjptz
'-1=CKW[iu  6<HNPfn
)/=ACIS[aek(6@BNXZjl~5GM]ouw(,24>FPV\dhnpz|'+179EIWims&*28<DHV\`nz~
=AY_eq}*046:LR^

Stack Exchange会将标签页变成空格,因此这是一个粘贴完标签的PasteBin

挑战

查找S 的子字符串,该子字符串是使用您选择的语言的有效程序,该字符串输出前M个质数,每行按顺序输出一些正整数M。

例如,2是S的子字符串(它出现在多个位置,但是任何地方都可以),并且2是有效的CJam程序,其输出是

2

这是第一个M = 1个质数,每行依次。

同样,该字符串2N3N5可能是某个地方S的子字符串,并且2N3N5是一个有效的CJam程序,可输出

2
3
5

这是第一个M = 3个质数,每行依次。

计分

M最高的提交获胜。抢领带的人首先提交的投稿。

细节

  • 除了最后一行之后的可选尾随换行符外,每行上除了单质数外不应有其他输出。没有输入。

  • 子字符串可以是任何长度,只要它是有限的即可。

  • 子字符串可以出现在S内的任何位置。(并且S可以在多个位置包含它。)

  • 该程序必须是完整的程序。您可能不认为它在REPL环境中运行。

  • 该程序必须在有限的时间内运行并终止,并且没有错误。

  • “换行符”可以解释为系统/解释器/等所必需的任何常见换行符表示形式。只需将其视为一个字符即可。

您必须给出子字符串开始处的S索引,以及子字符串本身的长度(如果不是子字符串本身)。您不仅可以显示子字符串必须存在。

相关:在庞大的Boggle开发板中寻找程序


1
您能否提供代码以生成最多包含任意数量字符的大字符串?(我想您已经有一个)
Optimizer

如果有95个可打印的ASCII字符,那么为什么要对97做模?没关系,您还使用制表符和换行符。
aidtsu退出是因为SE为EVIL,2015年

考虑到0 mod 97只能出现一次,因此空间的缺乏确实会伤害……
Sp3000

@ Sp3000拍摄,这对我而言没有发生。:/
卡尔文的爱好2015年

Answers:


18

语言,M =∞

所有程序都从字符串的开头开始。以下编写不佳的Python程序计算给定M所需的字符数。

def program_length(n):
    PLUS, MINUS, DOT = '000', '001', '100'
    i = 1
    s = ''
    while n > 0:
        i += 1
        if all(i%f for f in range(2,i)): 
            s += str(i) + '\n'
            n -= 1
    out = '110111'
    ch = 0
    for c in s:
        dif = ord(c) - ch
        if dif > 0: out += PLUS * dif
        else: out += MINUS * -dif
        out += DOT
        ch = ord(c)
    return int(out, 2)

例如,对于M = 5,程序为第一个245859506172882880048637987325576329947003145030633228734475877191436716712773885698772632308174620710051184641341761583699526687902329863472959773907262502745087264112362394811346033479848369668633559359892492433097876073876076076345072840760740760760740760760-760-940-760-450-450-450-230-450-450-450-450-450-450-450-450-450-450-450-450-180-450-180-450-180-450-180-450-180-450-180-760-760-760-760-760-760-760-80-80-80-80-80


如有疑问,可以使用BF变体为您完成。
ymbirtt

3
有趣的是,Lenguage受我的另一个挑战启发。就像我要造成自己的垮台一样。
加尔文的爱好

3

CJam,M = 2

简短而甜美:

2NZ

该序列使用字符串的1索引从位置54398开始。您可以在此处在线测试。

我尝试搜索一些可能的变体,但这是我找到的第一个解决方案。

我目前正在尝试查找M = 3的版本,但是我不希望在合理的时间内找到一个。如果序列是一致随机的(近似值),则长度为5的序列的起始索引可能为10 ^ 9。


已验证:1e6{mp},97f%' f+"2NZ"# 链接(花了一段时间:p)
由于SE为EVIL,aditsu退出了
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.