Roman numerals/Encode: Difference between revisions

Content added Content deleted
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
Line 224: Line 224:
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCDLXXXmmmdcxlvii</pre>
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCDLXXXmmmdcxlvii</pre>

=={{header|ALGOL W}}==
=={{header|ALGOL W}}==
<!-- {{works with|ALGOL W|Standard - no extensions to language used}} -->
<!-- {{works with|ALGOL W|Standard - no extensions to language used}} -->
Line 287: Line 288:
CDV 3
CDV 3
</pre>
</pre>



=={{header|AppleScript}}==
=={{header|AppleScript}}==
Line 685: Line 685:
160 NEXT I
160 NEXT I
170 PRINT VALUE;"=";V$</lang>
170 PRINT VALUE;"=";V$</lang>

=={{header|BASIC256}}==
{{works with|BASIC256 }}
<lang basic256>
print 1666+" = "+convert$(1666)
print 2008+" = "+convert$(2008)
print 1001+" = "+convert$(1001)
print 1999+" = "+convert$(1999)

function convert$(value)
convert$=""
arabic = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }
roman$ = {"M", "CM", "D","CD", "C","XC","L","XL","X","IX","V","IV","I"}
for i = 0 to 12
while value >= arabic[i]
convert$ += roman$[i]
value = value - arabic[i]
end while
next i
end function
</lang>
{{out}}
<pre>
1666 = MDCLXVI
2008 = MMVIII
1001 = MI
1999 = MCMXCIX
</pre>


=={{header|Batch File}}==
=={{header|Batch File}}==
Line 724: Line 752:
1666 = MDCLXVI
1666 = MDCLXVI
3888 = MMMDCCCLXXXVIII</pre>
3888 = MMMDCCCLXXXVIII</pre>

=={{header|BASIC256}}==
{{works with|BASIC256 }}
<lang basic256>
print 1666+" = "+convert$(1666)
print 2008+" = "+convert$(2008)
print 1001+" = "+convert$(1001)
print 1999+" = "+convert$(1999)

function convert$(value)
convert$=""
arabic = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }
roman$ = {"M", "CM", "D","CD", "C","XC","L","XL","X","IX","V","IV","I"}
for i = 0 to 12
while value >= arabic[i]
convert$ += roman$[i]
value = value - arabic[i]
end while
next i
end function
</lang>
{{out}}
<pre>
1666 = MDCLXVI
2008 = MMVIII
1001 = MI
1999 = MCMXCIX
</pre>


=={{header|BBC BASIC}}==
=={{header|BBC BASIC}}==
Line 1,604: Line 1,604:
{{out}}
{{out}}
<pre>["MCMXCIX","XXV","CMXLIV"]</pre>
<pre>["MCMXCIX","XXV","CMXLIV"]</pre>

=={{header|Elena}}==
=={{header|Elena}}==
{{trans|C#}}
{{trans|C#}}
Line 2,435: Line 2,436:
ENDDO
ENDDO
END</lang>
END</lang>

=={{header|Icon}} and {{header|Unicon}}==
=={{header|Icon}} and {{header|Unicon}}==
<lang Icon>link numbers # commas, roman
<lang Icon>link numbers # commas, roman
Line 2,991: Line 2,993:
}
}
}</lang>
}</lang>

=={{header|Lasso}}==
=={{header|Lasso}}==
<lang Lasso>define br => '\r'
<lang Lasso>define br => '\r'
Line 3,060: Line 3,063:
3888 MMMDCCCLXXXVIII
3888 MMMDCCCLXXXVIII
</pre>
</pre>


=={{header|LiveCode}}==
=={{header|LiveCode}}==
Line 3,173: Line 3,175:


</lang>
</lang>

=={{header|Lua}}==
=={{header|Lua}}==


Line 3,913: Line 3,916:


print roman($_) . "\n" for 1..2012;</lang>
print roman($_) . "\n" for 1..2012;</lang>

=={{header|Perl 6}}==

<lang perl6>my %symbols =
1 => "I", 5 => "V", 10 => "X", 50 => "L", 100 => "C",
500 => "D", 1_000 => "M";

my @subtractors =
1_000, 100, 500, 100, 100, 10, 50, 10, 10, 1, 5, 1, 1, 0;

multi sub roman (0) { '' }
multi sub roman (Int $n) {
for @subtractors -> $cut, $minus {
$n >= $cut
and return %symbols{$cut} ~ roman($n - $cut);
$n >= $cut - $minus
and return %symbols{$minus} ~ roman($n + $minus);
}
}

# Sample usage

for 1 .. 2_010 -> $x {
say roman($x);
}</lang>


