No internet connection
  1. Home
  2. Exercícios do Beecrowd

Alguém pode me ajudar com exercício 1181

Por Denise Schirmer @deniseschirmer
    2023-10-27 09:34:40.129Z

    var input = require('fs').readFileSync('/dev/stdin', 'utf8');
    var lines = input.split('\n');

    const readline = require('readline');

    const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
    });

    let linha;
    let operacao;
    let M = [];

    let leituras = 0;

    rl.question('Informe o número da linha: ', (linhaInput) => {
    linha = parseInt(linhaInput);

    rl.question('Informe o tipo de operação (S ou M): ', (operacaoInput) => {
    operacao = operacaoInput;

    console.log('Informe os elementos da matriz (um por um):');
    
    rl.on('line', (linha) => {
      const elementosLinha = linha.split(' ').map(parseFloat);
      M.push(elementosLinha);
      leituras++;
    
      if (leituras === 12) {
        rl.close();
        calcularResultado();
      }
    });
    

    });
    });

    function calcularResultado() {
    const elementosLinha = M[linha];

    const somaAreaVerde = elementosLinha.reduce((soma, elemento) => soma + elemento, 0);

    if (operacao === 'M') {
    const media = somaAreaVerde / 12;
    console.log(media.toFixed(1));
    } else {
    console.log(somaAreaVerde.toFixed(1));
    }
    }

    Não sei o por que não está dando certo! Grata

    Resolvido no post #2, clique para visualizar
    • 8 respostas
    1. B
      Brenda Aniceto Bueno @Brenda
        2023-10-27 10:31:17.422Z

        O código que você forneceu parece estar próximo de funcionar, mas tem um problema de lógica. O erro está na maneira como a matriz está sendo preenchida. O código atual está tentando ler as entradas da matriz por meio do evento rl.on('line', ...), mas esse evento é acionado sempre que há uma nova linha de entrada, o que não está alinhado com o formato de entrada que você descreveu. O beecrowd é bem chatinho em relação as entradas, uma dica seria você ler todas as entradas de uma vez, incluindo a linha, a operação e todos os elementos da matriz, e então processa esses valores.

        Segue um exemplo:

        var input = require('fs').readFileSync('/dev/stdin', 'utf8');
        var lines = input.split('\n');
        
        var linha = parseInt(lines.shift());
        var operacao = lines.shift().trim();
        var matriz = [];
        var soma = 0;
        var elementos = 0;
        
        for(var i = 0; i < 12; i++){
            matriz.push([]);
            for(var j = 0; j <12; j++){
                matriz[i][j] = parseInt(lines.shift());
                if(i === linha){
                    soma += matriz[i][j];
                    elementos++;
                }
            }
        }
        
        if(operacao === 'M'){
            soma /= elementos;
        }
        console.log(soma.toFixed(1));
        

        Para problemas do Beecrowd, onde o formato de entrada é bem definido e não interativo, é melhor ler todas as entradas de uma vez e então processar esses valores. Isso garante que os dados sejam lidos de acordo com o formato esperado. Estou à disposição caso tenha alguma dúvida" 😊

        1. Denise Schirmer @deniseschirmer
            2023-10-27 11:38:37.435Z

            Muito obrigada Brenda, me ajudou muitooo!

            1. Em resposta aBrenda:
              alzira eva cavalcanti alves @eva
                2023-10-31 13:44:12.759Z

                Muito bom, estava sem conseguir resolver essa questão, ajudou muito, só mudaria ali para:

                matriz[i][j] = parseFloat(lines.shift())
                

                por favor me corrija se tiver errada.

                1. Perfeito! Estava empacada. Assim fica mais fácil de entender. Obrigada

                2. Em resposta aBrenda:
                  Rrenato marcelo @RenatoCelo
                    2023-10-31 14:14:49.510Z

                    Solução Eficiente! Parabéns.

                    1. Em resposta aBrenda:
                      VMatheus Vieira @VieiraTabareu
                        2023-11-02 23:30:38.131Z

                        Não é dev, é santa.

                        Fritei a mente nessa questao. Misericordia.

                      • Em resposta adeniseschirmer:
                        alzira eva cavalcanti alves @eva
                          2023-10-31 13:04:56.821Z

                          Obrigada meninas pela pergunta e resposta, já estava a ponto de abrir uma pergunta quando vi que já tinha uma registrada, ajudou muito.

                          1. T
                            Em resposta adeniseschirmer:
                            Tom Silva @TomSilva
                              2023-10-31 13:09:00.022Z

                              ótima solução, ajudou bastante.