Domanda

Ad esempio, se la matrice è come 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 ..., come spostare il puntatore n, senza modificare s o m e d a t a 4 9 9 9 ... dopo che il puntatore viene spostato?

È stato utile?

Soluzione

bella sfida. Io amo questa lingua:)

mia soluzione è (Credo) piuttosto corretta, sposta il cursore dopo i dati di lunghezza n senza modificarlo, ma sposta i dati due celle a sinistra (o uno, fornito determinate condizioni sono soddisfatte). Ecco il codice, spero vi sia utile.

I requisiti sono:

  • v'è una cella vuota a sinistra dei dati e
  • il puntatore punta a quella cella vuota e
  • non vi sono celle vuote nei dati stessi.

Ecco il codice:

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

Esempio :. Un 7 9 6 matrice, così 3 dice quanto lontano per spostare il cursore

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

Ora, se v'è una cella vuota aggiuntiva a sinistra di tutta la sequenza, quindi siamo in grado di spostare i dati di una cella a destra.

0 7 9 6 0 0 ?
        ^

<[[>+<-]<] gives
0 0 7 9 6 0 ?
^

>>[>] gives finally
0 0 7 9 6 0 ?
          ^

Quindi il cursore viene spostato dietro i dati di lunghezza arbitraria, tuttavia spostare i dati di una cella a sinistra.

responsabilità Ci potrebbero essere degli errori di codice, ma l'idea in sé dovrebbe essere chiaro. Sentitevi liberi di correggere il codice ogni volta che non corrisponde l'esempio.

Altri suggerimenti

Questo può essere troppo ovvio, ma è possibile far scorrere il puntatore al prossimo allo zero, con [>] o [<]. Così si può aggiungere 1 alle vostre celle di dati (imballaggio un Peano) e sottrarre 1 prima uscita ([-.>])?

Purtroppo, questo non può offrire un controllo abbastanza bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top