第35回【JavaScript】配列の書き換え、2 変数の入れ替え、配列の要素の入れ替え
現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 35 回目です。
面倒な勤怠システムが導入されて 1 年くらい経ちます。いろいろと手続きが面倒で、時間外や在宅をつけないことが増えています。完全にブラックな流れ。DX の名のもとに、より一層面倒にするとか、頭悪いなぁと素直に思います。インボイスと同じですね。
それでは、今日も頑張ってみようと思います。
配列の書き換え (paizaランク D 相当)
1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数のうち、その数が A だった場合、B に書き換えてください。
書き換えた N 個の整数を改行区切りで出力してください。
入力される値
A B N
a_1 a_2 ... a_N
1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
N 個の整数の内、その数が A だった場合、B に書き換えてください。
書き換えた N 個の整数を改行区切りで出力してください。
a_1
a_2
...
a_N
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・A, B, N は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数
入力例
3 1 5
1 2 3 4 5
出力例
1
2
1
4
5
実際の作業でよくあるパターン的な、配列の書き換えです。
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 [a,b,n] = lines[0].split(/\s/).map(Number);
const l = lines[1].split(/\s/).map(Number);
for (let i = 0; i < n; i++) {
if (l[i] == a) l[i] = b;
}
for (let i = 0; i < n; i++) {
console.log(l[i]);
}
});
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
for i,val in enumerate(L):
if val == A:
L[i] = B
print(*L,sep="\n")
2 変数の入れ替え (paizaランク D 相当)
整数 A, B が与えられます。
A と B の値を入れ替えて、半角スペース区切りで出力してください。
入力される値
A B
整数 A, B が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
A と B の値を入れ替えて、半角スペース区切りで出力してください。
B A
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・A, B は 1 以上 10 以下の整数
入力例
2 1
出力例
1 2
JavaScript でも、ワンライナーで出来るらしい。
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', () => {
let [a,b] = lines[0].split(/\s/).map(Number);
[a,b] = [b,a];
console.log(a,b);
});
Python
A,B = map(int,input().split())
A,B = B,A
print(A,B)
配列の要素の入れ替え (paizaランク D 相当)
1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
N 個の整数の左から A 番目の数と B 番目の数の値を入れ替えて、改行区切りで出力してください。
なお、左端を 1 番目とします。
入力される値
A B N
a_1 a_2 ... a_N
1 行目に整数 A, B, N が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
N 個の整数の左から A 番目の数と B 番目の数の値を入れ替えて、改行区切りで出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・N は 1 以上 10 以下の整数
・A, B は 1 以上 N 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数
入力例
2 3 5
1 2 3 4 5
出力例
1
3
2
4
5
前問でワンライナーで出来ることを覚えたので、簡単です。
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 [a,b,n] = lines[0].split(/\s/).map(Number);
let l = lines[1].split(/\s/).map(Number);
[l[a-1],l[b-1]] = [l[b-1],l[a-1]];
for (let i = 0; i < n; i++) {
console.log(l[i]);
}
});
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
L[A-1],L[B-1] = L[B-1],L[A-1]
print(*L,sep="\n")
最後に
Python でスワップが簡単に書くことが出来ることに感動した。JavaScript でも同じような書き方が出来るなんて。素敵すぎる。やるじゃん。
配列でないとダメらしいので、そこだけは注意する必要がありそうです。あと、インデックスが 0 から始まること。さすがに身に沁みついているけれど、やっぱり書いておくべきだと思うので。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません