Пошук програм у Прімесі


9

Призначимо числа від 0 до 94 95 символам для друку ASCII :

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

Пробіл дорівнює 0, !дорівнює 1, і так далі, поки ~це 94. Ми також призначимо 95 табуляції ( \t) і 96 новій лінії ( \n).

Тепер розглянемо нескінченну рядок, N-й символ якого є символом вище, ніж було призначено N-е просте число , модуль 97. Ми будемо називати цей рядок S.

Наприклад, перше просте число - 2, а 2 мод 97 - 2, і присвоюється 2 ", тому перший символ S є ". Аналогічно, 30-е просте число - 113, а 113 мод 97 - 16, і 16 призначається 0, тому 30-й символ S є 0.

Перші 1000 символів S такі:

"#%'+-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 перетворює вкладки в пробіли, тож ось PasteBin з вкладками недоторканими.

Виклик

Знайдіть підрядку S, що є дійсною програмою на обраній вами мові, яка виводить перші M простих чисел, по одному на рядок, для того , щоб отримати деяке додатне ціле число M.

Наприклад, 2це підрядник S (він зустрічається в декількох місцях, але будь-який буде робити), і 2є дійсною програмою CJam , вихід якої

2

що є першими М = 1 простими числами, по одному на рядок, по порядку.

Аналогічно, рядок 2N3N5може бути десь підрядком S і 2N3N5є дійсною програмою CJam, яка виводить

2
3
5

що є першими М = 3 простими числами, по одному на рядок, по порядку.

Оцінка балів

Подача з найвищим М виграє. Автоматичний вимикач переходить до подання, розміщеного першим.

Деталі

  • Не повинно бути жодного додаткового виводу, окрім одиночних простих рядків у кожному рядку, за винятком необов'язкового останнього нового рядка після останнього рядка. Введення немає.

  • Підрядка може бути будь-якої довжини, поки вона є кінцевою.

  • Підрядка може виникати в будь-якій точці S. (І S може містити її в декількох місцях.)

  • Програма повинна бути повноцінною програмою. Ви не можете вважати, що він працює в середовищі REPL.

  • Програма повинна запускатися та закінчуватися протягом обмеженого часу без помилок.

  • "Новий рядок" може трактуватися як будь-яке загальне представлення нового рядка, необхідне для вашої системи / перекладача / тощо. Просто ставитесь до цього як до одного персонажа.

Ви повинні вказати індекс S, з якого починається ваша підрядка, а також довжину підрядки, якщо не саму підрядку. Ви можете не тільки показати, що підрядка повинна існувати.

Пов'язане: Шукайте програми на величезній дошці Boggle


1
Чи можете ви дати коду для створення цієї великої рядка до будь-якої кількості символів? (Я думаю, у вас вже є)
Оптимізатор

Якщо є 95 друкованих символів ASCII, то чому ви робите модуль 97? Ну неважливо, ви також використовуєте вкладку та новий рядок.
aditsu кинути, тому що SE - EVIL

Враховуючи, що 0 мод 97 може статися лише один раз, нестача місця дійсно болить ...
Sp3000

@ Sp3000 Стріляйте, це мені не траплялося. : /
Захоплення Кальвіна

Відповіді:


18

Язик , M = ∞

Усі програми починаються на початку рядка. Наступна погано написана програма Python підраховує, скільки символів потрібно для даного М.

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)

Наприклад, при М = 5, програма є першим 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 символів.


Якщо ви сумніваєтесь, є варіант BF, який зробить це за вас.
ymbirtt

3
Смішно, як Ленгуаге надихнувся ще одним моїм викликом. Це все одно, що я спричиняю власне падіння.
Захоплення Кальвіна

3

CJam, M = 2

Коротке і солодке:

2NZ

Ця послідовність починається з позиції 54398, використовуючи 1-індексацію рядка. Ви можете протестувати його онлайн тут .

Я намагався шукати кілька можливих варіантів, але це було перше рішення, яке я знайшов.

Наразі я намагаюся знайти версію M = 3, але не сподіваюся її знайти протягом розумного періоду часу. Якщо послідовність рівномірно випадкова (апроксимація), то початковий індекс для послідовності довжиною 5 може бути в порядку 10 ^ 9.


Перевірено: 1e6{mp},97f%' f+"2NZ"# посилання (займає деякий час: p)
aditsu вийшов, тому що SE - EVIL
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.