Advertisement
Guest User

specificsolver.html

a guest
Mar 20th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 3.00 KB | None | 0 0
  1. <html>
  2. <head></head>
  3. <body>
  4. <p id="out" />
  5. <script>
  6. arr=new Array();
  7. arr[0]=8;
  8. arr[1]=5;
  9. arr[2]=2;
  10. arr[3]=1;
  11. arr[4]=-1;
  12. function laskeYks()
  13. {
  14.     var tmp=0;
  15.     if (arr[4] < 0)
  16.     {
  17.         for (var i=0;i<4;i++)
  18.         {
  19.             tmp+=arr[i] > 0 ? 1 : 0;
  20.         }
  21.     }
  22.     else
  23.     {
  24.         for (var i=0;i<4;i++)
  25.         {
  26.             tmp+=arr[i] < 0 ? 1 : 0;
  27.         }
  28.     }
  29.     return tmp;
  30. }
  31. function laskePar()
  32. {
  33.     var tmp=laskeYks();
  34.     if (tmp > 1)
  35.     {
  36.         return dep(tmp);
  37.     }else
  38.     {
  39.         return 0;
  40.     }
  41.     return tmp;
  42. }
  43. function dep(luku)
  44. {
  45.     return luku>2?luku-1+dep(luku-1):1;
  46. }
  47. function getIndex(luku)
  48. {
  49.     var tmp=0;
  50.     if (arr[4] < 0)
  51.     {
  52.         for (var i=0;i<4;i++)
  53.         {
  54.             tmp+=arr[i] > 0 ? 1 : 0;
  55.             if (tmp > luku)
  56.             {
  57.                 return i;
  58.             }
  59.         }
  60.     }
  61.     else
  62.     {
  63.         for (var i=0;i<4;i++)
  64.         {
  65.             tmp+=arr[i] < 0 ? 1 : 0;
  66.             if (tmp > luku)
  67.             {
  68.                 return i;
  69.             }
  70.         }
  71.     }
  72.     return -1;
  73. }
  74. function getIndexPar(luku)
  75. {
  76.     var reAr=new Array();
  77.     a=0;
  78.     b=1;
  79.     reAr[0]=getIndex(0);
  80.     reAr[1]=getIndex(1);
  81.     for (;luku > 0;luku--)
  82.     {
  83.         if (a+1 == b)
  84.         {
  85.             b++;
  86.             reAr[1]=getIndex(b);
  87.             a=0;
  88.             reAr[0]=getIndex(a);
  89.         }else{
  90.             a++;
  91.             reAr[0]=getIndex(a);
  92.         }
  93.     }
  94.     return reAr;
  95. }
  96. function checkComplete()
  97. {
  98.     var test=true;
  99.     for (var i=0;i<4;i++)
  100.     {
  101.         test=test && (arr[i] < 0);
  102.     }
  103.     return test;
  104. }
  105. comp=0;
  106. comnum=1;
  107. function heko(count)
  108. {
  109.     var loCount=count;
  110.     var iY=laskeYks();
  111.     var iP=laskePar();
  112.     for (var i=0;i<iY+iP;i++)
  113.     {
  114.         var iC=i;
  115.         if (!(iC<iP))
  116.         {
  117.             iC-=iY;
  118.             var cIdx=getIndex(iC);
  119.             if (cIdx >= 0 && cIdx <= 3)
  120.             {
  121.                 count+=Math.abs(arr[cIdx]);
  122.                 arr[cIdx]=-arr[cIdx];
  123.                 arr[4]=-arr[4];
  124.                 if (checkComplete())
  125.                 {
  126.                     if (count <= 15)
  127.                     {
  128.                         comp++;
  129.                         if (!(comp<comnum))
  130.                         {
  131.                             document.getElementById("out").innerHTML+="complete...in:"+count+" move:"+cIdx;
  132.                             return count;
  133.                         }
  134.                     }else{
  135.                     }
  136.                 }
  137.                 if (count < 15)
  138.                     heko(count);
  139.                 if (comp==comnum)
  140.                 {
  141.                     document.getElementById("out").innerHTML+=" | move:"+cIdx;
  142.                     return count;
  143.                 }
  144.                 count=loCount;
  145.                 arr[cIdx]=-arr[cIdx];
  146.                 arr[4]=-arr[4];
  147.                 continue;
  148.             }
  149.         }else{
  150.             var cIdx=getIndexPar(iC);
  151.             if (cIdx[0] >= 0 && cIdx[0] <= 3 && cIdx[1] >= 0 && cIdx[1] <= 3 && cIdx[0] != cIdx[1])
  152.             {
  153.                 count+=Math.max(Math.abs(arr[cIdx[0]]),Math.abs(arr[cIdx[1]]));
  154.                 arr[cIdx[0]]=-arr[cIdx[0]];
  155.                 arr[cIdx[1]]=-arr[cIdx[1]];
  156.                 arr[4]=-arr[4];
  157.                 if (checkComplete())
  158.                 {
  159.                     if (count <= 15)
  160.                     {
  161.                         comp++;
  162.                         if (!(comp<comnum))
  163.                         {
  164.                             document.getElementById("out").innerHTML+="complete...in:"+count+" move:"+cIdx[0]+"/"+cIdx[1];
  165.                             return count;
  166.                         }
  167.                     }else{
  168.                     }
  169.                 }
  170.                 if (count < 15)
  171.                     heko(count);
  172.                 if (comp==comnum)
  173.                 {
  174.                     document.getElementById("out").innerHTML+=" | move:"+cIdx[0]+"/"+cIdx[1];
  175.                     return count;
  176.                 }
  177.                 count=loCount;
  178.                 arr[cIdx[0]]=-arr[cIdx[0]];
  179.                 arr[cIdx[1]]=-arr[cIdx[1]];
  180.                 arr[4]=-arr[4];
  181.                 continue;
  182.             }
  183.         }
  184.     }
  185. }
  186. heko(0);
  187. </script>
  188. </body>
  189. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement