test123

Benchmark created by BTM on


Preparation HTML

<div id="log">?</div>

Test runner

Ready to run.

Testing in
TestOps/sec
test1
function solve(input) {
var output = [];
var length = input.length;
var a, b; // "cache"
// iteruje tablicę input od początku i od końca, porównując kolejno
// wartość bezwzględną elementów
for (
var i = 0, j = ~- length, a = - input[0];
(a = - input[i]) > 0;
++ i
) {
// mały boost - po pierwsze zatrzymaj się tu, bo i tak nie spotkasz
// wartości równych, po drugie - j przy następnym przebiegu pętli for
// będzie startowało od ostatniej wartości, a nie od początku
while (a < (b = input[j])) {
-- j;
}
// wartość bezwględna taka sama
if (a == b) {
output[output.length] = b;
// output[output.length] szybsze od output.push()...
-- j;
}
}
return output;
}
a = [-4, -3, -1, 1, 2, 4, 67];
solve(a);
ready
test2
function solve(a) {
  var r = [];
 var c;
  for(var i = 0, e = a.length ; i < e; i++) {
    c = a[i]; 
    if(c >= 0) break;
    if(a.indexOf(-1*c) > -1) r[r.length] = -1*c;
  }
  return r;
}
a = [-4, -3, -1, 1, 2, 4, 67];
solve(a);
ready
var solve = function(input) {
var a = 0,
b = input.length - 1,
av, bv, output = [];
if (b < 1) return [];
av = Math.abs(input[0]);
bv = Math.abs(input[b]);
while (a < b) {
if (av > bv) {
av = Math.abs(input[++a]);
}
else if (av < bv) {
bv = Math.abs(input[--b]);
}
else {
output[output.length] = av;
av = Math.abs(input[++a]);
bv = Math.abs(input[--b]);
}
}
return output;
};
a = [-4, -3, -1, 1, 2, 4, 67];
solve(a);
ready
/**
* funkcja realizujaca zadanie konkursowe z http://ferrante.pl/2011/03/02/wygraj-ksiazki-o-javascript-i-html5/
*
* Algorytm opiera sie na iteracji tablicy z obu koncow. Pozycja w tablicy przesuwana jest na kolejna (ku liczbom o
* mniejszych wartosciach bezwzglednych) z tej strony, z ktorej wartosc bezwzgledna liczby pod dana pozycja jest
* wieksza. Dojscie do zera, z ktorejkolwiek strony, konczy dzialanie.
*
* @author Maciej "HryneK" Hryniewicz
* @param array data posortowane rosnaco unikalne liczby calkowite
* @return array liczby dodatnie, ktorych wartosc absolutna pojawila sie dwukrotnie w tablicy wejsciowej
*/
window.solve = function (data) {
var ans = [], // dane wyjsciowe
ans_len = 0, // ilosc elementow w tablicy wyjsciowej - dla recznej realizacji .push()
idx_a = 0, // "lewa" pozycja w tablicy
idx_b = data.length - 1, // "prawa" pozycja w tablicy
a, // wartosc bezwzgledna "lewej" liczby
b; // wartosc bezwzgledna "prawej" liczby
if (idx_b < 1) {
// w tablicy wejsciowej sa mniej niz dwa elementy
return [];
}
a = -data[idx_a], // na razie zakladamy, ze liczba jest ujemna
b = data[idx_b]; // na razie zakladamy, ze liczba jest dodatnia
if (a <= 0 || b <= 0) {
// w danych wejsciowych nie ma dodatnich i ujemnych wartosci - wynik jest pusty
return [];
}
while (true) {
while (a > b) {
if ((a = -data[++idx_a]) <= 0) {
return ans;
}
}
while (a < b) {
if ((b = data[--idx_b]) <= 0) {
return ans;
}
}
if (a == b) {
// @todo jak .push() przyspieszy, to podmienic i usunac komentarze
ans[ans_len++] = b; // szybsze niz .push()
// bierzemy kolejna "prawa" liczbe (mozna byloby brac nastepna lewa - w zaleznosci, czy
// spodziewamy sie miec wiecej ujemnych czy dodatnich liczb w danych wejsciowych)
if ((b = data[--idx_b]) <= 0) {
return ans;
}
}
// wartosci bezwzgledne nie sa rowne, wiec znowu "lewa" jest wieksza - zaczynamy kolejny obieg
}
}
a = [-4, -3, -1, 1, 2, 4, 67];
solve(a);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.