Yes, nim macro is Turing complete.

Macro solution for part 1.
    
    
    import macros
    import sequtils
    import strutils
    
    proc `-`(a,b: int): int = a * b
    
    macro eval(s: static[string]): untyped =
      let ns = s.splitLines.mapIt(parseExpr(it.replace("*", "-")))
      result = newLit(0)
      for n in ns:
        result = nnkInfix.newTree(ident"+", result, n)
    
    const s = staticRead("day18_input.txt").strip
    static:
      echo eval(s)
    
    
    Run

compile with `nim c day18.nim`, no `-r`

Reply via email to