第15回【JavaScript】指定された数字までの出力、指定された数字までの出力、指定された行数の数字の出力、指定された範囲・行数の数字の出力

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

はじめに

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

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

業務の属人化という話を最近、よく耳にします。これについて話し合いを行っていくと、属人化も、ただその人がやっているだけのことなのか、技術的にその人でないと難しいのか、というところに行きつきます。技術的問題が絡んでくると、解決は大変困難になってしまいます。

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

指定された数字までの出力 (paizaランク D 相当)

正の整数 N が与えられるので、1 〜 N の整数を 1 から順に半角スペース区切りで 1 行で出力してください。


入力される値

N

・ 正の整数 N が 1 行で与えられます。

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


期待する出力

1 2 ... N-1 N

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


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

・ 1 ≦ N ≦ 100


入力例

5

出力例

1 2 3 4 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]);
  for (let i = 1; i <= n; i++) {
      if (i == n) {
          console.log(i);
          break;
      }
      process.stdout.write(i + ' ');
  }
});
Python
N = int(input())
for i in range(1,N+1):
    if i == N:
        print(i)
    else:
        print(i,end=" ")

指定された数字までの出力 (paizaランク D 相当)

正の整数 N が与えられるので、1 〜 N の整数を 1 から順に改行区切りで N 行で出力してください。


入力される値

N

・ 正の整数 N が 1 行で与えられます。

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


期待する出力

1
...
N

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


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

・ 1 ≦ N ≦ 100


入力例

7

出力例

1
2
3
4
5
6
7

前問よりも簡単になっている不思議。先に進むと、それだけ難しくなっていくものだと考えるのはただの思い込みですね。

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]);
  for (let i = 1; i <= n; i++) {
      console.log(i);
  }
});
Python
N = int(input())
for i in range(1,N+1):
    print(i)

指定された行数の数字の出力 (paizaランク D 相当)

整数 N が与えられるので、 1 から 5 までの数字を半角スペース区切りしたもの
“1 2 3 4 5" を N 行出力してください。


入力される値

N

・ 1 行で整数 N が与えられます。

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


期待する出力

1 から 5 までの数字を半角スペース区切りしたもの “1 2 3 4 5" を N 行出力してください。

1 2 3 4 5
...

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


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

・ 1 ≦ N ≦ 100


入力例

5

出力例

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

'1 2 3 4 5’ の文字列を N 回並べる、では、多分、問題の意図を汲み取れていないのだと思う。二重ループメニューなので、二重ループで解く。

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]);
  for (let i = 0; i < n; i++) {
      for (let j = 1; j <= 5; j++) {
          if (j == 5) {
              console.log(j);
              break;
          }
          process.stdout.write(j + ' ');
      }
  }
});
Python
N = int(input())
for _ in range(N):
    for i in range(1,6):
        if i == 5:
            print(i)
        else:
            print(i,end=" ")

指定された範囲・行数の数字の出力 (paizaランク D 相当)

整数 N , K が与えられるので、 1 から N までの数字を半角スペース区切りしたもの
“1 2 … (N-1) N" を K 行出力してください。


入力される値

N K

・ 1 行で整数 N , K が半角スペース区切りで与えられます。

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


期待する出力

1 から N までの数字を半角スペース区切りしたもの “1 2 … (N-1) N" を K 行出力してください。

1 2 ... (N-1) N
...
...

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


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

・ 1 ≦ N , K ≦ 100


入力例

5 5

出力例

1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 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 [n,k] = lines[0].split(/\s/).map(Number);
  for (let i = 0; i < k; i++) {
      for (let j = 1; j <= n; j++) {
          if (j == n) {
              console.log(j);
              break;
          }
          process.stdout.write(j + ' ');
      }
  }
});
Python
N,K = map(int,input().split())
for _ in range(N):
    for i in range(1,K+1):
        if i == K:
            print(i)
        else:
            print(i,end=" ")

最後に

今回お勉強になったこと。console.log() は、process.stdout.write() を改行コード付きで呼んでいるらしい。この部分だけは、Python や VBA よりも分かりやすく書けた気がした。

もう一つお勉強になったこと。ラベル構文とやらで、内内のループから一気に外へ抜けることが出来るっぽい。可読性が落ちるので、あまり多用するものではなさそうだけれど、知っておくと今後、便利に使えるかも。

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

Python の第15回はこちら