Submission d0ed058b...
contract Unique {
function uniquify(uint[] input) public pure returns(uint[] ret) {
uint256 length = input.length;
if (length <= 1) { return input; }
uint filter = 0;
uint[256] memory fff;
uint256 ptr = 0;
for (uint256 i = 0; i < length; i++) {
uint v = input[i];
if (v <= 0xff) {
if (fff[v] & 0x01 == 0x01) { continue; }
fff[v] |= 0x01;
} else {
uint index = uint(v & 0xff);
filter = uint(v & 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0);
if (uint(fff[index]) & filter != filter) {
} else {
filter = 1;
for (uint j = 0; j < ptr; j++) {
if (input[j] == v) {
filter = 0x00;
break;
}
}
if (filter == 0x00) { continue; }
}
fff[index] |= filter;
}
input[ptr++] = v;
}
ret = new uint[](ptr);
for(i = 0; i < ret.length; i++) {
ret[i] = input[i];
}
}
}