Submission d0ed058b...

ChallengeRemove duplicate elements
Submitterricmoo.firefly.eth
Submitted at2018-54-31
Gas used420607
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];
        }
    }
}