体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

【選択式問題】日付&時刻パズル2【言語不問】解答と解説

日付&時刻パズル2

本問題は、仮想コードのルールに従った処理の結果を、選択肢から選ぶというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

あなたは、日付&時刻の女神「デー=ト」の神殿にやって来ました。

この神殿では、女神の出す問題に正解すれば富を約束され、間違うと死を約束されます。

あなたは、歴戦のプログラマーとして、女神の意図をくんで解答しなければなりません。

この神殿では、仮想コードが提示されます。その計算結果を、選択肢から選びます。

// 仮想コードのルール
YYYY-MM-DDThh:mm:ss …… YYYYが年、MMが月、DDが日、hhが時、mmが分、ssが秒の日時。
その他の数字 …… 秒。
* / + – …… 四則演算の演算子。乗除が加減に優先。
() …… 丸括弧の中の計算を優先的に行う。

問題1

// 問題
2016-01-01T01:00:00 – 1

// 選択肢
2016-01-01T00:99:99
2016-01-01T00:59:59
2015-12-31T23:59:59

それでは問題の答えが、どのような値になるか、見ていきましょう。

// 仮想コードの処理

2016-01-01T01:00:00 から 1秒 を引く

2016-01-01T01:00:00 は 2016-01-01 と 01:00:00 に分けられる

01:00:00 から 1秒 を引くと 00:59:59

なので 2016-01-01T00:59:59

上記の通り、答えは2番目の選択肢の『2016-01-01T00:59:59』になります。

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 関数
function calc(s) {
s = s.replace(/d{4}-dd-ddTdd:dd:dd/g, function(s) {
return +new Date(s) / 1000 | 0;
});
try {s = eval(s);} catch(e) {console.log(e)}
var d = new Date(s * 1000);
s = d.getUTCFullYear() + “-”
+ (“0” + (d.getUTCMonth() + 1)).substr(-2) + “-”
+ (“0” + d.getUTCDate()).substr(-2) + “T”
+ (“0” + d.getUTCHours()).substr(-2) + “:”
+ (“0” + d.getUTCMinutes()).substr(-2) + “:”
+ (“0” + d.getUTCSeconds()).substr(-2);
return s;
};

// 問題
console.log(calc(“2016-01-01T01:00:00 – 1”));

// 出力結果
2016-01-01T00:59:59

問題2

// 問題
2016-01-01T01:00:00 + 60 * 60 * 60

// 選択肢
2016-01-01T02:00:00
2016-01-02T01:00:00
2016-01-03T13:00:00

それでは問題の答えが、どのような値になるか、見ていきましょう。

// 仮想コードの処理

60 * 60 * 60
→「60秒 * 60 * 60」
→「1分 * 60 * 60」
→「60分 * 60」
→「1時間 * 60」
→ 60時間

60時間 は 2日(48時間)と 12時間

2016-01-01T01:00:00 に 2日と 12時間 を足す

2016-01-03T13:00:00

上記の通り、答えは3番目の選択肢の『2016-01-03T13:00:00』になります。

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード

// 関数
function calc(s) {
s = s.replace(/d{4}-dd-ddTdd:dd:dd/g, function(s) {
return +new Date(s) / 1000 | 0;
});
try {s = eval(s);} catch(e) {console.log(e)}
var d = new Date(s * 1000);
s = d.getUTCFullYear() + “-”
+ (“0” + (d.getUTCMonth() + 1)).substr(-2) + “-”
+ (“0” + d.getUTCDate()).substr(-2) + “T”
+ (“0” + d.getUTCHours()).substr(-2) + “:”
+ (“0” + d.getUTCMinutes()).substr(-2) + “:”
+ (“0” + d.getUTCSeconds()).substr(-2);
return s;
};

1 2次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

山寺宏一&高木渉で『ポプテピピック』

GetNews girl / GetNews boy