需求是 如 當天的 00:30 - 11:00 轉為僅有1與0的字串, 其中 1 代表包含在時間段內, 0代表不包含
得出 00:30 - 11:00 的字串為 011111111111111111111110000000000000000000000000
時間可能是散開分佈, 不一定是連貫的. 如 11:00-12:00 14:00-16:00.
求解該怎麼做.謝謝各位大佬~
闭关修行中......
寫了個控制台用的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]]
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]);
將時間轉為秒數,秒數改為二進制就OK,至於 - 你可以按編碼表二進制好還是其他方式好,這個由你確定
半小時為單位不是把1天分割成48個段嗎,0-47表示段號對應各段時間字符串第i為對應段號i0表示在這段時間1表示不在這段時間具體程序不難寫吧。 只要求出段號然後字串內容替換就行了段號就是把時間轉換成小時數然後除以0.5取整
寫了個控制台用的js版的
時間用
[[0,30],[11,0]]
表示00:30 - 11:00
,所以第二種情況就是這樣的了下面是解碼
將時間轉為秒數,秒數改為二進制就OK,至於 - 你可以按編碼表二進制好還是其他方式好,這個由你確定
半小時為單位不是把1天分割成48個段嗎,0-47表示段號對應各段時間
字符串第i為對應段號i
0表示在這段時間
1表示不在這段時間
具體程序不難寫吧。
只要求出段號然後字串內容替換就行了
段號就是把時間轉換成小時數然後除以0.5取整