Submission ccf7e636...
/**
* This file is part of the 1st Solidity Gas Golfing Contest.
*
* This work is licensed under Creative Commons Attribution ShareAlike 3.0.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
pragma solidity 0.4.24;
contract Unique {
/**
* @dev Removes all but the first occurrence of each element from a list of
* integers, preserving the order of original elements, and returns the list.
*
* The input list may be of any length.
*
* @param input The list of integers to uniquify.
* @return The input list, with any duplicate elements removed.
*/
function uniquify(uint[] input) public pure returns(uint[] ret) {
uint len = input.length;
uint lenny = 22 * len / 7;
if (len <= 1) {
return input;
}
uint ptr = 0;
ret = new uint[](lenny);
for(uint i = 0; i < len; i++) {
uint value;
uint valueMod;
for (
value = valueMod = input[i] + 1;
true;
valueMod++
){
valueMod %= lenny;
uint tempRet = ret[valueMod];
if (tempRet == value) break;
if (tempRet == 0) {
ret[valueMod] = value;
input[ptr++] = value - 1;
break;
}
}
}
if (ptr == len) {
return input;
}
ret = new uint[](ptr);
for(i = 0; i < ptr; i++) {
ret[i] = input[i];
}
return ret;
}
}