0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

paizaラーニング レベルアップ問題集 新・Bランクレベルアップメニュー JavaScript 【条件判定 2】視力検査

Posted at

【条件判定 2】視力検査 (paizaランク C 相当)

解答例

コードが少し長くなったので、細かなところのミスに気をつけました。

2 回失敗する前に 2 回成功した場合、その段階について「合格」、それ以外の場合を「不合格」

なので、先に2回失敗したら、その後2回以上成功しても不合格判定なので、eye配列で、未判定、失敗、成功を保持するようにしました。eye配列のインデックスが小さい順にA,B,C,Dと対応しています。

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

const [N] = lines[0].split(" ").map(Number);

const eye = Array(4).fill(-1);//視力、未判定-1、失敗0、成功1
const success = Array(4).fill(0);//テスト成功数
const failure = Array(4).fill(0);//テスト失敗数
//視力テスト
for (let i = 1; i <= N; i++) {
  const [T, J] = lines[i].split(" ");
  if (T === "TA") {
    if (J === "ok") {
      success[0] += 1;
    } else {
      failure[0] += 1;
    }
  } else if (T === "TB") {
    if (J === "ok") {
      success[1] += 1;
    } else {
      failure[1] += 1;
    }
  } else if (T === "TC") {
    if (J === "ok") {
      success[2] += 1;
    } else {
      failure[2] += 1;
    }
  } else if (T === "TD") {
    if (J === "ok") {
      success[3] += 1;
    } else {
      failure[3] += 1;
    }
  }

  //合格判定
  for (let j = 0; j < 4; j++) {
    if (success[j] === 2 && failure[j] < 2 && eye[j] === -1) {
      eye[j] = 1;//成功
    } else if (failure[j] === 2 && success[j] < 2 && eye[j] === -1) {
      eye[j] = 0;//失敗
    }
  }

}

//視力結果
const result = eye.indexOf(1);

if (result === 0) {
  console.log("A");
} else if (result === 1) {
  console.log("B");
} else if (result === 2) {
  console.log("C");
} else if (result === 3) {
  console.log("D"); 
} else {
  console.log("E");
}

解答例(C++の場合参考)

視力テストをするところを関数にした。
視力レベルを表すインデックスを活用した。(A=0,B=1,C=2,D=3,E=4)

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");

let tester_level = 4;//視力を表すインデックス、初期値4はE相当

const ok = Array(4).fill(0);//テスト成功数
const ng = Array(4).fill(0);//テスト失敗数
//ok,ngのインデックスが視力に対応

//視力テストの関数定義
const tests = (level, result) => { //level:視力レベルを表すインデックス、result:okまたはng
  if (result === "ok") {
    ok[level]++;
  } else {
    ng[level]++;
  }
  if (ok[level] === 2 && ng[level] < 2) { //ok2回、ng2回より前に。ng2回以上ならok2回以上でも不合格
    tester_level = Math.min(tester_level, level);//合格した段階のうち、最も良い段階優先
  }
};

//メイン
const [n] = lines[0].split(" ").map(Number);

//test_nameとlevel_nameのインデックスを視力レベルに対応させる
const test_name = ["TA", "TB", "TC", "TD"];
const level_name = ["A", "B", "C", "D", "E"];

for (let i = 1; i <= n; i++) {
  const [test, result] = lines[i].split(" ");
  //合格判定
  for (let j = 0; j < 4; j++) { //インデックスjが視力レベルに相当
    if (test === test_name[j]) {
     tests(j, result);//視力テスト
    }
  }
}

//視力結果
console.log(level_name[tester_level]);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?