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

Loisirs de Calvin
la source
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.

feersum
la source
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.

PhiNotPi
la source
Vérifié: 1e6{mp},97f%' f+"2NZ"# lien (prend un certain temps: p)
aditsu quitte car SE est EVIL le