2015-12-14 3 views
1

В настоящее время я пишу небольшое приложение для преобразования времени в ручную и бумажную ролевую игру. Это временное путешествие, и в нем используется пользовательская система календаря. Есть 12 нормальных месяцев, но все они имеют 30 дней, за исключением четвертого (переименованного Mapril), который имеет 60. Я ищу алгоритм, ссылку или что-то еще, что может помочь с одним из вычислений. Для того, чтобы держать вещи короткие у меня есть:Modulo Pass Through Detection

  • Текущий месяц [0-11]
  • месяцев Путешествовать [0-11]
  • Направление движения [-1 или 1]

So изображая месяцы как кольцевой мод 12, мне нужен способ определить, проходит ли текущий месяц + месяцы до 3 при движении по часовой стрелке или приземляется на/проходит 3 при движении против часовой стрелки. Вы можете думать о том, что они в два раза больше, чем все остальные месяцы. И чтобы уточнить, переход с 5-го числа любого месяца принесет вам 5-го числа любого другого месяца (включая 60-дневный месяц). И, исходя из сказанного, 31-е из Mapril принесет вам 1-й из соответствующего месяца.

Спасибо за любую помощь, которую вы можете дать. И если это недостаточно ясно, я могу попытаться объяснить лучше или предоставить фотографии.

ответ

0

При перемещении вперед вы хотите знать, c & # x2192; c+d проходит через 3, что эквивалентно:

  • c-3 & # x2192; c+d-3: 0
  • (c+9)%12 & # x2192; (c+d+9)%12 проходит через 0
  • (c+9)%12 + d > 12

На последней стадии, обратите внимание, что (c+9)%12 < 12, так что, если при добавлении d делает его более 12, это означает, что он пересек 12 (т.е. 0) между ними.

При перемещении назад вы хотите знать, c & # x2192; c-d кресты или прибывает в 3:

  • c-3 & # x2192; c-d-3 прибывает 0
  • (c+9)%12 & # x2192; (c-d+9)%12 кресты или прибывает в 0
  • (c+9)%12 - d <= 0

Опять же, для последнего шага, обратите внимание (c+9)%12 < 12, поэтому вычитая d через нуль только тогда, когда она становится отрицательной.

+0

Спасибо! Это прекрасно работает и действительно помогло мне понять математику за ней. – Sialek

Смежные вопросы