1042 - Sort Simples
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.
Professor Hugo Rafael @profhugoPra 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 1você 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
Em resposta athiagonebuloni⬆:Jackson @Jacksonbom 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 1if (a < b) return -1fiz addim e funcionou
- TEm resposta athiagonebuloni⬆:Thiago Nebuloni @thiagonebuloni
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]);