Fractran을 Brainfuck로 변환


18

배경

Fractran 은 John Conway가 발명 한 난해한 Turing-complete 프로그래밍 언어입니다. Fractran 프로그램은 정렬 된 분수 목록으로 구성됩니다. 프로그램은 단일 정수를 입력으로 사용하여 시작합니다. 프로그램의 각 반복마다 숫자에 해당 분수를 곱하면 다른 정수가 생성되도록 첫 번째 분수를 목록에서 검색합니다. 그런 다음 목록 시작 부분부터 다시 시작하여 새 번호로이 프로세스를 반복합니다. 목록에 숫자와 곱할 수있는 분수가 없으면 프로그램이 종료되고 숫자를 출력으로 제공합니다.

Fractran이 Turing-complete 인 이유는 레지스터 시스템을 시뮬레이션하기 때문입니다. 숫자의 소인수 분해는 레지스터의 내용을 저장하는 반면, 나누기와 곱셈은 레지스터에서 조건부로 더하고 빼는 방법입니다. Wikipedia 기사 (위 링크)를 읽는 것이 좋습니다.

도전

태스크는 STDIN에서 유효한 Fractran 프로그램을 유일한 입력으로 가져 와서 Fractran 프로그램을 시뮬레이트하는 유효한 BF 프로그램을 STDOUT에 생성 할 수있는 가장 짧은 프로그램을 작성하는 것입니다. BF로 Fractran 프로그램을 시뮬레이션 할 수있는 두 가지 방법이 있습니다.

참고 : 귀하의 답변은 BF 프로그램이 아닙니다. 귀하의 답변은 주어진 Fractran 프로그램에서 BF 프로그램을 생성하는 코드입니다. 목표는 BF 프로그램을 Fractran 프로그램과 동일하게 만드는 것입니다. (기술적으로 당신은 BF에서 경쟁을 할 수 있지만 어려울 것입니다)

옵션 1

프로그램은 다음을 수행하는 BF 프로그램을 출력해야합니다.

  • Fractran 프로그램에 대한 입력 인 해당 ASCII 문자 (BF 입력 작동 방식으로 인해) 형식으로 STDIN에서 정확히 1 개의 숫자를 가져옵니다.
  • Fractran 프로그램에서 출력되는 해당 ASCII 문자 형식으로 정확히 1 개의 숫자를 STDOUT에 인쇄합니다.

이 옵션은 Fractran 가상 머신의 정확한 입력 및 출력을 나타냅니다.

옵션 2

프로그램이 생성하는 BF 코드는 다음을 수행해야합니다.

  • 메모리에 이미 인코딩 된 숫자를 소인수 분해하여 (프로그램을 실행하기 전에) 입력하십시오. 입력이 28 (2 * 2 * 7)이면 두 번째 셀에는 2의 값이 있고 일곱 번째 셀에는 1의 값이 있습니다 (포인터는 셀 0에서 시작). 다른 모든 셀은 0이됩니다.
  • 프로그램이 종료 될 때 메모리에 인코딩 된 출력을 소인수 분해하여 출력하십시오. 출력이 10이면 각 셀 2와 5에 1의 값이 있어야합니다. 다른 모든 소수 셀은 값이 0이어야합니다. 다른 세포의 내용은 중요하지 않습니다.

이 옵션은 Fractran 언어 뒤에있는 컴퓨팅 모델을 나타냅니다.

규칙 및 요구 사항

  1. 입력 (프로그램 상단)은 STDIN의 분수 목록입니다. 분자와 분모 사이에 쉼표가있는 한 줄에 하나의 분수가 있습니다. 빈 줄은 입력 끝을 나타냅니다. 분수는 항상 가장 낮은 항으로 줄어 듭니다.
  2. 프로그램의 출력은 STDOUT에 대한 단일 라인의 유효한 BF 프로그램이어야합니다. 이 프로그램은 두 가지 옵션 중 하나에 따라 특정 Fractran 프로그램을 시뮬레이션 할 수 있어야합니다. 모든 입력에 대해 생성 된 BF 프로그램은 Fractran 프로그램과 동일한 출력을 생성 할 수 있어야합니다.
  3. 선택한 옵션을 명시해야합니다.
  4. BF 메모리 및 테이프의 범위와 랩핑 여부를 선택할 수 있습니다
  5. 코드 골프. 또한 출력 된 BF 프로그램의 크기는 중요하지 않으며 변환을 수행하는 프로그램의 크기 만 중요합니다.
  6. 프로그램은 인쇄 가능한 ASCII로만 구성되어야합니다.

어딘가 모호하다면 주저하지 말고 물어보십시오. 이것은 설명하기가 매우 어려운 문제입니다.

또한 프로그램이 작동하는지 쉽게 확인할 수 있도록 다음과 같은 입력을 위해 프로그램에서 생성 된 BF 코드를 게시하십시오.

33,20
5,11
13,10
1,5
2,3
10,7
7,2

이 프로그램은 숫자의 이진 확장에서 1의 수를 계산합니다. 그러나 모든 Fractran 프로그램에서와 같이 입력 및 출력이 이상하게 형식화됩니다. 입력은 2 ^ A 형식이며 출력은 13 ^ B 형식입니다.


