有48个1与0的字符串代表1天的时间, 半小时为单位

发布于 2022-09-04 21:27:58 字数 225 浏览 5 评论 0

需求是 如 当天的 00:30 - 11:00 转为仅有1与0的字符串, 其中 1 代表包含在时间段内, 0代表不包含

得出 00:30 - 11:00 的字符串为 011111111111111111111110000000000000000000000000

时间可能是散开分布, 不一定是连贯的. 如 11:00-12:00 14:00-16:00.

求解应该怎么做.谢谢各位大佬~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

随遇而安 2022-09-11 21:27:59

写了个控制台用的js版的

let calcPos = arr=>arr[0]*2+(arr[1]===0?0:1);
([[0,30],[11,0]].reduce(
    (a,b,i,arr)=>
        a+= new Array(calcPos(b)+(i===0||i%2===0?0:1)-a.length)
            .fill(i%2===0?"0":"1")
            .join("")
    , "")+new Array(48).fill("0").join(""))
    .slice(0,48);

时间用[[0,30],[11,0]]表示00:30 - 11:00,所以第二种情况就是这样的了

([[0,30],[11,0],[14,0],[16,0]].reduce((a,b,i,arr)=>a+=new Array(calcPos(b)+(i===0||i%2===0?0:1)-a.length).fill(i%2===0?"0":"1").join(""), "")+new Array(48).fill("0").join("")).slice(0,48);

下面是解码

("0"+"011111111111111111111110000011111000000000000000")
    .split("")
    .reduce(
        (a,b,i,arr)=>
            i===0?a:b!==arr[i-1]?[...a, (b==="1"?i:(i-1)) -1]:a
        , [])
    .map(i=>[(i-(i%2===0?0:1))/2, i%2===0?0:30]);
话少心凉 2022-09-11 21:27:59

將時間轉為秒數,秒數改為二進制就OK,至於 - 你可以按編碼表二進制好還是其他方式好,這個由你確定

2022-09-11 21:27:59

半小时为单位不是把1天分割成48个段吗,0-47表示段号对应各段时间
字符串第i为对应段号i
0表示在这段时间
1表示不在这段时间
具体程序不难写吧。
只要求出段号然后字符串内容替换就行了
段号就是把时间转换成小时数然后除以0.5取整

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文