태그 보관물: kolmogorov-complexity

kolmogorov-complexity

brainfuck에서 URL 인코딩 URL을 brainfuck 프로그램으로 바꾸는 프로그램이 필요합니다. 내

이 질문 에서 영감을 얻은 오늘 목표는 brainfuck로 URL을 인코딩하는 것입니다.

브라우저가 해킹당했습니다! 위치 표시 줄이 두뇌 해석기로 바뀌 었습니다. URL을 brainfuck 프로그램으로 바꾸는 프로그램이 필요합니다. 내 컴퓨터도 매우 느리므로 brainfuck 프로그램이 작을수록 좋습니다.

오, 나는 하나의 작업 탭 만 열어 두었습니다. 내 트위터. 그래서 당신은 트윗으로 만 프로그램을 보낼 수 있습니다.


  1. 문자열을 입력으로 받아 brainfuck 프로그램을 출력하는 모든 언어로 트윗 (140 자)에 맞는 프로그램을 작성하십시오.

  2. 이 brainfuck 프로그램은 입력없이 실행되며 출력을 생성합니다.

  3. 이 출력은 Chrome의 위치 표시 줄에 삽입되어 실행됩니다.

  4. Chrome의 동작이 # 1의 입력 문자열을 입력하여 얻는 동작과 동일하면 솔루션이 유효합니다. URL 단축기로 리디렉션은 다른 동작으로 간주됩니다. 최소한 동일한 도메인에 머물러 있어야합니다.

brainfuck 인터프리터가 각 셀에 무한정의 부호있는 정수와 무제한의 셀을 가지고 있다고 가정 할 수 있습니다.

점수는 다음 URL 세트를 인코딩하기 위해 생성 된 brainfuck 프로그램 길이의 합계에 의해 결정됩니다.

https://www.google.com/
/codegolf/47895/
http://www.golfscript.com/golfscript/examples.html
http://en.wikipedia.org/wiki/Percent-encoding
ftp://ftp.freebsd.org/pub/FreeBSD/
https://github.com/isaacg1/pyth/blob/master/doc.txt#L92
http://ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README

가장 작은 점수가 이깁니다.



답변

Pyth-118 바이트, 점수 : 154 + 567 + 597 + 620 + 530 + 875 + 1092 = 6630 6623 4653 4435

이제 계수 곱셈 알고리즘을 사용하십시오!

위의 알고리즘보다 약간 나아지 긴하지만 매우 간단한 알고리즘입니다. Pyth를 사용할 계획이지만 현재 알고리즘으로 Python은 <140 bytes 입니다.

=zecz"//"=z?>z4}"www."zz=z?Pzqez\/zFNzKCNJ/^K.5 1=d\+pk+holN[?*-KZd>KZ*-ZK\-+\>*dK+++++\>*Jd"[>"*Jd"<-]>"*-K*JJd)\.=ZK

아웃 그것은 첫째 스트립 http://사용하여 split("//")www./끝. 그런 다음 min 함수를 사용하여 고려되는 세 가지 옵션 중 가장 좋은 옵션을 확인합니다.

  1. 사용 +또는- 원하는 셀 값을 현재 셀의 값을 업데이트하는
  2. 새로운 세포로 가서 그냥 채우십시오 +
  3. 정사각형은 상수 영역의 최소 둘레가 있으므로 sqrt (n) * sqrt (n) + remainder를 수행하여 새 셀로 이동하고 곱셈을 사용하여 업데이트하십시오. http://cydathria.com/bf/bf_ex3.html

나는 항상 . 각 문자를 출력합니다.

새로운 코드에 대한 자세한 설명은 곧 제공 될 예정입니다. 나는 골프, 특히 탈피 www./ 끝 부분 쳤지 만 한계가 20 바이트이기 때문에 귀찮게 할 수 없습니다.

이것은 놀랍게도 작동 ftp://이 크롬과 크롬이 자동으로 만들어 이후의 URL ftp.freebsd.org/pub/FreeBSD/ftp://ftp.freebsd.org/pub/FreeBSD/

다음으로 사전을 사용하여 셀 값을 저장하고 문자가 이미 셀에 만들어 졌는지 확인합니다.


Brainfuck 검색 주소창 확장

