第65回【JavaScript】ボウリング

現在取り組んでいるのは、paiza ラーニング問題集「配列活用メニュー」になります。

はじめに

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

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

冒頭の文(ココ)を書くのが一番大変な気がしています。前にも書いた気がするなぁ、というようなことがよくあります。成長していないからか??? ココは成長していなくとも、プログラムを書くことは成長していることを祈るばかりです。

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

ボウリング (paizaランク C 相当)

あなたはボウリングをしています。フレームの 1 投目を投げ終わったあなたは、次に狙うピンの番号と残っているピンの本数を知りたくなりました。ピンの情報が与えられるので、狙うべきピンの番号と残っているピンの本数を求めてください。

狙うピンの決め方は次の通りとします。
– 残っているピンのうち、先頭 (P_1側) のピンを狙います。ただし、同じ列に複数ピンがある場合は、それらのうちピン番号が最も小さいピンを狙います。


入力される値

P_10 P_9 P_8 P_7
P_6 P_5 P_4
P_3 P_2
P_1

・4 行でピンの情報が与えられます。ピン番号は以上の通りです。
・P_1 が先頭のピンです。
・P_i (1 ≦ i ≦ 10) が 0 のとき、その位置にはピンがないことを、1 のときその位置にピンが残っていることを表します。

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


期待する出力

狙うピンの番号
残っているピンの本数

狙うピン・残っているピンについて以上の形式で改行区切りで出力してください。

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


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

・P_i は 0 または 1 (1 ≦ i ≦ 10)
・少なくとも 1 本のピンが残っていることが保証されています。


入力例

1 1 1 1
1 1 1
1 1
1

出力例

1
10

すごーくくだらないことかもしれないけれど、ピン番号が逆なんだよなぁ。10 番ピンって一番右の一番後ろのはず。まぁ、こうなっていることが、解答に影響するわけだけれども。

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 P = [];
  let pNo = 0;
  let pLeft = 0;
  for (let i = 0; i < 4; i++) {
      P = P.concat(lines[i].split(/\s/));
  }
  for (let i = 0; i < 10; i++) {
      if (P[i] == '1') {
          pNo = 10 - i;
          pLeft += 1;
      }
  }
  console.log(pNo);
  console.log(pLeft);
});
Python
P = []
pNo = 0
pLeft = 0
for i in range(4):
    P += input().split()
for i in range(10):
    if P[i] == '1':
        pNo = 10 - i
        pLeft += 1
print(pNo)
print(pLeft)

最後に

本来のピン番号と逆に書かれている理由は、こうやって出しやすくするため、だったわけですね。多分。この求め方は、閃き的に素敵だと思います。

こういう求め方を頭に入れておいて、後で応用で使えるようになれば、プログラミングの幅が大きく広がりそうなんだけれど。

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

Python の第65回はこちら