Trouver des programmes dans les primes


9

Attribuons les chiffres de 0 à 94 aux 95 caractères ASCII imprimables :

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

L'espace est 0, !est 1, et ainsi de suite jusqu'à ~94. Nous assignerons également 95 à tab ( \t) et 96 à newline ( \n).

Considérons maintenant la chaîne infinie dont le Nième caractère est le caractère au-dessus auquel le Nième nombre premier , modulo 97, a été affecté. Nous appellerons cette chaîne S.

Par exemple, le premier nombre premier est 2, et 2 mod 97 est 2, et 2 est affecté à ", donc le premier caractère de S est ". De même, le 30e nombre premier est 113, et 113 mod 97 est 16, et 16 est affecté à 0, donc le 30e caractère de S est 0.

Les 1000 premiers caractères de S sont les suivants:

"#%'+-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 transforme les onglets en espaces, voici donc un PasteBin avec les onglets intacts.

Défi

Trouvez une sous - chaîne de S qui est un programme valide dans la langue de votre choix qui produit les M premiers nombres premiers, un par ligne, dans l'ordre , pour un entier positif M.

Par exemple, 2est une sous-chaîne de S (elle se produit à plusieurs endroits mais tout le monde le fera), et 2est un programme CJam valide dont la sortie est

2

qui est les premiers M = 1 nombres premiers, un par ligne, dans l'ordre.

De même, la chaîne 2N3N5peut être une sous-chaîne de S quelque part et 2N3N5est un programme CJam valide qui génère

2
3
5

qui est le premier M = 3 nombres premiers, un par ligne, dans l'ordre.

Notation

La soumission avec le plus haut M gagne. Le bris d'égalité va à la soumission publiée en premier.

Détails

  • Il ne devrait pas y avoir de sortie supplémentaire en plus des nombres premiers simples sur chaque ligne, à l'exception d'une nouvelle ligne facultative après la dernière ligne. Il n'y a aucune entrée.

  • La sous-chaîne peut être de n'importe quelle longueur tant qu'elle est finie.

  • La sous-chaîne peut se produire n'importe où dans S. (Et S peut la contenir à plusieurs endroits.)

  • Le programme doit être un programme à part entière. Vous ne pouvez pas supposer qu'il est exécuté dans un environnement REPL.

  • Le programme doit s'exécuter et se terminer en un temps limité sans erreur.

  • "Newline" peut être interprété comme toute représentation de nouvelle ligne commune nécessaire à votre système / interprète / etc. Traitez-le comme un seul personnage.

Vous devez donner l'index de S où commence votre sous-chaîne, ainsi que la longueur de la sous-chaîne sinon la sous-chaîne elle-même. Vous pouvez non seulement montrer que la sous-chaîne doit exister.

En relation: Recherche de programmes dans un immense tableau Boggle


1
Pouvez-vous donner le code pour produire cette grosse chaîne jusqu'à un certain nombre de caractères? (Je suppose que vous en avez déjà un)
Optimizer

S'il y a 95 caractères ASCII imprimables, alors pourquoi faites-vous modulo 97? Ah peu importe, vous utilisez également tab et newline.
aditsu quitte car SE est EVIL le

Considérant que 0 mod 97 ne peut se produire qu'une seule fois, le manque d'espace fait vraiment mal ...
Sp3000

@ Sp3000 Shoot, cela ne m'est pas venu à l'esprit. : /
Calvin's Hobbies

Réponses:


18

Lenguage , M = ∞

Tous les programmes démarrent au début de la chaîne. Le programme Python mal écrit suivant calcule le nombre de caractères nécessaires pour un M. donné

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)

Par exemple, pour M = 5, le programme est le premier 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 caractères.


En cas de doute, il existe une variante BF qui le fera pour vous.
ymbirtt

3
C'est drôle comme Lenguage a été inspiré par un autre de mes défis. C'est comme si je provoquais ma propre chute.
Calvin's Hobbies

3

CJam, M = 2

Court et doux:

2NZ

Cette séquence commence à la position 54398, en utilisant l'indexation 1 de la chaîne. Vous pouvez le tester en ligne ici .

J'ai tenté de rechercher quelques variantes possibles, mais ce fut la première solution que j'ai trouvée.

J'essaie actuellement de trouver une version M = 3, mais je ne m'attends pas à en trouver une dans un délai raisonnable. Si la séquence est uniformément aléatoire (une approximation), alors l'indice de départ pour une séquence de longueur 5 pourrait être de l'ordre de 10 ^ 9.


Vérifié: 1e6{mp},97f%' f+"2NZ"# lien (prend un certain temps: p)
aditsu quitte car SE est EVIL le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.