第33回【JavaScript】何番目にある? 1、何番目にある? 2、何番目にある? 3
現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 33 回目です。
こうやって、Python と JavaScript の勉強を続けていますが、実際には、それだけやっていればいい、というわけにもいきません。特に、弱小企業の場合、様々な知識が求められます。サーバーの構築、ミドルウェア、ソフトウェアの設定、日々、勉強です。
それでは、今日も頑張ってみようと思います。
何番目にある? 1 (paizaランク D 相当)
以下のような配列があります。
1 10 2 9 3 8 4 7 5 6
この配列の中で、8 が左から何番目にあるか出力してください。
左端を 1 番目とします。
入力される値
入力は与えられません。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
8 が左から何番目にあるか出力してください。
6
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
入力は与えられません。
JavaScript
const L = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6];
L.forEach((val,idx,arr) => {
if (val == 8) {
console.log(idx + 1);
arr.length = idx + 1;
}
});
forEach 文では、break が使えないことを始めて知った。こういうやり方が紹介されていたけれど、本当に良いのだろうか。とても分かりづらい。
JavaScript(これの方がわかりやすい)
const L = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6];
console.log(L.indexOf(8) + 1);
Python
L = [1, 10, 2, 9, 3, 8, 4, 7, 5, 6]
for i,val in enumerate(L):
if val == 8:
print(i + 1)
break
何番目にある? 2 (paizaランク D 相当)
整数 N が与えられます。
整数 N が、以下の配列の左から何番目にあるか出力してください。
左端を 1 番目とし、N は以下の配列に必ず含まれるものとします。
1 5 9 7 3 2 4 8 6 10
入力される値
N
整数 N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
整数 N が左から何番目にあるか出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・N は与えられた配列内に必ず含まれる。
入力例
5
出力例
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 L = [1, 5, 9, 7, 3, 2, 4, 8, 6, 10];
searchNum(n,L);
});
function searchNum(n,L) {
L.forEach((val,idx,arr) => {
if (val == n) {
console.log(idx + 1);
arr.length = idx + 1;
}
});
}
Python
N = int(input())
L = [1, 5, 9, 7, 3, 2, 4, 8, 6, 10]
for i,val in enumerate(L):
if val == N:
print(i + 1)
break
何番目にある? 3 (paizaランク D 相当)
1 行目に整数 N, M が与えられます。
2 行目に M 個の整数 a_1, a_2, …, a_M が与えられます。
整数 N が、M 個の整数の左から何番目にあるか出力してください。
左端を 1 番目とし、N は M 個の整数に必ず 1 つだけ含まれるものとします。
入力される値
N M
a_1 a_2 ... a_M
1 行目に整数 N, M が与えられます。
2 行目に M 個の整数 a_1, a_2, …, a_M が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
整数 N が、M 個の整数の左から何番目にあるか出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・M は 1 以上 10 以下の整数
・N, a_i (1 ≦ i ≦ M) は 1 以上 10 以下の整数
・N は M 個の整数の中に必ず 1 つだけ含まれる
入力例
3 5
1 2 3 4 5
出力例
3
すべて標準入力から与えられるだけ。さっき書いたやつがそのまま使えてしまう。
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,m] = lines[0].split(/\s/).map(Number);
const L = lines[1].split(/\s/).map(Number);
searchNum(n,L);
});
function searchNum(n,L) {
L.forEach((val,idx,arr) => {
if (val == n) {
console.log(idx + 1);
arr.length = idx + 1;
}
});
}
Python
N,M = map(int,input().split())
L = list(map(int,input().split()))
for i,val in enumerate(L):
if val == N:
print(i + 1)
break
最後に
簡単に終わったけれど、なんか、まだスッキリしないです。もっと綺麗な書き方、JavaScript らしい書き方があるんだろうなぁ。もっと勉強しよう。
例えば、console.log() を関数内に置くべきか、関数で戻り値を貰ってそれを出力するべきか、とか。考えだすとキリがない。いろいろ調べると更に泥沼。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません