【问题标题】:How to find available times in work schedule using bits?如何使用位在工作计划中查找可用时间?
【发布时间】:2012-02-01 20:13:56
【问题描述】:

参考已经对另一个问题给出的答案:

https://stackoverflow.com/a/1609686/1183608

我正在处理这个答案,但是我对计算可接受的时间数组的意义感到困惑。我想知道一天中的什么时间(时间表)可用于特定的时隙长度,但上述答案中这样做的功能似乎不能满足这一点,除非我错过了什么。

【问题讨论】:

    标签: ruby time range bits


    【解决方案1】:

    grioja,您链接到的答案确实为您提供了可用于您所需时隙长度的时间。忙/可用时间用位表示,例如:

    1100001110

    (这将是 30 分钟可用,然后是 60 分钟忙碌,然后是 45 可用,然后是 15 忙碌。)然后你会得到一个二进制数,它代表你想要找到的可用时间段的长度,比如:

    111

    (这意味着您想找到一个有 45 分钟可用时间的空档。)然后您尝试将这 2 个数字相互移动:

    1100001110
    0000000111

    1100001110
    0000001110

    1100001110
    0000011100

    ...等等,对于每个可能的相对移位长度。他在该答案中显示的 AND 操作确定“所需时隙长度”数字中的 1 是否与“可用时间”数字中的所有 1 匹配。如果是,您已经找到了一个可以接受的时间。

    顺便说一句,你可以用其他方式做同样的事情。例如,您可以用字符串中的字符表示忙碌/可用时间,并使用正则表达式查找所需长度的可用槽。

    请注意,如果可用/忙碌时隙列表很长,这种通用方法(基本上只是“线性搜索”)将无法扩展。在这种情况下,还有其他方法会更快。

    【讨论】:

    • 谢谢,这样更有意义。我明白循环现在做了什么,只是它返回的东西不是很有意义,我已经纠正了。如果您有任何其他有关日程安排的资料,或者您认为更容易使用这种方法的替代方法,请告诉我。
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多