JavaScript
function isAligned(p1, p2, candidate) {
var diffX = p2[0]-p1[0];
var diffY = (p2[1]-p1[1]);
if (diffX == 0 && diffY == 0)
return false;
return diffX * candidate[1] == diffY * candidate[0] + diffX * p1[1] - diffY * p1[0];
}
function longuest(points) {
var best = [];
for(var i = 0; i < points.length; i++) {
for(var j = 0; j < points.length; j++) {
if (i == j) {
continue;
}
var lineup = [];
for(var k = 0; k < points.length; k++) {
if (isAligned(points[i], points[j], points[k])) {
lineup.push(k);
}
if(lineup.length > best.length){
best = lineup;
console.log(i +', '+j + ': '+ JSON.stringify(lineup));
}
}
}
}
return best;
}
var arr = [[9,93],[43,84],[88,82],[27,51],[6,7],[98,99],[26,96],[67,37],
[77,8],[11,62],[67,29],[64,53],[51,74],[99,36],[23,85],
[8,53],[85,35],[15,71],[66,27],[95,77],[62,48],[82,1],
[5,81],[58,2],[93,52],[59,55],[74,17],[51,36],[66,61],
[41,53],[18,29],[35,89],[63,50],[37,6],[40,23],[97,39],
[68,11],[89,30],[2,87],[18,96],[17,79],[24,68],[36,8],
[45,84],[21,13],[43,90],[42,73],[62,91],[81,37],[98,63],
[56,21],[65,47],[77,55],[40,77],[16,75],[62,12],[75,12],
[86,64],[2,30],[71,62],[81,70],[5,64],[19,32],[16,43],
[38,26],[98,6],[46,23],[98,65],[53,20],[79,31],[7,60],
[50,65],[31,83],[81,41],[0,29],[33,61],[55,77],[23,65],
[9,93],[42,20],[37,27],[51,71],[7,73],[97,21],[36,35],
[98,93],[89,39],[12,98],[86,49],[64,7],[4,48],[37,93],
[52,26],[24,51],[33,56],[23,72],[11,29],[89,76],[62,25],
[0,40]];
console.log(longuest(arr));