第95回【JavaScript】文字列
現在取り組んでいるのは、paiza ラーニング問題集「Cランクレベルアップメニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
JavaScript をゼロから勉強してみよう、のコーナー 95 回目です。
スタートは、JavaScript を利用してフロントを作ろう、だったのですが、なかなか思うように進んでいない状況です。別でやっている AWS を利用した Minecraft サーバーの構築も、将来的には状況確認をブラウザで出来ればなぁ、と。そのためにはもっと JavaScript を勉強する必要がありそうです。
それでは、今日も頑張ってみようと思います。
文字列 (paizaランク C 相当)
パイザ君の家の前では毎週日曜日に工事が行われます。この先 N 週間、工事が日曜日の何時に始まり、どれくらいの時間続くのかは分かっています。パイザ君は工事の間は家を離れようと思っているので、それぞれの日に工事が何時に終わるのかを知りたいと思いました。
工事が N 週間続くとして、各週日曜日の工事が始まる時刻と、工事が何時間何分続くのかに関する情報が与えられるので、工事が終わる時刻を 00:00 から 23:59 までの 24 時間表記で出力してください(ここで「工事が終わる時刻」とは、工事が h 時間 m 分続くとした場合、工事が始まった時刻の h 時間 m 分後を指します)。
入力される値
N
t_1 h_1 m_1
...
t_N h_N m_N
1 行目には工事が続く週の数を表す正整数 N が与えられ、 2 行目から (N + 1) 行目には工事が始まる時刻と、工事がどれくらい続くのかについての情報が、 “t_i h_i m_i" という形式で与えられます(1 ≤ i ≤ N)。これは時刻 t_i に工事が始まり、 h_i 時間 m_i 分工事が続くことを意味しています。t_i, h_i, m_i は各行において半角スペース区切りで与えられます。
t_i は 24 時間表記で時刻を表す文字列で、 “AB:XY" という形をしており、これは AB 時 XY 分を表します。ただし、今回は 00:00 から 23:59 までの 24 時間表記を採用し、時・分を表す数字が 1 桁の場合には十の位を 0 で埋めます。
入力値最終行の末尾に改行が1つ入ります。
期待する出力
入力された通りの順番で、各週の工事が終わる時刻を N 行出力してください。時刻の表記は入力と同じフォーマットに従うものとし、 24 時以降は翌日の時刻を記し、 00:00 から 23:59 までの間に収まるように、また、時や分を表す数字が1桁の場合には十の位を 0 で埋めてください。たとえば 24 時は 00:00、 27 時は 03:00 となります。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≤ N ≤ 50
・ 0 ≤ h_i ≤ 23
・ 0 ≤ m_i ≤ 59
入力例
2
15:59 0 1
23:20 1 0
出力例
16:00
00:20
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++) {
let [t,h,m] = lines[i].split(/\s/);
let [th,tm] = t.split(':').map(Number);
let ah = th + Number(h);
let am = tm + Number(m);
if (am >= 60) {
ah += 1;
am -= 60;
}
if (ah >= 24) {
ah -= 24;
}
console.log(('00' + ah).slice(-2) + ':' + ('00' + am).slice(-2));
}
});
Python
N = int(input())
for i in range(N):
t, h, m = input().split()
th = int(t[:2])
tm = int(t[3:])
h = int(h)
m = int(m)
ah = th + h
am = tm + m
if am >= 60:
ah += 1
am -= 60
if ah >= 24:
ah -= 24
ah = str(ah)
am = str(am)
if len(ah) == 1:
ah = "0" + ah
if len(am) == 1:
am = "0" + am
print(ah + ":" + am)
最後に
ポイントは先に「分」の方が 60 を超えているかどうかを判定するところ。それにより「時」が繰り上がり、24 を超えてしまう可能性もあるので。
文字列や数値が混在していて、型を意識しないといけないパターンは、むしろ、LeoSaki(旦那)は得意だと思う。しかし、躓きポイントにもなり得るので、しっかり学習したいと思います。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません