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

1042 - Sort Simples

Por Thiago Nebuloni @thiagonebuloni
    2023-03-07 09:56:38.362Z

    Olá!

    Estou tendo dificuldade nesse exercício do Beecrowd.

    Tentei de várias formas, fazer a ordenação manualmente usando uma variável temporária, tentei usar o método sort e também algumas formas que encontrei pesquisando.

    No vs code sempre funciona, mas quando vou para o Beecrowd ele retorna alguns números como NaN.

    Algumas formas que tentei fazer:

    let input = require('fs').readFileSync('stdin', 'utf8');
    let lines = input.split(' ');
    
    let arr = lines.map((x) => parseInt(x));
    let a = parseInt(lines.shift());
    let b = parseInt(lines.shift());
    let c = parseInt(lines.shift());
    
    if (a > b) {
        let temp = a;
        a = b;
        b = temp;
    }
    
    if (b > c) {
        let temp = b;
        b = c;
        c = temp;
    }
    
    console.log(a);
    console.log(b);
    console.log(c);
    
    console.log();
    
    console.log(arr[0]);
    console.log(arr[1]);
    console.log(arr[2]);
    

    retorno do Beecrowd:

    No vs code

    _

    Segunda tentativa
    as duas primeiras linhas de input não foram alteradas

    let arr = lines.map((x) => parseInt(x));
    let original = [...arr];
    
    arr.sort(function (a, b) {
        return a - b;
    });
    
    for (let num = 0; num < arr.length; num++) console.log(arr[num]);
    
    console.log();
    
    for (let num = 0; num < lines.length; num++) console.log(lines[num]);
    
    

    Beecrowd

    No vs code, claro, o resultado foi igual ao anterior, correto.

    Tentei imprimir só os tipos das variáveis e saíram todos como number

    Alguém sabe qual é o problema que o Beecrowd está encontrando? Ele encrenca só com valores negativos, mas não todos.

    Outra coisa é o uso da função lambda com o a - b. Vi alguém usando e deu certo, mas no enunciado do exercício só fala para ordenar os valores, não fala nada sobre essa relação entre eles.

    • 3 respostas
    1. Professor Hugo Rafael @profhugo
        2023-03-07 11:15:05.560Z

        Pra ordernar com sorting manual trocando variáveis você precisa identificar alguns casos a mais. Tenta testar tudo isso aqui e vc vai encontrar:

        1 2 3
        1 3 2
        2 3 1
        2 1 3
        3 1 2
        3 2 1

        você vai encontrar erro em algum deles, pois você ta simulando uma bubble sort (ler mais depois) na sua troca continuada

        utilizando o método sorting normalmente também retornamos uma expressão de true ou false para validar uma ordem, ao invés da diferença

        1. Em resposta athiagonebuloni:
          Jackson @Jackson
            2023-03-07 14:00:45.263Z

            bom dia
            Na minha opinião um dos detalhes é que vc esta tratando o array com 3 posicoes e no teste do beecrowd ele testa com varias possibilidades.
            E a condicao dentro do for a < b e a>b ai o sort vai funcionar normal.Experimenta por um numero a mais no arquivo de entrada que vc vai ver que no vscode tb vai dar nan ou underfined
            for (let i =0; i < numeros.length; i++){
            numeros.sort((a,b)=>{
            if (a > b) return 1

                if (a < b) return -1
            

            fiz addim e funcionou

            1. T
              Em resposta athiagonebuloni:
              Thiago Nebuloni @thiagonebuloni
                2023-03-07 21:22:43.935Z

                Agradeço às respostas de todos!

                No final consegui resolver com uma dica do Alexandre. Não sei exatamente qual era o problema, se foi declarar o array com const ou invés de let, se os números estavam vindo com o /r como na aula, enfim.

                Vou deixar o código que foi aceito pelo Beecrowd, caso alguém tenha o mesmo problema:

                var input = require('fs').readFileSync('/dev/stdin', 'utf8');
                var lines = input.split(' ');
                
                const original = lines.map((x) => parseInt(x));
                const sortAscending = [...original];
                
                sortAscending.sort(function (a, b) {
                    return a - b;
                });
                
                for (let num = 0; num < sortAscending.length; num++)
                    console.log(sortAscending[num]);
                
                console.log();
                
                for (let num = 0; num < original.length; num++) console.log(original[num]);