# Swift's closure
# https://d...content-available-to-author-only...e.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
class String
def self.unfoldl(b, &block)
unless (pair = yield b).nil?
a, b1 = pair
self.unfoldl(b1, &block) + a
else
''
end
end
end
DigitNames = {
0 => "Zero", 1 => "One", 2 => "Two", 3 => "Three", 4 => "Four",
5 => "Five", 6 => "Six", 7 => "Seven", 8 => "Eight", 9 => "Nine"
}
Numbers = [16, 58, 510]
strings = Numbers.map { |number|
String.unfoldl(number) { |num|
if num <= 0
nil
else
[DigitNames[num % 10], num / 10]
end
}
}
for s in strings
puts s
end
IyBTd2lmdCdzIGNsb3N1cmUKIyAgIGh0dHBzOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5jb20vbGlicmFyeS9pb3MvZG9jdW1lbnRhdGlvbi9Td2lmdC9Db25jZXB0dWFsL1N3aWZ0X1Byb2dyYW1taW5nX0xhbmd1YWdlL0Nsb3N1cmVzLmh0bWwKCgpjbGFzcyBTdHJpbmcKICAgIGRlZiBzZWxmLnVuZm9sZGwoYiwgJmJsb2NrKQogICAgICAgIHVubGVzcyAocGFpciA9IHlpZWxkIGIpLm5pbD8KICAgICAgICAgICAgYSwgYjEgPSBwYWlyCgogICAgICAgICAgICBzZWxmLnVuZm9sZGwoYjEsICZibG9jaykgKyBhCiAgICAgICAgZWxzZQogICAgICAgICAgICAnJwogICAgICAgIGVuZAogICAgZW5kCmVuZAoKCkRpZ2l0TmFtZXMgPSB7CiAgICAwID0+ICJaZXJvIiwgMSA9PiAiT25lIiwgMiA9PiAiVHdvIiwgICAzID0+ICJUaHJlZSIsIDQgPT4gIkZvdXIiLAogICAgNSA9PiAiRml2ZSIsIDYgPT4gIlNpeCIsIDcgPT4gIlNldmVuIiwgOCA9PiAiRWlnaHQiLCA5ID0+ICJOaW5lIgp9Ck51bWJlcnMgPSBbMTYsIDU4LCA1MTBdCgoKc3RyaW5ncyA9IE51bWJlcnMubWFwIHsgfG51bWJlcnwKICAgIFN0cmluZy51bmZvbGRsKG51bWJlcikgeyB8bnVtfAogICAgICAgIGlmIG51bSA8PSAwCiAgICAgICAgICAgIG5pbAogICAgICAgIGVsc2UKICAgICAgICAgICAgW0RpZ2l0TmFtZXNbbnVtICUgMTBdLCBudW0gLyAxMF0KICAgICAgICBlbmQKICAgIH0KfQoKCmZvciBzIGluIHN0cmluZ3MKICAgIHB1dHMgcwplbmQ=