그래서 기본적으로 당신은 brainfuck에서 fractran 통역사가 필요합니다. 다른 모든 것은 상당히 사소합니다.
captncraig

@CMP Fractran 프로그램의 BF 버전을 출력하는 프로그램을 원합니다. 이 변환을 수행하는 코드는 BF에있을 필요는 없습니다. BF 프로그램 자체는 단일 목적입니다.
PhiNotPi

1
우리가 사용하는 brainfuck 인터프리터에 제한이 있습니까? 바이트 크기의 셀을 사용해야합니까, 아니면 int 셀을 사용할 수 있습니까? 바운드 메모리? 랩핑 메모리? 포장지? 우리가 원하는 것이 작동합니까?
captncraig

당신이 그것을 작동하게하고 싶지만 대답에 지정하십시오.
PhiNotPi

1
아마도 BF로 이것을 해결하는 것이 가능할 것입니다.
mbomb007

답변:


7

파이썬, 182 자

옵션 1, 표준 바이트 셀 255 개의 입력이 가능합니다 (입력이 실제로 의미가 없으므로 0은) Python에서 Fractran 인터프리터를 255 번 실행하고 결과를 인코딩하는 간단한 테이블 조회 Brainfuck 프로그램을 생성합니다.

import sys
I=map(eval,sys.stdin)
P='+>,'
Q=''
for i in range(1,256):
 while i:j=i;i=([i*x/y for x,y in I if i%y==0]+[0])[0]
 r=j&255;P+='-[';Q=']<[-'+'+'*r+'.'+'-'*r+']>'+Q
print P+Q

예제 입력의 출력 ( ___= 246 더 많은 중첩 조건, 전체 결과가 너무 커서 붙여 넣을 수 없습니다) :

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

1
@PhiNotPi : 사실, 루핑과 특별한 경우를 감지해야 할 수도 있습니다.
Keith Randall

7
실제로, 주어진 Fractran 프로그램이 무한 루프인지 아닌지를 결정하는 것은 정지 문제와 동등하다고 생각합니다. 좋은 성과 있길 바래요. :)
PhiNotPi 2016 년

1
흥미로운 접근법. fractran 스펙이 255보다 큰 출력을 처리해야한다고 말하면 많은 단점이 있습니다. 따라서 많은 프로그램이 의존한다는 것을 알기 때문에 결과의 LSB 만 취하는 것이 조금 이상합니다.
captncraig

1
@CMP, 질문은 구체적으로 옵션 1의 입력이 ASCII에서 가져온 것임을 나타냅니다.
boothby

1
@PhiNotPi 프로그램의 정지 여부를 결정하면 다른 언어로 다른 프로그램을 작성하여 원본이 정지 된 경우에만 정지되도록 다른 프로그램을 작성할 수있는 것과는 약간 다릅니다. 전자는 불가능하지만 후자는 컴파일러에 의해 매일 수행됩니다.
Cruncher

3

파이썬, 420 자

이것은 옵션 1과 2의 혼합을 사용합니다. brainfuck이 큰 정수로 구현되었다고 가정합니다 (Sage 구현을 사용합니다). fractran 프로그램을 입력하십시오 (예 :) 33/20,5/11,13/10,1/5,2/3,10/7,7/2. 그런 다음 2^5커서에 숫자를 미리로드하십시오 (예 :). 그런 다음이 python 스크립트의 출력을 실행하십시오. 44 초 동안 기다립니다. 결과 13^2는 커서가 시작된 위치 에 앉아 있습니다. 에 대한 답변을 기다리지 않았습니다 2^7.

s="[->>>+<<<]+["
for l in raw_input().split(','):
 a,b=map(int,l.split('/'))
 s+="[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>["+"[->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]<"*(b-1)+"[->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]<"+"[->+>+<<]>[-<+>]<"*a+"[-]>>[-<<+>>]<<<<<->>>>]<<]<<"
print s+">+<[->-<]>[-<+>]<]>>>[-<<<+>>>]"

이것은 내 첫 번째 브레인 script 스크립트입니다. 확실히 더 골프를 칠 수 있지만 오늘 밤 늦게까지 할 일이 있습니다.

편집 :이 골프를하기보다 옵션 2에 대한 솔루션을 개발 중입니다. 또한 요청 된 프로그램의 출력은 다음과 같습니다.

[->>>+<<<]+[[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<>+<[->-<]>[-<+>]<]>>>[-<<<+>>>]

좋은 첫 Brainfuck 스크립트, +1입니다. 당신은 계산할 수 있습니다 2^7함께 그런데 5 초 미만의 브레인 퍽 인터프리터. 또한 raw_input()대신 해서는 안됩니다 raw_input(또는 내가 알지 못하는 기발한가요)?
복사

@copy, 감사합니다! 당신은 오른쪽있어 raw_input()필요합니다. 유능한 brainfuck 통역사가 끔찍한 순진한 Sage 구현보다 나은 점은 놀랍지 않습니다.
부스비

2

펄, 326 자

더 많은 답변을 얻기 위해 내 자신의 질문에 대답하겠습니다. 물론 이길 자격이 없습니다. 셀을 래핑 할 때 작동하지만 무제한 메모리 및 셀이있는 옵션 2입니다. 각 분수는 단일 코드 블록으로 변환됩니다. 개행은 가독성을위한 것입니다.

L:{$A=<>;
if($/eq$A){last L}
($B,$C)=eval$A;
$D=$E=$F=$G=$H=2;
while($C>1){
if($C%$H==0){
$C/=$H;
$R=">"x$H;
$L="<"x$H;
$D.=$R.'[-'.$L;
$E.=$R.'-'.$L;
if($H>2){$R.="+[->+<]]>[-<+>]<"}
else{$R.="+[-<+>]]<[->+<]>"}
$G=$R.$L.$G;
$H--}$H++}
$H=2;while($B>1){
if($B%$H==0){
$B/=$H;
$F.=">"x$H.'+'.'<'x$H;
$H--}$H++}
$I="+[-$I$D$E+$F$G]";
redo L}print$I

다음은 예제 출력입니다. 이것은 다른 문자가 주석으로 무시된다는 사실을 이용합니다. 출력 크기는 기술적으로 중요하지 않지만 다른 항목에 비해 매우 짧은 출력으로 보입니다.

+[-+[-+[-+[-+[-+[-+[-2>>[-<<>>[-<<>>>>>[-<<<<<2>>-<<>>-<<>>>>>-<<<<<+2>>>+<<<>>>>>>>>>>>+<<<<<<<<<<<>>>>>+[->+<]]>[-<+>]<<<<<<>>+[-<+>]]<[->+<]><<>>+[-<+>]]<[->+<]><<2]2>>>>>>>>>>>[-<<<<<<<<<<<2>>>>>>>>>>>-<<<<<<<<<<<+2>>>>>+<<<<<>>>>>>>>>>>+[->+<]]>[-<+>]<<<<<<<<<<<<2]2>>[-<<>>>>>[-<<<<<2>>-<<>>>>>-<<<<<+2>>>>>>>>>>>>>+<<<<<<<<<<<<<>>>>>+[->+<]]>[-<+>]<<<<<<>>+[-<+>]]<[->+<]><<2]2>>>>>[-<<<<<2>>>>>-<<<<<+2>>>>>+[->+<]]>[-<+>]<<<<<<2]2>>>[-<<<2>>>-<<<+2>>+<<>>>+[->+<]]>[-<+>]<<<<2]2>>>>>>>[-<<<<<<<2>>>>>>>-<<<<<<<+2>>+<<>>>>>+<<<<<>>>>>>>+[->+<]]>[-<+>]<<<<<<<<2]2>>[-<<2>>-<<+2>>>>>>>+<<<<<<<>>+[-<+>]]<[->+<]><<2]

1

세이지, 431 자

이것은 완전히 새로운 솔루션입니다. 나는 brainfuck에서 일을하는 더 좋은 방법을 알아 냈고 이것은 옵션 2를 올바르게 구현합니다. 명확성을 위해 줄 바꿈이 추가되었습니다. 아마도 더 골프를 치는 것이 가능하지만 루프 깊이를 낮추기 위해 BF를 다시 작성해야합니다.

exec"f=factor;
J=''.join;
Q=L(a,b):Lz:a*z+b*-z;M=Q('<>');
C=Lj,k:(Ll:'[-%s+%s+%s]%s[-%s+%s]%s'%tuple(map(M,[-j,-k,l,-l,l,-l,k])))(j+k);
print '>+[>>>+'+J(map(L(n,m):reduce(Lr,(p,e):'[-%s%s%s[[-]<<+>>]%s<<%s]'%(M(4-p),C(6-p,2),'[-'*(e-1),']'*(e-1),r),f(m),'[-<<<->>>%s]'%J(map(L(p,e):M(4-p)+Q('+-')(e)+M(p-4),f(n/m))))+'<<<'+C(3,2),[map(QQ,x.split('/'))for x in raw_input().split(',')]))+'<<<<+>[-<->]<[->+<]>]'".replace('L','lambda ')

샘플 출력 :

주어진 입력 33/20,5/11,13/10,1/5,2/3,10/7,7/2

>+[>>>+[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[-[[-]<<+>>]]<<[-<<<->>><<-->><+>>-<>>>>>>>+<<<<<<<]]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->>>>>>>[-<<<<<+>>+>>>]<<<[->>>+<<<]<<[[-]<<+>>]<<[-<<<->>>>+<>>>>>>>-<<<<<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[[-]<<+>>]<<[-<<<->>><<->>>-<>>>>>>>>>+<<<<<<<<<]]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<<->>>>-<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[-<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[[-]<<+>>]<<[-<<<->>><<+>><->]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->>>[-<+>>+<]>[-<+>]<<[[-]<<+>>]<<[-<<<->>><<+>>>+<>>>-<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[[-]<<+>>]<<[-<<<->>><<->>>>>+<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<<<<<+>[-<->]<[->+<]>]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.