RosettaCodeData/Task/Roman-numerals-Encode/Draco/roman-numerals-encode.draco

31 lines
653 B
Plaintext

proc toroman(word n; *char buf) *char:
*char parts = "M\e\eCM\eD\e\eCD\eC\e\eXC\eL\e\eXL\eX\e\eIX\eV\e\eIV\eI";
[13]word sizes = (1000,900,500,400,100,90,50,40,10,9,5,4,1);
channel output text roman;
word part;
open(roman, buf);
while n > 0 do
part := 0;
while sizes[part]>n do part := part+1 od;
write(roman; parts + 3*part);
n := n - sizes[part]
od;
close(roman);
buf
corp
proc test(word n) void:
[32]char buf;
writeln(n, ": ", toroman(n, &buf[0]))
corp
proc main() void:
test(1666);
test(2008);
test(1001);
test(1999);
test(3888);
test(2025)
corp