R круговой «связанный» список: добавление +1 к последнему индексу приводит вас к первому индексу - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь реализовать движение через четыре точки, записывая, какие точки я посещаю.Думайте об этом как о квадрате.Я могу перемещаться из угла в угол или по диагонали.

Если вы «развернете» квадрат, вы получите прямую линию с четырьмя точками, которую можно рассматривать как 1-2-3-4-, где после 4 она возвращается к 1.Поэтому, если я нахожусь в точке 2, я могу перейти к 1 и 3 прямо или по диагонали.Я бы реализовал это как 2-1 / 2+1 для угла в угол или 2+/-2 для диагонали.Проблема возникает, когда я в 2 и попытаюсь вычесть 2, где я окажусь вне списка.

У меня была мысль, что если бы я мог как-то перевести свои числа "за пределы" в пределы, это было бы решено.Одним из решений является жесткое кодирование:

 0=4 
-1=3 
 5=1 
 6=2

, но я уверен, что есть лучший способ сделать это, однако я не могу его найти.

1 Ответ

0 голосов
/ 27 декабря 2018

Мне кажется, все, что вы хотите, это модульная арифметика (благослови господина по математике)

magicFun <- function (x) x %% 4

Вот простой тестовый прогон

> magicFun(0:6)
[1] 0 1 2 3 0 1 2

Приложение

Это больше о математике, но причина, по которой он работает для негативов, заключается в том, что в Z/nZ («мире, где n равно 0») n «идентифицировано»до 0.

  • Это означает, что вы можете добавить n столько раз, сколько пожелаете, к данному номеру, не меняя его «значение».
  • Кроме того, условно числа в Z/nZ указаны как {0, 1, ..., n-1}.

Итак, предположим, n = 4 и x = -6, как указано выше x = x + 2*4 = 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...