2016-12-07 10 views
0

나는이 숫자의 곱을 계산하기 위해 두 개의 숫자 (10보다 작은)를 물어 보는 brainfuck 프로그램을 작성하려고했습니다. 계산 후에 결과를 인쇄해야합니다. 내 코드는 다음과 같습니다Brainf의 곱셈 * ck

0 * 1 = 3 
1 * 1 = 4 
1 * 2 = 8 
2 * 1 = 5 
2 * 2 = : 

등 :

++++[>++++[>+++<-]<-] writing 48/0x30/'0' in cell(2) 
    ,>,>     reading two numbers in cell(0) and cell(1) 
    [<-<->>-]    decrementing cell(0) and cell(1) by 48/0x30/'0' 
    <<      go to cell(0) 
    [      muliplication loop 
     >     go to cell(1) 
     [>+>+<<-]   move cell(1) to cell(2) and cell(3) 
     >>     go to cell(3) 
     [<<+>>-]   move cell(3) back to cell(1) 
     <<<-    decrement cell(0) 
    ] 
    ++++[>++++[>+++<-]<-] adding 48/0x30/'0' to cell(2) 
    >>.      print result 

이 정말 이상한 결과를 나에게 제공합니다. 물론

는, 출력은 실제로 다음과 같습니다

1 
1 
4 

하지만 난 여기가 더 읽기 보여주고 싶었다.

답변

0

몇 가지 사항을 고려한 결과 결과를 인쇄 가능한 숫자로 수정할 때 큰 실수를 저질렀습니다. 임시 셀로 셀 (1)을 사용하지만 여전히 값이 있습니다. 그래서 나는 결과에 48/0x30/'0'를 추가하기 전에 >[-]<를 삽입 :

++++[>++++[>+++<-]<-] writing 48/0x30/'0' in cell(2) 
    ,>,>     reading two numbers in cell(0) and cell(1) 
    [<-<->>-]    decrementing cell(0) and cell(1) by 48/0x30/'0' 
    <<      go to cell(0) 
    [      mulitplication loop 
     >     go to cell(1) 
     [>+>+<<-]   move cell(1) to cell(2) and cell(3) 
     >>     go to cell(3) 
     [<<+>>-]   move cell(3) back to cell(1) 
     <<<-    decrement cell(0) 
    ] 
    >[-]<     set cell(1) to 0 so that it can be used as counter 
    ++++[>++++[>+++<-]<-] adding 48/0x30/'0' to cell(2) 
    >>.      print result 

메모, 여전히 10

0

정말 훌륭한 자원이 the Esolangs page on Brainfuck algorithms입니다보다 작은 결과가 제대로 작동하는지. 거기, 곱셈이 정의 :

temp0[-] 
temp1[-] 
x[temp1+x-] 
temp1[ 
y[x+temp0+y-]temp0[y+temp0-] 
temp1-] 

그래서 테이프가 보였다 경우는 일반적으로 temp0 temp1 x y을 좋아 temp0의 포인터, 그 결과로 대체 될 것이다 :

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

그러나, 당신의 주요 문제가 발생합니다 .을 호출하여 출력하십시오. 귀하의 방법은 한 자리 숫자를 출력 할 때만 작동합니다.

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

(The original post containing this algorithm.)

: 숫자로 셀의 내용을 출력하려면, 다음과 같은 코드를 사용할 수 있습니다