Поиск программ в простых числах

9

Давайте присвоим цифры от 0 до 94 95 печатным символам ASCII :

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

Пробел равен 0, !равен 1 и т. Д. ~, Пока не будет 94. Мы также назначим 95 для tab ( \t) и 96 для newline ( \n).

Теперь рассмотрим бесконечную строку, чей N-й символ - это символ выше, которому назначено N-е простое число по модулю 97. Мы назовем эту строку S.

Например, первое простое число равно 2, а 2 mod 97 равно 2, и 2 назначено ", поэтому первый символ S равен ". Точно так же 30-е простое число равно 113, а 113 mod 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

первые M = 1 простых чисел, по одному в строке, по порядку.

Точно так же строка 2N3N5может быть где-то подстрокой S и 2N3N5является допустимой программой CJam, которая выводит

2
3
5

это первые M = 3 простых числа, по одному в строке, по порядку.

счет

Представление с наибольшим М выигрывает. Разрыв связи переходит к представлению, размещенному первым.

подробности

  • Не должно быть никакого дополнительного вывода кроме одиночных простых чисел в каждой строке, за исключением необязательного завершающего символа новой строки после последней строки. Там нет ввода.

  • Подстрока может быть любой длины, если она конечна.

  • Подстрока может встречаться где угодно в пределах S. (И S может содержать ее в нескольких местах.)

  • Программа должна быть полноценной программой. Вы не можете предполагать, что он работает в среде REPL.

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

  • «Новая строка» может интерпретироваться как любое общее представление новой строки, необходимое для вашей системы / интерпретатора / и т. Д. Просто относитесь к этому как к одному персонажу.

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

Связанный: Поиск программ на огромной доске Boggle

Кальвин Хобби
источник
1
Можете ли вы дать код для создания этой большой строки до любого количества символов? (Я полагаю, у вас уже есть один)
Оптимизатор
Если есть 95 печатных символов ASCII, то почему вы делаете по модулю 97? Ах, неважно, вы также используете табуляцию и перевод строки.
Адицу ушел, потому что SE ЗЛО
Учитывая, что 0 мод 97 может появиться только один раз, недостаток места действительно ранит ...
Sp3000
@ Sp3000 Стреляй, мне это не пришло в голову. : /
Увлечения Кэлвина

Ответы:

18

Lenguage , M = ∞

Все программы начинаются с начала строки. Следующая плохо написанная программа Python вычисляет, сколько символов необходимо для данного 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)

Например, при М = 5, программа является первым 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 символов.

feersum
источник
Если есть сомнения, есть вариант BF, который сделает это за вас.
ymbirtt
3
Забавно, как Lenguage был вдохновлен еще одним моим испытанием. Это похоже на то, что я провоцирую свое падение.
Увлечения Кэлвина
3

CJam, M = 2

Коротко и сладко:

2NZ

Эта последовательность начинается в позиции 54398 с использованием 1-индексации строки. Вы можете проверить это онлайн здесь .

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

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

PhiNotPi
источник
Проверено: 1e6{mp},97f%' f+"2NZ"# ссылка (требуется время: p)
aditsu ушел, потому что SE ЗЛО