MojoでProject Euler 17

https://projecteuler.net/problem=17

Mojoには、

let v = ["one", "two", ...]

みたいなのがあるにはあるんですが、これはListLiteralといって、要素にアクセスするにはタプルと同じように、

print(v.get[1, StringLiteral]())

コンパイル時にインデックスを指定しなければならないので、使えないです。
分岐するよりはましなので、push_backを使っています。

import sys


#################### process ####################

var v1 = DynamicVector[StringLiteral]()
var v2 = DynamicVector[StringLiteral]()
var v3 = DynamicVector[StringLiteral]()

fn push_to_v1():
    v1.push_back("one")
    v1.push_back("two")
    v1.push_back("three")
    v1.push_back("four")
    v1.push_back("five")
    v1.push_back("six")
    v1.push_back("seven")
    v1.push_back("eight")
    v1.push_back("nine")
    v1.push_back("ten")

fn push_to_v2():
    v2.push_back("eleven")
    v2.push_back("twelve")
    v2.push_back("thirteen")
    v2.push_back("fourteen")
    v2.push_back("fifteen")
    v2.push_back("sixteen")
    v2.push_back("seventeen")
    v2.push_back("eighteen")
    v2.push_back("nineteen")

fn push_to_v3():
    v3.push_back("twenty")
    v3.push_back("thirty")
    v3.push_back("forty")
    v3.push_back("fifty")
    v3.push_back("sixty")
    v3.push_back("seventy")
    v3.push_back("eighty")
    v3.push_back("ninety")

fn string_length(n: Int) -> Int:
    if n == 0:
        return 0
    elif n <= 10:
        return len(v1[n-1])
    elif n < 20:
        return len(v2[n-11])
    elif n < 100:
        let q = n // 10
        let r = n % 10
        return len(v3[q-2]) + string_length(r)
    elif n < 1000:
        let q = n // 100
        let r = n % 100
        let s100 = string_length(q) + len("hundred")
        if r == 0:
            return s100
        else:
            return s100 + len("and") + string_length(r)
    elif n < 10000:
        let q = n // 1000
        let r = n % 1000
        return string_length(q) + len("thousand") + string_length(r)
    else:
        return 0

fn f(N: Int) -> Int:
    var s = 0
    for n in range(1, N+1):
        s += string_length(n)
    return s

fn main() raises:
    push_to_v1()
    push_to_v2()
    push_to_v3()
    let args = sys.argv()
    let N = atol(args[1])
    print(f(N))