Largest five adjacent number: Difference between revisions
Added Easylang
No edit summary |
(Added Easylang) |
||
(10 intermediate revisions by 9 users not shown) | |||
Line 12:
{{trans|Python}}
<
V (maxNum, minNum) = (0, 99999)
Line 24:
print(‘Largest 5-digit number extracted from random 1000-digit number: ’maxNum)
print(‘Smallest 5-digit number extracted from random 1000-digit number: #05’.format(minNum))</
{{out}}
Line 33:
=={{header|Ada}}==
<
with Ada.Numerics.Discrete_Random;
Line 62:
Ada.Text_Io.Put_Line ("The largest number : " & Natural'Image (Large));
Ada.Text_Io.Put_Line ("The smallest number: " & Natural'Image (Small));
end Adjacent_Numbers;</
{{out}}
<pre>
Line 71:
=={{header|ALGOL 68}}==
Adding the minimum number for good measure...
<
[ 1 : 1000 ]CHAR digits;
FOR i TO UPB digits DO digits[ i ] := REPR ( ENTIER ( next random * 10 ) + ABS "0" ) OD;
Line 91:
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</
{{out}}
<pre>
Line 100:
=={{header|APL}}==
{{works with|Dyalog APL}}
<
{{out}}
(example)
<pre>99994</pre>
=={{header|Arturo}}==
<syntaxhighlight lang="arturo">N: join to [:string] map 1..100 'x -> random 1000000000 9999999999
i: 0
maxNum: 0
minNum: ∞
while [i < (size N)-5][
num: to :integer join @[N\[i] N\[i+1] N\[i+2] N\[i+3] N\[i+4]]
if num > maxNum -> maxNum: num
if num < minNum -> minNum: num
i: i + 1
]
print "Our random 1000-digit number is:"
print N
print ""
print ["Max 5-adjacent number found:" maxNum]
print ["Min 5-adjacent number found:" (repeat "0" 5-(size to :string minNum)) ++ (to :string minNum)]</syntaxhighlight>
{{out}}
<pre>Our random 1000-digit number is:
2540956677308157418624519953263471599696918276171651168484519407031160813613006352660058588944602704848634276542837184618726044674117357036813240557325769932073351534364289297094415941273117151277729576200542643185699525405079189015204192029912043004161916366921458912887890652627268028071729897387395041640352395354106991129061548748712499227024213135531365974620993813773921850969630855401781344832397898392812417729744785629765286216304456806870691502938136795922685099816652448188701308354551593078486609811394420601431484916913833634669083737749230355341380266781803894385432741405633278873213701238310761908151961510643290964548205746238459266137202173265468217401777681775761126374654289733873900330799576500024068191362342162163615972164105625935627483920193464168192083262176697432155066174175594837721476581087940310642712981291006889657297350894628612724944063786324456854104801432247483498384207351647946918119868105898645178074174003550762101547842674605061792172905254724197215648686667
Max 5-adjacent number found: 99816
Min 5-adjacent number found: 00024</pre>
=={{header|AutoHotkey}}==
<
loop, 1000
{
Line 119 ⟶ 149:
}
MsgBox % result := output "`n`nLargest five adjacent digits = " maxNum
. "`n`nSmallest five adjacent digits = " minNum</
{{out}}
<pre>3893212622395522104846091986776081862634026945871752892124324578621089065097043281907406149009719673003318226562809101957181871693776164191416491334
Line 134 ⟶ 164:
=={{header|AWK}}==
<syntaxhighlight lang="awk">
# syntax: GAWK -f LARGEST_FIVE_ADJACENT_NUMBER.AWK
BEGIN {
Line 163 ⟶ 193:
exit(0)
}
</syntaxhighlight>
{{out}}
<pre>
Line 170 ⟶ 200:
smallest 00099 in positions 697-701
</pre>
=={{header|BASIC}}==
==={{header|BASIC256}}===
{{trans|FreeBASIC}}
<syntaxhighlight lang="vb">dim number(1000)
highest = 0
lowest = 100000
for i = 0 to 999
number[i] = int(rand*10)
if i >= 4 then
tmp = number[i] + 10*number[i-1] + 100*number[i-2] + 1000*number[i-3] + 10000*number[i-4]
if tmp < lowest then lowest = tmp
if tmp > highest then highest = tmp
end if
next i
print highest, lowest</syntaxhighlight>
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
{{trans|FreeBASIC}}
<syntaxhighlight lang="qbasic">100 randomize timer
110 dim number(999)
120 highest = 0
130 lowest = 100000
140 for i = 0 to 999
150 number(i) = int(rnd(10))
160 if i >= 4 then
170 tmp = number(i)+10*number(i-1)+100*number(i-2)+1000*number(i-3)+10000*number(i-4)
180 if tmp < lowest then lowest = tmp
190 if tmp > highest then highest = tmp
200 endif
210 next i
220 print highest,lowest
230 end</syntaxhighlight>
==={{header|Gambas}}===
{{trans|FreeBASIC}}
<syntaxhighlight lang="vbnet">Public number[1000] As Byte
Public Sub Main()
Randomize
Dim tmp As Integer, highest As Integer = 0, lowest As Integer = 100000
For i As Integer = 0 To 999
number[i] = Int(Rnd(10))
If i >= 4 Then
tmp = number[i] + 10 * number[i - 1] + 100 * number[i - 2] + 1000 * number[i - 3] + 10000 * number[i - 4]
If tmp < lowest Then lowest = tmp
If tmp > highest Then highest = tmp
End If
Next
Print highest, lowest
End</syntaxhighlight>
==={{header|PureBasic}}===
{{trans|FreeBASIC}}
<syntaxhighlight lang="vb">OpenConsole()
Dim number.i(999)
highest.i = 0
lowest.i = 100000
For i.i = 0 To 999
number(i) = Random(10)
If i >= 4:
tmp = number(i) + 10*number(i-1) + 100*number(i-2) + 1000*number(i-3) + 10000*number(i-4)
If tmp < lowest: lowest = tmp: EndIf
If tmp > highest: highest = tmp: EndIf
EndIf
Next i
PrintN(Str(highest) + #TAB$ + Str(lowest))</syntaxhighlight>
==={{header|QBasic}}===
{{works with|QBasic|1.1}}
{{works with|QuickBasic|4.5}}
{{trans|FreeBASIC}}
<syntaxhighlight lang="qbasic">RANDOMIZE TIMER
DIM number(0 TO 999)
highest = 0
lowest = 100000
FOR i = 0 TO 999
number(i) = INT(RND * 10)
IF i >= 4 THEN
tmp = number(i) + 10 * number(i - 1) + 100 * number(i - 2) + 1000 * number(i - 3) + 10000 * number(i - 4)
IF tmp < lowest THEN lowest = tmp
IF tmp > highest THEN highest = tmp
END IF
NEXT i
PRINT highest, lowest
END</syntaxhighlight>
==={{header|True BASIC}}===
{{trans|QBasic}}
<syntaxhighlight lang="qbasic">RANDOMIZE
DIM number(0 TO 999)
LET highest = 0
LET lowest = 100000
FOR i = 0 TO 999
LET number(i) = INT(RND*10)
IF i >= 4 THEN
LET tmp = number(i)+10*number(i-1)+100*number(i-2)+1000*number(i-3)+10000*number(i-4)
IF tmp < lowest THEN LET lowest = tmp
IF tmp > highest THEN LET highest = tmp
END IF
NEXT i
PRINT highest, lowest
END</syntaxhighlight>
==={{header|Yabasic}}===
{{trans|FreeBASIC}}
<syntaxhighlight lang="vb">dim number(999)
highest = 0
lowest = 100000
for i = 0 to 999
number(i) = int(ran(10))
if i >= 4 then
tmp = number(i) + 10*number(i-1) + 100*number(i-2) + 1000*number(i-3) + 10000*number(i-4)
if tmp < lowest lowest = tmp
if tmp > highest highest = tmp
fi
next i
print highest, lowest</syntaxhighlight>
=={{header|BQN}}==
<
{{out}}
(example)
Line 178 ⟶ 329:
=={{header|C}}==
<
#include <stdlib.h>
#include <stdint.h>
Line 212 ⟶ 363:
printf("%d\n", largest);
return 0;
}</
{{out}}
(example)
<pre>99931</pre>
=={{header|CLU}}==
<
random_digits = proc (n: int) returns (sequence[int])
digits: array[int] := array[int]$predict(1,n)
Line 256 ⟶ 407:
stream$putl(po, "Smallest: " || int$unparse(min))
stream$putl(po, "Largest: " || int$unparse(max))
end start_up</
{{out}}
<pre>Smallest: 144
Largest: 99951</pre>
=={{header|Delphi}}==
{{works with|Delphi|6.0}}
{{libheader|SysUtils,StdCtrls}}
<syntaxhighlight lang="Delphi">
function Get5DigitNumber(S: string; Off: integer): integer;
{Extract 5 digit number from string at Off}
var I: integer;
var NS: string;
begin
NS:=Copy(S,Off,5);
Result:=StrToIntDef(NS,-1);
end;
function BreakupString(S: string): string;
{Breakup thousand digit number for easy display}
var I: integer;
begin
for I:=1 to Length(S) do
begin
Result:=Result+S[I];
if (I mod 55)=0 then Result:=Result+#$0D#$0A;
end;
end;
procedure FiveDigitNumber(Memo: TMemo);
{Find the largest and small 5 digit sequence}
{in 1000 digit number}
var S: string;
var N,I: integer;
var Largest,Smallest: integer;
begin
Smallest:=High(Integer);
Largest:=0;
for I:=1 to 1000 do
S:=S+Char(Random(10)+$30);
for I:=1 to Length(S)-5 do
begin
N:=Get5DigitNumber(S,I);
if N>Largest then Largest:=N;
if N<Smallest then Smallest:=N;
end;
Memo.Lines.Add(BreakupString(S));
Memo.Lines.Add('Largest: '+IntToStr(Largest));;
Memo.Lines.Add('Smallest: '+IntToStr(Smallest));;
end;
</syntaxhighlight>
{{out}}
<pre>
0082263134040802937368731342824182794880115050767752659
6926207485596307977119758620628125911215421677000178364
7438810001625238336693427757455861441056098692774612931
9301856160395349334087194184285169534216966507128749101
0333045468523586265833674268791722749102838792380205401
7335212073765802860114410575280403628540910018912794058
9569778977033072890894634763659190635686944921467068416
0978402580498879216810854417805724457730620420683349740
8203884243646784563247619038458645194136841413688117232
0960606571886477139587251334596793042923055521495533796
5592094928040937883628134090110628164451939278452734493
5741344340195488542852682604882967292438604245256357719
4755578568409079269700382959730067457921191314413220282
3502307407547002586284406642530858066838890257743184196
5040611036453640792847940715686736822030381083124941163
3588177613294220880152655471721880286144478485085399563
1095924640071825166992021998152653370680394470682198029
3879102724160697653653330275506532525946257246355415772
4978409544
Largest: 99815
Smallest: 16
</pre>
=={{header|F_Sharp|F#}}==
<
// Largest five adjacent number. Nigel Galloway: September 28th., 2021
let n()=let n()=System.Random().Next(10) in Seq.unfold(fun g->Some(g,(g%10000)*10+n()))(n()*10000+n()*1000+n()*100+n()*10+n())
printfn $"Largest 5 adjacent digits are %d{(n()|>Seq.take 995|>Seq.max)}"
</syntaxhighlight>
{{out}}
<pre>
Largest 5 adjacent digits are 99914
</pre>
=={{header|EasyLang}}==
<syntaxhighlight>
for i to 1000
n$ &= random 10 - 1
.
min = 99999
for i = 1 to 995
n = number substr n$ i 5
min = lower min n
max = higher max n
.
print min & " " & max
</syntaxhighlight>
{{out}}
<pre>
21 99768
</pre>
=={{header|Factor}}==
{{works with|Factor|0.99 2021-06-02}}
<
1000 10^ random unparse 5 <clumps> supremum print</
{{out}}
<pre>
Line 284 ⟶ 532:
=={{header|FreeBASIC}}==
Generate the number digit by digit, and test as we go. If the task didn't specifically ask to generate the whole 1,000 digit number I wouldn't bother storing more than five of its digits at a time.
<
randomize timer
dim as ubyte number(0 to 999)
Line 298 ⟶ 546:
next i
print highest, lowest
</syntaxhighlight>
{{output}}
<pre>
Line 307 ⟶ 555:
{{trans|Wren}}
{{libheader|Go-rcu}}
<
import (
Line 340 ⟶ 588:
}
}
}</
{{out}}
Line 350 ⟶ 598:
=={{header|J}}==
<
{{out}}
(example)
<pre>99929</pre>
=={{header|jq}}==
{{works with|jq}}
'''Also works with gojq, the Go implementation of jq.'''
First, a direct solution using only jq's standard library and a line for generating the PRN:
<syntaxhighlight lang="bash">
< /dev/random tr -cd '0-9' | head -c 1000 | jq -R '
length as $n
| . as $s
| ($s[0:5] | tonumber) as $m
| reduce range(1; $n - 5) as $i ( {min: $m, max: $m};
($s[$i: $i+5] | tonumber) as $x
| if $x < .min then .min = $x
elif $x > .max then .max = $x
else . end)
'
</syntaxhighlight>
{{output}}
<pre>
{
"min": 224,
"max": 99772
}
</pre>
Next, a "one-line solution" apart from generic helper functions and the line for generating the PRN:
<syntaxhighlight lang="bash">
< /dev/random tr -cd '0-9' | head -c 1000 | jq -R '
# Input: an array
# Output: a stream of the width-long subarrays
def windows(width):
range(0; 1 + length - width) as $i | .[$i:$i+width];
def minmax(s):
reduce s as $x ( {};
if .min == null then {min: $x, max: $x}
elif $x < .min then .min = $x
elif $x > .max then .max = $x else . end);
explode | minmax(windows(5) | implode | tonumber)
</syntaxhighlight>
=={{header|Julia}}==
<
@show maximum(evalpoly(10, dig[i:i+4]) for i in 1:length(dig)-4)
</
<pre>
maximum((evalpoly(10, dig[i:i + 4]) for i = 1:length(dig) - 4)) = 99993
Line 376 ⟶ 666:
Maximum is 99999 at position 763.
</pre>
=={{header|Mathematica}} / {{header|Wolfram Language}}==
<
{{out}}<pre>{104,99984}</pre>
=={{header|Nim}}==
<
randomize()
Line 408 ⟶ 699:
if n > max: max = n
echo "Largest 5-digit number extracted from random 1000-digit number: ", max.join()</
{{out}}
Line 415 ⟶ 706:
=={{header|Pascal}}==
{{works with|Free Pascal}} inspired by [[Largest_five_adjacent_number#Wren|Wren]]<BR>Assumes that there at least is a "1" 4 digits before end of all digits.Else I have to include sysutils and s := Format('%.5d',[i]); for leading zeros.
<
var
digits,
Line 432 ⟶ 723:
end;
writeln(s, ' found as largest 5 digit number ')
end.</
{{out}}
<pre>99889 found as largest 5 digit number </pre>
=={{header|Perl}}==
<
use strict; # https://rosettacode.org/wiki/Largest_five_adjacent_number
Line 445 ⟶ 736:
my @n;
@n[ /(?=(\d{5}))/g ] = ();
print "$#n\n";</
{{out}}
<pre>
Line 452 ⟶ 743:
=={{header|Phix}}==
<!--<
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
<span style="color: #008080;">procedure</span> <span style="color: #000000;">shlong</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
Line 476 ⟶ 767:
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">..$]</span>
<span style="color: #000000;">shlong</span><span style="color: #0000FF;">(</span><span style="color: #000000;">s</span><span style="color: #0000FF;">)</span>
<!--</
{{out}}
<pre>
Line 485 ⟶ 776:
=={{header|Python}}==
Seeding the random number generator directly with the datetime stamp produces a warning that it will be deprecated in Python 3.9, hence the "hack" of creating a string out of the timestamp and then seeding with it.
<syntaxhighlight lang="python">
#Aamrun, 5th October 2021
Line 509 ⟶ 800:
print("Largest 5-adjacent number found ", maxNum)
print("Smallest 5-adjacent number found ", minNum)
</syntaxhighlight>
Results from multiple runs :
{{out}}
Line 534 ⟶ 825:
Smallest 5-adjacent number found 35
</pre>
=={{header|Quackery}}==
<syntaxhighlight lang="Quackery"> 9 random 1+
999 times [ 10 * 10 random + ]
dup 10 995 ** / swap
say "1000 digit number"
cr cr
dup echo
cr cr
[] swap 1000 times
[ 10 /mod
rot join swap ]
drop dup
0 0 rot witheach
[ swap 10 *
100000 mod +
tuck max swap ]
drop
say "largest 5 adjacent digits " echo
cr cr
5 split nip
dip dup witheach
[ swap 10 *
100000 mod +
tuck min swap ]
drop
say "smallest 5 adjacent digits "
number$
char 0 over size 5 swap - of
swap join echo$</syntaxhighlight>
{{out}}
<pre>1000 digit number
6840907174710710253578773992410923828010161316527489025709598588564725782830158923520744533291356763925463645174705745049218864529135157750600471363289558510223445011025163844199130052941524405130793922050669143532883592357897096269697903780509770222546659289832999639637730759831717125055857319129937934353617386529810429642261048827016148476352187592939822910964334104828550764225596939965675519243696921514153715258715961987394884393797714002723369560598384723111928648279375269590756880538160907807290640466592734345970439851284217252141914792365031610947925633607292897379320456985054219371373707477609843617810620097343420379245258762479642377134776965386535533204636182773979582543243782455626021964121509778973939346873293400502531060571761381532229278485105166678017234489439222625767334040651185482277484204647473910364297105035077787620562600454016296114868335345408156093266755340971022669397814048919735693462065796634326535292979494128432997646841467835174156471055078228524511787150409
largest 5 adjacent digits 99963
smallest 5 adjacent digits 00272</pre>
=={{header|Raku}}==
Line 545 ⟶ 877:
Do it 5 times for variety, it's random after all.
<syntaxhighlight lang="raku"
{{out|Sample output}}
<pre>00371 99975
Line 555 ⟶ 887:
=={{header|Ring}}==
<
digit = ""
max = 0
Line 582 ⟶ 914:
see "The smallest number is:" + nl
see min + nl
</syntaxhighlight>
{{out}}
<pre>
Line 589 ⟶ 921:
The smallest number is:
00118
</pre>
=={{header|RPL}}==
RPL can not handle 1000-digit numbers, so we use a 1000-digit string.
≪ ""
1 1000 '''START''' RAND 9 * 0 RND →STR + '''NEXT'''
{ -99999 0 }
1 3 PICK SIZE 4 - '''FOR''' j
OVER j DUP 4 + SUB
STR→ NEG LASTARG 2 →LIST MAX
'''NEXT''' ABS
≫ '<span style="color:blue>TASK</span>' STO
{{out}}
<pre>
2: "46725324552811522…
1: { 198 99886 }
</pre>
=={{header|Ruby}}==
<
arr = Array.new(1000){ digits.sample }
puts "minimum sequence %s, maximum sequence %s." % arr.each_cons(5).minmax_by{|slice| slice.join.to_i}.map(&:join)
</syntaxhighlight>
{{out}}
<pre>minimum sequence 00096, maximum sequence 99508.
Line 601 ⟶ 949:
=={{header|Sidef}}==
<
var n = 1e1000.irand
Line 609 ⟶ 957:
say ("Min #{k}-digit sub-number: ", c.min_by { .digits2num }.flip.join)
say ("Max #{k}-digit sub-number: ", c.max_by { .digits2num }.flip.join)</
{{out}}
<pre>
Line 617 ⟶ 965:
</pre>
=={{header|V (Vlang)}}==
{{trans|go}}
<syntaxhighlight lang="v (vlang)">import rand
import rand.seed
import strings
Line 645 ⟶ 993:
}
}
}</
{{out}}
<pre>The largest number formed from 5 adjacent digits (99928) is: 99,928
Line 653 ⟶ 1,001:
{{libheader|Wren-fmt}}
Very simple approach as there's little need for speed here.
<
import "./fmt" for Fmt
var rand = Random.new()
Line 669 ⟶ 1,017:
}
}
}</
{{out}}
Line 679 ⟶ 1,027:
=={{header|XPL0}}==
<
int Num, Max, I, J;
[for I:= 0 to 1000-1 do \generate 1000-digit number
Line 692 ⟶ 1,040:
];
IntOut(0, Max);
]</
{{out}}
|