프라임에서 프로그램 찾기


9

인쇄 가능한 95 개의 ASCII 문자에 0에서 94까지의 숫자를 할당 해 봅시다 .

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

공백은 0, !1, 등 ~은 94가 될 때까지 계속 됩니다. 또한 탭 ( \t)에 95를, 줄 바꿈 ( \n)에 96을 할당합니다 .

이제 N 번째 문자가 모듈로 97 인 N 번째 소수 인 위의 문자 인 무한 문자열을 고려하십시오 . 이 문자열을 S라고 부릅니다.

예를 들어, 첫 번째 소수는 2이고 2 mod 97은 2이고 2는에 할당 "되므로 S의 첫 번째 문자는입니다 ". 마찬가지로 30 번째 소수는 113이고 113 mod 97은 16이며 16은에 할당 0되므로 S의 30 번째 문자는입니다 0.

S의 처음 1000자는 다음과 같습니다.

"#%'+-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^

스택 교환은 탭을 공백으로 변환하므로 탭이 그대로 있는 PasteBin 이 있습니다.

도전

선택한 양의 정수 M에 대해 첫 번째 M 소수를 한 줄에 하나씩 출력하는 유효한 프로그램 인 S 의 하위 문자열 을 찾으십시오 .

예를 들어, 2S의 하위 문자열 (여러 곳에서 발생하지만 모든 작업 2수행됨 )이며 출력이 다음 과 같은 유효한 CJam 프로그램입니다.

2

이것은 첫 번째 M = 1 소수이며, 한 줄에 하나씩 순서대로 나타납니다.

마찬가지로 2N3N5문자열은 S 어딘가 의 문자열 일 수 있으며 2N3N5유효한 CJam 프로그램입니다.

2
3
5

이것은 첫 번째 M = 3 소수 (행당 하나씩)입니다.

채점

M이 가장 높은 제출물이 이깁니다. 타이 브레이커는 먼저 게시 된 제출물로 이동합니다.

세부

  • 마지막 줄 뒤의 선택적 후행 줄 바꿈을 제외하고 각 줄의 단일 소수 외에 추가 출력이 없어야합니다. 입력이 없습니다.

  • 부분 문자열은 유한 한 길이이면됩니다.

  • 하위 문자열은 S 내의 어느 곳에서나 발생할 수 있습니다 (S는 여러 위치에 포함 할 수 있음).

  • 본 프로그램은 본격적인 프로그램이어야합니다. REPL 환경에서 실행한다고 가정 할 수 없습니다.

  • 프로그램은 오류없이 유한 한 시간 안에 실행하고 종료해야합니다.

  • "줄 바꾸기 "는 시스템 / 통역사 등에 필요한 일반적인 줄 바꾸기 표현 으로 해석 될 수 있습니다 . 한 캐릭터로 취급하십시오.

부분 문자열 자체가 아닌 경우 부분 문자열의 길이뿐만 아니라 부분 문자열이 시작되는 S의 색인을 제공해야합니다. 서브 스트링이 존재해야 함을 표시 할 수도 있습니다.

관련 : 거대한 Boggle 보드에서 프로그램 찾기


1
큰 문자열을 생성하는 코드를 최대 수의 문자까지 줄 수 있습니까? (내가 이미 가지고 있다고 가정)
Optimizer

95 개의 인쇄 가능한 ASCII 문자가 있다면 왜 modulo 97을 사용합니까? 아아, 당신은 또한 탭과 개행을 사용합니다.
SE가 EVIL이기 때문에 aditsu 종료

0 mod 97이 한 번만 발생할 수 있다는 점을 고려하면, 공간 부족이 실제로 아프다 ...
Sp3000

@ Sp3000 Shoot, 그건 나에게 일어나지 않았다. : /
Calvin 's Hobbies

답변:


18

언어 , 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)

예를 들어, M = 5, 프로그램은 제 2458595061728800486379873255763299470031450306332287344758771914371767127738856987726323081746207100511846413417615836995266879023298634729597739072625027450872641123623948113460334798483696686473335593598924642330139401455349473945729379748942060643508071340354553446024108199659348217846094898762753583206697609445347611002385321978831186831089882700897165873209445730704069057276108988230177356 자.


의심스러운 경우 BF 변형이 있습니다.
ymbirtt

3
Lenguage가 또 다른 도전에서 영감을 얻은 것은 재밌습니다. 마치 내 몰락을 가져 오는 것과 같습니다.
Calvin 's Hobbies

3

CJam, M = 2

짧고 달다:

2NZ

이 시퀀스는 문자열의 1- 인덱싱을 사용하여 위치 54398에서 시작합니다. 여기에서 온라인으로 테스트 할 수 있습니다 .

몇 가지 가능한 변형을 찾으려고했지만 이것이 내가 찾은 첫 번째 해결책이었습니다.

현재 M = 3 버전을 찾으려고 노력하고 있지만 합리적인 기간 내에 버전을 찾을 것으로 기대하지는 않습니다. 시퀀스가 균일하게 임의 인 경우 (근사치), 길이 5 시퀀스의 시작 인덱스는 10 ^ 9 정도일 수 있습니다.


확인 됨 : 1e6{mp},97f%' f+"2NZ"# 링크 (시간이
오래 걸림
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.