Хороший вызов.Мне нравится этот язык:)
Мое решение (я думаю) несколько правильное, оно перемещает курсор после данных длины n без его изменения, , но оно перемещает данные на две ячейки вслева (или один, если соблюдены определенные условия).Вот код, надеюсь, вы найдете его полезным.
Требования:
- слева от данных есть пустая ячейка и
- указатель указывает на эту пустую ячейку и
- в самих данных нет пустых ячеек.
Вот код:
>[<->+]<[>>[-<+>]<<[->>+<<]>[-<+>]<-]
Пример : массив 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
Теперь, , если есть дополнительная пустая ячейка слева от всей последовательности, тогда мы можем переместить данные на одну ячейку вправо.
0 7 9 6 0 0 ?
^
<[[>+<-]<] gives
0 0 7 9 6 0 ?
^
>>[>] gives finally
0 0 7 9 6 0 ?
^
Таким образом, курсор перемещается за данными произвольной длины,однако смещение данных на одну ячейку влево.
Отказ от ответственности В коде могут быть ошибки, но сама идея должна быть ясной.Не стесняйтесь исправлять код всякий раз, когда он не соответствует примеру.