Programme in den Primzahlen finden


9

Weisen wir den 95 druckbaren ASCII-Zeichen die Nummern 0 bis 94 zu :

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

Das Leerzeichen ist 0, !ist 1 usw. bis ~94. Wir weisen tab ( \t) auch 95 und newline ( \n) 96 zu .

Betrachten Sie nun die unendliche Zeichenfolge, deren N-tes Zeichen das Zeichen darüber ist, dem die N-te Primzahl Modulo 97 zugewiesen wurde. Wir nennen diesen String S.

Zum Beispiel ist die erste Primzahl 2 und 2 mod 97 2 ist , und 2 zugeordnet ist ", so dass das erste Zeichen von S ist ". In ähnlicher Weise ist die 30. Primzahl 113 und 113 mod 97 ist 16 und 16 ist zugewiesen 0, so dass das 30. Zeichen von S ist 0.

Die ersten 1000 Zeichen von S lauten wie folgt:

"#%'+-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 wandelt Tabulatoren in Leerzeichen um. Hier ist also ein PasteBin mit intakten Tabulatoren.

Herausforderung

Suchen Sie einen Teilstring von S, der ein gültiges Programm in der Sprache Ihrer Wahl ist und die ersten M Primzahlen ausgibt, eine pro Zeile, um eine positive ganze Zahl M zu erhalten.

Zum Beispiel 2ist es ein Teilstring von S (er kommt an mehreren Stellen vor, aber jeder wird es tun) und 2ist ein gültiges CJam- Programm, dessen Ausgabe ist

2

Dies ist die erste M = 1 Primzahl, eine pro Zeile, in der Reihenfolge.

In ähnlicher Weise kann die Zeichenfolge 2N3N5irgendwo 2N3N5eine Teilzeichenfolge von S sein und ist ein gültiges CJam-Programm, das ausgegeben wird

2
3
5

Dies ist die erste M = 3 Primzahl, eine pro Zeile, in der Reihenfolge.

Wertung

Die Einreichung mit dem höchsten M gewinnt. Tie Breaker geht an die zuerst gepostete Einreichung.

Einzelheiten

  • Außer den einzelnen Primzahlen in jeder Zeile sollte keine zusätzliche Ausgabe erfolgen, mit Ausnahme einer optionalen nachgestellten neuen Zeile nach der letzten Zeile. Es gibt keine Eingabe.

  • Der Teilstring kann beliebig lang sein, solange er endlich ist.

  • Der Teilstring kann an einer beliebigen Stelle in S vorkommen. (Und S kann ihn an mehreren Stellen enthalten.)

  • Das Programm muss ein vollwertiges Programm sein. Sie können nicht davon ausgehen, dass es in einer REPL-Umgebung ausgeführt wird.

  • Das Programm muss in einer begrenzten Zeit ohne Fehler ausgeführt und beendet werden.

  • "Newline" kann als jede allgemeine Newline-Darstellung interpretiert werden, die für Ihr System / Ihren Interpreter / etc. Erforderlich ist. Behandle es einfach als einen Charakter.

Sie müssen den Index von S angeben, an dem Ihre Teilzeichenfolge beginnt, sowie die Länge der Teilzeichenfolge, wenn nicht die Teilzeichenfolge selbst. Sie können nicht nur zeigen, dass der Teilstring vorhanden sein muss.

Verwandte: Suche nach Programmen in einem riesigen Boggle-Board


1
Können Sie den Code angeben, um diese große Zeichenfolge mit einer beliebigen Anzahl von Zeichen zu erzeugen? (Ich nehme an, Sie haben bereits eine)
Optimizer

Wenn es 95 druckbare ASCII-Zeichen gibt, warum machst du dann Modulo 97? Ah egal, Sie verwenden auch Tab und Newline.
Aditsu beendet, weil SE

Wenn man bedenkt, dass 0 mod 97 nur einmal auftreten kann, tut der Platzmangel wirklich weh ...
Sp3000

@ Sp3000 Shoot, das ist mir nicht eingefallen. : /
Calvins Hobbys

Antworten:


18

Linguage , M = ∞

Alle Programme beginnen am Anfang der Zeichenfolge. Das folgende schlecht geschriebene Python-Programm berechnet, wie viele Zeichen für ein bestimmtes M benötigt werden.

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)

Zum Beispiel für M = 5, ist das Programm die ersten 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 Zeichen.


Im Zweifelsfall gibt es eine BF-Variante, die dies für Sie erledigt.
ymbirtt

3
Es ist lustig, wie Lenguage von einer anderen Herausforderung von mir inspiriert wurde. Es ist, als würde ich meinen eigenen Untergang herbeiführen.
Calvins Hobbys

3

CJam, M = 2

Kurz und bündig:

2NZ

Diese Sequenz beginnt an Position 54398 unter Verwendung einer 1-Indizierung der Zeichenfolge. Sie können es hier online testen .

Ich habe versucht, nach einigen möglichen Variationen zu suchen, aber dies war die erste Lösung, die ich gefunden habe.

Ich versuche derzeit, eine M = 3-Version zu finden, erwarte jedoch nicht, innerhalb eines angemessenen Zeitraums eine zu finden. Wenn die Sequenz gleichmäßig zufällig ist (eine Annäherung), könnte der Startindex für eine Sequenz der Länge 5 in der Größenordnung von 10 ^ 9 liegen.


Verifiziert: 1e6{mp},97f%' f+"2NZ"# Link (dauert eine Weile: p)
Aditsu beendet, weil SE
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.