第94回【JavaScript】数字の文字列操作(時刻1)、数字の文字列操作(時刻2)

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

はじめに

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

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

年のスタートがひどかった分、後は良い事しかないと信じるしかないです。実際、何が起きても、年のスタートに比べれば大したことない、と割り切って頑張っています。

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

数字の文字列操作(時刻1) (paizaランク D 相当)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。入力された時刻を時と分に分け、時、分の順番で改行区切りで出力してください。


入力される値

S

1 行目に文字列 S が与えられます。

S は “XX:XX” という形をしており、 “:" の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。

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


期待する出力

入力された時刻を時と分に分け、時、分の順番で改行区切りで出力してください(2行出力する)。その際、入力値の十の位が 0 である場合には一の位だけ出力してください。

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


入力例

12:34

出力例

12
34

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 [H,M] = lines[0].split(':');
  console.log(Number(H));
  console.log(Number(M));
});
Python
H,M = input().split(':')
print(int(H))
print(int(M))

数字の文字列操作(時刻2) (paizaランク D 相当)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。与えられた時刻の 30 分後の時刻を同じ形式で出力してください。


入力される値

S

1 行目に文字列 S が与えられます。
S は “XX:XX” という形をしており、 “:" の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。

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


期待する出力

与えられた時刻の 30 分後の時刻を “XX:XX" の形式で出力してください。

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


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

・ S が表す時刻は最も遅くて 23:29


入力例

01:02

出力例

01:32

時間として扱うのではなく、少し面倒でも条件分岐で 30 分後を求める問題っぽい。

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 [H,M] = lines[0].split(':').map(Number);
  if (M + 30 >= 60) {
      H += 1;
      M = M + 30 - 60;
  } else {
      M += 30;
  }
  console.log(('00' + H).slice(-2) + ':' + ('00' + M).slice(-2));
});
Python
S = input()
h = int(S[:2])
m = int(S[3:])
if m + 30 >= 60:
    h = str(h + 1)
    m = str(m + 30 - 60)
else:
    h = str(h)
    m = str(m + 30)
if len(h) == 1:
    h = "0" + h
if len(m) == 1:
    m = "0" + m
print(h + ":" + m)

最後に

これまでにやってきたことを用いることで簡単に書くことが出来ました。ちょっとした応用問題でした。

模範解答を見ると、ちょっと面倒な書き方もあり、しかし、知っておいて損はないと思うので、しっかり学習しようと思います。

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

Python の第94回はこちら