Roman numerals/Encode: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (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( |