Strange numbers: Difference between revisions

Content added Content deleted
(Added Algol 68)
(→‎{{header|ALGOL W}}: Simplify - treat single digit numbers as strange, as in other samples)
Line 189: Line 189:


=={{header|ALGOL W}}==
=={{header|ALGOL W}}==
<syntaxhighlight lang="algolw">begin % find "strange numbers" - numbers where digits differ from the next %
<syntaxhighlight lang="algolw">
begin % find "strange numbers" - numbers where digits differ from the next %
% by a prime %
% by a prime %
% returns true if n is strange, false otherwise %
% returns true if n is strange, false otherwise %
logical procedure isStrange( integer value n ) ;
logical procedure isStrange( integer value n ) ;
begin
begin
integer rest;
integer rest, d0;
logical strange;
rest := abs( n );
rest := abs( n );
if rest < 10 then false
strange := true;
else begin
d0 := rest rem 10;
logical strange;
rest := rest div 10;
integer d0;
while strange and rest > 0 do begin
strange := true;
integer d1, diff;
d0 := rest rem 10;
d1 := rest rem 10;
rest := rest div 10;
rest := rest div 10;
while strange and rest > 0 do begin
diff := abs( d1 - d0 );
integer d1, diff;
strange := diff = 2 or diff = 3 or diff = 5 or diff = 7;
d1 := rest rem 10;
d0 := d1
end while_strange_and_rest_gt_0 ;
rest := rest div 10;
strange
diff := abs( d1 - d0 );
strange := diff = 2 or diff = 3 or diff = 5 or diff = 7;
d0 := d1
end while_strange_and_rest_gt_0 ;
strange
end if_rest_lt_10__
end isStrange ;
end isStrange ;
% test the isStrange procedure on values 100-499 %
% test the isStrange procedure on values 101-499 %
begin
begin
integer strangeCount;
integer strangeCount;
strangeCount := 0;
strangeCount := 0;
for n := 100 until 499 do begin;
for n := 101 until 499 do begin;
if isStrange( n ) then begin
if isStrange( n ) then begin
strangeCount := strangeCount + 1;
strangeCount := strangeCount + 1;
Line 227: Line 224:
end for_n
end for_n
end
end
end.
end.</syntaxhighlight>
</syntaxhighlight>
{{out}}
{{out}}
<pre>
<pre>