2016-11-12 4 views
2

Brainfuckの基本的な構文について学び、 "Hello World"スクリプトをプログラミングすることですぐに自分自身に挑戦しようとしています。現時点では、私はすべての手紙を持っています。私が知っているように、oのASCIIコードは111です。ここに私のコードは、その番号を取得し、Oを印刷することです:それを破壊

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

、私は+ 1 2 * 5を操作することにより、11に、[2]を設定しています。次に、[2]の減分ごとに10に[3]を加えて11倍にします。 110になるはずなので、最後に印刷前に追加します。しかし、私はASCIIコード91、またはHell[を書き続けています。どこで私は間違えましたか?

ありがとうございます!

EDIT:冒頭で6 +に変更しましたが、今は動作しますか?それは13 * 10 + 1 = 131で、11ではなく動作していますか? HmmmmmmmBrainf * ck Multiplication

答えて

1

私はBrainf * ckがインデントや物事を気にしないことを知っています。しかし、読みやすいようにコードをインデントすることを検討する必要があります。

のは、あなたのコードを見てみましょう:

+++++     intialize counter (cell #0) to 5 
[      use loop to set cell #2 to 10 
    >>++     add 2 to cell #2 
    <<-     
] 
[-]     does actually nothing 
>>+     add 1 to cell #2 
[      use outside with cell #2 as counter 
    <<+++++   sets cell #0 to 5 
    [     use inner loop to add 10 to cell #3 
     >>>++ 
     <<<- 
    ] 
    >>- 
] 
>+.     add 1 to cell #3 and print result 

あなたのコードは、実際にこの作品の前に実行されるコードは、他の初期値にセルを設定することを、期待通りに働いて、働いていない理由があることができています。

これは、 'o'を印刷するだけのコードです。セル#2の最初のループの後に2番目のループは必要ありません。 はここでBrainf * ckに印刷の「Hello World」の例です:

+++++ +++++    initialize counter (cell #0) to 10 
[      use loop to set 70/100/30/10 
    > +++++ ++    add 7 to cell #1 
    > +++++ +++++   add 10 to cell #2 
    > +++     add 3 to cell #3 
    > +      add 1 to cell #4 
<<<< -     decrement counter (cell #0) 
] 
> ++ .     print 'H' 
> + .     print 'e' 
+++++ ++ .    print 'l' 
.      print 'l' 
+++ .     print 'o' 
> ++ .     print ' ' 
<< +++++ +++++ +++++ . print 'W' 
> .      print 'o' 
+++ .     print 'r' 
----- - .    print 'l' 
----- --- .    print 'd' 
> + .     print '!' 
> .      print '\n' 

次のWebサイトでは、あなたのBrainf * ckのコードをテストすることによって、あなたを助けることができる: Brainfck Visualizer

+0

良い言及、質問に直接答えませんが。あなたは彼のコードを分析しますが、何が間違っているのかは言いません(実際にコードは間違っていませんが、あなたはそれを言っていません)。あなたは '' o ''を印刷するのが大変だと言っていますが、それは頭に浮かぶものです。単純なことをするには多くのコードが必要です。彼は明らかに独自の解決策を見つけようとしましたが、彼に 'Hello World!'プログラムの例を与えました。しかし、いくつかの言及は ''実際には何もしない ''のようにまだ良くなっています(この場合、なぜ[*] [*]は何もしません。 – Aemyl

1

私はちょうど私の中でこれを実行しようとしました(自己プログラミングされた)Brainfuck-interpreterと私は'o'を持っていました。あなたの通訳に問題があるかもしれません。

問題の可能性があるもう一つの理由は、あなたのセルが以前に使用されていて、それでも値が等しくないことです。あなたはすでにあなたのコードの一部しか表示していないので、前に使用されていたと思います(すでに'hell'(面白いxD)を印刷して、cell[1]をスキップします)。

私は個人的に16文字のブロックでASCIIテーブルを分割しました。したがって、特定の文字を取得する場合は、163(数字用)、4(大文字用)または6(小文字用)と混ぜ合わせます。しかし、いくつかの手紙については、165または7と「もっと速い」(短いコード)としています。 'o'たとえば、私はこのようになるでしょう:

++++    write 4 in cell(0) 
[     while cell(0) != 0 
    >++++   write 4 in cell(1) 
    [    while cell(1) != 0 
     >+++++++ add 7 to cell(2) 
     <-   decrement cell(1) 
    ]    go back to 'while cell(1) != 0' 
    <-    decrement cell(0) 
]     go back to 'while cell(0) != 0' 
>>     go to cell(2) (has value 4*4*7 = 0x70 or 'p') 
-     decrement cell(2) (it's an 'o' now) 
.     print cell(2) 
関連する問題