{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-06T14:01:22.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-06T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":58773,"title":"ICFP 2023 Orchestra:  Score Optimization of 2-Musicians and 1-Attendee","description":"The Template solves all cases.   Please submit the template and view the graphs.\r\nThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The ICFP 2023 Orchestra Spec shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \r\nThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\r\nThe Joy here is to see the figures of optimal placement and the data per case.\r\n\r\nThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\r\nThe scoring and blocking functions are provided in the template.\r\n\r\nThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 830.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 415.25px; transform-origin: 407px 415.25px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 255px 8px; transform-origin: 255px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 346.5px 8px; transform-origin: 346.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334px 8px; transform-origin: 334px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 374px 8px; transform-origin: 374px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 246px 8px; transform-origin: 246px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 306.5px 8px; transform-origin: 306.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 202.5px 8px; transform-origin: 202.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring and blocking functions are provided in the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 425.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 212.75px; text-align: left; transform-origin: 384px 212.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 560px;height: 420px\" src=\"data:image/png;base64,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LhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 316px 8px; transform-origin: 316px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy)\r\n %Given 1 Attendee and 2 Musicians Optimize Score\r\n %Place Musicicans,mxy, within the bounds of the stage [xmin xmax ymin ymax] to\r\n % achieve maximum score sum for i=1:2 1000000*am(1,mu(i))/dist_squared(axy,mxy(i,:)\r\n % where mu(i) is musician type 1 or 2 and am is an Affinity matrix [1,2]\r\n %sxy(600,2) contains all the integer stage points; note:mxy is not limited to integers\r\n % Musicians must be spaced by 10 or more\r\n % A musician gets no score if the other musician is 5 or less from the musician's \r\n % line-of-sight to the attendee (a function distP2Seg is provided)\r\n \r\n %Performance approx 0.62s  Best known Time:0.28s\r\n for x1=xmin:xmax\r\n  for y1=ymin:ymax\r\n   for x2=xmin:xmax\r\n    for y2=ymin:ymax\r\n      if (y2-y1)^2+(x2-x1)^2\u003c100,continue;end\r\n      mxy=[x1 y1;x2 y2];\r\n      [Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n      if Totscr\u003e=score\r\n       return;\r\n      end\r\n    end %y2\r\n   end %x2\r\n  end %y1\r\n end %x1\r\n \r\nend %Orc_2M1A\r\n\r\nfunction [Totscr,muscr]=Calc_score(mxy,mu,am,axy)\r\n%No error checking,volume,pillars\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_score\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n %if sL2==0 % Segment is a point  %Error check removed\r\n % d2=(px-vx)^2+(py-vy)^2;\r\n %else % non-point segment\r\n  t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n  if t\u003c0 % Pt beyond normal of segment\r\n   return\r\n   %d2=(px-vx)^2+(py-vy)^2;\r\n  elseif t\u003e1 % Pt beyond normal of segment\r\n    return\r\n   %d2=(px-wx)^2+(py-wy)^2;\r\n  else\r\n   sx=vx+t*(wx-vx);\r\n   sy=vy+t*(wy-vy);\r\n   d2=(px-sx)^2+(py-sy)^2;\r\n  end\r\n %end\r\n %d=sqrt(d2);\r\nend %distP2S2Z\r\n","test_suite":"%%\r\nvalid=1;\r\n\r\norcm=[40 60 5 24 10 39 35 16 1 2 10 20 214053; % mid right 214054\r\n      40 60 5 24 10 39 12 1 1 2 10 20 305630;  %Bot mid 305631\r\n      50 80 25 40 10 60 5 35 1 1 20 20 93947;  %Left Mid 93948\r\n      50 80 25 40 10 60 5 35 1 2 10 -20 24999; %Left with Neg Affinity 25000\r\n      50 80 25 40 10 60 15 70 1 1 10 10 65897; %TL Diag 15 65898\r\n      500 500 1 30 1 30 450 450 1 1 10 10 55;  %56\r\n      30 40 10 18 5 25 15 35 1 2 10 10  127329; %Top Mid; narrow stage\r\n      60 40 10 50 10 30 35 35 1 2 -10 -20 -14105];  %pair Negatve -14104\r\n\r\nOrctime=0;\r\nfigptr=0;\r\n\r\nfor i=1:size(orcm,1)\r\npxyr=[];\r\n[rwx, rhy, xmin, xmax, ymin, ymax, axy, mu, am, score]= ...\r\n  deal(orcm(i,1),orcm(i,2),orcm(i,3),orcm(i,4),orcm(i,5),orcm(i,6),orcm(i,7:8),orcm(i,9:10),orcm(i,11:12),orcm(i,13));\r\n\r\n%stage=ones(xmax-xmin+1,ymax-ymin+1);\r\nstage=ones(ymax-ymin+1,xmax-xmin+1);\r\n[sy,sx]=find(stage);\r\nsxy_base=[sx sy]-1; % Make LL [0,0] Stage(x,y) points\r\n\r\nsxy=sxy_base+[xmin ymin]; % 5 10;5 11  \r\nsxy=sortrows(sxy,[1 2],{'ascend' 'descend'}); %Matlab Find TL by col to BR\r\n\r\nsxy=flipud(sortrows(sxy,1,'ascend')); %Matlab find sequence TL by col to BR\r\n\r\nif mu(1)==mu(2)\r\n am(2)=[]; %if Only one musician type then am reduced\r\nend\r\n\r\n  ztic=tic;\r\n  mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy);\r\n  Orctime=Orctime+toc(ztic);\r\n  dt=toc(ztic);\r\n  \r\n%Validity Checks\r\n if sum((mxy(1,:)-mxy(2,:)).^2)\u003c100\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Spacing of Musicians\\n\\n',i);\r\n end\r\n \r\n if min(mxy(:,1))\u003cxmin || max(mxy(:,1))\u003exmax || min(mxy(:,2))\u003cymin || max(mxy(:,2))\u003eymax\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Positioning of Musicians off Stage\\n\\n',i);\r\n end\r\n \r\n%[Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n %Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for ii=1:na\r\n   bflag=0;\r\n   \r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n%    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(ii,1),axy(ii,2)); %Intra Seg dist\r\n%    d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n     px=mxy(k,1); py=mxy(k,2);\r\n     vx=mxy(j,1); vy=mxy(j,2);\r\n     wx=axy(ii,1); wy=axy(ii,2);\r\n     \r\n     dv2=Inf;\r\n     sL2=(vx-wx)^2+(vy-wy)^2;\r\n     t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n     if t\u003e=0 \u0026\u0026 t\u003c=1\r\n      sx=vx+t*(wx-vx);\r\n      sy=vy+t*(wy-vy);\r\n      dv2=(px-sx)^2+(py-sy)^2;\r\n     end\r\n     \r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end %k\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(ii,mu(j))/d2am(ii,j);\r\n  end %ii\r\n end % j  mxy(j,:)\r\n Totscr=sum(muscr);\r\n\r\n\r\n if Totscr\u003cscore\r\n  valid=0;\r\n  fprintf('Pid:%i  Score:%.0f less than required %.0f\\n\\n',i,Totscr,score);\r\n end\r\n\r\n\r\nfprintf('\\nPid:%i  Score: %.0f   Time:%0.3f\\n',i,Totscr,dt);\r\nfprintf('axy x:%3i  y:%3i\\n',axy);\r\nfprintf('mxy(1,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(1,:),muscr(1),mu(1),am(1,1));\r\nfprintf('mxy(2,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(2,:),muscr(2),mu(2),am(1,mu(2)));\r\n\r\n\r\n%draw_orcs(axy,mxy,swx,shy,xmin,xmax,ymin,ymax,pxyr);\r\n figptr=figptr+1;\r\n figure(figptr);\r\n plot(axy(:,1),axy(:,2),'or');hold on  % Attendees\r\n axis tight; axis equal\r\n \r\n room= [0 0;rwx 0;rwx rhy;0 rhy;0 0]; %rwx, rhy\r\n plot(room(:,1),room(:,2),'k');\r\n stage=[xmin ymin;xmax ymin;xmax ymax;xmin ymax;xmin ymin];\r\n plot(stage(:,1),stage(:,2),'color',[.8 0 .8]);\r\n %plot(mxy(:,1),mxy(:,2),'.r'); % Musicians\r\n plot(mxy(1,1),mxy(1,2),'*b');\r\n plot(mxy(2,1),mxy(2,2),'xk');\r\n hold off\r\n \r\nend % orcm\r\n\r\nfprintf('Total Time: %.3f\\n',Orctime);\r\n\r\n\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-20T18:08:52.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-20T16:09:25.000Z","updated_at":"2023-07-20T18:08:54.000Z","published_at":"2023-07-20T18:08:54.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring and blocking functions are provided in the template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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LhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":58533,"title":"ICFP 2023:Orchestra Solve all X Linear Stage Problems (23:27)","description":"The ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net happiness. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. Vector check is being done with a prior Cody 1446 solution variant.  Volume per musician was allowed but not in this Challenge. Happiness drops off as the square of distance between musician and attendee.\r\nThe ICFP 2023 site will hopefully have contestant writeups. The ICFP 2023 Orchestra Spec shows details of the contest. I modified the problem contents to the sufficient elements regarding the stage. The joys of JSON can be viewed. The musician types were upgraded by 1 to be non-zero based.\r\n\r\nThis Challenge is to place the musicians onto the stage,mxy, of Problems 23 thru 27 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than a min_score; The min_scores were selected as the minimums of using either provided Happiness table. The standard inputs are detailed in the function template and include axy-attendee positions, am-attendee happiness factors to each instrument, mu-instruments of each musician, stage limits-[xmin xmax ymin ymax]. This stage is a line of ymin=ymax=10, xmin=10, and xmax=990, seen in the image below. The special performance tables provide Joy values for Musician types vs X. Table mscrit, matrix_score_XvsType, assumes no neighbors and mscrit10 assumes neighbors at +/-10 blocking thus gives less Joy.\r\nIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared. \r\nPlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information. Trying both tables will show neither Happiness table is optimal for all cases. Six problems can be handled well in under 5 seconds using Matlab.\r\n \r\nThis is the Orchestra room problem 22 showing the attendees and the stage.  The Greedy solutions show that 1/d^2 is a main driver with musicians clustered around the handful of attendees closest to the stage. A d=1000 really reduces Joy. \r\nThe stage is the line on the bottom at Y=10 extending in X 10:990 .","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 895.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 447.75px; transform-origin: 407px 447.75px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 126px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 63px; text-align: left; transform-origin: 384px 63px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 367px 8px; transform-origin: 367px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net happiness. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. Vector check is being done with a prior Cody 1446 solution variant.  Volume per musician was allowed but not in this Challenge. Happiness drops off as the square of distance between musician and attendee.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 201.5px 8px; transform-origin: 201.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 site will hopefully have contestant writeups. The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 96.5px 8px; transform-origin: 96.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. I modified the problem contents to the sufficient elements regarding the stage. The joys of JSON can be viewed. The musician types were upgraded by 1 to be non-zero based.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 366px 8px; transform-origin: 366px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place the musicians onto the stage,mxy, of Problems 23 thru 27 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than a min_score; The min_scores were selected as the minimums of using either provided Happiness table. The standard inputs are detailed in the function template and include axy-attendee positions, am-attendee happiness factors to each instrument, mu-instruments of each musician, stage limits-[xmin xmax ymin ymax]. This stage is a line of ymin=ymax=10, xmin=10, and xmax=990, seen in the image below. The special performance tables provide Joy values for Musician types vs X. Table mscrit, matrix_score_XvsType, assumes no neighbors and mscrit10 assumes neighbors at +/-10 blocking thus gives less Joy.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375px 8px; transform-origin: 375px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.5px 8px; transform-origin: 375.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information. Trying both tables will show neither Happiness table is optimal for all cases. Six problems can be handled well in under 5 seconds using Matlab.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 319.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 159.75px; text-align: left; transform-origin: 384px 159.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 860px;height: 314px\" src=\"data:image/png;base64,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58+vNma2GiGE++67L5fLtbe3VxazWYqJiYkHH3zwV4e86EUvmjdvXshwNe688859+/b98R//cbUxg6U4rFf86le/OnDgQGXcyGA1QggPP/zw3XfffeDAga6urmpjNksRDh1Yc7lcR0dHtTGz1aBexK1E2rlz51/+5V8ePHjw2muvLRaL55xzTrPXKFJf+tKXtm3b9s53vrOyOG01Ul+iK6+88gtf+MLvf//7f/u3f7vpppvOP//8E044IZulCCF87nOfu/rqq5999tkvf/nLzz777Ctf+cqQ1Y5RMTY2tmHDhle84hWnnnpqyHApvv3tb3/4wx++5ZZbbrrppptuumnFihWnnHJKNqsxODj4zne+88CBAzfffPN3v/vdN77xjS0tLdksxa5duz74wQ/edMi//uu/Pvfcc6997WuzWY2vfe1rH/vYxw4ePPitb31r9+7dr3vd60KGR4z+/v5PfepTzz333Ne+9rUnnnji7LPPDhmuBvVUJmmef/75FStWPPTQQ+Vy+be//e0ZZ5zxP//zP81eqYjs37//wx/+8IoVK171qldVWqatRupL9MADD7zsZS/bv39/ZfH888//zne+k81SlMvlhx56qFqNffv29fT0/Pa3v81sNcrl8sGDBy+44ILXvOY1AwMD5azuIxUf/OAHr7vuuqkt2azG888/f8455/zoRz+qLL7+9a+/+eabs1mKwwwNDZ177rn79+/PZjVKpdLy5csrG/jkk08uX778gQceyGYpyuXyT3/605e97GWPPvpouVx+9tlnX/va1/70pz/NbDWoL89uJc/Q0FBHR0c+nw8hdHZ29vb2Dg8PN3ulIvL5z3++s7PzqquuqrZMW43Ul6ijo+Oaa66p3jXX3d39q1/9KpulCCGceuqpO3bsqFTjhBNOmJycfP755zNbjRDCZz/72XXr1lU2M2R1H6n42c9+duqpp05MTDz33HOVlmxW4/bbb1+8eHHlVH0I4Xvf+955552XzVJM9cwzz1x++eVXXXXV/PnzM1uNycnJF77whSGEE088saWl5eDBg5ktxZ49e3p7exctWhRCmDdv3sqVKwcGBjJbDepL3EqeYrHY09NTXWxvbx8dHW3i+kTpiiuu+NCHPvQHf/AH1ZZpq5H6Ei1atGjNmjWVf967d++tt966bt26bJYihNDa2prP50ul0vbt29/+9re/733vW7hwYWarcdddd/34xz/+wAc+UG3JbClKpdIvfvGLK6+88vzzzz/99NM/+tGPhqxWo1gsnnzyyR/72MdOP/30M88885/+6Z9CVksx1bXXXtvT03PuueeGrFajtbV169atmzdv3rZt28aNGyt3IGezFCGEtra2X/7yl9XFJ598ct++fZmtBvUlbiVPqVRqaWmpLuZyuXJmfjyttfXwHjttNbJToscff/wd73jH5s2bly9fnvFS7N+//9lnn124cOEdd9zxxBNPZLMaTz311BVXXPHZz352amM2SxFCeOyxx9avX3/NNdfceeedt99++9DQ0A033JDNaoyNjQ0MDLz85S+///77b7jhhq985Su7du3KZimqDhw48PWvf/39739/ZTGz1bj77rtPPPHEl7zkJR0dHXv27HnmmWcyW4o1a9bs27evv7//rrvu+sY3vvHAAw/U2vAsVIP6EreSp62tbXJysrpYKpVyuVwT16e5pq1GRkp0//33v+ENb3jrW9+6efPmkO1ShBC6urre/va3X3vttSeeeOI3v/nNbFbjM5/5zEtf+tJHHnlkcHBw//79Dz744OjoaDZLEUJYvHjx1VdfvXjx4hDCwoUL169ff88992SzGqeccsqSJUs2bNgQQigUCuvWrbv55puzWYqqW2655eSTTz799NMri9msxg9+8IN77733hhtu2Lhx4zXXXBNC+OpXv5rNUoQQ5s+f/61vfWvv3r1XX331U089dcEFF8ybNy+z1aC+xK3kWbBgwcjISHWxWCyuXLmyievTXNNWIwsl+uEPf/iud71r69at1Tc0ZrYUe/bsue6666qLCxcu/PWvf53NanR1dT399NPXX3/99ddf/+ijjw4ODg4PD2ezFCGEvXv33njjjdXFgwcPtra2ZrMaL37xi6cu5nK5XC6XzVJUDQ4Orl+/vrqYzWoUi8VCoVCNCqeccsr4+Hg2SxFC+N3vfvf0009/8YtfvP7669///vf/4he/WLFiRWarQZ1F+2YO6qBUKr3qVa+6/fbby+XyQw89dNppp+3bt6/ZKxWp22+/vfpmwmmrkfoSPfLIIytWrLj11lsPHvL8889nsxTlcvmhhx5avnz5z3/+83K5vG/fvjVr1vznf/5nZqtR9Rd/8ReVNxNmthS7d++uvnXtscceW7NmzdDQUDarcfDgwbPPPvvWW28tl8u//e1vzz333DvvvDObpag655xzKptZkc1qPPDAA6eddlpl8HzyySdf//rX33jjjdksRblcfvTRR5cvX/7YY4+Vy+V77733la985ZNPPpnZalBf4lYi3XnnnWvWrHnb29525pln3nzzzc1enahNjVvlGtVId4k+/elPL/u/PvGJT5QzWYqKb3/722ecccY73vGOM84448tf/nKlMbPVqKjGrXKGS3HdddetWLHibW9724oVK7761a9WGrNZjf/6r/96zWtes2HDhjPPPPOLX/xipTGbpSiXy6VSadmyZYdNkbNZjX/5l38588wzKxv4qU99qtKYzVKUy+V//ud/XrFixcaNG1/zmtfceeedlcbMVoM6ail7vC+xnnnmmRe+8IVHvj0im6atRjZLlM1STE5OTkxMvPjFLz7sHvpsVmNa2SzF5OTks88+e4wbnvpq/P73v29ra7OPzCCD1ajsI/PmzdMxQgilUunAgQNTX4Bckc1qUC/iFgAAQENI5AAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA3x/wBGy4eyhxu+RgAAAABJRU5ErkJggg==\" data-image-state=\"image-loaded\" width=\"860\" height=\"314\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379.5px 8px; transform-origin: 379.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is the Orchestra room problem 22 showing the attendees and the stage.  The Greedy solutions show that 1/d^2 is a main driver with musicians clustered around the handful of attendees closest to the stage. A d=1000 really reduces Joy. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 210px 8px; transform-origin: 210px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe stage is the line on the bottom at Y=10 extending in X 10:990 .\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mxy=Process_orc(d,mu,axy,am,pxyr,mscrit,mscrit10,min_score);\r\n% Submitting this template will provide interesting tables and figures\r\n%\r\n% d [1000 1000 10 990 10 10] room_width room_h xmin xmax ymin ymax\r\n% mu [1 2 3 4 5 6 7 8 9 3 4 7 2 1 2 4]  the 16 musicians who have various instruments 1:9\r\n% axy [400,2]  (x,y) position for the 400 attendees\r\n% am  [400,9]  Each attendee's happiness co-factors per instrument types 1:9 seen in mu\r\n% mscrit [9,1000]  musician types, x-axis-pos   Score assuming no other musicians\r\n% mscrit10 [9,1000]  musician types, x-axis-pos Score assuming musicians at +/-10 blocking\r\n\r\n% No two mu may be within 10 of one another\r\n% If any other mxy is within a distance of 5 from the segment axy_i to mxy_j then Happiness_i_j=0\r\n%  This stage is on a line so there is minimal blocking\r\n%  The min distance from point to a segment is Cody \r\n%   https://www.mathworks.com/matlabcentral/cody/problems/1446\r\n%   The smallest solutions are often very slow\r\n%\r\n% Happiness_i_j=1000000*am(i,mu(j))/d2am(i,j); where d2am(i,j) distance squared axy_i,mxy_j\r\n% Score is sum of Happiness\r\n% Best known solution is 47221761 for problem 22\r\n\r\n% min_score of 46M can be achieved with either mscrit or mscrit10.\r\n\r\n  mxy=ones(length(mu),2)*d(5); % d(5) is ymin. This problem's stage is a line\r\n  mxy(:,1)=0;\r\n  \r\n  %Greedy Algorithm Scheme\r\n  %Place best scoring (Musician_type,X) of table type being used\r\n  % find [mu_type,x-position] of maximum score available in updating Table\r\n  % find musician of mu_type remaining to be placed, mu_loc\r\n  % mxy(mu_loc,1)=x-position\r\n  % clear placed mu \r\n  % if no musician of mu_type remains clear table of mu_type, wT(mu_type,:)=-Inf\r\n  % clear table for x_position +/-9 for all mu_type\r\n  % repeat until all musicians placed\r\n  \r\n  % Next line commented to execute greedy\r\n  mxy(:,1)=10:10:10*length(mu); % Template weak solution to see Tables and figures.\r\n  \r\n  % Working tables that will be destroyed\r\n  wmu=mu;      % vector of musician types\r\n  wT=mscrit;   % Scores of musician type vs X assuming no neighbors blocking\r\n  wT=mscrit10; % Scores of musician type vs X assuming +/-10 are occupied and block\r\n  \r\n  tic\r\n  while nnz(mxy(:,1)==0)\r\n   if toc\u003e1,break;end % avoiding infinite loop\r\n   [mu_type,x]=find(wT==max(wT(:)),1,'first');\r\n   % 6  more lines here for a  complete greedy algorithm\r\n   %\r\n   % Block X-positions less than 10 of placed musician,assuming integers only, for all types\r\n   wT(:,x-9:x+9)=-Inf; % 0 is not sufficient as values may be negative\r\n  end % while mxy has unfilled cells\r\n  \r\n  %Greedy algorithm may be based on first/last/random max value\r\n  % The threshold may also be varied to .98*max() and then randomly select node to play\r\n  \r\n  \r\n  %mxy(:,2)=ymin;\r\n  %mxy(1,1)=10; %Manual entry\r\n  % ...\r\n  %mxy(16,1)=990;\r\n  \r\n  %mxy(:,1)=[10 40 ... 990];\r\nend\r\n","test_suite":"%%\r\n%Google Drive Dowloads need to come from shared files\r\n% Tweak link: file/d/ to uc?export=download\u0026id=   while removing /view?usp=sharing\r\n% https://drive.google.com/file/d/1v3GsGgP3p905wzdvUqypL_-djYmxiyzK/view?usp=sharing\r\n% https://drive.google.com/uc?export=download\u0026id=1v3GsGgP3p905wzdvUqypL_-djYmxiyzK\r\n fname='orc_d_mu_axy_am_pxyr.mat';\r\n %orc is a cell array orc{90} for the 90 Problems in ICFP 2023 Orchestra Competition\r\n \r\n % fn.mat  https://drive.google.com/file/d/10GsOZTIjzMIuO7xAYIqLT1zIq9Cyubl-/view?usp=drive_link\r\n % Google Gives warning thus aborts urlwrite\r\n %\r\n %fname='orc_d_mu_axy_am_pxyr.pdf'\r\n %Fake name of .pdf on GoogleDrive,  write as a mat\r\n \r\n url='https://drive.google.com/file/d/1mgxzsmVQNXgqHEdd61QR2r0STm3N9lgG/view?usp=drive_link';\r\n ptr=strfind(url,'/view'); % Tweaking the url\r\n url(ptr:end)=[];\r\n url=strrep(url,'file/d/','uc?export=download\u0026id=');\r\n \r\n tic\r\n urlwrite(url,fname); %Writing GoogleDrive orc.pdf into orc.mat\r\n fprintf('Download 14MB Time: %.1f  sec\\n\\n',toc); %14MB download Time, about 1-3 sec\r\n \r\ndir_struct=dir;\r\n\r\nfor i=1:size(dir_struct,1)\r\n fprintf('%i %s %i\\n',i,dir_struct(i).name,dir_struct(i).bytes)\r\nend\r\n\r\nload(fname);\r\nfprintf('\\n\\nmat Load Time: %.1f\\n\\n',toc); %Load Time of orc from .mat, 0.1 sec\r\n\r\npid_offset=22;\r\npid_scores=[28e6 55e6 221e6 125e6 110e6];\r\nvalid=1;\r\nfigptr=0;\r\n%fname='orc_d_mu_axy_am_pxyr.mat'  orc cell array of size 90\r\ntic\r\nfor pid=23:27\r\n%pid=22; % Stage is a Line [10:990, 10:10] in what they call [X,Y]\r\nmin_score=pid_scores(pid-pid_offset); %Best known score 47221761  22/46M 23/28M/32M 24/55M/55M 25/221M/224M\r\n%26/127M/127M 27/111.7M/111.69M\r\nd=orc{pid}.d; %[1000 1000 10 990 10 10] room_width room_h xmin xmax ymin ymax\r\nmu=orc{pid}.mu; %[1 2 3 4 5 6 7 8 9 3 4 7 2 1 2 4]\r\naxy=orc{pid}.axy; %[400,2]\r\nam=orc{pid}.am;  %[400,9]  there are 9 musician types 1:9 seen in mu\r\npxyr=orc{pid}.pxyr; %[0,3] Pillars that do not exist in pid 22\r\nrw=d(1);rh=d(2);xmin=d(3);xmax=d(4);ymin=d(5);ymax=d(6);\r\nfprintf('xmin:%i xmax:%i ymin:%i ymax:%i\\n\\n',d(3:6));\r\n\r\n Lmu=length(mu); % number of musicians\r\n nmut=max(mu); % number of musician types\r\n na=size(axy,1); % number of attendees\r\n mscr=zeros(Lmu,1); % Track individual scores\r\n %mscrji=zeros(Lmu,na); % Scores of all attendees to placed musician location\r\n mscrit=zeros(nmut,rw);\r\n mscrit10=zeros(nmut,rw);\r\n d2am=zeros(na,Lmu); \r\n d2ax=ones(na,xmax)*Inf; \r\n \r\n for x=xmin:xmax\r\n  d2ax(:,x)=sum((axy-[x,ymin]).^2,2);\r\n end\r\n \r\n myj=10;\r\n myk=10;\r\n for i=1:na\r\n   ax=axy(i,1);\r\n   ay=axy(i,2);\r\n   for k=1:nmut\r\n    for x=xmin:xmax\r\n     mscrit(k,x)=mscrit(k,x)+1000000*am(i,k)/d2ax(i,x); % Calc k,x assume no issues\r\n     \r\n    %Calc Dist from vector [(mxj,myj),(ax,ay)] to point [mxk,myk]\r\n    %dist2 (x+10,ymin,x,ymin,ax,ay)\u003c=25 % x+10\r\n    mxj=x;\r\n    mxk=x+10; %check if adj blocks\r\n    d2=100; % set to valid\r\n    sL2=(mxj-ax)^2+(myj-ay)^2;\r\n    t=( (mxk-mxj)*(ax-mxj)+(myk-myj)*(ay-myj) )/sL2;\r\n    if t\u003e=0\r\n     if t\u003c=1\r\n      sx=mxj+t*(ax-mxj);\r\n      sy=myj+t*(ay-myj);\r\n      d2=(mxk-sx)^2+(myk-sy)^2;\r\n     end\r\n    end\r\n    if d2\u003c=25,continue;end\r\n    \r\n    %dist2 (x-10,ymin,x,ymin,ax,ay)\u003c=25 % x-10\r\n    mxk=x-10; % check if adj blocks\r\n    d2=100; % set to valid\r\n    sL2=(mxj-ax)^2+(myj-ay)^2;\r\n    t=( (mxk-mxj)*(ax-mxj)+(myk-myj)*(ay-myj) )/sL2;\r\n    if t\u003e=0\r\n     if t\u003c=1\r\n      sx=mxj+t*(ax-mxj);\r\n      sy=myj+t*(ay-myj);\r\n      d2=(mxk-sx)^2+(myk-sy)^2;\r\n     end\r\n    end\r\n    if d2\u003c=25,continue;end\r\n    \r\n     % Calc k,x assumes possible blocks\r\n     mscrit10(k,x)=mscrit10(k,x)+1000000*am(i,k)/d2ax(i,x); \r\n    end % x\r\n  end % k nmut\r\n end % i na\r\n\r\n%Main Function Call\r\nmxy=Process_orc(d,mu,axy,am,pxyr,mscrit,mscrit10,min_score);\r\n\r\n%Fixing out of bounds values\r\nmxy(:,2)=ymin;\r\nmxy(mxy(:,1)\u003cxmin,1)=xmin-10; \r\nmxy(mxy(:,1)\u003exmax,1)=xmin-10;\r\n\r\n%Any players with distance\u003c10 from any other player gets put to xmin-10\r\n\r\ngap_fail=mu\u003eInf; % Logical zero of size mu\r\nfor i=1:length(mu)\r\n mxy_dist=(mxy(:,1)-mxy(i,1)).^2;\r\n mxy_dist(i)=100; % set self distance to 100\r\n if min(mxy_dist)\u003c100, gap_fail(i)=1;end\r\nend\r\nmxy(gap_fail==1,1)=xmin-10; % Throw all gap failers to xmin, No pts will be scored \r\n\r\n% Calc dist squared from each a(attendee) to each m(Musician)\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n scr=0;\r\n \r\n for i=1:na\r\n   ax=axy(i,1);\r\n   ay=axy(i,2);\r\n   \r\n  for j=1:Lmu\r\n   %mscrji(j,i)=1000000*am(i,mu(j))/d2am(i,j); % Calc i,j assume no issues\r\n   \r\n   mxj=mxy(j,1);\r\n   if mxj\u003cxmin,continue;end % Skip failed musician placements\r\n   myj=mxy(j,2);\r\n   blocked=0;\r\n   \r\n   for k=1:Lmu %check of musician mxy(k,:) blocks mxy(j,:) from LOS to axy(i,:)\r\n    if k==j,continue;end % can't block self\r\n    mxk=mxy(k,1);\r\n    if mxk\u003cxmin,continue;end % Skip failed musician placements\r\n    myk=mxy(k,2);\r\n    \r\n    %Calc Dist from vector [(mxj,myj),(ax,ay)] to point [mxk,myk]\r\n    d2=100; % set to valid\r\n    sL2=(mxj-ax)^2+(myj-ay)^2;\r\n    t=( (mxk-mxj)*(ax-mxj)+(myk-myj)*(ay-myj) )/sL2;\r\n    if t\u003e=0\r\n     if t\u003c=1\r\n      sx=mxj+t*(ax-mxj);\r\n      sy=myj+t*(ay-myj);\r\n      d2=(mxk-sx)^2+(myk-sy)^2;\r\n     end\r\n    end\r\n    \r\n    if d2\u003c=25  %No one musician adj to vector within 5 or 25 for dist squared\r\n     blocked=1;\r\n     break; %exit upon block determination\r\n    end\r\n \r\n   end % k Lmu\r\n   % Blocked musician-j by any musician scores 0 for this attendee-i\r\n   if blocked==1,continue;end \r\n   \r\n   %musicians play different instruments\r\n   %attendees have like(+) and dislike(-) negative co-factors\r\n   %mu(j) gives instrument of musician\r\n   %am(i,mu(j)) gives attendee Happiness for insturment mu(j)\r\n   mscr(j)=mscr(j)+1000000*am(i,mu(j))/d2am(i,j); %Tracking indiv musician score\r\n   scr=scr+1000000*am(i,mu(j))/d2am(i,j);\r\n  end % j Lmu\r\n end % na\r\n \r\n \r\n for i=1:Lmu\r\n  fprintf('Player %2i xpos: %3i  Instr:%2i  scr: %10.0f\\n',i,mxy(i,1),mu(i),mscr(i));\r\n end\r\n fprintf('\\n');\r\n \r\n fprintf('Total scr: %.0f   Min Score: %.0f********************\\n\\n',scr,min_score);\r\n \r\n %fprintf('%i ',mxy(:,1));fprintf('\\n\\n');\r\n \r\n fprintf('Table of max Happiness X per Musician Type\\n');\r\n for i=1:nmut % 9\r\n  fprintf('Musician Type-%2i  x: %3i  H: %9.0f\\n', ...\r\n      i,find(mscrit(i,:)==max(mscrit(i,:)),1,'first'),max(mscrit(i,:)));\r\n end\r\n \r\n %fprintf('\\nTable of max Happiness per Musician Type; assumes adjacent Musicians blocking\\n');\r\n %for i=1:nmut % 9\r\n % fprintf('Musician Type-%i  x: %3i  H: %9.0f\\n', ...\r\n %     i,find(mscrit10(i,:)==max(mscrit10(i,:)),1,'first'),max(mscrit10(i,:)));\r\n %end\r\n \r\n \r\n fprintf('\\n\\nThe following lines are the titles for the figures lower down:\\n');\r\n %Figures/Titles\r\n fprintf ('Problem: %i Orchestra\\n',pid)\r\n \r\n figptr=figptr+1;\r\n figure(figptr);\r\n plot(axy(:,1),axy(:,2),'.k');hold on  % Attendees\r\n axis tight; %axis equal\r\n for i=1:size(pxyr,1) % rectangle -no matrix allowed  Pillars fast draw\r\n  rectangle('Position',[pxyr(i,1:2)-pxyr(i,3) 2*pxyr(i,3) 2*pxyr(i,3)],'Curvature',[1 1],'FaceColor',[.9 .4 .8])\r\n end\r\n room= [0 0;rw 0;rw rh;0 rh;0 0];\r\n stage=[xmin ymin;xmax ymin;xmax ymax;xmin ymax;xmin ymin];\r\n plot(stage(:,1),stage(:,2),'k');\r\n plot(room(:,1),room(:,2),'Color',[1 0 1]);\r\n plot(mxy(:,1),mxy(:,2),'.r'); % Musicians\r\n hold off\r\n \r\n figptr=figptr+1;\r\n %Plot of Happiness for each Musician Type as a function of X with No blocks\r\n fprintf('Musician Types-1:%i rgb Happiness vs X No Blocks\\n\\n',nmut);\r\n figure(figptr);plot((1:rw)',mscrit(1,:)','.r');hold on;\r\n for i=2:nmut % 123 456 789 groups \r\n  plot((1:rw)',mscrit(i,:)','.r');\r\n end\r\n hold off\r\n\r\n%Plot of Happiness for each Musician Type as a function of X with No blocks\r\n% for i=1:ceil(nmut/3) % 123 456 789 groups \r\n%  fprintf('Musician Types-%i:%i rgb Happiness vs X No Blocks\\n', ...\r\n%      3*(i-1)+1,3*(i-1)+3);\r\n%  figure(i);plot((1:rw)',mscrit(3*(i-1)+1,:)','.r');hold on;\r\n  %figure(i);plot((1:rw)',mscrit(3*(i-1)+2,:)','.','Color',[0 .8 0]);\r\n  %figure(i);plot((1:rw)',mscrit(3*(i-1)+3,:)','.b');hold off;\r\n% end\r\n \r\n %Plot of Happiness for each Musician Type as a function of X with blocks\r\n %for i=1:ceil(nmut/3) % 9\r\n % fprintf('Musician Types-%i:%i rgb Happiness vs X with Blocks\\n', ...\r\n %     3*(i-1)+1,3*(i-1)+3);\r\n % figure(i+3);plot((1:rw)',mscrit10(3*(i-1)+1,:)','.r');hold on\r\n  %figure(i+3);plot((1:rw)',mscrit10(3*(i-1)+2,:)','.','Color',[0 .8 0]);\r\n  %figure(i+3);plot((1:rw)',mscrit10(3*(i-1)+3,:)','.b');hold off\r\n% end\r\n \r\nif scr\u003c=min_score\r\n fprintf('Score too Low. Pid:%i  %.0f   Min_Score: %.0f\\n',pid,scr,min_score);\r\nend\r\nvalid= valid \u0026\u0026 scr\u003emin_score; % Merging all\r\nfprintf('Total Elapsed Time thru pid:%i  %0.1f sec\\n\\n\\n',pid,toc); % Time thru challenge\r\nend\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-16T04:19:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-15T18:46:56.000Z","updated_at":"2023-07-16T04:19:58.000Z","published_at":"2023-07-16T04:19:58.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net happiness. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. Vector check is being done with a prior Cody 1446 solution variant.  Volume per musician was allowed but not in this Challenge. Happiness drops off as the square of distance between musician and attendee.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 site will hopefully have contestant writeups. The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. I modified the problem contents to the sufficient elements regarding the stage. The joys of JSON can be viewed. The musician types were upgraded by 1 to be non-zero based.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place the musicians onto the stage,mxy, of Problems 23 thru 27 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than a min_score; The min_scores were selected as the minimums of using either provided Happiness table. The standard inputs are detailed in the function template and include axy-attendee positions, am-attendee happiness factors to each instrument, mu-instruments of each musician, stage limits-[xmin xmax ymin ymax]. This stage is a line of ymin=ymax=10, xmin=10, and xmax=990, seen in the image below. The special performance tables provide Joy values for Musician types vs X. Table mscrit, matrix_score_XvsType, assumes no neighbors and mscrit10 assumes neighbors at +/-10 blocking thus gives less Joy.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information. Trying both tables will show neither Happiness table is optimal for all cases. Six problems can be handled well in under 5 seconds using Matlab.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"314\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"860\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the Orchestra room problem 22 showing the attendees and the stage.  The Greedy solutions show that 1/d^2 is a main driver with musicians clustered around the handful of attendees closest to the stage. A d=1000 really reduces Joy. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe stage is the line on the bottom at Y=10 extending in X 10:990 .\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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58+vNma2GiGE++67L5fLtbe3VxazWYqJiYkHH3zwV4e86EUvmjdvXshwNe688859+/b98R//cbUxg6U4rFf86le/OnDgQGXcyGA1QggPP/zw3XfffeDAga6urmpjNksRDh1Yc7lcR0dHtTGz1aBexK1E2rlz51/+5V8ePHjw2muvLRaL55xzTrPXKFJf+tKXtm3b9s53vrOyOG01Ul+iK6+88gtf+MLvf//7f/u3f7vpppvOP//8E044IZulCCF87nOfu/rqq5999tkvf/nLzz777Ctf+cqQ1Y5RMTY2tmHDhle84hWnnnpqyHApvv3tb3/4wx++5ZZbbrrppptuumnFihWnnHJKNqsxODj4zne+88CBAzfffPN3v/vdN77xjS0tLdksxa5duz74wQ/edMi//uu/Pvfcc6997WuzWY2vfe1rH/vYxw4ePPitb31r9+7dr3vd60KGR4z+/v5PfepTzz333Ne+9rUnnnji7LPPDhmuBvVUJmmef/75FStWPPTQQ+Vy+be//e0ZZ5zxP//zP81eqYjs37//wx/+8IoVK171qldVWqatRupL9MADD7zsZS/bv39/ZfH888//zne+k81SlMvlhx56qFqNffv29fT0/Pa3v81sNcrl8sGDBy+44ILXvOY1AwMD5azuIxUf/OAHr7vuuqkt2azG888/f8455/zoRz+qLL7+9a+/+eabs1mKwwwNDZ177rn79+/PZjVKpdLy5csrG/jkk08uX778gQceyGYpyuXyT3/605e97GWPPvpouVx+9tlnX/va1/70pz/NbDWoL89uJc/Q0FBHR0c+nw8hdHZ29vb2Dg8PN3ulIvL5z3++s7PzqquuqrZMW43Ul6ijo+Oaa66p3jXX3d39q1/9KpulCCGceuqpO3bsqFTjhBNOmJycfP755zNbjRDCZz/72XXr1lU2M2R1H6n42c9+duqpp05MTDz33HOVlmxW4/bbb1+8eHHlVH0I4Xvf+955552XzVJM9cwzz1x++eVXXXXV/PnzM1uNycnJF77whSGEE088saWl5eDBg5ktxZ49e3p7exctWhRCmDdv3sqVKwcGBjJbDepL3EqeYrHY09NTXWxvbx8dHW3i+kTpiiuu+NCHPvQHf/AH1ZZpq5H6Ei1atGjNmjWVf967d++tt966bt26bJYihNDa2prP50ul0vbt29/+9re/733vW7hwYWarcdddd/34xz/+wAc+UG3JbClKpdIvfvGLK6+88vzzzz/99NM/+tGPhqxWo1gsnnzyyR/72MdOP/30M88885/+6Z9CVksx1bXXXtvT03PuueeGrFajtbV169atmzdv3rZt28aNGyt3IGezFCGEtra2X/7yl9XFJ598ct++fZmtBvUlbiVPqVRqaWmpLuZyuXJmfjyttfXwHjttNbJToscff/wd73jH5s2bly9fnvFS7N+//9lnn124cOEdd9zxxBNPZLMaTz311BVXXPHZz352amM2SxFCeOyxx9avX3/NNdfceeedt99++9DQ0A033JDNaoyNjQ0MDLz85S+///77b7jhhq985Su7du3KZimqDhw48PWvf/39739/ZTGz1bj77rtPPPHEl7zkJR0dHXv27HnmmWcyW4o1a9bs27evv7//rrvu+sY3vvHAAw/U2vAsVIP6EreSp62tbXJysrpYKpVyuVwT16e5pq1GRkp0//33v+ENb3jrW9+6efPmkO1ShBC6urre/va3X3vttSeeeOI3v/nNbFbjM5/5zEtf+tJHHnlkcHBw//79Dz744OjoaDZLEUJYvHjx1VdfvXjx4hDCwoUL169ff88992SzGqeccsqSJUs2bNgQQigUCuvWrbv55puzWYqqW2655eSTTz799NMri9msxg9+8IN77733hhtu2Lhx4zXXXBNC+OpXv5rNUoQQ5s+f/61vfWvv3r1XX331U089dcEFF8ybNy+z1aC+xK3kWbBgwcjISHWxWCyuXLmyievTXNNWIwsl+uEPf/iud71r69at1Tc0ZrYUe/bsue6666qLCxcu/PWvf53NanR1dT399NPXX3/99ddf/+ijjw4ODg4PD2ezFCGEvXv33njjjdXFgwcPtra2ZrMaL37xi6cu5nK5XC6XzVJUDQ4Orl+/vrqYzWoUi8VCoVCNCqeccsr4+Hg2SxFC+N3vfvf0009/8YtfvP7669///vf/4he/WLFiRWarQZ1F+2YO6qBUKr3qVa+6/fbby+XyQw89dNppp+3bt6/ZKxWp22+/vfpmwmmrkfoSPfLIIytWrLj11lsPHvL8889nsxTlcvmhhx5avnz5z3/+83K5vG/fvjVr1vznf/5nZqtR9Rd/8ReVNxNmthS7d++uvnXtscceW7NmzdDQUDarcfDgwbPPPvvWW28tl8u//e1vzz333DvvvDObpag655xzKptZkc1qPPDAA6eddlpl8HzyySdf//rX33jjjdksRblcfvTRR5cvX/7YY4+Vy+V77733la985ZNPPpnZalBf4lYi3XnnnWvWrHnb29525pln3nzzzc1enahNjVvlGtVId4k+/elPL/u/PvGJT5QzWYqKb3/722ecccY73vGOM84448tf/nKlMbPVqKjGrXKGS3HdddetWLHibW9724oVK7761a9WGrNZjf/6r/96zWtes2HDhjPPPPOLX/xipTGbpSiXy6VSadmyZYdNkbNZjX/5l38588wzKxv4qU99qtKYzVKUy+V//ud/XrFixcaNG1/zmtfceeedlcbMVoM6ail7vC+xnnnmmRe+8IVHvj0im6atRjZLlM1STE5OTkxMvPjFLz7sHvpsVmNa2SzF5OTks88+e4wbnvpq/P73v29ra7OPzCCD1ajsI/PmzdMxQgilUunAgQNTX4Bckc1qUC/iFgAAQENI5AAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA3x/wBGy4eyhxu+RgAAAABJRU5ErkJggg==\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":58773,"title":"ICFP 2023 Orchestra:  Score Optimization of 2-Musicians and 1-Attendee","description":"The Template solves all cases.   Please submit the template and view the graphs.\r\nThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The ICFP 2023 Orchestra Spec shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \r\nThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\r\nThe Joy here is to see the figures of optimal placement and the data per case.\r\n\r\nThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\r\nThe scoring and blocking functions are provided in the template.\r\n\r\nThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 830.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 415.25px; transform-origin: 407px 415.25px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 255px 8px; transform-origin: 255px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 346.5px 8px; transform-origin: 346.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334px 8px; transform-origin: 334px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 374px 8px; transform-origin: 374px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 246px 8px; transform-origin: 246px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 306.5px 8px; transform-origin: 306.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 202.5px 8px; transform-origin: 202.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring and blocking functions are provided in the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 425.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 212.75px; text-align: left; transform-origin: 384px 212.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 560px;height: 420px\" src=\"data:image/png;base64,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LhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 316px 8px; transform-origin: 316px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy)\r\n %Given 1 Attendee and 2 Musicians Optimize Score\r\n %Place Musicicans,mxy, within the bounds of the stage [xmin xmax ymin ymax] to\r\n % achieve maximum score sum for i=1:2 1000000*am(1,mu(i))/dist_squared(axy,mxy(i,:)\r\n % where mu(i) is musician type 1 or 2 and am is an Affinity matrix [1,2]\r\n %sxy(600,2) contains all the integer stage points; note:mxy is not limited to integers\r\n % Musicians must be spaced by 10 or more\r\n % A musician gets no score if the other musician is 5 or less from the musician's \r\n % line-of-sight to the attendee (a function distP2Seg is provided)\r\n \r\n %Performance approx 0.62s  Best known Time:0.28s\r\n for x1=xmin:xmax\r\n  for y1=ymin:ymax\r\n   for x2=xmin:xmax\r\n    for y2=ymin:ymax\r\n      if (y2-y1)^2+(x2-x1)^2\u003c100,continue;end\r\n      mxy=[x1 y1;x2 y2];\r\n      [Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n      if Totscr\u003e=score\r\n       return;\r\n      end\r\n    end %y2\r\n   end %x2\r\n  end %y1\r\n end %x1\r\n \r\nend %Orc_2M1A\r\n\r\nfunction [Totscr,muscr]=Calc_score(mxy,mu,am,axy)\r\n%No error checking,volume,pillars\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_score\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n %if sL2==0 % Segment is a point  %Error check removed\r\n % d2=(px-vx)^2+(py-vy)^2;\r\n %else % non-point segment\r\n  t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n  if t\u003c0 % Pt beyond normal of segment\r\n   return\r\n   %d2=(px-vx)^2+(py-vy)^2;\r\n  elseif t\u003e1 % Pt beyond normal of segment\r\n    return\r\n   %d2=(px-wx)^2+(py-wy)^2;\r\n  else\r\n   sx=vx+t*(wx-vx);\r\n   sy=vy+t*(wy-vy);\r\n   d2=(px-sx)^2+(py-sy)^2;\r\n  end\r\n %end\r\n %d=sqrt(d2);\r\nend %distP2S2Z\r\n","test_suite":"%%\r\nvalid=1;\r\n\r\norcm=[40 60 5 24 10 39 35 16 1 2 10 20 214053; % mid right 214054\r\n      40 60 5 24 10 39 12 1 1 2 10 20 305630;  %Bot mid 305631\r\n      50 80 25 40 10 60 5 35 1 1 20 20 93947;  %Left Mid 93948\r\n      50 80 25 40 10 60 5 35 1 2 10 -20 24999; %Left with Neg Affinity 25000\r\n      50 80 25 40 10 60 15 70 1 1 10 10 65897; %TL Diag 15 65898\r\n      500 500 1 30 1 30 450 450 1 1 10 10 55;  %56\r\n      30 40 10 18 5 25 15 35 1 2 10 10  127329; %Top Mid; narrow stage\r\n      60 40 10 50 10 30 35 35 1 2 -10 -20 -14105];  %pair Negatve -14104\r\n\r\nOrctime=0;\r\nfigptr=0;\r\n\r\nfor i=1:size(orcm,1)\r\npxyr=[];\r\n[rwx, rhy, xmin, xmax, ymin, ymax, axy, mu, am, score]= ...\r\n  deal(orcm(i,1),orcm(i,2),orcm(i,3),orcm(i,4),orcm(i,5),orcm(i,6),orcm(i,7:8),orcm(i,9:10),orcm(i,11:12),orcm(i,13));\r\n\r\n%stage=ones(xmax-xmin+1,ymax-ymin+1);\r\nstage=ones(ymax-ymin+1,xmax-xmin+1);\r\n[sy,sx]=find(stage);\r\nsxy_base=[sx sy]-1; % Make LL [0,0] Stage(x,y) points\r\n\r\nsxy=sxy_base+[xmin ymin]; % 5 10;5 11  \r\nsxy=sortrows(sxy,[1 2],{'ascend' 'descend'}); %Matlab Find TL by col to BR\r\n\r\nsxy=flipud(sortrows(sxy,1,'ascend')); %Matlab find sequence TL by col to BR\r\n\r\nif mu(1)==mu(2)\r\n am(2)=[]; %if Only one musician type then am reduced\r\nend\r\n\r\n  ztic=tic;\r\n  mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy);\r\n  Orctime=Orctime+toc(ztic);\r\n  dt=toc(ztic);\r\n  \r\n%Validity Checks\r\n if sum((mxy(1,:)-mxy(2,:)).^2)\u003c100\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Spacing of Musicians\\n\\n',i);\r\n end\r\n \r\n if min(mxy(:,1))\u003cxmin || max(mxy(:,1))\u003exmax || min(mxy(:,2))\u003cymin || max(mxy(:,2))\u003eymax\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Positioning of Musicians off Stage\\n\\n',i);\r\n end\r\n \r\n%[Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n %Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for ii=1:na\r\n   bflag=0;\r\n   \r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n%    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(ii,1),axy(ii,2)); %Intra Seg dist\r\n%    d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n     px=mxy(k,1); py=mxy(k,2);\r\n     vx=mxy(j,1); vy=mxy(j,2);\r\n     wx=axy(ii,1); wy=axy(ii,2);\r\n     \r\n     dv2=Inf;\r\n     sL2=(vx-wx)^2+(vy-wy)^2;\r\n     t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n     if t\u003e=0 \u0026\u0026 t\u003c=1\r\n      sx=vx+t*(wx-vx);\r\n      sy=vy+t*(wy-vy);\r\n      dv2=(px-sx)^2+(py-sy)^2;\r\n     end\r\n     \r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end %k\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(ii,mu(j))/d2am(ii,j);\r\n  end %ii\r\n end % j  mxy(j,:)\r\n Totscr=sum(muscr);\r\n\r\n\r\n if Totscr\u003cscore\r\n  valid=0;\r\n  fprintf('Pid:%i  Score:%.0f less than required %.0f\\n\\n',i,Totscr,score);\r\n end\r\n\r\n\r\nfprintf('\\nPid:%i  Score: %.0f   Time:%0.3f\\n',i,Totscr,dt);\r\nfprintf('axy x:%3i  y:%3i\\n',axy);\r\nfprintf('mxy(1,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(1,:),muscr(1),mu(1),am(1,1));\r\nfprintf('mxy(2,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(2,:),muscr(2),mu(2),am(1,mu(2)));\r\n\r\n\r\n%draw_orcs(axy,mxy,swx,shy,xmin,xmax,ymin,ymax,pxyr);\r\n figptr=figptr+1;\r\n figure(figptr);\r\n plot(axy(:,1),axy(:,2),'or');hold on  % Attendees\r\n axis tight; axis equal\r\n \r\n room= [0 0;rwx 0;rwx rhy;0 rhy;0 0]; %rwx, rhy\r\n plot(room(:,1),room(:,2),'k');\r\n stage=[xmin ymin;xmax ymin;xmax ymax;xmin ymax;xmin ymin];\r\n plot(stage(:,1),stage(:,2),'color',[.8 0 .8]);\r\n %plot(mxy(:,1),mxy(:,2),'.r'); % Musicians\r\n plot(mxy(1,1),mxy(1,2),'*b');\r\n plot(mxy(2,1),mxy(2,2),'xk');\r\n hold off\r\n \r\nend % orcm\r\n\r\nfprintf('Total Time: %.3f\\n',Orctime);\r\n\r\n\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-20T18:08:52.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-20T16:09:25.000Z","updated_at":"2023-07-20T18:08:54.000Z","published_at":"2023-07-20T18:08:54.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring and blocking functions are provided in the template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wcUEBYgkR6rLQAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyMC1KdWwtMjAyMyAwOToyMjozMtgdKaQAABqvSURBVHic7dx/TFX33cDx77mXwDqcgd4hmWwaChco0zqgs9VU2hT5w0Wchjk0zBp164SSdg1ZTIgrLOAMWn/gMtdqlyaNlJCxkWFmE1ypgFdbO5xR/HG5cyLEH6j3em1ii8C59/njPjvhEW19CnI+5/h+pX/cc7w3+XwpnLfnh2jhcFgBAGA2h9kDAACgFEECAAhBkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIIKVgnTixInr168bm/39/QcPHvR6vSaOBACYKJYJks/n+9nPfnbixInIZktLy4oVK1pbW0tKSurq6sydDQAwflFmD/BAhoeHy8vLExISIpu6rldVVTU2Nrrdbr/fn5eXt2TJkuTkZHOHBACMhzWCtG3btoULF3Z3d0c2Ozo64uLi3G63UsrlcuXm5no8nrFB0jRtsgcFAMHC4bDZI3wZCwTpk08+OXbs2F//+teXX345sicYDGZkZBhviI2Nvd+dJOFf/a8nPT3dlnfO7LouZd+lsS5rkf93dOlB+uyzzyorK//4xz+O3qnr+uivrNPptGV4AOCRIj1IW7ZsefLJJ/v6+vr6+gKBwJkzZ2bMmBEdHR0KhYz36LoeHR1t4pAAgPGTHqSEhIRr167V19crpS5dutTe3v6tb30rMzPTuJ+klAoGg4sWLTJvRgDABNAsdLHr5ZdfXr58eX5+figUev7552tqap5//nmfz1dYWPjhhx8az+AZNM1KqwOAh0r+IVH6GdI9ORyOrVu3lpeXp6amdnd319bWjq0RAMBapAdzPOT/dQAAJo38Q6JlflMDAMDeCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARIgyewAAE0fT/vdFOGzqHMDXYY0geb3evr6+1NTU5OTkyB6/33/hwgXjDWlpaVOnTjVpOkCASIqMDt21CViBFhb/Lbt9+/YPPvggJyfn008//elPf/rLX/5SKfXOO+/s2LEjJiYm8p66uroFCxbc9UFNs8DqgImhaXfnZ+wePNrkHxKlz+fz+ZYtW9bZ2RkfH3/9+vXc3NzDhw+7XK7XX3/96aefLi4u/pLPyv/qAxPjfu2hSRhF/iFR+kMNKSkpzc3N8fHxSqmoqKhQKDQyMqKUOnv2bEpKit/vHx4eNntGAMAEkB7MCF3Xm5qa6uvrFy5c+Oqrr+q6PmvWrCeeeCIQCASDwcLCwpqamrGf0jQtLS0t8trr9U7uyMAk4gwJ95eenh550dPTI/yAb42HGgKBwODgYGJi4uHDh1etWvX555/n5+dv2LAhKSlpYGBg+fLlDQ0NK1euHPtBOoRHQjjMPSTcj3EY1IyHMKWyxhmSYfXq1dnZ2a+99trondXV1bdu3XrzzTfverP8C6bAhOEpO3wV+YdE6feQzp8/v2/fPmMzMTHxypUrvb29TU1Nxs6hoSGHQ/pCgIcrHP7f86TIf5FNwFKkH8dDodDmzZvPnz+vlLp+/brH48nPz79z505lZaXP51NKDQwMtLW1FRQUmD0pIECkQ6QI1iT9HpLb7d64cWNhYWF2dvbx48dLSkry8vKUUhUVFUVFRbNnzz516lRZWdnYf4QEALAW6ZcUx0P+BVMAmDTyD4nSL9kBAB4RBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIUWYP8EC8Xm9fX19qampycrKxs7+//9y5czNmzEhPTzdxNgDAhLDAGdL27dvLyso+/PDDn//852+//XZkZ0tLy4oVK1pbW0tKSurq6sydEAAwflo4HDZ7hi/j8/mWLVvW2dkZHx9//fr13Nzcw4cPx8XF/fCHP2xsbHS73X6/Py8vr7m5efTJU4SmSV8dAEwa+YdE6WdIKSkpzc3N8fHxSqmoqKhQKDQyMtLR0REXF+d2u5VSLpcrNzfX4/GYPSkAYFyk30NyOBxut1vX9aampvr6+ldeeSUxMfHIkSMZGRnGe2JjY71e7z0/btxeut8brKhL6zJ7BMDmcsI5Zo8wYSx0l116kCICgcDg4GBiYuLhw4dXrVql67qmacafOp3O+52H2qlDo9nppwWQxmZ/5zMOg6MPmzJJv2QXkZCQsHr16r179z722GPvvfdedHR0KBQy/lTXdafTaeJ4AIDxkx6k8+fP79u3z9hMTEy8cuXKtGnTuru7jZ3BYDAnhzMGALA26UEKhUKbN28+f/68Uur69esejyc/P3/u3LlKqfb2dqWUz+fzeDzz5s0zeVAAwPhIv4fkdrs3btxYWFiYnZ19/PjxkpKSvLw8pdTWrVvLy8tTU1O7u7tra2sTEhLMnhQAMC7SH0sfD/kP3X89XVoXDzUAD49df8TkHxKlX7IDADwiCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARoswe4IH4fL7e3l6Xy5WdnR3Z4/f7L1y4YLwhLS1t6tSpJk0HAJgAFghSdXX1Rx99lJOT4/V6p0yZ8u6778bExDQ3N+/YsSMmJibynrq6ugULFpg7JwBgPKQH6cyZM42NjZ2dnfHx8UqpgoKC/fv3/+QnPzl9+nRFRUVxcbHZAwIAJob0e0hxcXF79uyJ1EgplZycfPnyZaXU2bNnU1JS/H7/8PCwqQMCACaG9DOk6dOnT58+PfK6t7e3ra1t/fr1uq5fvHixuro6EAgEg8HCwsKampp7fjw9PT3ywuv1TtLEACCJcRiUT3qQDAMDA2vWrCktLc3MzLx06VJ+fv6GDRuSkpIGBgaWL1/e0NCwcuXKsZ+iQwAeccZhUNM0cyf5StIv2UWcPHly6dKlq1atKi0tVUolJSXt2rUrKSlJKZWYmJifn9/V1WX2jACAcbFAkI4cObJu3bqqqqq1a9dG9vT29jY1NRlvGBoacjgssBAAwJeQfhzv7+8vKyvbsmXLiy++ODw8PDw8rOv6nTt3KisrfT6fUmpgYKCtra2goMDsSQEA4yL9HlJ9ff3t27fXr19v7CkuLn7jjTcqKiqKiopmz5596tSpsrIy/hESAFidFg6HzZ7hYdE0e66uS+vKCeeYPQVgW3b9EZN/SJR+yQ4A8IggSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEaLMHuCB+Hy+3t5el8uVnZ1t7Ozv7z937tyMGTPS09NNnM1CNE2Fw/d+AQCms0CQqqurP/roo5ycHK/XO2XKlHfffTcmJqalpaW2tnb+/PldXV0//vGPX3vtNbPHtIBw+P8UiBoBEEV6kM6cOdPY2NjZ2RkfH6+UKigo2L9//7Jly6qqqhobG91ut9/vz8vLW7JkSXJystnDWkCkSYoaAZBHepDi4uL27NkTqZFSKjk5+fLlyx0dHXFxcW63Wynlcrlyc3M9Hs89g2RczfN6vZM2s0yRDt1zD2UCbMxCNzWkB2n69OnTp0+PvO7t7W1ra1u/fr3X683IyDDeExsbe7/e0CHD6Ct1d+0BYGPGYVAb+9dSYSzzlN3AwMCaNWtKS0szMzN1XR/9lXU6nWEOrg/GuFJnXLsDACGsEaSTJ08uXbp01apVpaWlSqno6OhQKGT8qa7rTqfTvOks4677RjQJgCgWCNKRI0fWrVtXVVW1du3ayJ5p06Z1d3cbbwgGgzk5OSZNZyVjTyM5sQQgh/Qg9ff3l5WVbdmy5cUXXxweHh4eHtZ1fe7cuUqp9vZ2pZTP5/N4PPPmzTN7UgDAuEh/qKG+vv727dvr16839hQXF7/xxhtbt24tLy9PTU3t7u6ura1NSEgwcUjL4cQIgECajR8H0DR7rq5L68oJc4kSeFjs+iMm/5Ao/ZIdAOARQZAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIEGX2AP8PnZ2dCxYsiLz2+/0XLlww/igtLW3q1KkmzQUAmACWCdLu3bsbGho6Ozsjm83NzTt27IiJiYls1tXVGa0CAFiRBYJ08+bN2tra1tbW2NhYY+fp06crKiqKi4tNHAwAMIEscA9p586dLpdr06ZNo3eePXs2JSXF7/cPDw9/yWfT/+shzwgAQlnoMGiBM6TKykqHw9He3m7s0XX94sWL1dXVgUAgGAwWFhbW1NTc87Ner3eyxgQAiYzDoKZp5k7ylSxwhuRw3D3k1atX8/Pz9+zZc/To0UOHDnV0dDQ0NJgyGwBgolggSGMlJSXt2rUrKSlJKZWYmJifn9/V1WX2UACAcbFkkHp7e5uamozNoaGhsWdRAABrseRx/M6dO5WVlT6fTyk1MDDQ1tZWUFBg9lAAgHGxwEMNY6Wnp1dUVBQVFc2ePfvUqVNlZWX8IyQAsDotHA6bPcPDomn2XF2X1pUTzjF7CsC27PojJv+QaMlLdgAA+yFIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARLBSkDo7O0dv9vf3Hzx40Ov1mjXPJNM07Sv3AIB1WSZIu3fvrqioMDZbWlpWrFjR2tpaUlJSV1dn4mCTJhwOjy6QpmnhcNjEeQBgYkWZPcBXu3nzZm1tbWtra2xsbGSPrutVVVWNjY1ut9vv9+fl5S1ZsiQ5OdncOSdBpEn/VP+kRgDsxwJB2rlzp8vl2rRp0+9+97vIno6Ojri4OLfbrZRyuVy5ubkej+eeQUpPT4+8sM2VPaNJXVqX2bMAsADjMCifBYJUWVnpcDja29uNPcFgMCMjw9iMjY29X29s0yFD5NyIMyQAD8g4DMq/62yBe0gOx91D6ro++ivrdDofkaOz0aG77icBgA1YIEhjRUdHh0IhY1PXdafTaeI8k+OusyKaBMBmLBmkadOmdXd3G5vBYDAnJ8fEeSbH2LPAR+S8EMAjwpJBmjt3rlIqclfJ5/N5PJ558+aZPRQAYFws8FDDWA6HY+vWreXl5ampqd3d3bW1tQkJCWYPBQAYFzs/rMWjaABgkH9ItOQlOwCA/RAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIkSZPcDX5Pf7L1y4YGympaVNnTrVxHkAAONk1SA1Nzfv2LEjJiYmsllXV7dgwQJzRwIAjIdVg3T69OmKiori4mKzBwEATAyr3kM6e/ZsSkqK3+8fHh42exYAwATQwuGw2TP8v+m6PmvWrCeeeCIQCASDwcLCwpqamrFv0zQtLS0t8trr9U7ujAAgQnp6euRFT0+P8AO+JYN06dKl2traDRs2JCUlDQwMLF++vKSkZOXKlXe9TdMsuToAeBjkHxKlz/cgqqurb9269eabb961X/5XHwAmjfxDoiXvIfX29jY1NRmbQ0NDDoclFwIAMFjyOH7nzp3Kykqfz6eUGhgYaGtrKygoMHsoAMC4SD+Du5/6+vpt27bNnj371KlTZWVla9euHfse+eenADBp5B8Spc83HvK/+gAwaeQfEi15yQ4AYD8ECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgWDlJ/f//Bgwe9Xq/Zg0y29PR0s0d4KOy6LmXfpbEuTCyrBqmlpWXFihWtra0lJSV1dXVmjwMAGK8oswf4OnRdr6qqamxsdLvdfr8/Ly9vyZIlycnJZs8FAPj6LHmG1NHRERcX53a7lVIulys3N9fj8Zg9FABgXCx5hhQMBjMyMozN2NjY+91J0jRtsoaaVKzLcuy6NNaFCWTJIOm6Pvrbxel0hsPhsW+7504AgEyWvGQXHR0dCoWMTV3XnU6nifMAAMbPkkGaNm1ad3e3sRkMBnNyckycBwAwfpYM0ty5c5VS7e3tSimfz+fxeObNm2f2UACAcdEseqPl448/Li8vT01N7e7urqmpWbRokdkTAQDGxapBAgDYjCUv2QEA7IcgAQBEIEgAABGcVVVVZs8w8fr7+48dOzYyMvLtb3/b7FkmTGdn58yZM41Ne6zR5/MdP3781q1b3/nOd4ydNlia1+v917/+5XA44uPjjZ02WFfEiRMnnE5nbGxsZNMG6/L7/WfOnLn8X1OmTImJiVF2WdrRo0evXbv23e9+19gpdl02DFJLS8vrr78+NDS0d+/eYDD47LPPmj3RBNi9e3ddXd3atWsjm/ZYY3V19e9///svvvjiL3/5y/79+xcvXhwVFWWDpW3fvn3Xrl2Dg4NvvfXW4ODg008/rezyv0wp5fP5ioqKfvCDH6SkpCi7rOv999/fsGHDBx98sH///v3792dlZc2cOdMGS2tvb1+7du2dO3cOHDjwt7/9bdmyZZqmiV5X2F5GRkaysrJ6enrC4fCNGzfmzJnzn//8x+yhxiUQCGzYsCErK+u5556L7LHHGk+fPv39738/EAhENhcvXvznP//ZBkvr6ekx1nXt2rWMjIwbN27YYF0RQ0NDBQUFL7zwQmtra9gu34rhcPhXv/rVvn37Ru+xwdJGRkaeffbZjz/+OLL5ox/96MCBA8LXZbd7SPb7ReA7d+50uVybNm0y9thjjXFxcXv27DGuaCUnJ1++fNkGS0tJSWlubo6sKyoqKhQKjYyM2GBdEdu2bVu4cGFkIcou34pKqbNnz6akpPj9/uHh4cgeGyzt0KFDSUlJzzzzTGTz73//+6JFi4Svy25BevBfBG4VlZWVv/71r7/5zW8ae+yxxunTp8+fPz/yure3t62tbeHChTZYmsPhcLvduq43NjauXr36lVdeSUxMtMG6lFKffPLJsWPHXn31VWOPPdal6/rFixerq6sXL1781FNPbdy4UdliacFg8Hvf+95vfvObp556Kjs7+5133lHi12W3ID3gLwK3EIfj7v9HNlvjwMDAmjVrSktLMzMzbbO0QCAwODiYmJh4+PDhmzdv2mBdn332WWVl5bZt20bvtMG6lFJXr17Nz8/fs2fP0aNHDx061NHR0dDQYIOl+Xy+1tbWWbNmnTx5sqGh4e233+7s7BS+LrsF6VH4ReB2WuPJkyeXLl26atWq0tJSZaOlJSQkrF69eu/evY899th7771ng3Vt2bLlySef7Ovra29vDwQCZ86c8Xq9NliXUiopKWnXrl1JSUlKqcTExPz8/K6uLhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":58533,"title":"ICFP 2023:Orchestra Solve all X Linear Stage Problems (23:27)","description":"The ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net happiness. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. Vector check is being done with a prior Cody 1446 solution variant.  Volume per musician was allowed but not in this Challenge. Happiness drops off as the square of distance between musician and attendee.\r\nThe ICFP 2023 site will hopefully have contestant writeups. The ICFP 2023 Orchestra Spec shows details of the contest. I modified the problem contents to the sufficient elements regarding the stage. The joys of JSON can be viewed. The musician types were upgraded by 1 to be non-zero based.\r\n\r\nThis Challenge is to place the musicians onto the stage,mxy, of Problems 23 thru 27 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than a min_score; The min_scores were selected as the minimums of using either provided Happiness table. The standard inputs are detailed in the function template and include axy-attendee positions, am-attendee happiness factors to each instrument, mu-instruments of each musician, stage limits-[xmin xmax ymin ymax]. This stage is a line of ymin=ymax=10, xmin=10, and xmax=990, seen in the image below. The special performance tables provide Joy values for Musician types vs X. Table mscrit, matrix_score_XvsType, assumes no neighbors and mscrit10 assumes neighbors at +/-10 blocking thus gives less Joy.\r\nIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared. \r\nPlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information. Trying both tables will show neither Happiness table is optimal for all cases. Six problems can be handled well in under 5 seconds using Matlab.\r\n \r\nThis is the Orchestra room problem 22 showing the attendees and the stage.  The Greedy solutions show that 1/d^2 is a main driver with musicians clustered around the handful of attendees closest to the stage. A d=1000 really reduces Joy. \r\nThe stage is the line on the bottom at Y=10 extending in X 10:990 .","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 895.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 447.75px; transform-origin: 407px 447.75px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 126px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 63px; text-align: left; transform-origin: 384px 63px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 367px 8px; transform-origin: 367px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net happiness. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. Vector check is being done with a prior Cody 1446 solution variant.  Volume per musician was allowed but not in this Challenge. Happiness drops off as the square of distance between musician and attendee.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 201.5px 8px; transform-origin: 201.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 site will hopefully have contestant writeups. The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 96.5px 8px; transform-origin: 96.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. I modified the problem contents to the sufficient elements regarding the stage. The joys of JSON can be viewed. The musician types were upgraded by 1 to be non-zero based.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 366px 8px; transform-origin: 366px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place the musicians onto the stage,mxy, of Problems 23 thru 27 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than a min_score; The min_scores were selected as the minimums of using either provided Happiness table. The standard inputs are detailed in the function template and include axy-attendee positions, am-attendee happiness factors to each instrument, mu-instruments of each musician, stage limits-[xmin xmax ymin ymax]. This stage is a line of ymin=ymax=10, xmin=10, and xmax=990, seen in the image below. The special performance tables provide Joy values for Musician types vs X. Table mscrit, matrix_score_XvsType, assumes no neighbors and mscrit10 assumes neighbors at +/-10 blocking thus gives less Joy.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375px 8px; transform-origin: 375px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.5px 8px; transform-origin: 375.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information. Trying both tables will show neither Happiness table is optimal for all cases. Six problems can be handled well in under 5 seconds using Matlab.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 319.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 159.75px; text-align: left; transform-origin: 384px 159.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 860px;height: 314px\" src=\"data:image/png;base64,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58+vNma2GiGE++67L5fLtbe3VxazWYqJiYkHH3zwV4e86EUvmjdvXshwNe688859+/b98R//cbUxg6U4rFf86le/OnDgQGXcyGA1QggPP/zw3XfffeDAga6urmpjNksRDh1Yc7lcR0dHtTGz1aBexK1E2rlz51/+5V8ePHjw2muvLRaL55xzTrPXKFJf+tKXtm3b9s53vrOyOG01Ul+iK6+88gtf+MLvf//7f/u3f7vpppvOP//8E044IZulCCF87nOfu/rqq5999tkvf/nLzz777Ctf+cqQ1Y5RMTY2tmHDhle84hWnnnpqyHApvv3tb3/4wx++5ZZbbrrppptuumnFihWnnHJKNqsxODj4zne+88CBAzfffPN3v/vdN77xjS0tLdksxa5duz74wQ/edMi//uu/Pvfcc6997WuzWY2vfe1rH/vYxw4ePPitb31r9+7dr3vd60KGR4z+/v5PfepTzz333Ne+9rUnnnji7LPPDhmuBvVUJmmef/75FStWPPTQQ+Vy+be//e0ZZ5zxP//zP81eqYjs37//wx/+8IoVK171qldVWqatRupL9MADD7zsZS/bv39/ZfH888//zne+k81SlMvlhx56qFqNffv29fT0/Pa3v81sNcrl8sGDBy+44ILXvOY1AwMD5azuIxUf/OAHr7vuuqkt2azG888/f8455/zoRz+qLL7+9a+/+eabs1mKwwwNDZ177rn79+/PZjVKpdLy5csrG/jkk08uX778gQceyGYpyuXyT3/605e97GWPPvpouVx+9tlnX/va1/70pz/NbDWoL89uJc/Q0FBHR0c+nw8hdHZ29vb2Dg8PN3ulIvL5z3++s7PzqquuqrZMW43Ul6ijo+Oaa66p3jXX3d39q1/9KpulCCGceuqpO3bsqFTjhBNOmJycfP755zNbjRDCZz/72XXr1lU2M2R1H6n42c9+duqpp05MTDz33HOVlmxW4/bbb1+8eHHlVH0I4Xvf+955552XzVJM9cwzz1x++eVXXXXV/PnzM1uNycnJF77whSGEE088saWl5eDBg5ktxZ49e3p7exctWhRCmDdv3sqVKwcGBjJbDepL3EqeYrHY09NTXWxvbx8dHW3i+kTpiiuu+NCHPvQHf/AH1ZZpq5H6Ei1atGjNmjWVf967d++tt966bt26bJYihNDa2prP50ul0vbt29/+9re/733vW7hwYWarcdddd/34xz/+wAc+UG3JbClKpdIvfvGLK6+88vzzzz/99NM/+tGPhqxWo1gsnnzyyR/72MdOP/30M88885/+6Z9CVksx1bXXXtvT03PuueeGrFajtbV169atmzdv3rZt28aNGyt3IGezFCGEtra2X/7yl9XFJ598ct++fZmtBvUlbiVPqVRqaWmpLuZyuXJmfjyttfXwHjttNbJToscff/wd73jH5s2bly9fnvFS7N+//9lnn124cOEdd9zxxBNPZLMaTz311BVXXPHZz352amM2SxFCeOyxx9avX3/NNdfceeedt99++9DQ0A033JDNaoyNjQ0MDLz85S+///77b7jhhq985Su7du3KZimqDhw48PWvf/39739/ZTGz1bj77rtPPPHEl7zkJR0dHXv27HnmmWcyW4o1a9bs27evv7//rrvu+sY3vvHAAw/U2vAsVIP6EreSp62tbXJysrpYKpVyuVwT16e5pq1GRkp0//33v+ENb3jrW9+6efPmkO1ShBC6urre/va3X3vttSeeeOI3v/nNbFbjM5/5zEtf+tJHHnlkcHBw//79Dz744OjoaDZLEUJYvHjx1VdfvXjx4hDCwoUL169ff88992SzGqeccsqSJUs2bNgQQigUCuvWrbv55puzWYqqW2655eSTTz799NMri9msxg9+8IN77733hhtu2Lhx4zXXXBNC+OpXv5rNUoQQ5s+f/61vfWvv3r1XX331U089dcEFF8ybNy+z1aC+xK3kWbBgwcjISHWxWCyuXLmyievTXNNWIwsl+uEPf/iud71r69at1Tc0ZrYUe/bsue6666qLCxcu/PWvf53NanR1dT399NPXX3/99ddf/+ijjw4ODg4PD2ezFCGEvXv33njjjdXFgwcPtra2ZrMaL37xi6cu5nK5XC6XzVJUDQ4Orl+/vrqYzWoUi8VCoVCNCqeccsr4+Hg2SxFC+N3vfvf0009/8YtfvP7669///vf/4he/WLFiRWarQZ1F+2YO6qBUKr3qVa+6/fbby+XyQw89dNppp+3bt6/ZKxWp22+/vfpmwmmrkfoSPfLIIytWrLj11lsPHvL8889nsxTlcvmhhx5avnz5z3/+83K5vG/fvjVr1vznf/5nZqtR9Rd/8ReVNxNmthS7d++uvnXtscceW7NmzdDQUDarcfDgwbPPPvvWW28tl8u//e1vzz333DvvvDObpag655xzKptZkc1qPPDAA6eddlpl8HzyySdf//rX33jjjdksRblcfvTRR5cvX/7YY4+Vy+V77733la985ZNPPpnZalBf4lYi3XnnnWvWrHnb29525pln3nzzzc1enahNjVvlGtVId4k+/elPL/u/PvGJT5QzWYqKb3/722ecccY73vGOM84448tf/nKlMbPVqKjGrXKGS3HdddetWLHibW9724oVK7761a9WGrNZjf/6r/96zWtes2HDhjPPPPOLX/xipTGbpSiXy6VSadmyZYdNkbNZjX/5l38588wzKxv4qU99qtKYzVKUy+V//ud/XrFixcaNG1/zmtfceeedlcbMVoM6ail7vC+xnnnmmRe+8IVHvj0im6atRjZLlM1STE5OTkxMvPjFLz7sHvpsVmNa2SzF5OTks88+e4wbnvpq/P73v29ra7OPzCCD1ajsI/PmzdMxQgilUunAgQNTX4Bckc1qUC/iFgAAQENI5AAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA3x/wBGy4eyhxu+RgAAAABJRU5ErkJggg==\" data-image-state=\"image-loaded\" width=\"860\" height=\"314\"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 379.5px 8px; transform-origin: 379.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is the Orchestra room problem 22 showing the attendees and the stage.  The Greedy solutions show that 1/d^2 is a main driver with musicians clustered around the handful of attendees closest to the stage. A d=1000 really reduces Joy. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 210px 8px; transform-origin: 210px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe stage is the line on the bottom at Y=10 extending in X 10:990 .\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mxy=Process_orc(d,mu,axy,am,pxyr,mscrit,mscrit10,min_score);\r\n% Submitting this template will provide interesting tables and figures\r\n%\r\n% d [1000 1000 10 990 10 10] room_width room_h xmin xmax ymin ymax\r\n% mu [1 2 3 4 5 6 7 8 9 3 4 7 2 1 2 4]  the 16 musicians who have various instruments 1:9\r\n% axy [400,2]  (x,y) position for the 400 attendees\r\n% am  [400,9]  Each attendee's happiness co-factors per instrument types 1:9 seen in mu\r\n% mscrit [9,1000]  musician types, x-axis-pos   Score assuming no other musicians\r\n% mscrit10 [9,1000]  musician types, x-axis-pos Score assuming musicians at +/-10 blocking\r\n\r\n% No two mu may be within 10 of one another\r\n% If any other mxy is within a distance of 5 from the segment axy_i to mxy_j then Happiness_i_j=0\r\n%  This stage is on a line so there is minimal blocking\r\n%  The min distance from point to a segment is Cody \r\n%   https://www.mathworks.com/matlabcentral/cody/problems/1446\r\n%   The smallest solutions are often very slow\r\n%\r\n% Happiness_i_j=1000000*am(i,mu(j))/d2am(i,j); where d2am(i,j) distance squared axy_i,mxy_j\r\n% Score is sum of Happiness\r\n% Best known solution is 47221761 for problem 22\r\n\r\n% min_score of 46M can be achieved with either mscrit or mscrit10.\r\n\r\n  mxy=ones(length(mu),2)*d(5); % d(5) is ymin. This problem's stage is a line\r\n  mxy(:,1)=0;\r\n  \r\n  %Greedy Algorithm Scheme\r\n  %Place best scoring (Musician_type,X) of table type being used\r\n  % find [mu_type,x-position] of maximum score available in updating Table\r\n  % find musician of mu_type remaining to be placed, mu_loc\r\n  % mxy(mu_loc,1)=x-position\r\n  % clear placed mu \r\n  % if no musician of mu_type remains clear table of mu_type, wT(mu_type,:)=-Inf\r\n  % clear table for x_position +/-9 for all mu_type\r\n  % repeat until all musicians placed\r\n  \r\n  % Next line commented to execute greedy\r\n  mxy(:,1)=10:10:10*length(mu); % Template weak solution to see Tables and figures.\r\n  \r\n  % Working tables that will be destroyed\r\n  wmu=mu;      % vector of musician types\r\n  wT=mscrit;   % Scores of musician type vs X assuming no neighbors blocking\r\n  wT=mscrit10; % Scores of musician type vs X assuming +/-10 are occupied and block\r\n  \r\n  tic\r\n  while nnz(mxy(:,1)==0)\r\n   if toc\u003e1,break;end % avoiding infinite loop\r\n   [mu_type,x]=find(wT==max(wT(:)),1,'first');\r\n   % 6  more lines here for a  complete greedy algorithm\r\n   %\r\n   % Block X-positions less than 10 of placed musician,assuming integers only, for all types\r\n   wT(:,x-9:x+9)=-Inf; % 0 is not sufficient as values may be negative\r\n  end % while mxy has unfilled cells\r\n  \r\n  %Greedy algorithm may be based on first/last/random max value\r\n  % The threshold may also be varied to .98*max() and then randomly select node to play\r\n  \r\n  \r\n  %mxy(:,2)=ymin;\r\n  %mxy(1,1)=10; %Manual entry\r\n  % ...\r\n  %mxy(16,1)=990;\r\n  \r\n  %mxy(:,1)=[10 40 ... 990];\r\nend\r\n","test_suite":"%%\r\n%Google Drive Dowloads need to come from shared files\r\n% Tweak link: file/d/ to uc?export=download\u0026id=   while removing /view?usp=sharing\r\n% https://drive.google.com/file/d/1v3GsGgP3p905wzdvUqypL_-djYmxiyzK/view?usp=sharing\r\n% https://drive.google.com/uc?export=download\u0026id=1v3GsGgP3p905wzdvUqypL_-djYmxiyzK\r\n fname='orc_d_mu_axy_am_pxyr.mat';\r\n %orc is a cell array orc{90} for the 90 Problems in ICFP 2023 Orchestra Competition\r\n \r\n % fn.mat  https://drive.google.com/file/d/10GsOZTIjzMIuO7xAYIqLT1zIq9Cyubl-/view?usp=drive_link\r\n % Google Gives warning thus aborts urlwrite\r\n %\r\n %fname='orc_d_mu_axy_am_pxyr.pdf'\r\n %Fake name of .pdf on GoogleDrive,  write as a mat\r\n \r\n url='https://drive.google.com/file/d/1mgxzsmVQNXgqHEdd61QR2r0STm3N9lgG/view?usp=drive_link';\r\n ptr=strfind(url,'/view'); % Tweaking the url\r\n url(ptr:end)=[];\r\n url=strrep(url,'file/d/','uc?export=download\u0026id=');\r\n \r\n tic\r\n urlwrite(url,fname); %Writing GoogleDrive orc.pdf into orc.mat\r\n fprintf('Download 14MB Time: %.1f  sec\\n\\n',toc); %14MB download Time, about 1-3 sec\r\n \r\ndir_struct=dir;\r\n\r\nfor i=1:size(dir_struct,1)\r\n fprintf('%i %s %i\\n',i,dir_struct(i).name,dir_struct(i).bytes)\r\nend\r\n\r\nload(fname);\r\nfprintf('\\n\\nmat Load Time: %.1f\\n\\n',toc); %Load Time of orc from .mat, 0.1 sec\r\n\r\npid_offset=22;\r\npid_scores=[28e6 55e6 221e6 125e6 110e6];\r\nvalid=1;\r\nfigptr=0;\r\n%fname='orc_d_mu_axy_am_pxyr.mat'  orc cell array of size 90\r\ntic\r\nfor pid=23:27\r\n%pid=22; % Stage is a Line [10:990, 10:10] in what they call [X,Y]\r\nmin_score=pid_scores(pid-pid_offset); %Best known score 47221761  22/46M 23/28M/32M 24/55M/55M 25/221M/224M\r\n%26/127M/127M 27/111.7M/111.69M\r\nd=orc{pid}.d; %[1000 1000 10 990 10 10] room_width room_h xmin xmax ymin ymax\r\nmu=orc{pid}.mu; %[1 2 3 4 5 6 7 8 9 3 4 7 2 1 2 4]\r\naxy=orc{pid}.axy; %[400,2]\r\nam=orc{pid}.am;  %[400,9]  there are 9 musician types 1:9 seen in mu\r\npxyr=orc{pid}.pxyr; %[0,3] Pillars that do not exist in pid 22\r\nrw=d(1);rh=d(2);xmin=d(3);xmax=d(4);ymin=d(5);ymax=d(6);\r\nfprintf('xmin:%i xmax:%i ymin:%i ymax:%i\\n\\n',d(3:6));\r\n\r\n Lmu=length(mu); % number of musicians\r\n nmut=max(mu); % number of musician types\r\n na=size(axy,1); % number of attendees\r\n mscr=zeros(Lmu,1); % Track individual scores\r\n %mscrji=zeros(Lmu,na); % Scores of all attendees to placed musician location\r\n mscrit=zeros(nmut,rw);\r\n mscrit10=zeros(nmut,rw);\r\n d2am=zeros(na,Lmu); \r\n d2ax=ones(na,xmax)*Inf; \r\n \r\n for x=xmin:xmax\r\n  d2ax(:,x)=sum((axy-[x,ymin]).^2,2);\r\n end\r\n \r\n myj=10;\r\n myk=10;\r\n for i=1:na\r\n   ax=axy(i,1);\r\n   ay=axy(i,2);\r\n   for k=1:nmut\r\n    for x=xmin:xmax\r\n     mscrit(k,x)=mscrit(k,x)+1000000*am(i,k)/d2ax(i,x); % Calc k,x assume no issues\r\n     \r\n    %Calc Dist from vector [(mxj,myj),(ax,ay)] to point [mxk,myk]\r\n    %dist2 (x+10,ymin,x,ymin,ax,ay)\u003c=25 % x+10\r\n    mxj=x;\r\n    mxk=x+10; %check if adj blocks\r\n    d2=100; % set to valid\r\n    sL2=(mxj-ax)^2+(myj-ay)^2;\r\n    t=( (mxk-mxj)*(ax-mxj)+(myk-myj)*(ay-myj) )/sL2;\r\n    if t\u003e=0\r\n     if t\u003c=1\r\n      sx=mxj+t*(ax-mxj);\r\n      sy=myj+t*(ay-myj);\r\n      d2=(mxk-sx)^2+(myk-sy)^2;\r\n     end\r\n    end\r\n    if d2\u003c=25,continue;end\r\n    \r\n    %dist2 (x-10,ymin,x,ymin,ax,ay)\u003c=25 % x-10\r\n    mxk=x-10; % check if adj blocks\r\n    d2=100; % set to valid\r\n    sL2=(mxj-ax)^2+(myj-ay)^2;\r\n    t=( (mxk-mxj)*(ax-mxj)+(myk-myj)*(ay-myj) )/sL2;\r\n    if t\u003e=0\r\n     if t\u003c=1\r\n      sx=mxj+t*(ax-mxj);\r\n      sy=myj+t*(ay-myj);\r\n      d2=(mxk-sx)^2+(myk-sy)^2;\r\n     end\r\n    end\r\n    if d2\u003c=25,continue;end\r\n    \r\n     % Calc k,x assumes possible blocks\r\n     mscrit10(k,x)=mscrit10(k,x)+1000000*am(i,k)/d2ax(i,x); \r\n    end % x\r\n  end % k nmut\r\n end % i na\r\n\r\n%Main Function Call\r\nmxy=Process_orc(d,mu,axy,am,pxyr,mscrit,mscrit10,min_score);\r\n\r\n%Fixing out of bounds values\r\nmxy(:,2)=ymin;\r\nmxy(mxy(:,1)\u003cxmin,1)=xmin-10; \r\nmxy(mxy(:,1)\u003exmax,1)=xmin-10;\r\n\r\n%Any players with distance\u003c10 from any other player gets put to xmin-10\r\n\r\ngap_fail=mu\u003eInf; % Logical zero of size mu\r\nfor i=1:length(mu)\r\n mxy_dist=(mxy(:,1)-mxy(i,1)).^2;\r\n mxy_dist(i)=100; % set self distance to 100\r\n if min(mxy_dist)\u003c100, gap_fail(i)=1;end\r\nend\r\nmxy(gap_fail==1,1)=xmin-10; % Throw all gap failers to xmin, No pts will be scored \r\n\r\n% Calc dist squared from each a(attendee) to each m(Musician)\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n scr=0;\r\n \r\n for i=1:na\r\n   ax=axy(i,1);\r\n   ay=axy(i,2);\r\n   \r\n  for j=1:Lmu\r\n   %mscrji(j,i)=1000000*am(i,mu(j))/d2am(i,j); % Calc i,j assume no issues\r\n   \r\n   mxj=mxy(j,1);\r\n   if mxj\u003cxmin,continue;end % Skip failed musician placements\r\n   myj=mxy(j,2);\r\n   blocked=0;\r\n   \r\n   for k=1:Lmu %check of musician mxy(k,:) blocks mxy(j,:) from LOS to axy(i,:)\r\n    if k==j,continue;end % can't block self\r\n    mxk=mxy(k,1);\r\n    if mxk\u003cxmin,continue;end % Skip failed musician placements\r\n    myk=mxy(k,2);\r\n    \r\n    %Calc Dist from vector [(mxj,myj),(ax,ay)] to point [mxk,myk]\r\n    d2=100; % set to valid\r\n    sL2=(mxj-ax)^2+(myj-ay)^2;\r\n    t=( (mxk-mxj)*(ax-mxj)+(myk-myj)*(ay-myj) )/sL2;\r\n    if t\u003e=0\r\n     if t\u003c=1\r\n      sx=mxj+t*(ax-mxj);\r\n      sy=myj+t*(ay-myj);\r\n      d2=(mxk-sx)^2+(myk-sy)^2;\r\n     end\r\n    end\r\n    \r\n    if d2\u003c=25  %No one musician adj to vector within 5 or 25 for dist squared\r\n     blocked=1;\r\n     break; %exit upon block determination\r\n    end\r\n \r\n   end % k Lmu\r\n   % Blocked musician-j by any musician scores 0 for this attendee-i\r\n   if blocked==1,continue;end \r\n   \r\n   %musicians play different instruments\r\n   %attendees have like(+) and dislike(-) negative co-factors\r\n   %mu(j) gives instrument of musician\r\n   %am(i,mu(j)) gives attendee Happiness for insturment mu(j)\r\n   mscr(j)=mscr(j)+1000000*am(i,mu(j))/d2am(i,j); %Tracking indiv musician score\r\n   scr=scr+1000000*am(i,mu(j))/d2am(i,j);\r\n  end % j Lmu\r\n end % na\r\n \r\n \r\n for i=1:Lmu\r\n  fprintf('Player %2i xpos: %3i  Instr:%2i  scr: %10.0f\\n',i,mxy(i,1),mu(i),mscr(i));\r\n end\r\n fprintf('\\n');\r\n \r\n fprintf('Total scr: %.0f   Min Score: %.0f********************\\n\\n',scr,min_score);\r\n \r\n %fprintf('%i ',mxy(:,1));fprintf('\\n\\n');\r\n \r\n fprintf('Table of max Happiness X per Musician Type\\n');\r\n for i=1:nmut % 9\r\n  fprintf('Musician Type-%2i  x: %3i  H: %9.0f\\n', ...\r\n      i,find(mscrit(i,:)==max(mscrit(i,:)),1,'first'),max(mscrit(i,:)));\r\n end\r\n \r\n %fprintf('\\nTable of max Happiness per Musician Type; assumes adjacent Musicians blocking\\n');\r\n %for i=1:nmut % 9\r\n % fprintf('Musician Type-%i  x: %3i  H: %9.0f\\n', ...\r\n %     i,find(mscrit10(i,:)==max(mscrit10(i,:)),1,'first'),max(mscrit10(i,:)));\r\n %end\r\n \r\n \r\n fprintf('\\n\\nThe following lines are the titles for the figures lower down:\\n');\r\n %Figures/Titles\r\n fprintf ('Problem: %i Orchestra\\n',pid)\r\n \r\n figptr=figptr+1;\r\n figure(figptr);\r\n plot(axy(:,1),axy(:,2),'.k');hold on  % Attendees\r\n axis tight; %axis equal\r\n for i=1:size(pxyr,1) % rectangle -no matrix allowed  Pillars fast draw\r\n  rectangle('Position',[pxyr(i,1:2)-pxyr(i,3) 2*pxyr(i,3) 2*pxyr(i,3)],'Curvature',[1 1],'FaceColor',[.9 .4 .8])\r\n end\r\n room= [0 0;rw 0;rw rh;0 rh;0 0];\r\n stage=[xmin ymin;xmax ymin;xmax ymax;xmin ymax;xmin ymin];\r\n plot(stage(:,1),stage(:,2),'k');\r\n plot(room(:,1),room(:,2),'Color',[1 0 1]);\r\n plot(mxy(:,1),mxy(:,2),'.r'); % Musicians\r\n hold off\r\n \r\n figptr=figptr+1;\r\n %Plot of Happiness for each Musician Type as a function of X with No blocks\r\n fprintf('Musician Types-1:%i rgb Happiness vs X No Blocks\\n\\n',nmut);\r\n figure(figptr);plot((1:rw)',mscrit(1,:)','.r');hold on;\r\n for i=2:nmut % 123 456 789 groups \r\n  plot((1:rw)',mscrit(i,:)','.r');\r\n end\r\n hold off\r\n\r\n%Plot of Happiness for each Musician Type as a function of X with No blocks\r\n% for i=1:ceil(nmut/3) % 123 456 789 groups \r\n%  fprintf('Musician Types-%i:%i rgb Happiness vs X No Blocks\\n', ...\r\n%      3*(i-1)+1,3*(i-1)+3);\r\n%  figure(i);plot((1:rw)',mscrit(3*(i-1)+1,:)','.r');hold on;\r\n  %figure(i);plot((1:rw)',mscrit(3*(i-1)+2,:)','.','Color',[0 .8 0]);\r\n  %figure(i);plot((1:rw)',mscrit(3*(i-1)+3,:)','.b');hold off;\r\n% end\r\n \r\n %Plot of Happiness for each Musician Type as a function of X with blocks\r\n %for i=1:ceil(nmut/3) % 9\r\n % fprintf('Musician Types-%i:%i rgb Happiness vs X with Blocks\\n', ...\r\n %     3*(i-1)+1,3*(i-1)+3);\r\n % figure(i+3);plot((1:rw)',mscrit10(3*(i-1)+1,:)','.r');hold on\r\n  %figure(i+3);plot((1:rw)',mscrit10(3*(i-1)+2,:)','.','Color',[0 .8 0]);\r\n  %figure(i+3);plot((1:rw)',mscrit10(3*(i-1)+3,:)','.b');hold off\r\n% end\r\n \r\nif scr\u003c=min_score\r\n fprintf('Score too Low. Pid:%i  %.0f   Min_Score: %.0f\\n',pid,scr,min_score);\r\nend\r\nvalid= valid \u0026\u0026 scr\u003emin_score; % Merging all\r\nfprintf('Total Elapsed Time thru pid:%i  %0.1f sec\\n\\n\\n',pid,toc); % Time thru challenge\r\nend\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-16T04:19:58.000Z","deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-15T18:46:56.000Z","updated_at":"2023-07-16T04:19:58.000Z","published_at":"2023-07-16T04:19:58.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net happiness. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. Vector check is being done with a prior Cody 1446 solution variant.  Volume per musician was allowed but not in this Challenge. Happiness drops off as the square of distance between musician and attendee.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 site will hopefully have contestant writeups. The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. I modified the problem contents to the sufficient elements regarding the stage. The joys of JSON can be viewed. The musician types were upgraded by 1 to be non-zero based.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place the musicians onto the stage,mxy, of Problems 23 thru 27 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than a min_score; The min_scores were selected as the minimums of using either provided Happiness table. The standard inputs are detailed in the function template and include axy-attendee positions, am-attendee happiness factors to each instrument, mu-instruments of each musician, stage limits-[xmin xmax ymin ymax]. This stage is a line of ymin=ymax=10, xmin=10, and xmax=990, seen in the image below. The special performance tables provide Joy values for Musician types vs X. Table mscrit, matrix_score_XvsType, assumes no neighbors and mscrit10 assumes neighbors at +/-10 blocking thus gives less Joy.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information. Trying both tables will show neither Happiness table is optimal for all cases. Six problems can be handled well in under 5 seconds using Matlab.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"314\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"860\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the Orchestra room problem 22 showing the attendees and the stage.  The Greedy solutions show that 1/d^2 is a main driver with musicians clustered around the handful of attendees closest to the stage. A d=1000 really reduces Joy. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe stage is the line on the bottom at Y=10 extending in X 10:990 .\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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58+vNma2GiGE++67L5fLtbe3VxazWYqJiYkHH3zwV4e86EUvmjdvXshwNe688859+/b98R//cbUxg6U4rFf86le/OnDgQGXcyGA1QggPP/zw3XfffeDAga6urmpjNksRDh1Yc7lcR0dHtTGz1aBexK1E2rlz51/+5V8ePHjw2muvLRaL55xzTrPXKFJf+tKXtm3b9s53vrOyOG01Ul+iK6+88gtf+MLvf//7f/u3f7vpppvOP//8E044IZulCCF87nOfu/rqq5999tkvf/nLzz777Ctf+cqQ1Y5RMTY2tmHDhle84hWnnnpqyHApvv3tb3/4wx++5ZZbbrrppptuumnFihWnnHJKNqsxODj4zne+88CBAzfffPN3v/vdN77xjS0tLdksxa5duz74wQ/edMi//uu/Pvfcc6997WuzWY2vfe1rH/vYxw4ePPitb31r9+7dr3vd60KGR4z+/v5PfepTzz333Ne+9rUnnnji7LPPDhmuBvVUJmmef/75FStWPPTQQ+Vy+be//e0ZZ5zxP//zP81eqYjs37//wx/+8IoVK171qldVWqatRupL9MADD7zsZS/bv39/ZfH888//zne+k81SlMvlhx56qFqNffv29fT0/Pa3v81sNcrl8sGDBy+44ILXvOY1AwMD5azuIxUf/OAHr7vuuqkt2azG888/f8455/zoRz+qLL7+9a+/+eabs1mKwwwNDZ177rn79+/PZjVKpdLy5csrG/jkk08uX778gQceyGYpyuXyT3/605e97GWPPvpouVx+9tlnX/va1/70pz/NbDWoL89uJc/Q0FBHR0c+nw8hdHZ29vb2Dg8PN3ulIvL5z3++s7PzqquuqrZMW43Ul6ijo+Oaa66p3jXX3d39q1/9KpulCCGceuqpO3bsqFTjhBNOmJycfP755zNbjRDCZz/72XXr1lU2M2R1H6n42c9+duqpp05MTDz33HOVlmxW4/bbb1+8eHHlVH0I4Xvf+955552XzVJM9cwzz1x++eVXXXXV/PnzM1uNycnJF77whSGEE088saWl5eDBg5ktxZ49e3p7exctWhRCmDdv3sqVKwcGBjJbDepL3EqeYrHY09NTXWxvbx8dHW3i+kTpiiuu+NCHPvQHf/AH1ZZpq5H6Ei1atGjNmjWVf967d++tt966bt26bJYihNDa2prP50ul0vbt29/+9re/733vW7hwYWarcdddd/34xz/+wAc+UG3JbClKpdIvfvGLK6+88vzzzz/99NM/+tGPhqxWo1gsnnzyyR/72MdOP/30M88885/+6Z9CVksx1bXXXtvT03PuueeGrFajtbV169atmzdv3rZt28aNGyt3IGezFCGEtra2X/7yl9XFJ598ct++fZmtBvUlbiVPqVRqaWmpLuZyuXJmfjyttfXwHjttNbJToscff/wd73jH5s2bly9fnvFS7N+//9lnn124cOEdd9zxxBNPZLMaTz311BVXXPHZz352amM2SxFCeOyxx9avX3/NNdfceeedt99++9DQ0A033JDNaoyNjQ0MDLz85S+///77b7jhhq985Su7du3KZimqDhw48PWvf/39739/ZTGz1bj77rtPPPHEl7zkJR0dHXv27HnmmWcyW4o1a9bs27evv7//rrvu+sY3vvHAAw/U2vAsVIP6EreSp62tbXJysrpYKpVyuVwT16e5pq1GRkp0//33v+ENb3jrW9+6efPmkO1ShBC6urre/va3X3vttSeeeOI3v/nNbFbjM5/5zEtf+tJHHnlkcHBw//79Dz744OjoaDZLEUJYvHjx1VdfvXjx4hDCwoUL169ff88992SzGqeccsqSJUs2bNgQQigUCuvWrbv55puzWYqqW2655eSTTz799NMri9msxg9+8IN77733hhtu2Lhx4zXXXBNC+OpXv5rNUoQQ5s+f/61vfWvv3r1XX331U089dcEFF8ybNy+z1aC+xK3kWbBgwcjISHWxWCyuXLmyievTXNNWIwsl+uEPf/iud71r69at1Tc0ZrYUe/bsue6666qLCxcu/PWvf53NanR1dT399NPXX3/99ddf/+ijjw4ODg4PD2ezFCGEvXv33njjjdXFgwcPtra2ZrMaL37xi6cu5nK5XC6XzVJUDQ4Orl+/vrqYzWoUi8VCoVCNCqeccsr4+Hg2SxFC+N3vfvf0009/8YtfvP7669///vf/4he/WLFiRWarQZ1F+2YO6qBUKr3qVa+6/fbby+XyQw89dNppp+3bt6/ZKxWp22+/vfpmwmmrkfoSPfLIIytWrLj11lsPHvL8889nsxTlcvmhhx5avnz5z3/+83K5vG/fvjVr1vznf/5nZqtR9Rd/8ReVNxNmthS7d++uvnXtscceW7NmzdDQUDarcfDgwbPPPvvWW28tl8u//e1vzz333DvvvDObpag655xzKptZkc1qPPDAA6eddlpl8HzyySdf//rX33jjjdksRblcfvTRR5cvX/7YY4+Vy+V77733la985ZNPPpnZalBf4lYi3XnnnWvWrHnb29525pln3nzzzc1enahNjVvlGtVId4k+/elPL/u/PvGJT5QzWYqKb3/722ecccY73vGOM84448tf/nKlMbPVqKjGrXKGS3HdddetWLHibW9724oVK7761a9WGrNZjf/6r/96zWtes2HDhjPPPPOLX/xipTGbpSiXy6VSadmyZYdNkbNZjX/5l38588wzKxv4qU99qtKYzVKUy+V//ud/XrFixcaNG1/zmtfceeedlcbMVoM6ail7vC+xnnnmmRe+8IVHvj0im6atRjZLlM1STE5OTkxMvPjFLz7sHvpsVmNa2SzF5OTks88+e4wbnvpq/P73v29ra7OPzCCD1ajsI/PmzdMxQgilUunAgQNTX4Bckc1qUC/iFgAAQENI5AAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA0hbgEAADSEuAUAANAQ4hYAAEBDiFsAAAANIW4BAAA0hLgFAADQEOIWAABAQ4hbAAAADSFuAQAANIS4BQAA0BDiFgAAQEOIWwAAAA3x/wBGy4eyhxu+RgAAAABJRU5ErkJggg==\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"term":"tag:\"orchestra\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"orchestra\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"orchestra\"","","\"","orchestra","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f234ade7c80\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f234ade7be0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f234ade7320\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f234ade7f00\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f234ade7e60\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f234ade7dc0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f234ade7d20\u003e":"tag:\"orchestra\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f234ade7d20\u003e":"tag:\"orchestra\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"cody-search","password":"78X075ddcV44","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"orchestra\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"orchestra\"","","\"","orchestra","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f234ade7c80\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f234ade7be0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f234ade7320\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f234ade7f00\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f234ade7e60\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f234ade7dc0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f234ade7d20\u003e":"tag:\"orchestra\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f234ade7d20\u003e":"tag:\"orchestra\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":58773,"difficulty_rating":"easy-medium"},{"id":58533,"difficulty_rating":"medium"}]}}