Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @param array a
- * @param array b
- * @returns int [0 => (a == b); -1 => (a < b); 1 => (a > b)]
- */
- var waage = function(a,b)
- {
- var sumA = 0, sumB = 0, i;
- for(i in a) sumA += a[i];
- for(i in b) sumB += b[i];
- if(sumA === sumB) return 0;
- return (sumA < sumB ? -1 : 1);
- },
- genKugeln = function()
- {
- var defaultValue = 1,
- diffValue = defaultValue + (Math.random() < 0.5 ? Math.random() : -(Math.random())),
- kugeln = {}, i, diffPos = Math.floor(Math.random()*13)-1;
- for(i = 0; i < 12; i++)
- kugeln[i] = (i === diffPos ? diffValue : defaultValue);
- return kugeln;
- };
- var kugeln = genKugeln(),
- kugelParts = [{},{},{}],
- i, c = 0;
- for(i = 0; i < 12; i++)
- {
- kugelParts[c][i] = kugeln[i];
- if(i%4===3) c++;
- }
- var ersteMessung = waage(kugelParts[0], kugelParts[1]),
- zweiteMessung = null,
- dritteMessung = null,
- gesuchteKugel = null,
- leichterOderSchwerer = null; // -1 => leichter; 1 => schwerer
- if(ersteMessung === 0) //gleichgewicht, gesuchte Kugel muss um dritten Block sein
- {
- var referenzKugeln3 = {0: kugeln[0], 1: kugeln[1], 2: kugeln[2]},
- uebrigGebliebeneKugeln3 = {8: kugeln[8], 9: kugeln[9], 10: kugeln[10]};
- zweiteMessung = waage(uebrigGebliebeneKugeln3, referenzKugeln3);
- if(zweiteMessung === 0) //gleichgewicht
- {
- //muss sich also um letzte Kugel 11 handeln
- dritteMessung = waage({11:kugeln[11]},{0:kugeln[0]});
- gesuchteKugel = 11;
- leichterOderSchwerer = dritteMessung;
- }
- else //hier wissen wir ob die gesuchte Kugel leichter oder schwerer ist
- {
- leichterOderSchwerer = zweiteMessung;
- var referenzKugelnVertauscht = {0: kugeln[0], 9: kugeln[9]},
- uebrigGebliebeneKugelnVertausch = {8: kugeln[8], 1: kugeln[1]};
- dritteMessung = waage(uebrigGebliebeneKugelnVertausch, referenzKugelnVertauscht);
- if(dritteMessung === 0) //gleichgewicht
- //es handelt sich um die zur seite gelegte Kugel 10
- gesuchteKugel = 10;
- else if(dritteMessung !== zweiteMessung)
- gesuchteKugel = 9;
- else
- gesuchteKugel = 8;
- }
- }
- else // gesuchte Kugel im 1 oder 2 Block; 3 Block kann als Referenz verwendet werden
- {
- //Kugeln 0 - 2 wurden zur Seite gelegt
- var ersterUZweiterBlock = {3:kugeln[3],4:kugeln[4],5:kugeln[5],6:kugeln[6]},
- zweiterUReferenzBlock = {7:kugeln[7],8:kugeln[8],9:kugeln[9],10:kugeln[10]};
- zweiteMessung = waage(ersterUZweiterBlock, zweiterUReferenzBlock);
- if(zweiteMessung === 0) //gleichgewicht, gesuchte Kugel ist eine von den zur Seite gelegten (0-2)
- {
- leichterOderSchwerer = ersteMessung;
- dritteMessung = waage({0:kugeln[0]},{1:kugeln[1]});
- if(dritteMessung === 0) //gleichgewicht
- gesuchteKugel = 2;
- else if(ersteMessung !== dritteMessung)
- gesuchteKugel = 1;
- else
- gesuchteKugel = 0;
- }
- else if(ersteMessung === zweiteMessung) // es handelt sich um Kugel 3 oder 7
- {
- dritteMessung = waage({3:kugeln[3]}, {11:kugeln[11]});
- if(dritteMessung === 0) //gleichgewicht
- {
- leichterOderSchwerer = (zweiteMessung === 1 ? -1 : 1);
- gesuchteKugel = 7;
- }
- else
- {
- leichterOderSchwerer = dritteMessung;
- gesuchteKugel = 3;
- }
- }
- else // es handelt sich um eine von 4 - 6
- {
- leichterOderSchwerer = zweiteMessung;
- dritteMessung = waage({4:kugeln[4]},{5:kugeln[5]});
- if(dritteMessung === 0) //gleichgewicht
- gesuchteKugel = 6;
- else if(zweiteMessung !== dritteMessung)
- gesuchteKugel = 5;
- else
- gesuchteKugel = 4;
- }
- }
- console.log('Gesuchte Kugel "'+gesuchteKugel+'" ist '+(leichterOderSchwerer === 1 ? 'schwerer' : 'leichter')+": "+kugeln[gesuchteKugel]);
- console.log(kugeln);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement