I was thinking something like @shirleyquirk... and indeed it runs much faster. 
I don't post absolute values because I'have slower PC, older Nim version, but 
in relative the time reduction is evident. At the end I guess it's like 
providing a lookup table to compiler. Modifying a little @sky_khan version:
    
    
    type
        Result = object
            letters : int
            numbers : int
    
    proc analyze(x: string): Result =
        for c in x:
            case c:
                of 'A'..'z':
                    result.letters.inc
                of '0'..'9':
                    result.numbers.inc
                else:
                    discard
    
    proc main() =
        const input = "uyguhijkmnbdv44354gasuygiuiolknchyqudsayd12635uha"
        const res = analyze(input)
        var total = Result()
        for _ in 0 ..< 1000000:
            total.letters += res.letters
            total.numbers += res.numbers
        echo "Numbers: ", total.numbers, " Letters: ", total.letters
    
    main()
    
    
    Run

Reply via email to