Last active
May 31, 2023 09:23
-
-
Save rihardn/b3d7e5c7709d8e795db316d3f9e4da17 to your computer and use it in GitHub Desktop.
Evenly, uniformly distribute array data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// var arr1 = ["A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "D", "D", "E"]; | |
// var arr1New = _evenlyDistribute(arr1); | |
// console.dir(arr1New.join()); | |
// Should output: ABACABADABACABAEABACABADABACABA | |
var _evenlyDistribute = function (data) { | |
var _arrayMerge = function (a, b) { | |
var c1 = a.length; | |
var c2 = b.length; | |
var result = []; | |
var i1 = 0; | |
var i2 = 0; | |
while (i1 < c1) { | |
result.push(a[i1++]); | |
while (i2 < c2 && (i2 + 1) / (c2 + 1) < (i1 + 1) / (c1 + 1)) { | |
result.push(b[i2++]); | |
} | |
} | |
return result; | |
} | |
var groups = {}; | |
for (var i = 0; i < data.length; i++) { | |
var slide = data[i]; | |
if (groups[slide]) { | |
groups[slide].push(slide); | |
} else { | |
var sArr = []; | |
sArr.push(slide); | |
groups[slide] = sArr; | |
} | |
} | |
var slidesData = {}; | |
for (var j = 0; j < data.length; j++) { | |
var slide = data[j]; | |
if (slidesData[slide]) { | |
slidesData[slide] += 1; | |
} else { | |
slidesData[slide] = 1; | |
} | |
} | |
var sortable = []; | |
for (var slide in slidesData) { | |
sortable.push([slide, slidesData[slide]]); | |
} | |
sortable.sort(function (a, b) { | |
return a[1] - b[1]; | |
}); | |
var result = []; | |
for (var l = 0; l < sortable.length; l++) { | |
var cKey = sortable[l][0]; | |
if (result.length == 0) { | |
result = groups[cKey]; | |
} else if (result.length >= groups[cKey].length) { | |
result = _arrayMerge(result, groups[cKey]); | |
} else { | |
result = _arrayMerge(groups[cKey], result); | |
} | |
} | |
return result; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const arr1 = ["A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "D", "D", "E"]; | |
const arr1New = _evenlyDistribute(arr1); | |
console.dir(arr1New.join()); | |
// Should output: ABACABADABACABAEABACABADABACABA | |
function _arrayMerge(a, b) { | |
let c1 = a.length; | |
let c2 = b.length; | |
let result = []; | |
let i1 = 0; | |
let i2 = 0; | |
while (i1 < c1) { | |
result.push(a[i1++]); | |
while (i2 < c2 && (i2 + 1) / (c2 + 1) < (i1 + 1) / (c1 + 1)) { | |
result.push(b[i2++]); | |
} | |
} | |
return result; | |
} | |
function _evenlyDistribute(data) { | |
let groups = {}; | |
for (let i = 0; i < data.length; i++) { | |
let slide = data[i]; | |
if (groups[slide]) { | |
groups[slide].push(slide); | |
} else { | |
let sArr = []; | |
sArr.push(slide); | |
groups[slide] = sArr; | |
} | |
} | |
let slidesData = {}; | |
for (let j = 0; j < data.length; j++) { | |
let slide = data[j]; | |
if (slidesData[slide]) { | |
slidesData[slide] += 1; | |
} else { | |
slidesData[slide] = 1; | |
} | |
} | |
let sortable = []; | |
for (let slide in slidesData) { | |
sortable.push([slide, slidesData[slide]]); | |
} | |
sortable.sort(function (a, b) { | |
return a[1] - b[1]; | |
}); | |
let result = []; | |
for (let l = 0; l < sortable.length; l++) { | |
let cKey = sortable[l][0]; | |
if (result.length == 0) { | |
result = groups[cKey]; | |
} else if (result.length >= groups[cKey].length) { | |
result = _arrayMerge(result, groups[cKey]); | |
} else { | |
result = _arrayMerge(groups[cKey], result); | |
} | |
} | |
return result; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment