新・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);
}
});
条件通りの結果を出力できましたけど コードが長くなってしまいました。
【条件判定 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]);
});
Ç++ の解答コード例を参照しました。
コメント