Test case details

Preparation Code

let entities = {"0":{"id":0,"x":0.9946533074778419,"y":0.3059083515828709},"1":{"id":1,"x":1.0583496360468558,"y":13.57576522639433},"2":{"id":2,"x":11.022155707329242,"y":16.136028602302094},"3":{"id":3,"x":7.862940199939628,"y":14.658491775022458},"4":{"id":4,"x":9.151338731419196,"y":0.05540801408666418},"5":{"id":5,"x":9.35792925180948,"y":15.998868306222004},"6":{"id":6,"x":0.04234965467271756,"y":15.53116808235191},"7":{"id":7,"x":13.361970012144674,"y":15.573269525275935},"8":{"id":8,"x":13.48527611008735,"y":15.268277308416923},"9":{"id":9,"x":10.301396661968845,"y":16.794671027907647},"10":{"id":10,"x":11.953317636064437,"y":4.769271490647999},"11":{"id":11,"x":19.71572958251297,"y":14.236069837927822},"12":{"id":12,"x":3.24569556800661,"y":0.7397951818655901},"13":{"id":13,"x":17.88807574677351,"y":11.576808631692849},"14":{"id":14,"x":15.13445542550163,"y":11.47587723515171},"15":{"id":15,"x":1.9252283495754252,"y":12.413823796865993},"16":{"id":16,"x":9.950926239779715,"y":7.927836224087068},"17":{"id":17,"x":1.1094953500031357,"y":13.639501983985983},"18":{"id":18,"x":19.622739214024904,"y":11.038672560446003},"19":{"id":19,"x":1.6343388198246789,"y":5.720433747341076},"20":{"id":20,"x":8.97545381628273,"y":5.177715957260172},"21":{"id":21,"x":5.587454951617303,"y":4.54559624128458},"22":{"id":22,"x":8.167011934653825,"y":11.91465804496865},"23":{"id":23,"x":19.063229598478635,"y":5.256922690105585},"24":{"id":24,"x":2.64774224428987,"y":14.115759935349601},"25":{"id":25,"x":6.213771950118843,"y":10.440119491163298},"26":{"id":26,"x":19.64130209073518,"y":5.467279508652849},"27":{"id":27,"x":12.825207959187349,"y":5.996806015464173},"28":{"id":28,"x":3.7538852370797393,"y":19.964851171317154},"29":{"id":29,"x":12.272499376796508,"y":8.88894575986923}}; function distance_squared(a, b) { let dx = a.x - b.x; let dy = a.y - b.y; return dx * dx + dy * dy; }

Test cases

Test #1

let chainTargets = []; let previousTarget = entities["0"]; while(chainTargets.length < 5) { const targets = Object.values(entities).map((m) => ({ target: m, distance: distance_squared(m, previousTarget) })).filter((m) => { if(m.target.id == previousTarget.id || chainTargets.includes(m.target)) { return false; } return m.distance <= 100 * 100; }).sort((a, b) => a.distance - b.distance); const entity = targets.shift(); if (!entity) { break; } previousTarget = entity.target; chainTargets.push(previousTarget); }

Test #2

let chainTargets = []; let previousTarget = entities["0"]; while(chainTargets.length < 5) { let closest_dist = Infinity; let closest_entity = null; for(let id in entities) { let entity = entities[id]; if(entity.id == previousTarget.id || chainTargets.includes(entity)) { continue; } let dist = distance_squared(entity, previousTarget); if(dist < closest_dist) { closest_dist = dist; closest_entity = entity; } } if(closest_entity == null || closest_dist > 100 * 100) { break; } previousTarget = closest_entity; chainTargets.push(previousTarget); }