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.