【条件判定2】視力検査《新・Bランクup》

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

【条件判定 2】視力検査  コード 1

reader.on('close', () => {
   const N = Number(lines[0]);
   const A = [];
   const B = [];
   const C = [];
   const D = [];
   for (let i = 1; i <= N; i++) {
      const [T, J] = lines[i].split(' ');
      switch (T) {
         case 'TA':
            test(A, J);
            break;
         case 'TB':
            test(B, J);
            break;
         case 'TC':
            test(C, J);
            break;
         case 'TD':
            test(D, J);
            break;
         }
      }
   let ans = 'E';
   if (A.length > 1) {
      ANC(A, 'A');
   }
   if (B.length > 1 && ans === 'E') {
      ANC(B, 'B');
   }
   if (C.length > 1 && ans === 'E') {
      ANC(C, 'C');
   }
   if (D.length > 1 && ans === 'E') {
      ANC(D, 'D');
   }
   console.log(ans);

   function ANC(X, Y) {
      let [ok, ng] = [0, 0];
      for (let i = 0; i < X.length; i++) {
         X[i] ? ok++ : ng++;
         if (ok === 2) {
            ans = Y;
            break;
         } else if (ng === 2) {
            break;
         }
      }
   }

   function test(X, Y) {
      Y === 'ok' ? X.push(1) : X.push(0);
   }
});
hogeちゃんの画像

条件通りの結果を出力できましたけど コードが長くなってしまいました。

【条件判定 2】視力検査  コード 2/2 (C++実装例参照)

reader.on('close', () => {
   let tester_level = 4;
   const ok = new Array(4).fill(0);
   const ng = new Array(4).fill(0);

   function tests(level, result) {
      if (result ==='ok')  {
         ok[level]++;
      } else {
         ng[level]++;
      }
      if (ok[level] === 2 && ng[level] < 2) {
         tester_level = Math.min(tester_level, level);
      }
   }
   const N = Number(lines[0]);
   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++) {
         if (test === test_name[j]) {
            tests(j, result);
         }
      }
   }
   console.log(level_name[tester_level]);
});
hogeちゃんの画像

Ç++ の解答コード例を参照しました。

コメント