模通过检测

Modulo Pass Through Detection

我目前正在为纸笔 RPG 游戏编写一个小型时间转换应用程序。这是一个时间旅行设置,它使用自定义日历系统。有 12 个正常月份,但它们都有 30 天,除了第 4 个(更名为 Mapril)有 60 天。我正在寻找一种算法、参考或任何其他可以帮助计算之一的东西。为了简短起见,我有:

所以将月份描绘成一个环 mod 12,我需要一种方法来确定当前月份 + 旅行月份是否在顺时针方向经过 3,或者在逆时针方向到达 on/passes 3顺时针。您可以将 3 视为所有其他月份的两倍。需要澄清的是,从任何一个月的 5 号开始,您将到达任何其他月份的 5 号(包括 60 天的月份)。从说马普里尔的 31 号开始,您将转到相应月份的 1 号。

感谢您提供的任何帮助。如果这还不够清楚,我可以尝试更好地解释或提供图片。

前进时,想知道cc+d是否经过3,相当于:

  • c-3c+d-3穿过0
  • (c+9)%12(c+d+9)%12穿过0
  • (c+9)%12 + d > 12

对于最后一步,注意(c+9)%12 < 12,所以如果加上d使其大于12,则意味着它越过12(即0) 介于两者之间。

向后移动时,想知道cc-d是否穿过或到达3:

  • c-3c-d-3穿越或到达0
  • (c+9)%12(c-d+9)%12穿越或到达0
  • (c+9)%12 - d <= 0

同样,对于最后一步,请注意 (c+9)%12 < 12,因此减去 d 只有在它变为负数时才过零。