맞습니다! @BrainSteel의 의견을 본 후에 나는 그것을 만들어야한다는 것을 알았습니다. 이것은 당신이 할 경우에만 전체 검색 주소창를 인수하지 않는다 bf, tab. 또한 검색 주소창 API가 이상하기 때문에 검색 주소창에 코드를 전달할 수 없으므로 직접 처리해야합니다. 그래서 나는 내 자신을http:// 검사를 한 다음 탭의 URL을 설정합니다.

웹 스토어에 확장을 설치하는 데 필요한 5 달러를 지불하고 싶지 않다면 수동으로 설치해야합니다. : 그냥 여기에서 우편 다운로드 https://drive.google.com/file/d/0B0qkKIzGc0QiNzBzVUJjZkRIZ0k/view?usp=sharing , 크롬의 확장 페이지로 이동, 압축 해제를 오른쪽 상단에 DEV 모드 옵션 상자를 클릭하고, 압축이 풀린 확장 장치를 넣습니다.

당신이 즐기시기 바랍니다! 🙂


답변

C, 140 134 132 138 128 139 바이트

263 + 816 + 911 + 955 + 827 + 1355 + 1779 = 7269 6906 바이트

업데이트 : nutki 덕분에 6 바이트가 적습니다!

128 바이트를 다시 업데이트하십시오. 코드를 읽기 어렵습니다. 이제의 URL도 제거하려고합니다 ftp://.

세 번째는 139 바이트로 업데이트하십시오. 코드는 좀 더 읽기 쉬우 며 불쾌한 정의되지 않은 동작을 제거했습니다. 이제 사이트 이름 앞에가 www.있으면 제거됩니다. 나는 7k 미만 이었지만 Pyth와 함께 Maltysen에 인정해야한다고 생각합니다. 잘 했어.

#define p putchar
a;main(int c,char**V){while(*V[1]++-47);*++V+=1;for(*V+=**V-'w'?0:4;c=**V;*V+=1,p(46))for(;c-a;a+=c>a?1:-1)p(c>a?43:45);}

조금 풀었다 :

#define p putchar
a;
main(int c,char**V){
    while(*V[1]++-47);
    *++V+=1;
    for(*V+=**V-'w'?0:4;c=**V;*V+=1,p(46))
        for(;c-a;a+=c>a?1:-1)
            p(c>a?43:45);
}

이 코드는 명령 줄에서 URL을 소요하고 변환을 BF으로 만 사용 ., -+. 코드의 문자열을 제거하려는 시도를한다 ftp://, http://, https://, 및 www.BF로 변환하기 전에. 다음은 출력 결과 목록입니다.

google.com/
codegolf.stackexchange.com/questions/47895/
golfscript.com/golfscript/examples.html
en.wikipedia.org/wiki/Percent-encoding
ftp.freebsd.org/pub/FreeBSD/
github.com/isaacg1/pyth/blob/master/doc.txt#L92
ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README


답변

Brainfuck, 77 바이트, 점수 = 31647

점수는 codepoint+4모든 캐릭터 의 합입니다 .

+++++[>+++++++++<-]>+[>++>+>++>+>+<<<<<-]>+>->->>--->,[[<.>-]<<.<.<.<.>>>>>,]

EOF = 0 인 BF 구현을 사용합니다.

예:

input:
!bar

output:
+++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.[-]


답변

자바 스크립트 (ES6)-137 바이트, 점수-7413

., +및 만 사용합니다 -. Firefox 콘솔에서 테스트 할 수 있습니다.

B=s=>[...s.replace(/^h.+\/\//,'')].map((c,i,a)=>(v=i?c[C]()-a[i-1][C]():c[C='charCodeAt']())?'-+'[v>0|0].repeat(v>0?v:-v):'').join('.')+'.'

이것은 내 점수 카운터입니다.

[
    'https://www.google.com/',
    'http://codegolf.stackexchange.com/questions/47895/',
    'http://www.golfscript.com/golfscript/examples.html',
    'http://en.wikipedia.org/wiki/Percent-encoding',
    'ftp://ftp.freebsd.org/pub/FreeBSD/',
    'https://github.com/isaacg1/pyth/blob/master/doc.txt#L92',
    'http://ftp.gnu.org/non-gnu/nethack/nethack-3.4.0.tar.gz.back-RSN.README'
].map(B).join('').length


답변