第13回【JavaScript】加算された数列の最大値、加算された数列の最小値、1 はどこにある?
現在取り組んでいるのは、paiza ラーニング問題集「ループメニュー 2」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 13 回目です。
やりたいことがたくさんあって、時間が足りない。やるべきことに絞って、やるべきことをやればいい、と言われたことがあるのですが、根本的にやりたいこととやるべきことは違うんですよね。やるべきことはちゃんとやる。そのうえで、やりたいことをやる。そのやりたいことがたくさんある。困りものです。
それでは、今日も頑張ってみようと思います。
加算された数列の最大値 (paizaランク D 相当)
N 個の整数 a_1, a_2, …, a_N が与えられます。
a_i に i を足したとき、a_1 , … , a_N の最大値を出力してください。
入力される値
N
a_1 a_2 ... a_N
・ 1 行目に整数 N が与えられます。
・ 1 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
a_i に i を足したとき、a_1 , … , a_N の最大値を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 1 ≦ a_i ≦ 100
入力例
5
1 2 3 4 5
出力例
10
Python を学習したときにも書いたけれど、問題文を理解するのに一瞬間が必要になる問題。1 番目の数字には 1 を足して、2 番目の数字には 2 を足して・・・それで出来た配列の中の最大値を求める問題、でしょうか。
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(/\s/).map(Number);
let ans = 0;
for (let i = 0; i < n; i++) {
ans = Math.max(ans,a[i] + (i + 1));
}
console.log(ans);
});
多分、reduce() を利用したりしたら、もっと美しく書けると思うけれど、まだまだ勉強不足。
Python
N = int(input())
A = list(map(int,input().split()))
ans = 0
for i in range(N):
ans = max(ans, A[i] + (i + 1))
print(ans)
加算された数列の最小値 (paizaランク D 相当)
N 個の整数 a_1, a_2, …, a_N が与えられます。
a_i に i を足したとき、N 個の整数の最小値を出力してください。
入力される値
N
a_1 a_2 ... a_N
・ 1 行目に整数 N が与えられます。
・ 2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
a_i に i を足したとき、N 個の整数の最小値を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 1 ≦ a_i ≦ 100
入力例
5
5 4 3 2 1
出力例
6
過去に書いた Python のコードは致命的な誤りがある。これで paiza のチェックは通ったんだろうか。最小値の仮の値を 100 にしていると、条件的に合わない。
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(/\s/).map(Number);
let ans = 1000;
for (let i = 0; i < n; i++) {
ans = Math.min(ans,a[i] + (i + 1));
}
console.log(ans);
});
Python
N = int(input())
A = list(map(int,input().split()))
ans = 100 → ans = 1000
for i in range(N):
ans = min(ans, A[i] + (i + 1))
print(ans)
1 はどこにある? (paizaランク D 相当)
N 個の整数 a_1, a_2, …, a_N が与えられます。
a_1, a_2, …, a_N のうち、1 がある位置を先頭から順に改行区切りで出力してください。
a_1 を 1 番目とし、a_1, a_2, …, a_N には少なくとも 1 個は 1 が含まれます。
入力される値
N
a_1 a_2 ... a_N
・ 1 行目に整数 N が与えられます。
・ 2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
・ a_1, a_2, …, a_N には少なくとも 1 個は 1 が含まれます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
a_1, a_2, …, a_N のうち、1 がある位置を先頭から順に改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 1 ≦ a_i ≦ 100
入力例
5
1 5 5 5 1
出力例
1
5
イチの位置を探せ! Python のときと同じようなことを書いている。まったく成長していない??
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(/\s/).map(Number);
for (let i = 0; i < n; i++) {
if (a[i] == 1) console.log(i + 1);
}
});
Python
N = int(input())
A = list(map(int,input().split()))
for i in range(N):
if A[i] == 1:
print(i+1)
最後に
過去のコードのミスを見つけてしまって、かなりショックを受けています。ちゃんと確認したつもりだったんだけど、「つもり」ではダメですよね。
お仕事においては、ミスをしない人、として認識されているのですが、結構細かいミスをしていて、慌てて自分で直しているのが本当のところ。かなり恥ずかしい・・・。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません