Advertisement
Guest User

JS (12 Kugel-Problem)

a guest
Jul 27th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * @param array a
  3.  * @param array b
  4.  * @returns int [0 => (a == b); -1 => (a < b); 1 => (a > b)]
  5.  */
  6. var waage = function(a,b)
  7. {
  8.     var sumA = 0, sumB = 0, i;
  9.  
  10.     for(i in a) sumA += a[i];
  11.     for(i in b) sumB += b[i];
  12.  
  13.     if(sumA === sumB) return 0;
  14.     return (sumA < sumB ? -1 : 1);
  15. },
  16. genKugeln = function()
  17. {
  18.     var defaultValue = 1,
  19.         diffValue = defaultValue + (Math.random() < 0.5 ? Math.random() : -(Math.random())),
  20.         kugeln = {}, i, diffPos = Math.floor(Math.random()*13)-1;
  21.  
  22.     for(i = 0; i < 12; i++)
  23.         kugeln[i] = (i === diffPos ? diffValue : defaultValue);
  24.  
  25.     return kugeln;
  26. };
  27.  
  28. var kugeln = genKugeln(),
  29.     kugelParts = [{},{},{}],
  30.     i, c = 0;
  31.  
  32.  
  33. for(i = 0; i < 12; i++)
  34. {
  35.     kugelParts[c][i] = kugeln[i];
  36.     if(i%4===3) c++;
  37. }
  38.  
  39.  
  40. var ersteMessung = waage(kugelParts[0], kugelParts[1]),
  41.     zweiteMessung = null,
  42.     dritteMessung = null,
  43.     gesuchteKugel = null,
  44.     leichterOderSchwerer = null; // -1 => leichter; 1 => schwerer
  45.  
  46. if(ersteMessung === 0) //gleichgewicht, gesuchte Kugel muss um dritten Block sein
  47. {
  48.     var referenzKugeln3 = {0: kugeln[0], 1: kugeln[1], 2: kugeln[2]},
  49.         uebrigGebliebeneKugeln3 = {8: kugeln[8], 9: kugeln[9], 10: kugeln[10]};
  50.  
  51.     zweiteMessung = waage(uebrigGebliebeneKugeln3, referenzKugeln3);
  52.  
  53.     if(zweiteMessung === 0) //gleichgewicht
  54.     {
  55.         //muss sich also um letzte Kugel 11 handeln
  56.         dritteMessung = waage({11:kugeln[11]},{0:kugeln[0]});
  57.  
  58.         gesuchteKugel = 11;
  59.         leichterOderSchwerer = dritteMessung;
  60.     }
  61.     else //hier wissen wir ob die gesuchte Kugel leichter oder schwerer ist
  62.     {
  63.         leichterOderSchwerer = zweiteMessung;
  64.  
  65.         var referenzKugelnVertauscht = {0: kugeln[0], 9: kugeln[9]},
  66.         uebrigGebliebeneKugelnVertausch = {8: kugeln[8], 1: kugeln[1]};
  67.  
  68.         dritteMessung = waage(uebrigGebliebeneKugelnVertausch, referenzKugelnVertauscht);
  69.  
  70.         if(dritteMessung === 0) //gleichgewicht
  71.             //es handelt sich um die zur seite gelegte Kugel 10
  72.             gesuchteKugel = 10;
  73.         else if(dritteMessung !== zweiteMessung)
  74.             gesuchteKugel = 9;
  75.         else
  76.             gesuchteKugel = 8;
  77.     }
  78. }
  79. else // gesuchte Kugel im 1 oder 2 Block; 3 Block kann als Referenz verwendet werden
  80. {
  81.     //Kugeln 0 - 2 wurden zur Seite gelegt
  82.     var ersterUZweiterBlock = {3:kugeln[3],4:kugeln[4],5:kugeln[5],6:kugeln[6]},
  83.         zweiterUReferenzBlock = {7:kugeln[7],8:kugeln[8],9:kugeln[9],10:kugeln[10]};
  84.  
  85.     zweiteMessung = waage(ersterUZweiterBlock, zweiterUReferenzBlock);
  86.  
  87.     if(zweiteMessung === 0) //gleichgewicht, gesuchte Kugel ist eine von den zur Seite gelegten (0-2)
  88.     {
  89.         leichterOderSchwerer = ersteMessung;
  90.  
  91.         dritteMessung = waage({0:kugeln[0]},{1:kugeln[1]});
  92.  
  93.         if(dritteMessung === 0) //gleichgewicht
  94.             gesuchteKugel = 2;
  95.         else if(ersteMessung !== dritteMessung)
  96.             gesuchteKugel = 1;
  97.         else
  98.             gesuchteKugel = 0;
  99.     }
  100.     else if(ersteMessung === zweiteMessung) // es handelt sich um Kugel 3 oder 7
  101.     {
  102.         dritteMessung = waage({3:kugeln[3]}, {11:kugeln[11]});
  103.  
  104.         if(dritteMessung === 0) //gleichgewicht
  105.         {
  106.             leichterOderSchwerer = (zweiteMessung === 1 ? -1 : 1);
  107.             gesuchteKugel = 7;
  108.         }
  109.         else
  110.         {
  111.             leichterOderSchwerer = dritteMessung;
  112.             gesuchteKugel = 3;
  113.         }
  114.     }
  115.     else // es handelt sich um eine von 4 - 6
  116.     {
  117.         leichterOderSchwerer = zweiteMessung;
  118.  
  119.         dritteMessung = waage({4:kugeln[4]},{5:kugeln[5]});
  120.  
  121.         if(dritteMessung === 0) //gleichgewicht
  122.             gesuchteKugel = 6;
  123.         else if(zweiteMessung !== dritteMessung)
  124.             gesuchteKugel = 5;
  125.         else
  126.             gesuchteKugel = 4;
  127.     }
  128. }
  129.  
  130. console.log('Gesuchte Kugel "'+gesuchteKugel+'" ist '+(leichterOderSchwerer === 1 ? 'schwerer' : 'leichter')+": "+kugeln[gesuchteKugel]);
  131. console.log(kugeln);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement