2016-07-31 11 views
5

codegolf.seのbrainf ***アセンブラの実装に問題があります。メモリに文字列をロードして、その長さcatを見つけ出し、文字列をn回印刷することができましたが、メモリに小文字以外の数値だけをロードするように見えます。だから、いくつかのウィザードを実行する次のループを取ることができます。 (ハッシュマークがマーカーをデバッグしている。)脳のwhileループの効率的な実装***

#,#[>#<[<]<<#+#>>>[>]#,#]<[<] 

それはポインタ512から始まり、(何らかの理由で)私は小文字を取り除くしたい場合は、今すぐ512


後スポットにASCII値として文字列を書き込み、それを擬似BFでこのように見えます。

#,#[>#<[<]<<#+#>>>[>]#do{,(takes input and assigns it)} 
while(input>=96/*Go arbitrarily to the right for this implementation but 
make sure that the first non-lowercase number is stored at the index*/)# 
//Also be sure to zero out any temporary cells used 
<[<] 

今、私の質問は、唯一のストレージとして512の右側にスペースを使用して、後でそれらをクリアしながら、私は、このようなwhileループを実装するのですか、です。 それらの好奇心のためthisは私がbranf ***で解決したい問題です。

答えて

1

あなたのコードが出力動作を生成するために、

,[[<]<+>>[>],]<[<] 

<<+>>はおそらくセル255を忘れたオンラインコンパイラを使用した結果である)

と繰り返しに簡素化することができます。

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

空のセルだけあなたの方法で、あなたはそれを行うことができます。しかし、あなたはとして、次の1までの距離を述べ、次のセルにすべてのデータセルを保存するように、次のセルを定義するためのあなた自身のいくつかのプロトコルを確立する必要があります。

[..., 104, 5, x, x, x, x, 108, 3, x, x, 102, 2...] 

[..., 104 , 5 , x, x, x, x, 108 , 3 , x, x, 102 , 2 ...] 
     data pointer    data pointer   data pointer 

xは、いくつかの任意の、いずれでもありません-0の値を返します(そうでなければ、それを使用します)。この実装はリンクされたリストのようなものですが、のスペースとコードの高価なになることに気付きます。


細胞をダウンゼロ化、またはあなたはそれがそれらを掃除呼んとして、あなたは[<]をしたのと同じ方法で行うことができます - [-]を使用することによって。これは0に達するまでセルの値を減少させ、ループアウトします。終了時に文字列を反復することができます。先頭に達するまですべてのセルをクリーニングしながら戻ります(0またはそこに置かれた他の予約番号)。

関連する問題