Trovare programmi nei Primes


9

Assegniamo i numeri da 0 a 94 ai 95 caratteri ASCII stampabili :

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

Lo spazio è 0, !è 1 e così via fino a ~94. Assegneremo anche 95 a tab ( \t) e 96 a newline ( \n).

Consideriamo ora la stringa infinita il cui nono carattere è il carattere sopra al quale è stato assegnato l'ennesimo numero primo , modulo 97. Chiameremo questa stringa S.

Ad esempio, il primo numero primo è 2, e 2 mod 97 è 2, e 2 è assegnato a ", quindi il primo carattere di S è ". Allo stesso modo, il 30 ° numero primo è 113, e 113 mod 97 è 16, e 16 è assegnato a 0, quindi il 30 ° carattere di S è 0.

I primi 1000 caratteri di S sono i seguenti:

"#%'+-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 trasforma le schede in spazi, quindi ecco un PasteBin con le schede intatte.

Sfida

Trova una sottostringa di S che sia un programma valido nella tua lingua di scelta che produca i primi numeri primi M, uno per riga, in ordine , per un numero intero positivo M.

Ad esempio, 2è una sottostringa di S (si verifica in più punti ma tutti lo faranno) ed 2è un programma CJam valido il cui output è

2

che è il primo M = 1 numeri primi, uno per riga, in ordine.

Allo stesso modo, la stringa 2N3N5può essere una sottostringa di S da qualche parte, ed 2N3N5è un programma CJam valido che genera

2
3
5

che è il primo M = 3 numeri primi, uno per riga, in ordine.

punteggio

La presentazione con la M più alta vince. Il pareggio va alla presentazione inviata per prima.

Dettagli

  • Non dovrebbero esserci output aggiuntivi oltre ai singoli numeri primi su ciascuna riga, ad eccezione di una nuova riga finale opzionale dopo l'ultima riga. Non ci sono input.

  • La sottostringa può essere di qualsiasi lunghezza purché sia ​​finita.

  • La sottostringa può verificarsi ovunque all'interno di S. (E S può contenerla in più punti.)

  • Il programma deve essere un programma completo. Non si può presumere che sia eseguito in un ambiente REPL.

  • Il programma deve essere eseguito e terminato in un tempo limitato senza errori.

  • "Newline" può essere interpretato come qualsiasi rappresentazione newline comune necessaria per il proprio sistema / interprete / ecc. Trattalo come un personaggio.

È necessario fornire l'indice di S dove inizia la sottostringa, nonché la lunghezza della sottostringa se non la sottostringa stessa. Potresti non solo mostrare che la sottostringa deve esistere.

Correlati: Alla ricerca di programmi in un'enorme boggle board


1
Puoi dare il codice per produrre quella grande stringa fino a un numero qualsiasi di caratteri? (Suppongo che tu ne abbia già uno)
— Ottimizzatore

Se ci sono 95 caratteri ASCII stampabili, allora perché stai facendo modulo 97? Ah non importa, usi anche tab e newline.
— Aditsu ha smesso perché SE è MALE

Considerando che 0 mod 97 può verificarsi solo una volta, la mancanza di spazio fa davvero male ...
— Sp3000

@ Sp3000 Shoot, che non mi è venuto in mente. : /
— Calvin's Hobbies

Risposte:


18

Lenguage , M = ∞

Tutti i programmi iniziano all'inizio della stringa. Il seguente programma Python scritto male calcola quanti caratteri sono necessari per un dato 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)

Ad esempio, per M = 5, il programma è il primo 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 caratteri.


In caso di dubbio, c'è una variante BF che lo farà per te.
— ymbirtt,

3
È divertente come Lenguage sia stato ispirato da un'altra mia sfida. È come se stessi causando la mia caduta.
— Calvin's Hobbies,

3

CJam, M = 2

Breve e dolce:

2NZ

Questa sequenza inizia nella posizione 54398, usando l'indicizzazione 1 della stringa. Puoi provarlo online qui .

Ho tentato di cercare alcune possibili varianti, ma questa è stata la prima soluzione che ho trovato.

Attualmente sto cercando di trovare una versione M = 3, ma non mi aspetto di trovarne una entro un periodo di tempo ragionevole. Se la sequenza è uniformemente casuale (un'approssimazione), l'indice iniziale per una sequenza di lunghezza 5 potrebbe essere dell'ordine di 10 ^ 9.


Verificato: 1e6{mp},97f%' f+"2NZ"# link (richiede un po 'di tempo: p)
— aditsu ha chiuso perché SE è MALE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.