首页 > 解决方案 > 仅通过基本运算符(MTWTFSS)构建掩码以查找特定日期是否匹配

问题描述

给定一周中的几天选择,我需要知道特定日期是否与选择匹配。

例如,给定:

enum DayOfWeek {
    MON, TUE, WED, THU, FRI, SAT, SUN
}

以及以下选择:

List<DayOfWeek> selection = List.of(MON, WED);

如果给定的星期几是MONor WED,那么它应该匹配,否则它不应该匹配。

一个简单的方法:

boolean match = selection.contains(day.getDayOfWeek());

我想知道是否有办法从选择中构建掩码,并确定给定日期是否仅与基本运算符匹配(+ - * / % AND OR NOT EQ LT LTE GT GTE,不允许按位运算符)。

例如,给定相同的选择:

int mask = 1010000; // just an example of a mask, can be any other

然后:

boolean match = fn(mask, day.getDayOfWeek());

是否mask存在这样一个fn只能用基本运算符编写的?

标签: algorithmmaskdayofweek

解决方案


取一些素数,而不是布尔方法

MON, TUE, WED, THU, FRI, SAT, SUN
2,   3,   5,   7,   11,   13,  17

面膜由选定日期的产品组成,例如(MON, WED) -> 2*5 = 10

dayOfWeek 匹配当且仅当它划分掩码(同上mask % dayOfWeek === 0

例如

  • TUE -> 3, mask % 3 != 0, 不在选择中
  • MON -> 2, mask % 2 === 0, 在选择

推荐阅读