Submission 6e3ac394...

ChallengeString search
Submitterlogvinov.eth
Submitted at
Gas used1387232
/**
 * 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 IndexOf {

    /**
     * @dev Returns the index of the first occurrence of `needle` in `haystack`,
     *      or -1 if `needle` is not found in `haystack`.
     *
     * Input strings may be of any length <2^255.
     *
     * @param haystack The string to search.
     * @param needle The string to search for.
     * @return The index of `needle` in `haystack`, or -1 if not found.
     */
    function indexOf(string haystack, string needle) public pure returns(int) {
        if(bytes(needle).length > bytes(haystack).length) {
            return -1;
        }
        for(uint i = 0; i <= bytes(haystack).length - bytes(needle).length; i++) {
            bool ok = true;
            for(uint j = 0; j < bytes(needle).length; j++) {
                if(bytes(haystack)[i + j] != bytes(needle)[j]) {
                    ok = false;
                    break;
                }
            }
            if (ok) {
                return int(i);
            }
        }
        return -1;
    }
}