Submission 2bb5eed9...

ChallengeHex decoder
Submitter0x01a32b7b34a870d...
Submitted at2018-29-17
Gas used169039
pragma solidity 0.4.24;

contract HexDecoder {
  function decode(string input) public pure returns(bytes output) {
    assembly {
      let l := mload(input)

      let n := mload(0x40)
      mstore(add(n, 48), 0x00010203040506070809000000000000000a0b0c0d0e0f000000000000000000)
      mstore(add(add(n, 48), 31), 0x0000000000000000000000000000000000000a0b0c0d0e0f0000000000000000)

      let o := add(input, 0x20)
      let s := add(o, add(l, 31))
      for { let i := o } lt(i, s) { i := add(i, 0x20) } {
        let c := mload(i)

        mstore8(add(o, 0), add(mul(byte(0, mload(add(n, byte(0, c)))), 16), byte(0, mload(add(n, byte(1, c))))))
        mstore8(add(o, 1), add(mul(byte(0, mload(add(n, byte(2, c)))), 16), byte(0, mload(add(n, byte(3, c))))))
        mstore8(add(o, 2), add(mul(byte(0, mload(add(n, byte(4, c)))), 16), byte(0, mload(add(n, byte(5, c))))))
        mstore8(add(o, 3), add(mul(byte(0, mload(add(n, byte(6, c)))), 16), byte(0, mload(add(n, byte(7, c))))))
        mstore8(add(o, 4), add(mul(byte(0, mload(add(n, byte(8, c)))), 16), byte(0, mload(add(n, byte(9, c))))))
        mstore8(add(o, 5), add(mul(byte(0, mload(add(n, byte(10, c)))), 16), byte(0, mload(add(n, byte(11, c))))))
        mstore8(add(o, 6), add(mul(byte(0, mload(add(n, byte(12, c)))), 16), byte(0, mload(add(n, byte(13, c))))))
        mstore8(add(o, 7), add(mul(byte(0, mload(add(n, byte(14, c)))), 16), byte(0, mload(add(n, byte(15, c))))))
        mstore8(add(o, 8), add(mul(byte(0, mload(add(n, byte(16, c)))), 16), byte(0, mload(add(n, byte(17, c))))))
        mstore8(add(o, 9), add(mul(byte(0, mload(add(n, byte(18, c)))), 16), byte(0, mload(add(n, byte(19, c))))))
        mstore8(add(o, 10), add(mul(byte(0, mload(add(n, byte(20, c)))), 16), byte(0, mload(add(n, byte(21, c))))))
        mstore8(add(o, 11), add(mul(byte(0, mload(add(n, byte(22, c)))), 16), byte(0, mload(add(n, byte(23, c))))))
        mstore8(add(o, 12), add(mul(byte(0, mload(add(n, byte(24, c)))), 16), byte(0, mload(add(n, byte(25, c))))))
        mstore8(add(o, 13), add(mul(byte(0, mload(add(n, byte(26, c)))), 16), byte(0, mload(add(n, byte(27, c))))))
        mstore8(add(o, 14), add(mul(byte(0, mload(add(n, byte(28, c)))), 16), byte(0, mload(add(n, byte(29, c))))))
        mstore8(add(o, 15), add(mul(byte(0, mload(add(n, byte(30, c)))), 16), byte(0, mload(add(n, byte(31, c))))))


        o := add(o, 16)
      }

      mstore(input, div(l, 2))
      output := input
    }
  }
}