読者です 読者をやめる 読者になる 読者になる

自分用めも

初心者ちっくなプログラムネタを中心に、自分用の覚え書きをメモっていくための場所です。

paizaオンライン ハッカソン Vol.4 ミッション3 Perlの場合

プログラマ向けサイト?で出題されているクイズ形式のコーディング問題
マンガ版「エンジニアでも恋がしたい!」〜転職初日にぶつかった女の子が同僚だった件〜|paizaオンラインハッカソン4 Lite
Perlで回答した内容
後で見て恥ずかしくなるかもしれないけど、残しておく。
万が一見てる方がいたら、ツッコミ歓迎です



出題内容
前提:
標準入力から下記データが与えられる。全て数値
t n
m1
m2
..

t = 選択範囲長
n = 配列の要素数
m1.. = 配列要素



処理:
配列から選択範囲長分連続した要素を加算し、
それぞれの加算結果の内の最大値を標準出力に改行付きで出力する。

ex:
t=3, n=6, m=[1, 4, 5, 2, 8, 3]
t=3なので3要素ずつ下記のような感じで計算
1 + 4 + 5 = 10
4 + 5 + 2 = 11
最大値は5 + 2 + 8 = 15



# パラメータ取得
chomp(my $input_lines = <STDIN>);
my ($int_range, $int_max) = split(/ /, $input_lines);

# 累積和を保存
my $int_last = 0;
while (my $line = <STDIN>) {
	chomp($line);
	
	$int_accumulate = int($line) + $int_last;
	$int_last = $int_accumulate;
	
	push @arr_accumulate, $int_accumulate;
}

# 最大値を探す
my $int_result = $arr_accumulate[$int_range - 1];
for (my $i=$int_range; $i<$int_max; $i++) {
	
	my $int_sum = $arr_accumulate[$i] - $arr_accumulate[$i - $int_range];
	
	if ($int_result < $int_sum) {
		$int_result = $int_sum;
	}
}

print $int_result . "\n";