Largest five adjacent number: Difference between revisions

From Rosetta Code
Content added Content deleted
m (Realphabetize)
Line 53: Line 53:
<pre>
<pre>
maximum((evalpoly(10, dig[i:i + 4]) for i = 1:length(dig) - 4)) = 99993
maximum((evalpoly(10, dig[i:i + 4]) for i = 1:length(dig) - 4)) = 99993
</pre>

=={{header|Pascal}}==
{{works with|Free Pascal}} inspired by [[Largest_five_adjacent_number#Wren|Wren]]
<lang pascal>
var
digits,
s : AnsiString;
i : LongInt;
begin
randomize;
setlength(digits,1000);
for i := 1 to 1000 do
digits[i] := chr(random(10)+ord('0'));
for i := 99999 downto 0 do
begin
str(i:5,s);
if Pos(s,digits) > 0 then
break;
end;
writeln(s, ' found as largest 5 digit number ')
end.</lang>
{{out}}
<pre>99889 found as largest 5 digit number </pre>
=={{header|Perl}}==
<lang perl>#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Largest_five_adjacent_number
use warnings;

$_ = join '', map int rand 10, 1 .. 1e3;
my @n;
$n[$1] = $1 while /(?=(\d{5}))/g;
print "$n[-1]\n";</lang>
{{out}}
<pre>
99958
</pre>
</pre>


Line 102: Line 139:
The largest number is:
The largest number is:
99638
99638
</pre>
=={{header|Pascal}}==
{{works with|Free Pascal}} inspired by [[Largest_five_adjacent_number#Wren|Wren]]
<lang pascal>
var
digits,
s : AnsiString;
i : LongInt;
begin
randomize;
setlength(digits,1000);
for i := 1 to 1000 do
digits[i] := chr(random(10)+ord('0'));
for i := 99999 downto 0 do
begin
str(i:5,s);
if Pos(s,digits) > 0 then
break;
end;
writeln(s, ' found as largest 5 digit number ')
end.</lang>
{{out}}
<pre>99889 found as largest 5 digit number </pre>
=={{header|Perl}}==
<lang perl>#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Largest_five_adjacent_number
use warnings;

$_ = join '', map int rand 10, 1 .. 1e3;
my @n;
$n[$1] = $1 while /(?=(\d{5}))/g;
print "$n[-1]\n";</lang>
{{out}}
<pre>
99958
</pre>
</pre>



Revision as of 00:00, 28 September 2021

Largest five adjacent number is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task


Generate random 1000-digit number.
Find the five adjacent digits in the 1000-digit number that form the largest 5-digit number.


ALGOL 68

Adding the minimum number for good measure... <lang algol68>BEGIN # generate 1000 random digits and find the largest/smallest numbers formed from 5 consecutive digits #

   [ 1 : 1000 ]CHAR digits;
   FOR i TO UPB digits DO digits[ i ] := REPR ( ENTIER ( next random * 10 ) + ABS "0" ) OD;
   STRING max number := digits[ 1 : 5 ];
   STRING min number := digits[ 1 : 5 ];
   FOR i FROM 2 TO UPB digits - 4 DO
       STRING next number = digits[ i : i + 4 ];
       IF next number > max number
       THEN
           # found a new higher number #
           max number := next number
       FI;
       IF next number < min number
       THEN
           # found a new lower number #
           min number := next number
       FI
   OD;
   print( ( "Largest  5 consecutive digits from 1000 random digits: ", max number, newline ) );
   print( ( "Smallest 5 consecutive digits from 1000 random digits: ", min number, newline ) )

END</lang>

Output:
Largest  5 consecutive digits from 1000 random digits: 99987
Smallest 5 consecutive digits from 1000 random digits: 00119

Factor

Works with: Factor version 0.99 2021-06-02

<lang factor>USING: grouping io math.functions prettyprint random sequences ;

1000 10^ random unparse 5 <clumps> supremum print</lang>

Output:
99987

Julia

<lang julia>dig = rand(0:9, 1000) @show maximum(evalpoly(10, dig[i:i+4]) for i in 1:length(dig)-4)

</lang>

Output:
maximum((evalpoly(10, dig[i:i + 4]) for i = 1:length(dig) - 4)) = 99993

Pascal

Works with: Free Pascal

inspired by Wren

<lang pascal> var

 digits,
 s : AnsiString;
 i : LongInt;

begin

 randomize;
 setlength(digits,1000);
 for i := 1 to 1000 do
   digits[i] := chr(random(10)+ord('0'));
 for i := 99999 downto 0 do
 begin
   str(i:5,s);
   if Pos(s,digits) > 0 then
     break;
 end;
 writeln(s, ' found as largest 5 digit number ')

end.</lang>

Output:
99889 found as largest 5 digit number 

Perl

<lang perl>#!/usr/bin/perl

use strict; # https://rosettacode.org/wiki/Largest_five_adjacent_number use warnings;

$_ = join , map int rand 10, 1 .. 1e3; my @n; $n[$1] = $1 while /(?=(\d{5}))/g; print "$n[-1]\n";</lang>

Output:
99958

Raku

Show minimum too because... why not?

Use some Tamil Unicode numbers for brevity, and for amusement purposes.

   ௰ - Tamil number ten
   ௲ - Tamil number one thousand

Do it 5 times for variety, it's random after all.

<lang perl6>(^௰).roll(௲).rotor(5 => -4)».join.minmax.bounds.put xx 5</lang>

Sample output:
00371 99975
00012 99982
00008 99995
00012 99945
00127 99972

Ring

<lang ring> digit = "" max = 0 maxOld = 0 limit = 1000

for n = 1 to limit

   rand = random(9)
   randStr = string(rand)
   digit += randStr

next

for n = 1 to len(digit)-5

   res = substr(digit,n,5)
   resNum = number(res)
   if resNum > maxold 
      max = resNum
      maxOld = max
   ok

next

see max + nl </lang>

Output:
The largest number is:
99638

Wren

Library: Wren-fmt

Very simple approach as there's little need for speed here. <lang ecmascript>import "random" for Random import "/fmt" for Fmt

var rand = Random.new() var digits = List.filled(1000, 0) for (i in 0...999) digits[i] = rand.int(10) var number = digits.join() for (i in 99999...0) {

   var quintet = Fmt.swrite("$05d", i)
   if (number.contains(quintet)) {
       Fmt.print("The largest number formed from 5 adjacent digits is: $,d", i)
       return
   }

}</lang>

Output:

Sample output:

The largest number formed from 5 adjacent digits is: 99,850

XPL0

<lang XPL0>char Number(1000); int Num, Max, I, J; [for I:= 0 to 1000-1 do \generate 1000-digit number

       Number(I):= Ran(10);

Max:= 0; \find its largest 5-digit number for I:= 0 to 1000-5 do

       [Num:= 0;
       for J:= 0 to 5-1 do
               Num:= Num*10 + Number(I+J);
       if Num > Max then
               Max:= Num;
       ];

IntOut(0, Max); ]</lang>

Output:
99930