Skip to content

Instantly share code, notes, and snippets.

@tom-wagner
Last active February 5, 2019 21:19
Show Gist options
  • Save tom-wagner/674661a3def5b367d6dc34537813a402 to your computer and use it in GitHub Desktop.
Save tom-wagner/674661a3def5b367d6dc34537813a402 to your computer and use it in GitHub Desktop.
// let arr = [
// { position: [9, 1], velocity: [0, 2] },
// { position: [7, 0], velocity: [-1, 0] },
// { position: [3, -2], velocity: [-1, 1] },
// { position: [6, 10], velocity: [-2, -1] },
// { position: [2, -4], velocity: [2, 2], },
// { position: [-6, 10], velocity: [2, -2] },
// { position: [1, 8], velocity: [1, -1] },
// { position: [1, 7], velocity: [1, 0] },
// { position: [-3, 11], velocity: [1, -2] },
// { position: [7, 6], velocity: [-1, -1] },
// { position: [-2, 3], velocity: [1, 0] },
// { position: [-4, 3], velocity: [2, 0] },
// { position: [10, -3], velocity: [-1, 1] },
// { position: [5, 11], velocity: [1, -2] },
// { position: [4, 7], velocity: [0, -1] },
// { position: [8, -2], velocity: [0, 1] },
// { position: [15, 0], velocity: [-2, 0] },
// { position: [1, 6], velocity: [1, 0] },
// { position: [8, 9], velocity: [0, -1] },
// { position: [3, 3], velocity: [-1, 1] },
// { position: [0, 5], velocity: [0, -1] },
// { position: [-2, 2], velocity: [2, 0] },
// { position: [5, -2], velocity: [1, 2] },
// { position: [1, 4], velocity: [2, 1] },
// { position: [-2, 7], velocity: [2, -2] },
// { position: [3, 6], velocity: [-1, -1] },
// { position: [5, 0], velocity: [1, 0] },
// { position: [-6, 0], velocity: [2, 0] },
// { position: [5, 9], velocity: [1, -2] },
// { position: [14, 7], velocity: [-2, 0] },
// { position: [-3, 6], velocity: [2, -1] },
// ];
let arr = [
{ position: [ -42417, 32097], velocity: [ 4, -3] },
{ position: [ -10502, -10533], velocity: [ 1, 1] },
{ position: [ -53094, 32093], velocity: [ 5, -3] },
{ position: [ -53090, -21188], velocity: [ 5, 2] },
{ position: [ 53486, 21441], velocity: [-5, -2] },
{ position: [ -21142, -42496], velocity: [ 2, 4] },
{ position: [ -42422, 32088], velocity: [ 4, -3] },
{ position: [ 42778, 10784], velocity: [-4, -1] },
{ position: [ 10826, 42748], velocity: [-1, -4] },
{ position: [ -10449, 53401], velocity: [ 1, -5] },
{ position: [ -42453, -21187], velocity: [ 4, 2] },
{ position: [ 32154, -31839], velocity: [-3, 3] },
{ position: [ -42434, -53156], velocity: [ 4, 5] },
{ position: [ -21149, 32097], velocity: [ 2, -3] },
{ position: [ -10497, 53409], velocity: [ 1, -5] },
{ position: [ -42438, -53151], velocity: [ 4, 5] },
{ position: [ 21490, 10778], velocity: [-2, -1] },
{ position: [ 42831, 42753], velocity: [-4, -4] },
{ position: [ 53474, -42501], velocity: [-5, 4] },
{ position: [ -42436, -21192], velocity: [ 4, 2] },
{ position: [ 53450, -53154], velocity: [-5, 5] },
{ position: [ 32118, -21185], velocity: [-3, 2] },
{ position: [ -21158, -10533], velocity: [ 2, 1] },
{ position: [ 10842, 42749], velocity: [-1, -4] },
{ position: [ 53467, 21436], velocity: [-5, -2] },
{ position: [ 32130, -53160], velocity: [-3, 5] },
{ position: [ 32119, -53151], velocity: [-3, 5] },
{ position: [ 32143, -21183], velocity: [-3, 2] },
{ position: [ -10486, 10781], velocity: [ 1, -1] },
{ position: [ -53098, 21433], velocity: [ 5, -2] },
{ position: [ -10465, -42503], velocity: [ 1, 4] },
{ position: [ -53083, 10776], velocity: [ 5, -1] },
{ position: [ 32173, -53151], velocity: [-3, 5] },
{ position: [ -31782, 21436], velocity: [ 3, -2] },
{ position: [ 32143, 10782], velocity: [-3, -1] },
{ position: [ 21487, -42500], velocity: [-2, 4] },
{ position: [ -53082, 42752], velocity: [ 5, -4] },
{ position: [ 42775, -21183], velocity: [-4, 2] },
{ position: [ 53431, -53160], velocity: [-5, 5] },
{ position: [ -53078, 10784], velocity: [ 5, -1] },
{ position: [ -10505, 53408], velocity: [ 1, -5] },
{ position: [ 21507, -53151], velocity: [-2, 5] },
{ position: [ 42814, -53160], velocity: [-4, 5] },
{ position: [ 53427, 53402], velocity: [-5, -5] },
{ position: [ -21164, 10780], velocity: [ 2, -1] },
{ position: [ 21461, 53404], velocity: [-2, -5] },
{ position: [ 32173, 21436], velocity: [-3, -2] },
{ position: [ -53086, 21438], velocity: [ 5, -2] },
{ position: [ 32146, -42503], velocity: [-3, 4] },
{ position: [ 32159, 21439], velocity: [-3, -2] },
{ position: [ 53442, 42751], velocity: [-5, -4] },
{ position: [ -31817, 42752], velocity: [ 3, -4] },
{ position: [ 53459, -21188], velocity: [-5, 2] },
{ position: [ 21458, -21191], velocity: [-2, 2] },
{ position: [ -21134, 53402], velocity: [ 2, -5] },
{ position: [ -10481, -10534], velocity: [ 1, 1] },
{ position: [ -21137, -53158], velocity: [ 2, 5] },
{ position: [ -21110, -31839], velocity: [ 2, 3] },
{ position: [ -21153, 21441], velocity: [ 2, -2] },
{ position: [ -31766, -42495], velocity: [ 3, 4] },
{ position: [ 42799, -53155], velocity: [-4, 5] },
{ position: [ -42449, 42752], velocity: [ 4, -4] },
{ position: [ -53102, -10531], velocity: [ 5, 1] },
{ position: [ -21149, -10527], velocity: [ 2, 1] },
{ position: [ -31801, 53401], velocity: [ 3, -5] },
{ position: [ -10462, -31842], velocity: [ 1, 3] },
{ position: [ -31806, 42751], velocity: [ 3, -4] },
{ position: [ -10502, 10777], velocity: [ 1, -1] },
{ position: [ -53129, 10785], velocity: [ 5, -1] },
{ position: [ 10803, -21186], velocity: [-1, 2] },
{ position: [ 42810, -31847], velocity: [-4, 3] },
{ position: [ 53450, -21189], velocity: [-5, 2] },
{ position: [ 53434, 21433], velocity: [-5, -2] },
{ position: [ -21126, 32094], velocity: [ 2, -3] },
{ position: [ 53446, -53157], velocity: [-5, 5] },
{ position: [ 21518, -31839], velocity: [-2, 3] },
{ position: [ -21146, -53157], velocity: [ 2, 5] },
{ position: [ 32135, 32089], velocity: [-3, -3] },
{ position: [ -53094, -21188], velocity: [ 5, 2] },
{ position: [ 32170, -53152], velocity: [-3, 5] },
{ position: [ -42476, 21437], velocity: [ 4, -2] },
{ position: [ -42446, -31840], velocity: [ 4, 3] },
{ position: [ 53471, -42503], velocity: [-5, 4] },
{ position: [ 10850, 42752], velocity: [-1, -4] },
{ position: [ -21141, -10531], velocity: [ 2, 1] },
{ position: [ -10508, 53404], velocity: [ 1, -5] },
{ position: [ 42818, -21190], velocity: [-4, 2] },
{ position: [ 21483, -42503], velocity: [-2, 4] },
{ position: [ -10482, -42503], velocity: [ 1, 4] },
{ position: [ -53089, -31847], velocity: [ 5, 3] },
{ position: [ 32162, 32092], velocity: [-3, -3] },
{ position: [ -31763, 42753], velocity: [ 3, -4] },
{ position: [ -10462, -10535], velocity: [ 1, 1] },
{ position: [ 42831, 21433], velocity: [-4, -2] },
{ position: [ 42819, -42504], velocity: [-4, 4] },
{ position: [ 53426, -21192], velocity: [-5, 2] },
{ position: [ 21475, -42495], velocity: [-2, 4] },
{ position: [ -10462, 32092], velocity: [ 1, -3] },
{ position: [ 42802, -10533], velocity: [-4, 1] },
{ position: [ 32146, 32088], velocity: [-3, -3] },
{ position: [ 10831, -21184], velocity: [-1, 2] },
{ position: [ 53466, 42752], velocity: [-5, -4] },
{ position: [ 21516, -42499], velocity: [-2, 4] },
{ position: [ 32159, -53152], velocity: [-3, 5] },
{ position: [ -53123, 32097], velocity: [ 5, -3] },
{ position: [ -53126, 21434], velocity: [ 5, -2] },
{ position: [ -31790, -21189], velocity: [ 3, 2] },
{ position: [ -31789, -31843], velocity: [ 3, 3] },
{ position: [ -10502, -21185], velocity: [ 1, 2] },
{ position: [ -53124, 21441], velocity: [ 5, -2] },
{ position: [ 53486, 10779], velocity: [-5, -1] },
{ position: [ 42805, -31846], velocity: [-4, 3] },
{ position: [ -42470, 53406], velocity: [ 4, -5] },
{ position: [ 53469, -42495], velocity: [-5, 4] },
{ position: [ 53450, 42751], velocity: [-5, -4] },
{ position: [ 42822, -31843], velocity: [-4, 3] },
{ position: [ 32133, 21436], velocity: [-3, -2] },
{ position: [ 21487, 21437], velocity: [-2, -2] },
{ position: [ 32149, -31841], velocity: [-3, 3] },
{ position: [ -31778, -53151], velocity: [ 3, 5] },
{ position: [ 32175, -42504], velocity: [-3, 4] },
{ position: [ 10834, 42750], velocity: [-1, -4] },
{ position: [ 10855, 10777], velocity: [-1, -1] },
{ position: [ 21492, 21438], velocity: [-2, -2] },
{ position: [ -21131, 21434], velocity: [ 2, -2] },
{ position: [ 53455, 32091], velocity: [-5, -3] },
{ position: [ -31786, 53408], velocity: [ 3, -5] },
{ position: [ 10829, 10781], velocity: [-1, -1] },
{ position: [ 10831, -10529], velocity: [-1, 1] },
{ position: [ -42460, 53405], velocity: [ 4, -5] },
{ position: [ 10813, -31839], velocity: [-1, 3] },
{ position: [ -53076, 21432], velocity: [ 5, -2] },
{ position: [ -10452, -42499], velocity: [ 1, 4] },
{ position: [ 21487, -10534], velocity: [-2, 1] },
{ position: [ -53082, 10781], velocity: [ 5, -1] },
{ position: [ 10839, -10527], velocity: [-1, 1] },
{ position: [ 42770, 21441], velocity: [-4, -2] },
{ position: [ 53466, -21185], velocity: [-5, 2] },
{ position: [ 10812, 42753], velocity: [-1, -4] },
{ position: [ 32156, 21432], velocity: [-3, -2] },
{ position: [ 10803, 53407], velocity: [-1, -5] },
{ position: [ 53430, 42747], velocity: [-5, -4] },
{ position: [ -53114, 32088], velocity: [ 5, -3] },
{ position: [ 32156, 42748], velocity: [-3, -4] },
{ position: [ 42802, -42499], velocity: [-4, 4] },
{ position: [ -53110, -42500], velocity: [ 5, 4] },
{ position: [ 21474, -31840], velocity: [-2, 3] },
{ position: [ -21166, 21432], velocity: [ 2, -2] },
{ position: [ -10506, 42746], velocity: [ 1, -4] },
{ position: [ -31819, -42499], velocity: [ 3, 4] },
{ position: [ -31769, -10528], velocity: [ 3, 1] },
{ position: [ 53426, 32088], velocity: [-5, -3] },
{ position: [ -21150, -10529], velocity: [ 2, 1] },
{ position: [ -53086, 53408], velocity: [ 5, -5] },
{ position: [ -31782, 32095], velocity: [ 3, -3] },
{ position: [ -42449, 42747], velocity: [ 4, -4] },
{ position: [ -53098, -31847], velocity: [ 5, 3] },
{ position: [ 32162, -21185], velocity: [-3, 2] },
{ position: [ -53110, -42497], velocity: [ 5, 4] },
{ position: [ 53455, -10532], velocity: [-5, 1] },
{ position: [ 32157, -42504], velocity: [-3, 4] },
{ position: [ 42802, -53155], velocity: [-4, 5] },
{ position: [ -53106, 42749], velocity: [ 5, -4] },
{ position: [ -31781, -31848], velocity: [ 3, 3] },
{ position: [ -53100, 53403], velocity: [ 5, -5] },
{ position: [ -10508, -21187], velocity: [ 1, 2] },
{ position: [ -42477, 53407], velocity: [ 4, -5] },
{ position: [ -31795, -42504], velocity: [ 3, 4] },
{ position: [ -53077, -10527], velocity: [ 5, 1] },
{ position: [ 32133, 32097], velocity: [-3, -3] },
{ position: [ -53090, 53409], velocity: [ 5, -5] },
{ position: [ 10847, 42749], velocity: [-1, -4] },
{ position: [ 21466, -21192], velocity: [-2, 2] },
{ position: [ 21476, -21192], velocity: [-2, 2] },
{ position: [ -10462, 21439], velocity: [ 1, -2] },
{ position: [ 53430, -53153], velocity: [-5, 5] },
{ position: [ 42831, -10534], velocity: [-4, 1] },
{ position: [ -42435, 21432], velocity: [ 4, -2] },
{ position: [ 32131, 53400], velocity: [-3, -5] },
{ position: [ -10481, -31844], velocity: [ 1, 3] },
{ position: [ -10478, 53404], velocity: [ 1, -5] },
{ position: [ -42438, -53160], velocity: [ 4, 5] },
{ position: [ 32170, -53153], velocity: [-3, 5] },
{ position: [ 42778, 32092], velocity: [-4, -3] },
{ position: [ -42427, 42753], velocity: [ 4, -4] },
{ position: [ 21476, -21183], velocity: [-2, 2] },
{ position: [ -21126, -21191], velocity: [ 2, 2] },
{ position: [ -21118, -31842], velocity: [ 2, 3] },
{ position: [ -10505, -31848], velocity: [ 1, 3] },
{ position: [ -42421, -10536], velocity: [ 4, 1] },
{ position: [ -31779, 21436], velocity: [ 3, -2] },
{ position: [ -53106, 21437], velocity: [ 5, -2] },
{ position: [ 42807, -53151], velocity: [-4, 5] },
{ position: [ 10810, 10778], velocity: [-1, -1] },
{ position: [ 32154, -10534], velocity: [-3, 1] },
{ position: [ 42814, -53160], velocity: [-4, 5] },
{ position: [ 53430, 21439], velocity: [-5, -2] },
{ position: [ -42462, 32097], velocity: [ 4, -3] },
{ position: [ 21506, 10777], velocity: [-2, -1] },
{ position: [ -53092, -42495], velocity: [ 5, 4] },
{ position: [ -53081, -10528], velocity: [ 5, 1] },
{ position: [ 53471, -53153], velocity: [-5, 5] },
{ position: [ -53106, -21187], velocity: [ 5, 2] },
{ position: [ 53450, 21437], velocity: [-5, -2] },
{ position: [ 21515, -10527], velocity: [-2, 1] },
{ position: [ 42791, -31846], velocity: [-4, 3] },
{ position: [ 21463, 21433], velocity: [-2, -2] },
{ position: [ 53485, 10776], velocity: [-5, -1] },
{ position: [ 42790, -31848], velocity: [-4, 3] },
{ position: [ -21122, -21192], velocity: [ 2, 2] },
{ position: [ 21511, 53406], velocity: [-2, -5] },
{ position: [ -10505, -21192], velocity: [ 1, 2] },
{ position: [ -21163, 21436], velocity: [ 2, -2] },
{ position: [ 53426, -42496], velocity: [-5, 4] },
{ position: [ 32162, 10781], velocity: [-3, -1] },
{ position: [ -42470, -10527], velocity: [ 4, 1] },
{ position: [ -10458, 32093], velocity: [ 1, -3] },
{ position: [ -21105, 42745], velocity: [ 2, -4] },
{ position: [ 53479, -31840], velocity: [-5, 3] },
{ position: [ -31805, 42744], velocity: [ 3, -4] },
{ position: [ 21498, 32094], velocity: [-2, -3] },
{ position: [ -10486, 32094], velocity: [ 1, -3] },
{ position: [ 21484, 10781], velocity: [-2, -1] },
{ position: [ 32140, 32088], velocity: [-3, -3] },
{ position: [ -21130, 10777], velocity: [ 2, -1] },
{ position: [ 42794, -10533], velocity: [-4, 1] },
{ position: [ 21498, -21187], velocity: [-2, 2] },
{ position: [ -21116, -31848], velocity: [ 2, 3] },
{ position: [ 53450, -31844], velocity: [-5, 3] },
{ position: [ 32142, 42745], velocity: [-3, -4] },
{ position: [ -31782, -53152], velocity: [ 3, 5] },
{ position: [ -53091, -10527], velocity: [ 5, 1] },
{ position: [ 42798, 10777], velocity: [-4, -1] },
{ position: [ -42422, 42744], velocity: [ 4, -4] },
{ position: [ 10855, -10529], velocity: [-1, 1] },
{ position: [ 21490, 32094], velocity: [-2, -3] },
{ position: [ -42437, -42504], velocity: [ 4, 4] },
{ position: [ 53483, -21192], velocity: [-5, 2] },
{ position: [ 53466, 53406], velocity: [-5, -5] },
{ position: [ -10458, -31848], velocity: [ 1, 3] },
{ position: [ 42771, 32090], velocity: [-4, -3] },
{ position: [ -31780, 53404], velocity: [ 3, -5] },
{ position: [ -53115, -10536], velocity: [ 5, 1] },
{ position: [ -10449, 10776], velocity: [ 1, -1] },
{ position: [ -31772, 32097], velocity: [ 3, -3] },
{ position: [ 21515, -21186], velocity: [-2, 2] },
{ position: [ 42815, 42749], velocity: [-4, -4] },
{ position: [ -21158, 21437], velocity: [ 2, -2] },
{ position: [ 42774, -31846], velocity: [-4, 3] },
{ position: [ -53105, 53405], velocity: [ 5, -5] },
{ position: [ 21478, -10527], velocity: [-2, 1] },
{ position: [ -31781, -21183], velocity: [ 3, 2] },
{ position: [ 53450, 32093], velocity: [-5, -3] },
{ position: [ 10810, -42499], velocity: [-1, 4] },
{ position: [ 32132, 10781], velocity: [-3, -1] },
{ position: [ 32138, 10785], velocity: [-3, -1] },
{ position: [ 10863, -21190], velocity: [-1, 2] },
{ position: [ 10859, 53409], velocity: [-1, -5] },
{ position: [ -53109, -42499], velocity: [ 5, 4] },
{ position: [ 32132, 53400], velocity: [-3, -5] },
{ position: [ 53434, 32088], velocity: [-5, -3] },
{ position: [ 53479, -10530], velocity: [-5, 1] },
{ position: [ 53487, 21432], velocity: [-5, -2] },
{ position: [ 53427, 10779], velocity: [-5, -1] },
{ position: [ -10465, 21434], velocity: [ 1, -2] },
{ position: [ -21149, 21432], velocity: [ 2, -2] },
{ position: [ 10823, -42504], velocity: [-1, 4] },
{ position: [ -42446, 10783], velocity: [ 4, -1] },
{ position: [ -31771, 42753], velocity: [ 3, -4] },
{ position: [ 21501, 10780], velocity: [-2, -1] },
{ position: [ -53081, -31847], velocity: [ 5, 3] },
{ position: [ 53475, 53400], velocity: [-5, -5] },
{ position: [ -53074, -53160], velocity: [ 5, 5] },
{ position: [ -53126, 21441], velocity: [ 5, -2] },
{ position: [ 10823, -21190], velocity: [-1, 2] },
{ position: [ 53485, -53160], velocity: [-5, 5] },
{ position: [ -21108, 10785], velocity: [ 2, -1] },
{ position: [ -42457, 32097], velocity: [ 4, -3] },
{ position: [ -10486, -53158], velocity: [ 1, 5] },
{ position: [ 53466, 21432], velocity: [-5, -2] },
{ position: [ 10834, 53409], velocity: [-1, -5] },
{ position: [ 21493, 32090], velocity: [-2, -3] },
{ position: [ -31798, -21183], velocity: [ 3, 2] },
{ position: [ -42429, -10536], velocity: [ 4, 1] },
{ position: [ -53131, 10781], velocity: [ 5, -1] },
{ position: [ 53459, 53404], velocity: [-5, -5] },
{ position: [ 53469, 53404], velocity: [-5, -5] },
{ position: [ 42828, 53409], velocity: [-4, -5] },
{ position: [ -21139, -53160], velocity: [ 2, 5] },
{ position: [ -31769, -42499], velocity: [ 3, 4] },
{ position: [ 42821, 10781], velocity: [-4, -1] },
{ position: [ 21490, 21434], velocity: [-2, -2] },
{ position: [ 21459, -53158], velocity: [-2, 5] },
{ position: [ 10842, -10533], velocity: [-1, 1] },
{ position: [ 42778, 32097], velocity: [-4, -3] },
{ position: [ 32131, 42750], velocity: [-3, -4] },
{ position: [ 42821, -10531], velocity: [-4, 1] },
{ position: [ 42775, -53159], velocity: [-4, 5] },
{ position: [ 42820, -42495], velocity: [-4, 4] },
{ position: [ 53468, 53404], velocity: [-5, -5] },
{ position: [ -31818, 42746], velocity: [ 3, -4] },
{ position: [ -42422, -31840], velocity: [ 4, 3] },
{ position: [ 21479, -21183], velocity: [-2, 2] },
{ position: [ -42454, 21435], velocity: [ 4, -2] },
{ position: [ 10847, -53152], velocity: [-1, 5] },
{ position: [ -31813, 53409], velocity: [ 3, -5] },
{ position: [ 10847, 21435], velocity: [-1, -2] },
{ position: [ -53081, 32094], velocity: [ 5, -3] },
{ position: [ -42473, 32096], velocity: [ 4, -3] },
{ position: [ 10807, -42503], velocity: [-1, 4] },
{ position: [ 10862, 32097], velocity: [-1, -3] },
{ position: [ 53469, 10785], velocity: [-5, -1] },
{ position: [ 21503, -42498], velocity: [-2, 4] },
{ position: [ 53430, 21435], velocity: [-5, -2] },
{ position: [ 53427, -31841], velocity: [-5, 3] },
{ position: [ 42799, -42495], velocity: [-4, 4] },
{ position: [ -21107, -31839], velocity: [ 2, 3] },
{ position: [ 21511, -53151], velocity: [-2, 5] },
{ position: [ -42433, -10530], velocity: [ 4, 1] },
{ position: [ -31777, -31846], velocity: [ 3, 3] },
{ position: [ -21141, -21191], velocity: [ 2, 2] },
{ position: [ -53100, 32094], velocity: [ 5, -3] },
{ position: [ 21514, 42753], velocity: [-2, -4] },
{ position: [ -42466, 10785], velocity: [ 4, -1] },
{ position: [ -31790, 21441], velocity: [ 3, -2] },
{ position: [ -42433, 32095], velocity: [ 4, -3] },
{ position: [ -42430, -42497], velocity: [ 4, 4] },
{ position: [ 21503, -31840], velocity: [-2, 3] },
{ position: [ 21475, -53154], velocity: [-2, 5] },
{ position: [ -42449, 32095], velocity: [ 4, -3] },
{ position: [ -53094, 10784], velocity: [ 5, -1] },
{ position: [ 21495, -21192], velocity: [-2, 2] },
{ position: [ 53434, -21191], velocity: [-5, 2] },
{ position: [ 32143, -21189], velocity: [-3, 2] },
{ position: [ -21140, -53155], velocity: [ 2, 5] },
{ position: [ 21495, 42744], velocity: [-2, -4] },
{ position: [ 21502, 32097], velocity: [-2, -3] },
{ position: [ -53094, -42495], velocity: [ 5, 4] },
{ position: [ -42474, 53406], velocity: [ 4, -5] },
{ position: [ -21141, -10535], velocity: [ 2, 1] },
{ position: [ 42788, -31843], velocity: [-4, 3] },
{ position: [ -21139, -21192], velocity: [ 2, 2] },
{ position: [ -10493, 10782], velocity: [ 1, -1] },
];
const moveOnceAndUpdate = (arr) => {
return _.map(arr, (obj) => {
const newObj = { ...obj };
const [newX, newY] = _.map(obj.position, (num, idx) => num + obj.velocity[idx]);
newObj.position = [newX, newY];
return newObj;
})
};
const updateMinimum = (loc, velocity, currentMin) => {
if (loc < currentMin) {
return loc;
}
if (loc + velocity < currentMin) {
return loc + velocity;
}
return currentMin;
};
const updateMaximum = (loc, velocity, currentMax) => {
if (loc > currentMax) {
return loc;
}
if (loc + velocity > currentMax) {
return loc + velocity;
}
return currentMax;
};
const determineGridSize = (arr) => {
let minX = arr[0].position[0];
let maxX = arr[0].position[0];
let minY = arr[0].position[1];
let maxY = arr[0].position[1];
_.forEach(arr, ({ position: [x, y], velocity: [vX, vY] }) => {
minX = updateMinimum(x, vX, minX);
minY = updateMinimum(y, vY, minY);
maxX = updateMaximum(x, vX, maxX);
maxY = updateMaximum(y, vY, maxY);
})
// add some padding for scales
return { minX: minX - 1, maxX: maxX + 1, minY: minY - 1, maxY: maxY + 1 };
};
const makeGrid = (obj) => {
const width = obj.maxX - obj.minX;
const height = obj.maxY - obj.minY;
const subArray = _.range(width).map((el, idx) => ' ');
return _.range(height).map(() => [...subArray]);
};
const fillInGrid = (grid, arr, gridConfig) => {
const { minX, maxY } = gridConfig;
_.forEach(arr, ({ position: [x, y]}) => {
grid[maxY - y][x - minX] = 'X';
});
return grid;
};
let area = Infinity;
let solutionFound = false;
for (let i = 0; i < 50000; i++) {
let gridConfig = determineGridSize(arr);
const { maxX, maxY, minX, minY } = gridConfig;
const newArea = (maxX - minX) * (maxY - minY);
if (newArea > area && !solutionFound) {
let grid = makeGrid(gridConfig);
let pattern = fillInGrid(grid, arr, gridConfig);
let firstHalf = _.map(pattern, arr => arr.slice(0, 29));
let secondHalf = _.map(pattern, arr => arr.slice(29));
solutionFound = true;
console.log(pattern.reverse());
console.log(firstHalf.reverse());
console.log(secondHalf.reverse());
} else {
area = newArea;
}
arr = moveOnceAndUpdate(arr);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment