algorithm - 仅通过基本运算符(MTWTFSS)构建掩码以查找特定日期是否匹配
问题描述
给定一周中的几天选择,我需要知道特定日期是否与选择匹配。
例如,给定:
enum DayOfWeek {
MON, TUE, WED, THU, FRI, SAT, SUN
}
以及以下选择:
List<DayOfWeek> selection = List.of(MON, WED);
如果给定的星期几是MON
or 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
只能用基本运算符编写的?
解决方案
取一些素数,而不是布尔方法
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
, 在选择
推荐阅读
- kubernetes - 如何控制 kubernetes cronjobs 之间的间隔(即完成后的冷却时间)
- php - 在 Laravel 中将托管数据库复制到本地数据库
- sql - 如何组合具有不同列数的两个表SQL
- android - 表情符号未在 Flutter 应用程序中显示
- python - 每个单元格中索引值和列名之间具有日期差异的数据框
- swift - AVCaptureVideoPreviewLayer 不检测屏幕两个范围内的对象
- google-sheets - 在Google表格中将具有相同值的多个单元格与一个单元格合并以求平均值
- asp.net-mvc - 从 JsonApiDotNetCore 到 .NET Core 3.0 的迁移路径是什么?
- node.js - Docker / Kubernetes:试图擦除所有内容,但我仍然有一个在 localhost 上运行的容器,我无法使用 docker ps
- xcode - 如何在 Xcode 中开发多个 Swift Package Manager 包?