ガジェット通信

見たことのないものを見に行こう

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

DATE:
  • ガジェット通信を≫

日付&時刻パズル

本問題は、仮想コードを実行した結果、生成される日時を選ぶという内容でした。

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

問題のオープニング

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

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

あなたは、歴戦のプログラマーとして、女神に正しい日時を教えなければなりません。

この神殿では、仮想コードが提示されます。「YYYY-MM-DDThh:mm:ss」は日時を、その他の数字は秒を表します。その結果となる日時を、選択肢から選びます。

// 仮想コードのルール
2015-12-31T12:00:00 …… 日付を表す記法。年-月-日T時:分:秒。
数字 …… 秒を表す。
四則演算 …… 乗除が加減に優先。

問題1

// 問題
2015-12-31T12:00:00 + 60 * 60

// 選択肢
2015-12-31T12:01:00
2015-12-31T13:00:00
2016-01-01T12:00:00

仮想コードの実行結果を順番に見ていきましょう。

最初の日時「2015-12-31T12:00:00」は、「2015年12月31日 12時00分00秒」を表しています。

2015-12-31T12:00:00 + 60 * 60

「60 * 60」は、60秒の60倍なので、1分の60倍、つまり1時間に相当する。
「60 * 60」は、「0000-00-00T01:00:00」と同じ。
「0000-00-00T01:00:00」でコードを置き換える。

→ 2015-12-31T12:00:00 + 0000-00-00T01:00:00

「2015-12-31T12:00:00」から、1時間進む時間を計算する。

2015-12-31T13:00:00

そのため答えは、2番目の選択肢の『2015-12-31T13: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;
};

// 問題
console.log(calc(“2015-12-31T12:00:00 + 60 * 60″));

// 出力結果
2015-12-31T13:00:00

問題2

// 問題
2015-12-31T12:00:00 – 3600 * 2

// 選択肢
2015-12-29T12:00:00
2015-12-30T11:00:00
2015-12-31T10:00:00

仮想コードの実行結果を順番に見ていきましょう。

1番目の問題と同じように、最初の日時「2015-12-31T12:00:00」は、「2015年12月31日 12時00分00秒」を表しています。

2015-12-31T12:00:00 – 3600 * 2

「3600」は「60 * 60」。
「60 * 60」は、60秒の60倍なので、1分の60倍、つまり1時間に相当する。
「3600 * 2」は、2時間に相当する。
「3600 * 2」は、「0000-00-00T02:00:00」と同じ。
「0000-00-00T02:00:00」でコードを置き換える。

→ 2015-12-31T12:00:00 – 0000-00-00T02:00:00

「2015-12-31T12:00:00」から、2時間戻る時間を計算する。

2015-12-31T10:00:00

そのため答えは、3番目の選択肢の『2015-12-31T10: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;
};

// 問題
console.log(calc(“2015-12-31T12:00:00 – 3600 * 2″));

// 出力結果
2015-12-31T10:00:00

問題3

// 問題
2015-12-31T12:00:00 – (2015-10-10T00:00:00 – 2015-10-08T00:00:00)

// 選択肢
2015-12-29T12:00:00
2015-10-31T12:00:00
2015-12-28T12:00:00

仮想コードの実行結果を順番に見ていきましょう。

1、2番目の問題と同じように、最初の日時「2015-12-31T12:00:00」は、「2015年12月31日 12時00分00秒」を表しています。

2015-12-31T12:00:00 – (2015-10-10T00:00:00 – 2015-10-08T00:00:00)

「2015-10-10T00:00:00 – 2015-10-08T00:00:00」は、2日分に相当する。
「0000-00-02T00:00:00」と同じ。
「0000-00-02T00:00:00」でコードを置き換える。

→ 2015-12-31T12:00:00 – 0000-00-02T00:00:00

「2015-12-31T12:00:00」から、2日間戻る時間を計算する。

2015-12-29T10:00:00

そのため答えは、1番目の選択肢の『2015-12-29T12: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;
};

// 問題
console.log(calc(“2015-12-31T12:00:00 – (2015-10-10T00:00:00 – 2015-10-08T00:00:00)”));

// 出力結果
2015-12-29T12:00:00

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

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

TOP