Vesrand

Skating

Jul 9th, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var Skating=
  2.     {
  3.     validate:function(r){return!0},
  4.     fillArrayWithValue:function(r,t)
  5.     {
  6.         var n=Array.apply(null,new Array(r));
  7.         return n.map(function(r,n)
  8.             {return{index:n,value:t}}
  9.         )
  10.     },
  11.     judges:3,
  12.     calc:function(r)
  13.         {
  14.         var t=[];
  15.         if(Skating.validate(r))
  16.             {
  17.             var n=[],e={},a=0;
  18.             for(var u in r)
  19.                 if(r.hasOwnProperty(u))
  20.                     {var i=new Dancer(u);
  21.                     i.index=a,i.points=r[u],i.updateSum(),t.push(i),a++
  22.                     }
  23.                 for(var u=0;u<t.length+1;u++)
  24.                     {for(var o=[],l=0;l<t.length;l++)
  25.                         o.push([]);
  26.                     n.push(o)
  27.                     }
  28.                 for(var u=1;u<=t.length;u++)
  29.                     e[u]=[];
  30.                 for(var s=1,h=Math.floor(Skating.judges/2)+1,v=t.length,u=0;v>u;u++)
  31.                     n[0][u]="1"+(0==u?"":"-"+(u+1));
  32.                 for(var f=1;v>=f;f++)
  33.                     {
  34.                     for(var c=Skating.fillArrayWithValue(t.length,0),u=0;u<t.length;u++)
  35.                         for(var d=t[u].points,l=0;l<d.length;l++)
  36.                             d[l]<=f&&c[u].value++;
  37.                     for(var g=[],u=0;u<c.length;u++)
  38.                         c[u].value>=h&&!t[u].excluded&&(t[u].majority=c[u].value,g.push(t[u]));
  39.                     for(var p=0;p<c.length;p++)                            
  40.                         n[p+1][f-1]=t[p].excluded?"-":c[p].value;                          
  41.                     if(1==g.length)
  42.                         console.log(g[0].num+" -- "+s+" place"),
  43.                         e[s].push(g[0].num),
  44.                         s++,t[g[0].index].excluded=!0;
  45.                     else
  46.                         {
  47.                         g.sort(function(r,t){return t.value-r.value});
  48.                         for(var m={},u=0;u<g.length;u++)
  49.                             void 0===m[g[u].majority]?m[g[u].majority]=[g[u]]:m[g[u].majority].push(g[u]);
  50.                         var y=Object.keys(m);
  51.                         for(y.sort(function(r,t){return t-r});y.length>0;)
  52.                             {
  53.                             var x=m[y.shift()];
  54.                             x.sort(function(r,t){return t.sum-r.sum});
  55.                             for(var j={},u=0;u<x.length;u++)
  56.                                 void 0===j[x[u].sum]?j[x[u].sum]=[x[u]]:j[x[u].sum].push(x[u]);
  57.                             var k=Object.keys(j);
  58.                             k.sort(function(r,t){return+t-+r});
  59.                             for(var u=0;u<k.length;u++)
  60.                                 {
  61.                                 for(var S=j[k[u]],l=0;l<S.length;l++)
  62.                                     e[s].push(S[l].num),
  63.                                     t[S[l].index].excluded=!0;
  64.                                 s++
  65.                                 }
  66.                             }
  67.                         }
  68.                     }
  69.                 return{places:e,table:n}
  70.             }
  71.         }
  72.     },
  73. Dancer=function(r)
  74. {
  75.     var t=this;
  76.     this.index=0,
  77.     this.num=r,
  78.     this.points=[],
  79.     this.sum=0,
  80.     this.updateSum=function()
  81.         {
  82.         for(var r=0,n=0;n<t.points.length;n++)
  83.             r+=t.points[n];
  84.         t.sum=r
  85.         },
  86.     this.majority=0,
  87.     this.excluded=!1
  88. };
Advertisement
Add Comment
Please, Sign In to add comment