=={{header|Phix}}==
=={{header|Phix}}==
Line 4,045: Line 4,023:
write(int2roman(1337) + "\n");
write(int2roman(1337) + "\n");
}</lang>
}</lang>

=={{header|plainTeX}}==
TeX has its own way to convert a number into roman numeral, but it produces lowercase letters; the following macro (and usage example), produce uppercase roman numeral.

<lang tex>\def\upperroman#1{\uppercase\expandafter{\romannumeral#1}}
Anno Domini \upperroman{\year}
\bye</lang>


=={{header|PL/I}}==
=={{header|PL/I}}==
Line 4,112: Line 4,083:
END;
END;
</lang>
</lang>

=={{header|plainTeX}}==
TeX has its own way to convert a number into roman numeral, but it produces lowercase letters; the following macro (and usage example), produce uppercase roman numeral.

<lang tex>\def\upperroman#1{\uppercase\expandafter{\romannumeral#1}}
Anno Domini \upperroman{\year}
\bye</lang>


=={{header|PowerBASIC}}==
=={{header|PowerBASIC}}==
Line 4,667: Line 4,645:
3000 3999)])
3000 3999)])
(printf "~a ~a\n" n (encode/roman n)))</lang>
(printf "~a ~a\n" n (encode/roman n)))</lang>

=={{header|Raku}}==
(formerly Perl 6)

<lang perl6>my %symbols =
1 => "I", 5 => "V", 10 => "X", 50 => "L", 100 => "C",
500 => "D", 1_000 => "M";

my @subtractors =
1_000, 100, 500, 100, 100, 10, 50, 10, 10, 1, 5, 1, 1, 0;

multi sub roman (0) { '' }
multi sub roman (Int $n) {
for @subtractors -> $cut, $minus {
$n >= $cut
and return %symbols{$cut} ~ roman($n - $cut);
$n >= $cut - $minus
and return %symbols{$minus} ~ roman($n + $minus);
}
}

# Sample usage

for 1 .. 2_010 -> $x {
say roman($x);
}</lang>


=={{header|Red}}==
=={{header|Red}}==
Line 5,061: Line 5,065:
3888 = MMMDCCCLXXXVIII
3888 = MMMDCCCLXXXVIII
</pre>
</pre>

=={{header|Scala}}==
=={{header|Scala}}==
{{works with|Scala|2.8}}
{{works with|Scala|2.8}}
Line 5,125: Line 5,130:
2008 => MMVIII
2008 => MMVIII
1666 => MDCLXVI</pre>
1666 => MDCLXVI</pre>

=={{header|Scheme}}==
=={{header|Scheme}}==
This uses format directives supported in Chez Scheme since v6.9b; YMMV.
This uses format directives supported in Chez Scheme since v6.9b; YMMV.
Line 5,306: Line 5,312:
2008 in roman is MMVIII
2008 in roman is MMVIII
1666 in roman is MDCLXVI</pre>
1666 in roman is MDCLXVI</pre>

=={{header|Simula}}==
=={{header|Simula}}==
<lang simula>BEGIN
<lang simula>BEGIN
Line 5,697: Line 5,704:
:Goto ST
:Goto ST
</lang>
</lang>



=={{header|TUSCRIPT}}==
=={{header|TUSCRIPT}}==
Line 5,854: Line 5,860:
MMCDLXXXVIII
MMCDLXXXVIII
</pre>
</pre>

=={{header|VBA}}==
<lang vb>Private Function roman(n As Integer) As String
roman = WorksheetFunction.roman(n)
End Function
Public Sub main()
s = [{10, 2016, 800, 2769, 1666, 476, 1453}]
For Each x In s
Debug.Print roman(CInt(x)); " ";
Next x
End Sub</lang>{{out}}
<pre>X MMXVI DCCC MMDCCLXIX MDCLXVI CDLXXVI MCDLIII </pre>


=={{header|Vedit macro language}}==
=={{header|Vedit macro language}}==
Line 6,095: Line 6,113:
// 3888 = MMMDCCCLXXXVIII</lang>
// 3888 = MMMDCCCLXXXVIII</lang>


=={{header|VBA}}==
<lang vb>Private Function roman(n As Integer) As String
roman = WorksheetFunction.roman(n)
End Function
Public Sub main()
s = [{10, 2016, 800, 2769, 1666, 476, 1453}]
For Each x In s
Debug.Print roman(CInt(x)); " ";
Next x
End Sub</lang>{{out}}
<pre>X MMXVI DCCC MMDCCLXIX MDCLXVI CDLXXVI MCDLIII </pre>
=={{header|zkl}}==
=={{header|zkl}}==
<lang zkl>var [const] romans = L(
<lang zkl>var [const] romans = L(