Tìm chương trình trong các số nguyên tố


9

Hãy gán các số từ 0 đến 94 cho 95 ký tự ASCII có thể in :

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

Dung lượng là 0, !là 1 và cứ tiếp tục ~là 94. Chúng tôi cũng sẽ gán 95 cho tab ( \t) và 96 cho dòng mới ( \n).

Bây giờ hãy xem xét chuỗi vô hạn có ký tự Nth là ký tự ở trên mà số nguyên tố thứ N , modulo 97, đã được gán cho. Chúng tôi sẽ gọi chuỗi này S.

Ví dụ, số nguyên tố đầu tiên là 2 và 2 mod 97 là 2 và 2 được gán cho ", vì vậy ký tự đầu tiên của S là ". Tương tự, số nguyên tố thứ 30 là 113 và 113 mod 97 là 16 và 16 được gán cho 0, vì vậy ký tự thứ 30 của S là 0.

1000 ký tự đầu tiên của S như sau:

"#%'+-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 biến các tab thành không gian, vì vậy đây là một PasteBin với các tab còn nguyên vẹn.

Thử thách

Tìm một chuỗi con của S là một chương trình hợp lệ trong ngôn ngữ bạn chọn, xuất ra các số nguyên tố M đầu tiên, mỗi số trên một dòng, theo thứ tự , cho một số nguyên dương M.

Ví dụ: 2là một chuỗi con của S (nó xuất hiện ở nhiều nơi nhưng bất kỳ sẽ làm được) và 2là một chương trình CJam hợp lệ có đầu ra là

2

đó là số nguyên tố M = 1 đầu tiên, một số trên mỗi dòng, theo thứ tự.

Tương tự, chuỗi 2N3N5có thể là chuỗi con của S ở đâu đó và 2N3N5là chương trình CJam hợp lệ xuất ra

2
3
5

đó là số nguyên tố M = 3 đầu tiên, mỗi số một dòng, theo thứ tự.

Chấm điểm

Bài nộp có M cao nhất sẽ thắng. Tie breaker đi đến trình gửi đầu tiên.

Chi tiết

  • Không nên có đầu ra bổ sung ngoài các số nguyên tố duy nhất trên mỗi dòng, ngoại trừ một dòng mới tùy chọn sau dòng cuối cùng. Không có đầu vào.

  • Chuỗi con có thể dài bất kỳ chừng nào nó còn hữu hạn.

  • Chuỗi con có thể xảy ra ở bất cứ đâu trong S. (Và S có thể chứa nó ở nhiều nơi.)

  • Chương trình phải là một chương trình chính thức. Bạn không thể cho rằng nó được chạy trong môi trường REPL.

  • Chương trình phải chạy và chấm dứt trong một khoảng thời gian hữu hạn mà không có lỗi.

  • "Dòng mới" có thể được hiểu là bất kỳ đại diện dòng mới nào cần thiết cho hệ thống / trình thông dịch / v.v. Chỉ cần coi nó là một nhân vật.

Bạn phải đưa ra chỉ mục của S nơi chuỗi con của bạn bắt đầu, cũng như độ dài của chuỗi con nếu không phải là chuỗi con. Bạn không chỉ cho thấy chuỗi con phải tồn tại.

Liên quan: Tìm kiếm các chương trình trong một bảng Boggle lớn


1
Bạn có thể cung cấp mã để tạo ra chuỗi lớn lên đến bất kỳ số lượng ký tự nào không? (Tôi cho rằng bạn đã có một cái)
Trình tối ưu hóa

Nếu có 95 ký tự ASCII có thể in được thì tại sao bạn lại thực hiện modulo 97? Ah nevermind, bạn cũng sử dụng tab và dòng mới.
aditsu nghỉ việc vì SE là EVIL

Xem xét rằng 0 mod 97 chỉ có thể xảy ra một lần, việc thiếu không gian thực sự gây tổn thương ...
Sp3000 23/2/2015

@ Sp3000 Shoot, điều đó đã không xảy ra với tôi. : /
Sở thích của Calvin

Câu trả lời:


18

Chiều dài , M =

Tất cả các chương trình bắt đầu ở đầu chuỗi. Chương trình Python được viết kém sau đây tính toán số lượng ký tự cần thiết cho một M. đã cho.

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)

Ví dụ, đối với M = 5, chương trình là 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 ký tự đầu tiên.


Nếu nghi ngờ, có một biến thể BF sẽ làm điều đó cho bạn.
ymbirtt

3
Thật buồn cười khi Lenguage được truyền cảm hứng từ một thử thách khác của tôi. Nó giống như tôi đang mang lại sự sụp đổ của riêng tôi.
Sở thích của Calvin

3

Camam, M = 2

Ngắn và ngọt:

2NZ

Chuỗi này bắt đầu ở vị trí 54398, sử dụng lập chỉ mục 1 của chuỗi. Bạn có thể kiểm tra nó trực tuyến tại đây .

Tôi đã cố gắng tìm kiếm một vài biến thể có thể, nhưng đây là giải pháp đầu tiên tôi tìm thấy.

Tôi hiện đang cố gắng tìm phiên bản M = 3, nhưng tôi không mong đợi tìm thấy phiên bản trong một khoảng thời gian hợp lý. Nếu chuỗi là ngẫu nhiên thống nhất (một xấp xỉ), thì chỉ số bắt đầu cho chuỗi dài 5 có thể theo thứ tự 10 ^ 9.


Đã xác minh: 1e6{mp},97f%' f+"2NZ"# link (mất một lúc: p)
aditsu thoát vì SE là NGÀY 22/2/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.