Largest five adjacent number: Difference between revisions
Thundergnat (talk | contribs) m (→{{header|Raku}}: Show minimum too, toss some Unicode in there for amusements sake, Do it 5 times for variety) |
(added pascal) |
||
Line 103: | Line 103: | ||
99638 |
99638 |
||
</pre> |
</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|Wren}}== |
=={{header|Wren}}== |
||
{{libheader|Wren-fmt}} |
{{libheader|Wren-fmt}} |
Revision as of 23:40, 27 September 2021
- 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
<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
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
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
Wren
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