1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#TASK #1 › Min Sliding Window
#Submitted by: Mohammad S Anwar
#You are given an array of integers @A and sliding window size $S.
#
#Write a script to create an array of min from each sliding window.
#
#Example
#Input: @A = (1, 5, 0, 2, 9, 3, 7, 6, 4, 8) and $S = 3
#Output: (0, 0, 0, 2, 3, 3, 4, 4)
#
#[(1 5 0) 2 9 3 7 6 4 8] = Min (0)
#[1 (5 0 2) 9 3 7 6 4 8] = Min (0)
#[1 5 (0 2 9) 3 7 6 4 8] = Min (0)
#[1 5 0 (2 9 3) 7 6 4 8] = Min (2)
#[1 5 0 2 (9 3 7) 6 4 8] = Min (3)
#[1 5 0 2 9 (3 7 6) 4 8] = Min (3)
#[1 5 0 2 9 3 (7 6 4) 8] = Min (4)
#[1 5 0 2 9 3 7 (6 4 8)] = Min (4)
use strict;
use warnings;
use Data::Dumper;
use List::Util qw(min);
#Input
my @A = (1, 5, 0, 2, 9, 3, 7, 6, 4, 8);
my $S = 3; #SlidingWindow
#variables
my @window;
my @outout;
my $counter = 0;
my $next = 0;
my $lenght = @A;
my $max = $lenght - $S + 1;
slidingWindow();
sub slidingWindow {
if ($next != $max) {
if ($counter == $S ) {
$counter = 0;
$next++;
$S++;
@window = ();
slidingWindow();
}
else {
foreach (my $i = $next; $i<$S; $i++) {
push @window, $A[$i];
}
$counter = $S;
push @outout, min(@window);
slidingWindow();
}
}
else {
print Dumper \@outout;
}
}
|