Upside-down numbers: Difference between revisions
Content added Content deleted
(→{{header|Python}}: prepend Free Pascal version) |
|||
Line 30: | Line 30: | ||
=={{header| |
=={{header|Pascal}}== |
||
==={{header|Free Pascal}}=== |
|||
extended to 50E6 |
|||
<syntaxhighlight lang="pascal"> |
|||
program UpSideDownNumbers; |
|||
{$IFDEF FPC}{$MODE DELPHI}{$Optimization ON,All}{$ENDIF} |
|||
{$IFDEF Windows}{$APPTYPE CONSOLE}{$ENDIF} |
|||
const |
|||
middle = 5; |
|||
var |
|||
Upperhalf : array[0..15] of Int32; |
|||
function CalcUpDownNumber(dgtCnt:Int32):Uint64; |
|||
var |
|||
i,dc : Int32; |
|||
begin |
|||
dc := (dgtCnt DIV 2) -1; |
|||
result := 0; |
|||
For i := dc downto 0 do |
|||
result := result*10+Upperhalf[i]; |
|||
if Odd(dgtCnt) then |
|||
result := result*10+middle; |
|||
For i := 0 to dc do |
|||
result := result*10+(10-Upperhalf[i]); |
|||
end; |
|||
procedure NextNumb(var dgtCnt:UInt32); |
|||
var |
|||
i,dc,dgt : Uint32; |
|||
begin |
|||
dc:= DgtCnt; |
|||
IF dc= 0 then |
|||
begin |
|||
dgtcnt := 1; |
|||
EXIT; |
|||
end; |
|||
IF dc= 1 then |
|||
begin |
|||
Upperhalf[0] := 1; |
|||
dgtCnt := 2; |
|||
EXIT; |
|||
end; |
|||
i := 0; |
|||
dc := dc DIV 2-1; |
|||
repeat |
|||
dgt := Upperhalf[i]+1; |
|||
if dgt <10 then |
|||
begin |
|||
Upperhalf[i] := dgt; |
|||
BREAK; |
|||
end; |
|||
Upperhalf[i] := 1; |
|||
inc(i); |
|||
until i > dc; |
|||
if i > dc then |
|||
Begin |
|||
For i := 0 to dc+1 do |
|||
Upperhalf[i]:= 1; |
|||
inc(dgtcnt); |
|||
Upperhalf[i] :=1; |
|||
end; |
|||
end; |
|||
var |
|||
dgtcnt, |
|||
Count, |
|||
limit : UInt32; |
|||
Begin |
|||
Count := 0; |
|||
limit := 50; |
|||
Writeln('First fifty upside-downs:'); |
|||
repeat |
|||
repeat |
|||
NextNumb(dgtCnt); |
|||
inc(Count); |
|||
IF Count<= 50 then |
|||
Begin |
|||
write(CalcUpDownNumber(dgtCnt):5); |
|||
if Count MOD 10 = 0 then |
|||
writeln; |
|||
end; |
|||
until Count>= limit; |
|||
if limit <> 50 then |
|||
writeln(limit:10,CalcUpDownNumber(dgtCnt):20) |
|||
else |
|||
writeln; |
|||
limit := limit*10; |
|||
until limit> 50*1000*1000; |
|||
end. |
|||
</syntaxhighlight> |
|||
{{out|@TIO.RUN}} |
|||
<pre> |
|||
First fifty upside-downs: |
|||
5 19 28 37 46 55 64 73 82 91 |
|||
159 258 357 456 555 654 753 852 951 1199 |
|||
1289 1379 1469 1559 1649 1739 1829 1919 2198 2288 |
|||
2378 2468 2558 2648 2738 2828 2918 3197 3287 3377 |
|||
3467 3557 3647 3737 3827 3917 4196 4286 4376 4466 |
|||
500 494616 |
|||
5000 56546545 |
|||
50000 6441469664 |
|||
500000 729664644183 |
|||
5000000 82485246852682 |
|||
50000000 9285587463255281 |
|||
User time: 0.310 s CPU share: 99.30 % |
|||
</pre> |
|||
<syntaxhighlight lang="python">""" rosettacode.org task Upside-down_numbers """ |
<syntaxhighlight lang="python">""" rosettacode.org task Upside-down_numbers """ |
||
Line 99: | Line 208: | ||
Five millionth: 82,485,246,852,682 |
Five millionth: 82,485,246,852,682 |
||
</pre> |
</pre> |
||
=={{header|Raku}}== |
=={{header|Raku}}== |