Submission 1b46fe77...

Challenge Hex decoder michaelsproul.eth 2018-22-03 1408957
``````/**
* This file is part of the 1st Solidity Gas Golfing Contest.
*
*
* Implementation by Michael Sproul (https://sproul.xyz)
*/

pragma solidity 0.4.24;

contract HexDecoder {
/**
* @dev Decodes a hex-encoded input string, returning it in binary.
*
* Input strings may be of any length, but will always be a multiple of two
* bytes long, and will not contain any non-hexadecimal characters.
*
* @param input The hex-encoded input.
* @return The decoded output.
*/
function decode(string input) public pure returns (bytes output) {
bytes memory inputBytes = bytes(input);
uint n = inputBytes.length;
uint m = n / 2;
output = new bytes(m);
uint x;
uint y;
for (uint i = 0; i < m; i++) {
// ith byte from characters c = 2i and c = 2i + 1
// This beaut little formula works because only '0'-'9' have bit 0x10 set,
// so when you add 9 to them you get 25 + i.
// For 'a'-'f' and 'A'-'F', the + 9 takes 0x41 to 0x01 to 10 and so on.
x = uint(inputBytes[i + i]);
y = uint(inputBytes[i + i + 1]);
output[i] = byte(
16 * addmod(x & 0x1F, 9, 25) |