Spelling of ordinal numbers: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring the hard way, now a builtin
(Added Wren)
m (→‎{{header|Phix}}: added syntax colouring the hard way, now a builtin)
Line 977:
 
=={{header|Phix}}==
Standard builtin
<lang Phix>include demo\rosetta\number_names.exw
<!--<lang Phix>-->
 
<span style="color: #008080;">constant</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">65</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">100</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">101</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">272</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">23456</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8007006005004003</span><span style="color: #0000FF;">,</span>
constant {irregs,ordinals} = columnize({{"one","first"},
<span style="color: #000000;">123</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">00123.0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1.23e2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0b1111011</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0o173</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0x7B</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">861</span><span style="color: #0000FF;">/</span><span style="color: #000000;">7</span><span style="color: #0000FF;">}</span>
{"two","second"},
{"three","third"},
{"five","fifth"},
{"eight","eighth"},
{"nine","ninth"},
{"twelve","twelfth"}})
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
function ordinal(string s)
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">ordinal</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])&</span><span style="color: #008000;">'\n'</span><span style="color: #0000FF;">)</span>
integer i
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
for i=length(s) to 1 by -1 do
end for<!--</lang>-->
integer ch = s[i]
if ch=' ' or ch='-' then exit end if
end for
integer k = find(s[i+1..$],irregs)
if k then
s = s[1..i]&ordinals[k]
elsif s[$]='y' then
s[$..$] = "ieth"
else
s &= "th"
end if
return s
end function
 
constant tests = {1, 2, 3, 4, 5, 11, 65, 100, 101, 272, 23456, 8007006005004003,
123, 00123.0, 1.23e2, 0b1111011, 0o173, 0x7B, 861/7}
 
for i=1 to length(tests) do
puts(1,ordinal(spell(tests[i]))&'\n')
end for</lang>
{{out}}
<pre>
Line 1,032 ⟶ 1,008:
one hundred and twenty-third
</pre>
 
As with the Go solution, this uses the output of spell_integer from the Number_names task (not included here).
 
=={{header|Prolog}}==
7,794

edits