Algorithm simulation of taximeter

2

I am creating a Javascript algorithm to do the calculation similar to a tick meter, where you have the time for the flag 1 and the flag 2 .

function test(hora,bandeira1, bandeira2) {
  if (hora >= bandeira1 && hora < bandeira2) {
    console.log("calculou como bandeira 1");
  } else {
  console.log("calculou como bandeira 2");
  } 
}

// Retorna: "calculou como bandeira 2"
test(23,1,7);

If I perform a test passing test (23,8,1) the algorithm will not work correctly, it should point to flag 1, but it points to flag 2.

Could you help me make an algorithm where any combination I pass prevails in the normal order of a taximeter?

    
asked by anonymous 19.10.2017 / 04:59

2 answers

2

The correct one is

Hora é maior ou igual que bandeira1 ? && Hora é menor que a bandeira2 ?
   console.log("calculou como bandeira 1");
Não
   console.log("calculou como bandeira 2");

See

function test(hora,bandeira1, bandeira2) {
  if (hora >= bandeira1 && hora < bandeira2) {
    console.log("calculou como bandeira 1");
  } else {
    console.log("calculou como bandeira 2");
  } 
}

// Retorna: "calculou como bandeira 2"
test(23,1,7);
// Retorna: "calculou como bandeira 1"
test(1,1,7);
// Retorna: "calculou como bandeira 2"
test(7,1,7);
    
19.10.2017 / 05:14
1

If the night time is between 1am and 7am then you need to isolate this period with && :

hora >= bandeira1 && hora < bandeira2

Suggestion:

const taximetro = function( /* N bandeiras */ ) {
  const bandeiras = arguments;
  return function(hora) {
    var match = -1;
    for (var i = 0; i < bandeiras.length; i++) {
      var bnd = bandeiras[i];
      if (bnd.inicio <= hora) match = i;
    }
    var res = match !== -1 ? bandeiras[match] : bandeiras[bandeiras.length - 1];
    return "calculou como bandeira " + res.tipo;
  }
};

const taximetroA = taximetro({
  inicio: 2,
  tipo: 'Bandeira Madrugada'
}, {
  inicio: 7,
  tipo: 'Bandeira Dia'
}, {
  inicio: 22,
  tipo: 'Bandeira Noite'
});

for (let i = 1; i <= 24; i++) {
  console.log(i, taximetroA(i));
}
    
19.10.2017 / 08:13