第76回【JavaScript】池の周回、崖に落ちるか判定

現在取り組んでいるのは、paiza ラーニング問題集「条件分岐メニュー」になります。

はじめに

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

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

禁煙してもう 10 年くらいになります。昔吸っていたわけで、喫煙者の気持ちが分からないわけではないです。それでも、度々喫煙で席を外されるとイラっとします。ヘビースモーカーでしたけれど、仕事のときには弁えていたつもりです。1 時間ごとに出て行く人って何を考えているんだろう。

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

池の周回 (paizaランク C 相当)

京子ちゃんは 1 周がNメートルの円の外周上にいます。京子ちゃんは 1 ターンで現在地点から K メートル時計回りに円周上を歩きます。スタート地点から開始してTターン歩いたとき、京子ちゃんが丁度スタート地点に戻ってきているかどうかを判定してください。ただし、京子ちゃんは各ターン必ず歩く必要があり、同じ場所にとどまることはできません。


入力される値

N K T

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


期待する出力

京子ちゃんがTターン後にちょうどスタート地点にいる場合はYESを、そうではない場合はNOを出力してください。

YES

または

NO

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


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

・ N, K, T は 1 以上 100 以下の整数
・ N ≧ K


入力例

9 3 3

出力例

YES

簡単に見えて、落とし穴はあり。何周したかはわからない。

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,t] = lines[0].split(/\s/).map(Number);
  if (k * t % n == 0) {
      console.log('YES');
  } else {
      console.log('NO');
  }
});
Python
N,K,T = map(int,input().split())
if K * T % N == 0:
    print("YES")
else:
    print("NO")

崖に落ちるか判定 (paizaランク C 相当)

直線上の道があり、最初は X = 0 の地点にいます。この道はX = T + 0.1 の地点で崖になっています。また、 1 歩でX軸方向にK進むことができます。崖に落ちずにN歩進むことはできるでしょうか。


入力される値

N K T

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


期待する出力

崖に落ちずにN歩進むことができる場合はYESを、そうではない場合はNOを出力してください。

YES

または

NO

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


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

・ N, K, T は 1 以上 100 以下の整数


入力例

2 5 10

出力例

YES

落ちるか落ちないか判定するのはいいけれど、落ちたら元も子もない。

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,t] = lines[0].split(/\s/).map(Number);
  if (n * k < t + 0.1) {
      console.log('YES');
  } else {
      console.log('NO');
  }
});
Python
N,K,T = map(int,input().split())
if N * K < T + 0.1:
    print("YES")
else:
    print("NO")

最後に

ちょっとだけ落とし穴はあったけれど、難しくはない問題だったと思います。実際にありそうな判定なので、面白いなぁと思いました。

いつもいつも、もっと綺麗な書き方があるだろう、もっとわかりやすい書き方があるだろう、と頭を悩ませています。もっと勉強しないと追いつけない!

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

Python の第76回はこちら