RosettaCodeData/Task/Sudan-function/Nim/sudan-function.nim

17 lines
458 B
Nim

import std/[unicode, strformat]
func sudan(n, x, y: Natural): int =
if n == 0: return x + y
if y == 0: return x
let z = sudan(n, x, y - 1)
return sudan(n - 1, z, z + y)
const Delta = ord("".toRunes()[0]) - ord('0')
func subscript(n: Natural): string =
for c in $n:
result.add Rune(ord(c) + Delta)
for (n, x, y) in [(0, 0, 0), (1, 1, 1), (2, 1, 1), (2, 2, 1), (2, 2, 2), (3, 1, 1)]:
echo &"F{subscript(n)}({x}, {y}) = {sudan(n, x, y)}"