第36回【Python】部分配列、配列の連結

現在取り組んでいるのは、paiza ラーニング問題集「配列メニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 36 回目です。

定例の作業をいかに自動化するか、効率化するか、と、なんで今更叫ばれているのか理解できません。そんなの昔からやってきているし、当たり前だと思っていたのだけれど。ただ、実際、今の会社に入って、IT の会社なのになんてアナログなことをしているんだろう、と思ったことは多々あります。片っ端からそれらを改善してきました。

それでは、今日も頑張ってみようと思います。

部分配列 (paizaランク D 相当)

1 行目に整数 A, B, N (A ≦ B)が与えられます。
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 番目の数を抜き出し、改行区切りで出力してください。

a_A
...
a_B

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・N は 1 以上 10 以下の整数
・A, B は 1 以上 N 以下の整数
・A ≦ B
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数


入力例

2 4 5
1 2 3 4 5

出力例

2
3
4

左端を 1 番目にする、というのがひっかけなのだろうか。

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 = a - 1; i < b; i++) {
      console.log(l[i]);
  }
});
Python
A,B,N = map(int,input().split())
L = list(map(int,input().split()))
for li in L[A-1:B]:
    print(li)

配列の連結 (paizaランク D 相当)

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
3 行目に M 個の整数 b_1, b_2, …, b_M が与えられます。
N 個の整数 a_1, a_2, …, a_N の後ろに M 個の整数 b_1, b_2, …, b_M を連結させ、改行区切りで出力してください。


入力される値

N M
a_1 a_2 ... a_N
b_1 b_2 ... b_M

1 行目に整数 N, M が与えられます。
2 行目に N 個の整数 a_1, a_2, …, a_N が与えられます。
3 行目に M 個の整数 b_1, b_2, …, b_M が与えられます。

入力値最終行の末尾に改行が1つ入ります。


期待する出力

N 個の整数 a_1, a_2, …, a_N の後ろに M 個の整数 b_1, b_2, …, b_M を連結させ、改行区切りで出力してください。

a_1
...
a_N
b_1
...
b_M

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・N, M は 1 以上 10 以下の整数
・a_i (1 ≦ i ≦ N) は 1 以上 10 以下の整数
・b_i (1 ≦ i ≦ M) は 1 以上 10 以下の整数


入力例

2 3
1 2
3 4 5

出力例

1
2
3
4
5

Python では足し算で配列を結合することが出来たけれど、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', () => {
  const [n,m] = lines[0].split(/\s/).map(Number);
  const a = lines[1].split(/\s/).map(Number);
  const b = lines[2].split(/\s/).map(Number);
  const c = a.concat(b);
  for (let i = 0; i < n + m; i++) {
      console.log(c[i]);
  }
});
Python
N,M = map(int,input().split())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
ans = A + B
print(*ans,sep="\n")

最後に

JavaScript って思ったより書きやすいなぁ。かなりイメージが変わってきている。まぁ、Web で利用されている JavaScript を読むと、まだ慣れないんだけれど。やっぱり、数字を扱っている間は身に入りやすいみたい。

Web でもやることは同じなんだろうけれど、html タグを連結させたり必要な部分を取り出したり。そうか、数学みたいに数字に置き換えるつもりで読めば頭に入りやすいのかもしれない。

引き続き、よろしくお願いいたします!

Python の第36回はこちら