たとえば、配列が のような場合、ポインターを移動した後0 0 0 0 ... 0 0[n]s o m e d a t a 4 9 9 9 9 9 9 8 3 7 ...
に変更せずに、ポインターを n だけ移動する方法s o m e d a t a 4 9 9 9 ...
は?
1465 次
2 に答える
7
ナイスチャレンジ。私はこの言語が大好きです:)
私の解決策は(私が思うに)ある程度正しいです。長さnのデータの後にカーソルを変更せずに移動しますが、データを2セル左(または特定の条件が満たされている場合は1セル)に移動します。これがコードです。お役に立てば幸いです。
要件は次のとおりです。
- データの左側に空のセルがあり、
- ポインターはその空のセルを指しており、
- データ自体に空のセルはありません。
コードは次のとおりです。
>[<->+]<[>>[-<+>]<<[->>+<<]>[-<+>]>[-<+>]<-]
例: 配列な7 9 6
ので3
、カーソルをどこまで移動するかを示します。
0 3 7 9 6 ? this line represents data; values are numbers in cells
^ this shows the pointer location
>[<->+]< gives
3 0 7 9 6 ?
^
now the loop; while the pointer is not zero
[
>>[-<+>] gives in first iteration
3 7 0 9 6 ?
^
<<[->>+<<] gives in first iteration
0 7 3 9 6 ?
^
>[-<+>] gives in first iteration
7 0 3 9 6 ?
^
>[-<+>] gives in first iteration
7 3 0 9 6 ?
^
<- decreases the loop pointer and gives in first iteration
7 2 0 9 6 ?
^
which means the loop can continue giving
7 2 9 0 6 ?
7 0 9 2 6 ?
7 9 0 2 6 ?
7 9 2 0 6 ?
7 9 1 0 6 ? after the second iteration and finally
^
7 9 6 0 0 ? after the last
^
] which is where the loop will end
ここで、シーケンス全体の左側に追加の空のセルがある場合、データを 1 セル右に移動できます。
0 7 9 6 0 0 ?
^
<[[>+<-]<] gives
0 0 7 9 6 0 ?
^
>>[>] gives finally
0 0 7 9 6 0 ?
^
そのため、カーソルは任意の長さのデータの後ろに移動しますが、データを 1 セル左にシフトします。
免責事項コードに誤りがあるかもしれませんが、アイデア自体は明確なはずです。例と一致しない場合はいつでもコードを修正してください。
于 2011-06-16T12:37:26.650 に答える
1
[>]
これはあまりにも明白かもしれませんが、またはを使用して、ポインタを次のゼロにスライドさせることができます[<]
。では、データセルに1を加算して(peanoをパックして)、出力の前に1を減算できますか([-.>]
)?
残念ながら、これでは十分に細かく制御できない場合があります。
于 2011-08-12T07:40:47.707 に答える