3

たとえば、配列が のような場合、ポインターを移動した後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 ...は?

4

2 に答える 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 に答える