export default (task, n) => { // 表示最終隊列執行結果 let q = '' // 對歸類進行存儲 let Q = {} task.forEach(item => { if (Q[item]) { Q[item]++ } else { Q[item] = 1 } }) // 小技巧這裏把1做爲循環條件 while (1) { // 任務清單 let keys = Object.keys(Q) if (!keys[0]) { break } // 聲明一個隊列n+1個單元 let tmp = [] for (let i = 0; i <= n; i++) { let max = 0 // 任務名稱 let key // 位置 let pos keys.forEach((item, idx) => { if (Q[item] > max) { max = Q[item] key = item pos = idx } }) if (key) { tmp.push(key) keys.splice(pos, 1) Q[key]-- if (Q[key] < 1) { delete Q[key] } } else { break } } q += tmp.join('').padEnd(n + 1, '-') } // 邊界處理 q = q.replace(/-+$/g, '') return q.length }