Resolvendo Algoritmos com JavaScript
5 / 5 - O tabuleiro secreto
o código não passa no quarto teste, alguém pode me ajudar?
let input;
const limit = Math.pow(10, 5);
let T, X, R;
var output = '';
const operation = {
'1': function fillLine(matrix, line, num) {
for (let index = 0; index < matrix.length; index++) {
matrix[line - 1][index] = num;
}
},
'2': function fillColumn(matrix, col, num) {
for (let index = 0; index < matrix.length; index++) {
matrix[index][col - 1] = num;
}
},
'3': function showMostFrequentAtLine(matrix, line) {
const lineValues = matrix[line - 1]
output += getMostFrequentIn(lineValues) + '\n'
},
'4': function showMostFrequentAtColumn(matrix, col) {
const columnValues = matrix.map(line => line[col - 1])
output += getMostFrequentIn(columnValues) + '\n'
}
}
const getMostFrequentIn = (values) => {
let countValues = new Map();
values.forEach(v => countValues.set(v, (countValues.get(v) || 0) + 1))
const most = Array.from(countValues).sort((a, b) => {
const [prevValue, prevCount] = a
const [value, count] = b;
if (count < prevCount) return -1
if (count > prevCount) return 1
if (count === prevCount) {
return value >= prevValue ? 1 : -1
}
})
return most[0][0]
}
while (true) {
input = gets()
if (!input || input === '') break;
let [N, Q] = input.match(/\d+/g);
N = parseInt(N);
Q = parseInt(Q);
if (N < 1 || N > limit || Q < 1 || N > limit) break;
let matrix = Array.from(Array(parseInt(N)), () => new Array(parseInt(N)).fill(0));
for (let index = 0; index < Q; index++) {
let [T, X, R] = gets().split(/[ ]+/g)
X = parseInt(X)
R = parseInt(R)
if (/[12]/.test(T)) {
if (X < 1 || X > N || R < 0 || R > 50) {
console.log('Valores de X e/ou N inválidos para operação 1 ou 2. Verifique antes de iniciar o jogo');
continue;
}
}
if (/[34]/.test(T)) {
if (X > N || X < 0) {
// console.log('Valores de X e/ou N inválidos para operação 3 ou 4. Verifique antes de iniciar o jogo');
continue;
}
}
operation[T](matrix, X, R);
}
console.log(output);
}
Jéssica Kazmirowski
28/12/2020 21:36