Asal Olarak Program Bulma


9

Yazdırılabilir 95 ASCII karakterine 0 ile 94 arasındaki sayıları atayalım :

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

Boşluk 0, !1'dir ve ~94'e kadar devam eder. Ayrıca tab ( \t) öğesine 95 ve newline ( \n) öğesine 96 atayacağız .

Şimdi Nth karakteri, N numaralı asal sayı olan modulo 97'nin atandığı karakter olan sonsuz dizeyi düşünün . Bu dizeye S diyeceğiz.

Örneğin, ilk asal sayı 2'dir ve 2 mod 97 2'dir ve 2 atandı ", bu nedenle S'nin ilk karakteri ". Benzer şekilde, 30. asal sayı 113'tür ve 113 mod 97 16'dır ve 16 atandı 0, bu nedenle S'nin 30. karakteri 0.

S'nin ilk 1000 karakteri aşağıdaki gibidir:

"#%'+-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 sekmeleri boşluklara dönüştürür, bu yüzden sekmeleri olduğu gibi bir PasteBin .

Meydan okuma

Seçtiğiniz dilde geçerli bir program olan S'nin bir alt dizesini bulun , bazı pozitif tamsayı M için sırayla her satırda bir tane olmak üzere ilk M asal sayılarını çıktılar.

Örneğin, 2S'nin bir alt dizesi (birden fazla yerde gerçekleşir, ancak herhangi biri yapar) ve çıktısı 2geçerli bir CJam programıdır.

2

ilk M = 1 asal sayıdır, her satıra birer birer sırayla.

Benzer şekilde, dize 2N3N5bir yerde S'nin bir alt dizesi olabilir ve 2N3N5çıktı veren geçerli bir CJam programıdır.

2
3
5

bu, her bir satıra bir tane olacak şekilde, ilk M = 3 asal sayıdır.

puanlama

En yüksek M değerine sahip sunum kazanır. Kravat kırıcı ilk gönderilen gönderiye gider.

ayrıntılar

  • Son satırdan sonraki isteğe bağlı bir son satır hariç, her satırdaki tek asal sayıların yanında ek çıktı olmamalıdır. Girdi yok.

  • Alt dize, sonlu olduğu sürece herhangi bir uzunlukta olabilir.

  • Alt dize S içinde herhangi bir yerde olabilir (Ve S onu birden fazla yerde içerebilir.)

  • Program tam teşekküllü bir program olmalıdır. Bir REPL ortamında çalıştığını varsayamazsınız.

  • Program hatasız çalışmalı ve sınırlı bir süre içinde sonlandırılmalıdır.

  • "Newline", sisteminiz / yorumcunuz / vb. İçin gerekli herhangi bir genel newline temsili olarak yorumlanabilir. Sadece bir karakter gibi davran.

Alt dizenin başladığı yerde S dizinini ve alt dizenin kendisi değilse alt dizenin uzunluğunu belirtmelisiniz. Sadece alt dizenin var olması gerektiğini gösteremezsiniz.

İlgili: Büyük Boggle panosunda program arıyor


1
Bu büyük dizeyi herhangi bir sayıda karaktere kadar üretmek için kod verebilir misiniz? (Sanırım zaten bir tane var)
Optimizer

Yazdırılabilir 95 ASCII karakteri varsa neden 97 modulo yapıyorsunuz? Ah boş, ayrıca sekme ve yeni satır kullanın.
aditsu çıkıldı çünkü SE EVIL

0 mod 97'nin sadece bir kez olabileceği düşünüldüğünde, alan eksikliği gerçekten acıyor ...
Sp3000

@ Sp3000 Vur, bu benim için olmadı. : /
Calvin'in Hobileri

Yanıtlar:


18

Lenguage , M = ∞

Tüm programlar dizenin başında başlar. Aşağıdaki kötü yazılmış Python programı, belirli bir M için kaç karakter gerektiğini hesaplar.

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)

Örneğin, M = 5, program ilk 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 karakterdir.


Şüpheniz varsa, bunu sizin için yapacak bir BF varyantı var.
ymbirtt

3
Lenguage'in bir başka zorluğumdan nasıl ilham aldığı komik. Sanki kendi çöküşümü getiriyorum.
Calvin'in Hobileri

3

CJam, M = 2

Kısa ve güzel:

2NZ

Bu dizi, dizenin 1-indekslenmesi kullanılarak 54398 konumunda başlar. Buradan çevrimiçi olarak test edebilirsiniz .

Birkaç olası varyasyon aramaya çalıştım, ancak bulduğum ilk çözüm buydu.

Şu anda bir M = 3 sürümü bulmaya çalışıyorum, ancak makul bir süre içinde bir tane bulmayı beklemiyorum. Dizi eşit olarak rastgele ise (yaklaşık bir değer), uzunluk 5 dizisi için başlangıç ​​indeksi 10 ^ 9 mertebesinde olabilir.


Doğrulandı: 1e6{mp},97f%' f+"2NZ"# bağlantı (bir süre alır: p)
SE, EVIL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.