0

Resolvendo Algoritmos com JavaScript 5 / 5 - O tabuleiro secreto

Jéssica Kazmirowski
Jéssica Kazmirowski
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);

}


















4
26

Comentários (4)

0
Jéssica Kazmirowski

Jéssica Kazmirowski

28/12/2020 21:36

Consegui resolver



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 n = values.length;


  if (n == 0) return null;


  let map = {},

    most = values[0],

    freqCount = 1;


  for (let i = 0; i < n; i++) {

    let el = values[i];


    if (map[el] == null)

      map[el] = 1;

    else

      map[el]++;


    if (map[el] > freqCount) {

      most = el;

      freqCount = map[el];

    } else if (map[el] === freqCount) {

      most = Math.max(most, el)

    }

  }

  return most;

}


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);

}

0
Jéssica Kazmirowski

Jéssica Kazmirowski

28/12/2020 12:30

Bom dia, agradeço pela ajuda mas mesmo assim não consigo

0
Marlei Silva

Marlei Silva

27/12/2020 23:52

Boa noite!


Jéssica conseguiu?

0
Adriano Goncalves

Adriano Goncalves

27/12/2020 21:14

Essa função get nao esta definida, pode ser ela que esteja causando o erro, favor dê uma olhada com calma, pois eu vi rapidamente, pois estou no serviço e nao tenho ferramentas para testar. Ela esta abaixo do while:


while (true) {

 input = gets() \\ --------------------------- parece que o erro esta aqui .

 if (!input || input === '') break;


 let [N, Q] = input.match(/\d+/g);


Buscando novos aprendizados e experiência

Brasil