JavaScript
var xrange = function(b0, b1, quanta) {
if (!quanta) { quanta = 1; }
if (!b1) { b1 = b0; b0 = 0; }
out = [];
for (var i = b0, idx = 0; i < b1; i += quanta, idx++) {
out[idx] = i;
}
return out;
}
var findDuplicates = function(int_list){
var n = int_list.length - 1;
var position_in_cycle = n + 1;
for(_ in xrange(n)){
position_in_cycle = int_list[position_in_cycle - 1];
}
var remembered_position_in_cycle = position_in_cycle;
var current_position_in_cycle = int_list[position_in_cycle - 1];
var cycle_step_count = 1;
while(current_position_in_cycle != remembered_position_in_cycle){
current_position_in_cycle = int_list[current_position_in_cycle - 1];
cycle_step_count += 1;
}
var pointer_start = n + 1;
var pointer_ahead = n + 1;
for(_ in xrange(cycle_step_count)){
pointer_ahead = int_list[pointer_ahead - 1];
}
while(pointer_start != pointer_ahead){
pointer_start = int_list[pointer_start - 1];
pointer_ahead = int_list[pointer_ahead - 1];
}
return pointer_start
}
var testData = {
sorted: {
16: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,16,17,18,19,20],
7: [1,2,3,4,5,6,7,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
20: [1,2,3,4,5,6,7,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20]
},
unsorted: {
16: [20,12,2,19,4,],
7: [1,2,3,4,5,6,7,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
20: [1,2,3,4,5,6,7,7,8,9,10,11,12,13,14,15,16,17,18,19,20,20]
}
}
var testList_16_sorted = ;
console.log(findDuplicates(testList))