プライムでプログラムを見つける


9

レッツ・アサイン95から94までの数値0 印字可能なASCII文字

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

スペースは、0である!1であり、そうなるまでに~94ある我々はまた、(タブに95を割り当てます\t(改行まで)および96 \n)。

ここで、N番目の文字が97を法とするN番目の素数が割り当てられている文字より上の文字である無限文字列を考えます。この文字列を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を次に示します。

チャレンジ

いくつかの正の整数Mについて、最初のM個の素数を1行に1つずつ順に出力する、選択した言語で有効なプログラムであるSの部分文字列を見つけます。

たとえば、2はSのサブストリング(複数の場所で発生しますが、どこでも発生します)であり、出力が次のよう2な有効なCJamプログラムです

2

これは最初のM = 1の素数であり、1行に1つずつ順番に並べられます。

同様に、文字2N3N5列はSの部分文字列である可能性があり、2N3N5出力する有効なCJamプログラムです。

2
3
5

これは、最初のM = 3つの素数で、1行に1つずつ順番に並べられます。

得点

Mが最も高い提出物が勝ちます。タイブレーカーは最初に投稿された投稿に行きます。

細部

  • 最終行の後のオプションの後続改行を除いて、各行の単一の素数以外に追加の出力はありません。入力はありません。

  • 部分文字列は有限である限り、どのような長さでもかまいません。

  • 部分文字列はS内のどこにでも出現する可能性があります(Sは複数の場所に含まれる場合があります)。

  • プログラムは本格的なプログラムでなければなりません。REPL環境で実行されるとは限りません。

  • プログラムは、エラーなしで有限時間で実行および終了する必要があります。

  • 「改行」は、システム/インタープリターなどに必要な一般的な改行表現として解釈される場合があります。1文字として扱ってください。

部分文字列が始まるSのインデックスと、部分文字列自体でない場合は部分文字列の長さを指定する必要があります。部分文字列が存在する必要があることを示すだけではありません。

関連:巨大なBoggleボードでプログラムを探す


1
その大きな文字列を任意の数の文字まで生成するコードを与えることができますか?(私はあなたがすでに持っていると思います)
オプティマイザ

95の印刷可能なASCII文字がある場合、なぜ97を法とするのですか?気にしないでください。タブと改行も使用します。
SEがEVILであるためaditsuが辞任2015

0 mod 97が一度だけ発生する可能性があることを考えると、スペースの不足は本当に痛い...
Sp3000

@ Sp3000 Shoot、それは私には起こらなかった。:/
Calvin's Hobbies

回答:


18

Lenguage、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の場合、プログラムは最初2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356個の文字です。


疑わしい場合は、代わりにBFバリアントを使用します。
ymbirtt 2015

3
Lenguageが私の別の挑戦に触発されたのはおかしいです。それは私が自分の没落をもたらしているようなものです。
カルバンの趣味

3

CJam、M = 2

短くて甘い:

2NZ

このシーケンスは54398の位置から始まり、文字列の1インデックスを使用します。ここでオンラインテストできます

いくつかの可能なバリエーションを検索しようとしましたが、これが最初に見つかった解決策でした。

私は現在M = 3バージョンを見つけようとしていますが、妥当な期間内にバージョンを見つけることは期待していません。シーケンスが一様にランダム(近似)である場合、長さ5のシーケンスの開始インデックスは10 ^ 9のオーダーになる可能性があります。


確認済み:1e6{mp},97f%' f+"2NZ"# リンク(時間がかかります:P)
aditsuは、SEは悪であるため、終了
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.