{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-16T00:12:35.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-16T00: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":58508,"title":"ICFP 2023: Orchestra,  Place Band members to maximize Audience net Happiness ","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 necessary 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 16 musicians,mxy, of Problem 22 onto the stage and score an Attendee happiness score of higher than 19 million; Best known 47221761. The 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.\r\nIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared.\r\nSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2. \r\nPlease submit the template to view the tables and graphs. The graphs will give a great starting point.\r\n \r\nThis is the Orchestra room problem 22 showing the attendees and the stage. \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: 799.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 399.75px; transform-origin: 407px 399.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 necessary 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: 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: 383.5px 8px; transform-origin: 383.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place the 16 musicians,mxy, of Problem 22 onto the stage and score an Attendee happiness score of higher than 19 million; Best known 47221761. The 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.\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: 373px 8px; transform-origin: 373px 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: 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: 350px 8px; transform-origin: 350px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2. \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: 315.5px 8px; transform-origin: 315.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlease submit the template to view the tables and graphs. The graphs will give a great starting point.\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: 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: 244px 8px; transform-origin: 244px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is the Orchestra room problem 22 showing the attendees and the stage. \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);\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\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 for 10 separation\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  mxy=zeros(length(mu),2);\r\n  mxy(:,1)=10:10:160;\r\n  \r\n  %mxy(:,2)=ymin;\r\n  \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]; %Tighter manual entry\r\n\r\n% One solution method would use the Test Suite created Tables/Figures.\r\n% Deconflict x-values and find good performing x-values for each musician\r\n% mu       [ 1   2  3  4  5   6   7   8  9  3  4   7   2  1   2  4] are instrument types\r\n% mxy(:,1)=[71 702 72 72 72 165 702 702 72 72 72 702 702 71 702 72] %from Table of X-Peak Happiness by instrument type\r\n% mxy(:,1)=[] %Need to deconflict x-locactions,\u003e=10 separations, using Happiness figures,xmin=10 \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); %Taking GoogleDrive orc.pdf into orc.mat\r\n fprintf('Download 14MB Time: %.1f  sec\\n\\n',toc); %14MB download Time\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\ntic\r\nload(fname);\r\nfprintf('\\n\\nmat Load Time: %.1f\\n',toc); %Load Time of orc from .mat\r\n\r\n%fname='orc_d_mu_axy_am_pxyr.mat'\r\npid=22; % Stage is a Line [10:990, 10:10] in what they call [X,Y]\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',d(3:6));\r\nmxy=Process_orc(d,mu,axy,am,pxyr);\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%Using similar triangles for blocking by friend check; Not perfect but good enough for this\r\n%Any players with distance\u003c10 from any other player gets put to xmin-10\r\nLmu=length(mu); % number of musicians\r\nnmut=max(mu); % number of musician types\r\nna=size(axy,1); % number of attendees\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;\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% muscr(j)=muscr(j)+1000000*v(j)*qf(j)*am(i,mu(j))/d2am(i,j);\r\n% Calc dist squared from each a(attendee) to each m(Musician)\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 d2am=zeros(na,Lmu); \r\n d2ax=ones(na,xmax)*Inf; \r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n for x=xmin:xmax\r\n  d2ax(:,x)=sum((axy-[x,ymin]).^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   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 i,j assume no issues\r\n    end\r\n   end\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\r\n    if k==j,continue;end % can't blck 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    %dminp2seg=min(hypot(mxk-linspace(mxj,ax,1e5),myk-linspace(myj,ay,1e5)));\r\n    % Very small but very slow\r\n    %if dminp2seg\u003c5\r\n    % blocked=1;\r\n    % break;\r\n    %end\r\n    \r\n    \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);\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:%i  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 ********************\\n\\n',scr);\r\n \r\n \r\n fprintf('\\n\\nThe following lines are the titles for the 10 figures lower down\\n\\n');\r\n %Figures\r\n %Played Positions and Orchestra room of attendees/pillars\r\n fprintf ('Problem: %i Orchestra\\n',pid)\r\n \r\n figure(10);\r\n plot(axy(:,1),axy(:,2),'.k');hold on\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 %for i=xmin:50:xmax % Sampling of  mscrit  MUT Score across x\r\n   %mscrit=zeros(nmut,rw)\r\n   %mscrit(k,x)=mscrit(k,x)+1000000*am(i,k)/d2ax(i,x); % Calc i,j assume no issues\r\n   %fprintf('%3i: ',i);fprintf('%8.0f ',mscrit(:,i));fprintf('\\n')\r\n %end\r\n \r\n% for i=1:16\r\n%  ptr=find(mscrji(i,:)==max(mscrji(i,:)),1,'first');\r\n%  fprintf('Axy: %3i %3i of Player %2i max score %9.0f\\n',axy(ptr,:),i,max(mscrji(i,:)));\r\n% end\r\n \r\n%Plot of Happiness for each Musician Type as a function of X\r\n for i=1:nmut % 9\r\n  fprintf('Musician Type-%i Happiness vs X;  max Happiness x: %3i  H: %9.0f\\n', ...\r\n      i,find(mscrit(i,:)==max(mscrit(i,:)),1,'first'),max(mscrit(i,:)));\r\n  figure(i);plot((1:rw)',mscrit(i,:)','.r');\r\n end\r\n \r\n %for i=0:4:Lmu-1\r\n % i2=1+i/4;\r\n % fprintf('Player Happiness per Attendee: red:%i  blue %i  k:%i  mag %i\\n',i+1,i+2,i+3,i+4);\r\n % figure(i2);\r\n % %clf(i2);\r\n  %h=title(['Player: ' num2str(i) '  Happiness per Attendee']);\r\n%  figure(i2);plot((1:na)',mscrji(i+1,:)','.r');hold on\r\n%  plot((1:na)',mscrji(i+2,:)','.b');\r\n%  plot((1:na)',mscrji(i+3,:)','.k')\r\n%  plot((1:na)',mscrji(i+4,:)','+m')\r\n%  hold off;\r\n% end\r\n \r\n % for j=2:Lmu\r\n %  plot((1:na)',mscr(j,:)','.k');\r\n % end\r\n % hold off\r\n %end\r\n \r\n % can I overwrite\r\n %ScoringEngineTestPoint1.m 5699 with updated best score info\r\n %Plot Scores in  Output file\r\n \r\n \r\n\r\nvalid=scr\u003e19000000; % Very low threshold,  Good Score 47e6\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-15T12:19:51.000Z","deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2023-07-15T03:09:53.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-13T16:40:00.000Z","updated_at":"2023-07-15T12:19:52.000Z","published_at":"2023-07-14T22:58:31.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 necessary 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 16 musicians,mxy, of Problem 22 onto the stage and score an Attendee happiness score of higher than 19 million; Best known 47221761. The 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.\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\u003eSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2. \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 will give a great starting point.\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. \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":58508,"title":"ICFP 2023: Orchestra,  Place Band members to maximize Audience net Happiness ","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 necessary 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 16 musicians,mxy, of Problem 22 onto the stage and score an Attendee happiness score of higher than 19 million; Best known 47221761. The 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.\r\nIndividual attendee happiness= 1000000*am(i,mu(j))/d2(i,j) for attendee-i and musician-j where d2 is distance squared.\r\nSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2. \r\nPlease submit the template to view the tables and graphs. The graphs will give a great starting point.\r\n \r\nThis is the Orchestra room problem 22 showing the attendees and the stage. \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: 799.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 399.75px; transform-origin: 407px 399.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 necessary 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: 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: 383.5px 8px; transform-origin: 383.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place the 16 musicians,mxy, of Problem 22 onto the stage and score an Attendee happiness score of higher than 19 million; Best known 47221761. The 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.\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: 373px 8px; transform-origin: 373px 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: 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: 350px 8px; transform-origin: 350px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2. \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: 315.5px 8px; transform-origin: 315.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlease submit the template to view the tables and graphs. The graphs will give a great starting point.\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: 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: 244px 8px; transform-origin: 244px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis is the Orchestra room problem 22 showing the attendees and the stage. \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);\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\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 for 10 separation\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  mxy=zeros(length(mu),2);\r\n  mxy(:,1)=10:10:160;\r\n  \r\n  %mxy(:,2)=ymin;\r\n  \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]; %Tighter manual entry\r\n\r\n% One solution method would use the Test Suite created Tables/Figures.\r\n% Deconflict x-values and find good performing x-values for each musician\r\n% mu       [ 1   2  3  4  5   6   7   8  9  3  4   7   2  1   2  4] are instrument types\r\n% mxy(:,1)=[71 702 72 72 72 165 702 702 72 72 72 702 702 71 702 72] %from Table of X-Peak Happiness by instrument type\r\n% mxy(:,1)=[] %Need to deconflict x-locactions,\u003e=10 separations, using Happiness figures,xmin=10 \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); %Taking GoogleDrive orc.pdf into orc.mat\r\n fprintf('Download 14MB Time: %.1f  sec\\n\\n',toc); %14MB download Time\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\ntic\r\nload(fname);\r\nfprintf('\\n\\nmat Load Time: %.1f\\n',toc); %Load Time of orc from .mat\r\n\r\n%fname='orc_d_mu_axy_am_pxyr.mat'\r\npid=22; % Stage is a Line [10:990, 10:10] in what they call [X,Y]\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',d(3:6));\r\nmxy=Process_orc(d,mu,axy,am,pxyr);\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%Using similar triangles for blocking by friend check; Not perfect but good enough for this\r\n%Any players with distance\u003c10 from any other player gets put to xmin-10\r\nLmu=length(mu); % number of musicians\r\nnmut=max(mu); % number of musician types\r\nna=size(axy,1); % number of attendees\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;\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% muscr(j)=muscr(j)+1000000*v(j)*qf(j)*am(i,mu(j))/d2am(i,j);\r\n% Calc dist squared from each a(attendee) to each m(Musician)\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 d2am=zeros(na,Lmu); \r\n d2ax=ones(na,xmax)*Inf; \r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n for x=xmin:xmax\r\n  d2ax(:,x)=sum((axy-[x,ymin]).^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   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 i,j assume no issues\r\n    end\r\n   end\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\r\n    if k==j,continue;end % can't blck 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    %dminp2seg=min(hypot(mxk-linspace(mxj,ax,1e5),myk-linspace(myj,ay,1e5)));\r\n    % Very small but very slow\r\n    %if dminp2seg\u003c5\r\n    % blocked=1;\r\n    % break;\r\n    %end\r\n    \r\n    \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);\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:%i  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 ********************\\n\\n',scr);\r\n \r\n \r\n fprintf('\\n\\nThe following lines are the titles for the 10 figures lower down\\n\\n');\r\n %Figures\r\n %Played Positions and Orchestra room of attendees/pillars\r\n fprintf ('Problem: %i Orchestra\\n',pid)\r\n \r\n figure(10);\r\n plot(axy(:,1),axy(:,2),'.k');hold on\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 %for i=xmin:50:xmax % Sampling of  mscrit  MUT Score across x\r\n   %mscrit=zeros(nmut,rw)\r\n   %mscrit(k,x)=mscrit(k,x)+1000000*am(i,k)/d2ax(i,x); % Calc i,j assume no issues\r\n   %fprintf('%3i: ',i);fprintf('%8.0f ',mscrit(:,i));fprintf('\\n')\r\n %end\r\n \r\n% for i=1:16\r\n%  ptr=find(mscrji(i,:)==max(mscrji(i,:)),1,'first');\r\n%  fprintf('Axy: %3i %3i of Player %2i max score %9.0f\\n',axy(ptr,:),i,max(mscrji(i,:)));\r\n% end\r\n \r\n%Plot of Happiness for each Musician Type as a function of X\r\n for i=1:nmut % 9\r\n  fprintf('Musician Type-%i Happiness vs X;  max Happiness x: %3i  H: %9.0f\\n', ...\r\n      i,find(mscrit(i,:)==max(mscrit(i,:)),1,'first'),max(mscrit(i,:)));\r\n  figure(i);plot((1:rw)',mscrit(i,:)','.r');\r\n end\r\n \r\n %for i=0:4:Lmu-1\r\n % i2=1+i/4;\r\n % fprintf('Player Happiness per Attendee: red:%i  blue %i  k:%i  mag %i\\n',i+1,i+2,i+3,i+4);\r\n % figure(i2);\r\n % %clf(i2);\r\n  %h=title(['Player: ' num2str(i) '  Happiness per Attendee']);\r\n%  figure(i2);plot((1:na)',mscrji(i+1,:)','.r');hold on\r\n%  plot((1:na)',mscrji(i+2,:)','.b');\r\n%  plot((1:na)',mscrji(i+3,:)','.k')\r\n%  plot((1:na)',mscrji(i+4,:)','+m')\r\n%  hold off;\r\n% end\r\n \r\n % for j=2:Lmu\r\n %  plot((1:na)',mscr(j,:)','.k');\r\n % end\r\n % hold off\r\n %end\r\n \r\n % can I overwrite\r\n %ScoringEngineTestPoint1.m 5699 with updated best score info\r\n %Plot Scores in  Output file\r\n \r\n \r\n\r\nvalid=scr\u003e19000000; % Very low threshold,  Good Score 47e6\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-15T12:19:51.000Z","deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2023-07-15T03:09:53.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-13T16:40:00.000Z","updated_at":"2023-07-15T12:19:52.000Z","published_at":"2023-07-14T22:58:31.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 necessary 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 16 musicians,mxy, of Problem 22 onto the stage and score an Attendee happiness score of higher than 19 million; Best known 47221761. The 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.\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\u003eSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2. \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 will give a great starting point.\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. \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,iVBORw0KGgoAAAANSUhEUgAABHoAAAGjCAIAAADcpOViAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wcODyQCgdDtDgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAxNC1KdWwtMjAyMyAwODozNjowMqGEjxwAACAASURBVHic7d19kF11fT/w7+7FjXQts3HdZJqU0B1yc9coYIgEkpH1IUlnsDzoWA0zQR0f6piIYpuxTvGBWERn3WoNVqtQtSpIU2lTwwgzawV2w4pYQKQLZllTIisK0Q0XHJAE7t7fH/eX222yd5Pd3HvueXi9/uJ8uSznfO73fM/3fZ5uS7lcDgAAANRba7NXAAAAIJ3ELQAAgIYQtwAAABpC3AIAAGgIcQsAAKAhxC0AAICGELcAAAAaQtwCAABoCHELAACgIcQtAACAhhC3AAAAGkLcAgAAaAhxCwAAoCHELQAAgIYQtwAAABpC3AIAAGgIcQsAAKAhxC0AAICGELcAAAAaQtwCAABoCHELAACgIcQtAACAhhC3AAAAGkLcAgAAaAhxCwAAoCHELQAAgIYQtwAAABpC3AIAAGgIcQsAAKAhTmj2CsDxamlpqfxDuVxu7poAAMBU4layFQqFZq9CRB566KHKPyxbtqzWZ7JTDQCARhsdHW32KqSBuJV4GdkTqpewjtzeGf5VZhUKBdWoyGApZrjem8Fq1KIUU6lGlVJMpRpV2SyFs9j1Im6ReJU5pUEBACB4ziJmxC2SwXgBAEDiiFsAqeLcBADEh7gFAADp4bxbrIhbAACQGB7NShY/cwwAANAQ4hYpkcE3tHIsdAympWMwLR0DqLsWVyETLZs/BAEQE27pAdLKJLNePLsFAJBaTgpAc7mZEAAAoCFc3QKAOWro5QIXJQBSQNwCAEgtcR2aS9yiUZyXrTslJSZ0RYiGfQ1SQNyCGHFkBaqMAwApIG4BNJmYnSm+buB4GEMSR9yiUYwCdaekxISuCNGwr9WRlEKziFsQI44BwFGZNQIkiLgFANGRkYDjYQxJHHELoMkcO1PG1SeIIfsjzSJuAaSTSX9a+UIBEkTcAgCaw0kBIPXELQCoJ8kBsqZeJw6cgEglcQuYiaE/uXxlZIRhCogzcYvj4iAHHCPDxfFLXw1TsyEAtYhbAAAwd/U6ceAERCqJW5AATTylbeiH6KXvKtZh6ruBaa0SkA7iFsfFQQ44RoaL46eG8ZH6SFyRkc2EhhK3AEgw00EA4kzcitrY2NjevXvz+fyf/MmfVBvHx8d37969ZMmSQqEw9cO12smaOs4jzU0h/lK/e6Z+A+PPsQAi09rsFciW/v7+t73tbQMDA+9973u/8IUvVBp37tx58cUXDwwMbNq0adu2bdUP12oHgBBCyyHNXpEsKh/SlP97ZF99czcT0sHVrejcf//93/jGNwYGBhYtWnTgwIHzzjvv1a9+9cte9rKtW7du3749n89PTEysXbv2wgsv7O7uLpVK07Y3eyMgqZzKTasUf6E6LUAKiFvR2bNnT29v76JFi0II8+bNW7ly5cDAwMTEREdHRz6fDyF0dnb29vYODw93d3cPDQ1N237kn532PsPR0dEGbw2JcdiMzbwN4KhSn3XTul3MjYdWGkrcik5bW9svf/nL6uKTTz7Z0tJSLBZ7enqqje3t7ZWkVKv9SJIVQBId/4TejDmzfPWpEZNgP+1kUgarF89uRWfNmjX79u3r7++/6667vvGNbzzwwAPlcrlUKk299zqXy1X2t1rtwNx4AiG2PIBUyxw6rWICxI24FZ358+d/61vf2rt379VXX/3UU09dcMEF8+bNa2trm5ycrH6mVCrlcrkQQq12mC0xA2C2jJxAvbiZMDq/+93vnn766S9+8YuVxU2bNq1bt27BggUjIyPVzxSLxfPOOy+EUKsdyIKY3F5CQ/lyY8VOR1Pob1ng6lZ0fve7323cuPHxxx8PIfzkJz+5++67169fv2rVqhDC4OBgCGFsbGx4eHj16tUhhFrtACnjMkIduf8QGsSewpy5uhWdRYsW/fVf//V55523fPnyRx999Atf+MJJJ50UQujv79+yZcvSpUtHRkb6+vq6urpCCK2trdO2A9SL0/kA0GgtjrKJVigUvJkQmBtxi6AbwLHJ4J5iklkvrm4BwP+RqXlVFrYxuTLVFWPOV8CciVsAGWX2ECXzZqgXexPJIm4BALFmeg0kl7gFAP+HOT0xoStmjTMLqSRuwdzVcVg0wkK62bWhXuxNJIu4BQA001HPN5leA8klbgEAQPM5s5BK4hbMXR2HRSMsAED6iFsAQDM530T0PDJNZFqbvQIAAADp5OoWQJ05aZp6vmIAjpG4BQCQWs4OTEs1iIybCQEAABrC1S2oP6cSM873nnq+YgCOkbgFxI68SjT0NLJA94bmErcAiELisk3iVhiAGBK3SKo4z4RiuEoAQGrEeRbEYcQtIHYcPIhG43qamRAAFeIWAFFIXPBo6ArLY3CM7CwknbjFsYrbeBeT1QAAiJhZUIKIWwBQZ2ZCAFSIWwAQtcjyWNxuTIDZykLXtZ+mm7jFsTIEAEBdmF5DdohbUXv44Yd//vOfL168ePny5dXG8fHx3bt3L1mypFAoTP1wrXbIDpMSMki3B0iN1mavQLZ87Wtfu+SSSwYGBv7qr/7qox/9aKVx586dF1988cDAwKZNm7Zt21b9cK12ADhG5UOavSJATfbTdGvx1UZmcnLytNNO+4//+I98Pv/UU0+tXr36O9/5TqFQOOuss7Zv357P5ycmJtauXbtjx47u7u5SqTRt+2F/s1AojI6ONmVzSJ94nlCP51o1Tta2l2npBkDTmWTWi5sJIzU5OfnCF74whHDiiSe2tLQcPHhwaGioo6Mjn8+HEDo7O3t7e4eHh7u7u2u1H/k3a91naA8hHUw3aYSY55l4rtUMYl5PYAaeWGk0cSs6ra2tW7du3bx587p164aHhzds2PCKV7xix44dPT091c+0t7dXYlKxWJy2/UhiFdSRWWOKRfDl6j8wK43YZeyGs1VrJimG1Yu4Fam77777xBNPfMlLXtLR0bFnz55nnnmmVCpVx4UQQi6Xq4wOtdqhcfSxOPAtAECaeFVGdH7wgx/ce++9N9xww8aNG6+55poQwle/+tW2trbJycnqZ0qlUi6XCyHUagdIqJZDmr0iIXgwvd7UsxFitcsAcyZuRadYLBYKhWpqOuWUU8bHxxcsWDAyMjL1MytXrgwh1GqfA+M1HDuzxhSL4MvVf2BW5rbLzDyxsRsSN+JWdF760pfecccde/bsCSE89dRTd99999lnn71q1aoQwuDgYAhhbGxseHh49erVIYRa7QAAxIpT28zAs1vRWb58+Uc+8pG3vOUtL3/5y0dGRv78z//8TW96Uwihv79/y5YtS5cuHRkZ6evr6+rqCiG0trZO2w6QUE42w6zYZSAd/O5WsvlJBABoKG+646hS2UlMMuvF1S2aKZXDE0AKGJ/h2NlNmIFntwAAABrC1S0AoKbKZa4sn7zP8rYDx0/copkcw8gyN2s1WqMrnO5vsLJR3rQ2rXR/9UB9iVsAAMSIQEuaiFsAwPRMdgGOk7gFpFbMz4/Gc63SpNEV9g1mlq8eOHbiFgAAMSLQkibiFgBAHMX8Ej1wLMQtILVMUABiRYAkg8QtAIBsEXtSydcaT+IWANBwJoJzoFaJo59zJHELAIAoCCFkkLhFAjhXBAB15HiaSr7WeBK3AICGMxEkC+rbz51uTgdxC0ihWB2iYrUyAECUxC0SwCSVoxJpAIAYErc4ugxOZDO4yRBPdkbqQkciiXTXdBC3SCGH1Yxrbgc48v+uHwJAZolbQBocNdII4QBA9MQtji6D09MMbjLU0tykamekLhLXkZwhgtQQt0ihjB+cHKSbu+GZLTsAcCRxC0iwY8+WzU1BMjAAZJO4FZ2JiYmHH354aktnZ2d3d3cIYXx8fPfu3UuWLCkUClM/UKsdIDIiIs4XRE+pITXErejcfffdf/M3f1Nd/P3vf/+Wt7zlE5/4xM6dO/v6+tasWXPPPfdcdNFFl112WeUDtdphZg7SAAAx0WJm1hS7du36yEc+8t3vfvekk04666yztm/fns/nJyYm1q5du2PHju7u7lKpNG37YX+nUCiMjo42ZRMAyAhXtyCDTDLrpbXZK5BFzzzzzOWXX37VVVfNnz9/aGioo6Mjn8+HEDo7O3t7e4eHh0MItdoBIGLlQ5q9IgDJ42bCJrj22mt7enrOPffcEEKxWOzp6an+q/b29sqJhFrtR6r1WJcTErU4TQsAUOEFAY0mbkXtwIEDX//617/5zW9WFkulUnX2H0LI5XKVDFCr/UhiFQAAczPbE/rMlpsJo3bLLbecfPLJp59+emWxra1tcnKy+m9LpVIul5uhHQAASApxK2qDg4Pr16+vLi5YsGBkZKS6WCwWV65cOUP7sWs55LhXOW08hAAAQDTEraj96Ec/OuOMM6qLq1atCiEMDg6GEMbGxoaHh1evXj1DOwCQLE6AQpZ5ditSk5OT+/fvX758ebWltbW1v79/y5YtS5cuHRkZ6evr6+rqmqE9el4sAaSegQ6ABvG7W8kWwU8iZGEWkoVtBGZgEKChdDCSyO9u1YurWwDUn/klVNkLYsgYRWTELY7CMEQGOQxnjS8agAYRt8BM6+jEj2kpCwAwM3ELskhOoNGmdi39DYgbwxGREbdIM5M85kaHAQDqQtwCjk78mJayAAAzE7cgK6Ze65MTiJL+BkBmiVukmUkeAABN1NrsFQAAAEgnV7cgK1zrS6s4vxImzusGABEQtwAAyATngIiemwkBAAAawtUtsssprqNSokSI87cT53UDgAiIW6SHbAAAzMAMgeiJW2SFMAYAQMTELbJL7joqJQLSwRk3oFnELdLDQZRjYdYFAERG3CLNpk6sEz23lhCICV0RAGZF3AIAUs4JAqBZxC0gW8y6AIDIiFukWWom1qnZEJJOVwRiy93OxJO4RRMYEAEAyILWZq8AAABAOrm6FbWJiYn77ruvvb39nHPOqTaOj4/v3r17yZIlhUJh6odrtUNMuFBZd0oKMDeGTeLJ1a1IDQ4Onn/++bfccsvf/d3fbdy4cXJyMoSwc+fOiy++eGBgYNOmTdu2bat+uFZ7CpQPafaKNE3LIc1eEQCOwogNHI+WLE95I1YqlV71qld9/vOfP/vss0MIf/Znf3bppZf+6Z/+6VlnnbV9+/Z8Pj8xMbF27dodO3Z0d3eXSqVp2w/7m4VCYXR0tBlbw3FJzRWM1GxIfCgpcaNPqgDZZJJZL24mjM7tt9++ePHiStYKIXzve98LIdx2220dHR35fD6E0NnZ2dvbOzw83N3dPTQ0NG17E9cfjmTyUXdKOlumwunm++UwugSJI25Fp1gsnnzyyR/72Me++93vnnDCCZs3b373u99dLBZ7enqqn2lvb6+cSKjVfqRpH+tyNiLmHCQAkqIuI7aQQJx5R0BDiVvRGRsbGxgY+PjHP37llVeOjo5ecsklhUKhVCpNvR08l8tVBuJa7UdqdLJyhADIMoM/pN60k0kZrF68KiM6p5xyypIlSzZs2BBCKBQK69atu/nmm9va2iovzKgolUq5XC6EUKudpPPINdTX8bx6x/4Yf16txGF0CRJH3IrOi1/84qmLuVwul8stWLBgZGSk2lgsFleuXBlCqNUOACSOkACZJW5F53Wve90TTzxx2223hRAmJiaGhobOP//8VatWhRAGBwdDCGNjY8PDw6tXrw4h1GqPniMEVS4FABAZBx3SwbNb0XnBC17wD//wDx/60Ie+8pWvjI2Nvetd76r80nF/f/+WLVuWLl06MjLS19fX1dUVQmhtbZ22PcvS8RRZolceUsb+CHWRjgM0NIjf3Uq2TP0kgtG86XwFABypQUcHB53mytQks6Fc3YKIJPqwkeiVByCJHHFIB3Er2R566KHKPDgLQ1IWthG5DpLOXpxBvmuYgbgFEAVzUADIIHELIpLoSXaiVx4AoFm8CD7Zli1b5i3tGReH9+TWcR2i/+GBOBQQ0sTPh0BwcGEKV7eA+nPj3JGU4kj6CQCp5+oWAABAQ7i6BckWh8sCcViHOTvOlW/K9RkXhQBizvhMlbgF1J/DDMdCPwGIgJN0zeVmQgAAgIZwdYsMcXaHumtKX9KBASApxC2AJhD+yRp9HprFTtdcbiYEAABoCFe3yBBnd4CYcKkHICPELYAmMMkma/R5IJvELQCoG5etAJhK3AKAqAljMDNnLkgNcQsA4s7Us0EUFmg0cQsA6sasHYCpxC2awNlEgKmMinAY+wKpIW5BUpmfQXYkdzeP+UhVr7WK+WYCTeRnjgEAABrC1S2awMk/oNGSdbUhESsJwByIW5BU5mdA/GVkpGruZibr5AJkjbgVqYmJiYcffri6uGzZspNOOimEMD4+vnv37iVLlhQKhamfr9UOANEzrQeYLXErUjt27Pj7v//7efPmVRa3bdt27rnn7ty5s6+vb82aNffcc89FF1102WWXVf5trfZjN7fjoqMpkAJGMADiQNyK1AMPPHD55Zdv3Lix2lIqlbZu3bp9+/Z8Pj8xMbF27doLL7ywu7u7VnsTV57syFrkztr2Ailj7II4E7ci9bOf/WzDhg0TExMnnXTSC17wghDC0NBQR0dHPp8PIXR2dvb29g4PD3d3d9dqP/Jv1rrPcHR0tJGbQvIIFcBxMnrAYVJwbPXESqOJW9EplUq/+MUvrrzyyv379xeLxTe96U2f/OQni8ViT09P9TPt7e2VmFSr/UgzxKq57fnJHS+ORQqGRWguO9HM1Ke51B9mq9ZMUgyrF3ErOo899tj69es//OEPL168+PHHH3/zm998ww03vOAFL6geG0IIuVyucoQolUrTtkMEstbZsra9AEBk/MxxdBYvXnz11VcvXrw4hLBw4cL169ffc889bW1tk5OT1c+USqVcLhdCqNWeNS2HNHtF0qB8SLNXhFiIcueyIwNp5djKUYlb0dm7d++NN95YXTx48GBra+uCBQtGRkaqjcViceXKlSGEWu0cJ8MiGdG4hGMnmpn6NJf6A3EjbkXnwIEDV1xxxdjYWAjh8ccfv/XWWy+44IJVq1aFEAYHB0MIY2Njw8PDq1evDiHUaofUcyUEAEgNz25Fp1AoXH755Rs2bDjttNP++7//+9JLLz333HNDCP39/Vu2bFm6dOnIyEhfX19XV1cIobW1ddr2rHGGEhokyp3LjpxE3jkBTTfb3dBuG08tvo9EKxQKXvhOyjhaMJX+0CwqD03X3Lhlklkvrm4B8WJuB5ACEjtUiFsAEILZ4f+lCAmlG6fJbL9EX3o8iVsAxJfZA9nUoNQkjEH0xC0gDcwhAGIlmtHY4E/8iVsAEEISpmtmlhyVvgFxI25B5pixAcRcg8bnjAz7DnPEirgFpIFjKkAGGfyJP3ELAJLBzBIgccQtyBwzNgBSzGGOWGlt9goAAACkk6tbAADw/3nTBvUlbgEApI3MADHhZkIAAICGcHULgOk5Ow5kkBGP+hK3+F+mVgCQDg7lEBNuJgQAAGgIV7cAmJ6z40nh3gSA2BK3+F+O0ySI+SUAEH/iFkAazDZ/yqsQE3ZGSDdxCwCSzTQdmJYwHwfiFslgvOAwegIAEH/iFkAazDZ/yqsQE3ZGSDdxCwDiy7V9YM6MG3Hgd7ea47777vvNb35TXRwfH//+978/Ojp62MdqtWdQ+ZBaH2g5JMq1AgCAGYhbTTA2NnbJJZfcd999lcWdO3defPHFAwMDmzZt2rZtW/VjtdoBAIBEcDNh1J577rktW7Z0dXVVFkul0tatW7dv357P5ycmJtauXXvhhRd2d3fXam/uygMQMfcCASSauBW1z372s+vWrRsZGaksDg0NdXR05PP5EEJnZ2dvb+/w8HB3d3et9iP/YKFQmPZ/lLVbEM1IACAdkv7IYrLWv9ZMknoRtyJ11113/fjHP/73f//397znPZWWYrHY09NT/UB7e3slJtVqP1LWYhUAAPVSayYphtWLuBWdp5566oorrvjHf/zHqY2lUmnq2x1yuVzlREitdgAAICnEreh85jOfeelLX/rII4888sgj+/fvf/DBB5csWdLW1jY5OVn9TKlUamtrCyHUagcASLekn2JO+vpTX+JWdLq6uvbt23f99deHEB599NHBwcE//MM/XL58efU5rhBCsVg877zzQggLFiyYth0AAEgKcSs6l112WfWf3/Oe97z5zW9ev3595RLW4ODgq1/96rGxseHh4b/9278NIaxatWradgBoimQ9/Q8QE+JWk7W2tvb392/ZsmXp0qUjIyN9fX2Vd8TXagcAAJKixTmqRCsUCt5MWIsTsVToCVAXdqX08Z0yA5PMenF1CwA4OjNygDlobfYKAAAApJOrW6SWE7FU6AlwnJpyy5n73CKgthABcYusc0QHgNly9IRjJG6RWo4EAJAsWTh2Z2EbmUrcAgBm0pRJoZkokA7iFlnniN4ITt0BpJvhHY6RuEVqORIcO+kIgDjIwmEoC9vIVOIWUZt2Zm+6D0CKOcxBZolbZJQjX0OpKiSaERKgXsQtwIwKAKAhxC2iNu3M3nQfgBRzmIPMErfIKEc+gFqMkAD1Im4B2eKhFAAgMuIWANFpdNwVpwGIldZmrwAAAEA6ubrFHDmFTELpsQARM2cgy8QtAKLT6MmWyRzpJrdA4riZEACAKLS0tFQTI2SEq1vMkfNqAHXhegWpV+nbghbZJG4BkB6iC+mmY0PiiFsJVplVtLS0GHwBgJgzXSGbxC2AtHGFJ1l8TQApJm5FbXR09JFHHlm6dGl3d3e1cXx8fPfu3UuWLCkUClM/XKs9cRI6+UvoakP8NW7nsrcCECveTBipz33uc5deeukPfvCDd7/73V/5ylcqjTt37rz44osHBgY2bdq0bdu26odrtVeVy+Vly5aZWwAAQDx57Cc6Y2Njb3zjG3ft2jV//vzf/OY3vb29d9xxR0dHx1lnnbV9+/Z8Pj8xMbF27dodO3Z0d3eXSqVp2w/7m4VCYXR0tCmbMysJvUyU0NWG+LNzkR16OwmVlElm/Lm6FZ1TTz11x44d8+fPDyGccMIJk5OTzz///NDQUEdHRz6fDyF0dnb29vYODw+HEGq1J1T5kGavyOwkdLUh/uxcAGSEZ7ei09rams/nS6XSjTfeeP3117/vfe9buHDhD3/4w56enupn2tvbKycSisXitO1HqvVYlxMSs+LsI0mhrwJQR0l/QUD8iVtR279//7PPPrtw4cI77rjjrW99a6lUmvqrf7lcrjKFqtU+lVkXsaJDAhzJkEjMzfaEPrPlZsKodXV1vf3tb7/22mtPPPHEb37zm21tbZOTk9V/WyqVcrlcCKFWO8ev5ZBmrwgAUTDsA00kbkVnz5491113XXVx4cKFv/71rxcsWDAyMlJtLBaLK1euDCHUaqdBPElCUuir0FzCGzAr4lZ0JicnP/3pT+/ZsyeE8Jvf/GZ4eHj9+vWrVq0KIQwODoYQxsbGhoeHV69eHUKo1T6VF8ETK2IAkFYiFjBnnt2KTj6f/+hHP/qmN73pzDPPvPfeezdt2rR27doQQn9//5YtW5YuXToyMtLX19fV1RVCaG1tnbad4ycPAGRKBod9D9NCfPjdrWTzkwg0lAM2QEjgYJi4FSaGTDLrxdUtAICZCC3AnIlbANNzehjqzm4VDeWF+BC3gJocsAEAjoe4lXLOIwIwZw4iAMdJ3IK6MS9JGd8j1F0qdyuDf0z4Iognv7sFAADQEK5upZwTPADMmYMIMXH8V65c+6JZxC2oGyM4QPSaPo02+MeEL4J4ErcgkZo+vQAgGgZ8SDRxCwCAWDv+qCms0iziFsDhnEuGBLGfAnEmbkEiJWh6EUF0iWE6iuEqAQllGIFEE7cAgKZxbgJIN3EL4HCmfUCU6pI5BVfqqNKdWlpadKfjJ24BjRXBSH3Y/yIOcw7HJwAgiFsAQBM5NwGkW2uzVwAAINPKhzT9j0BFuVxetmyZ7lQXrm4BaePwEHNxuNsTmsteANkhbgFJZb4ylWoA8WekIoPELY6XoRPgeBhFAVJM3AIgUkIFidDQGGwvgOwQt4CkMl+ZSjVIGRf9Usm3SQaJWxwvQyfHz7yKLNPtAVJM3Ira2NjY3r17Ozs7zzzzzGrj+Pj47t27lyxZUigUpn64VjsA0FBi8PFzKg2CuBWxK6+88rbbblu5cuXo6OiLXvSir3/96/Pmzdu5c2dfX9+aNWvuueeeiy666LLLLqt8uFY7RMnBEmgKYw6QDuJWdB588MHt27fv2rVr/vz5IYQLLrjgpptueuMb37h169bt27fn8/mJiYm1a9deeOGF3d3dpVJp2vZmbwTUwZERzrwKIMUqw369hnrnAYMiJEprs1cgQzo6Oq655ppK1gohdHd3/+pXvxoaGuro6Mjn8yGEzs7O3t7e4eHhEEKtdgCARCiXy8IAuLoVnUWLFi1atKjyz3v37r311lvf+973jo6O9vT0VD/T3t4+OjoaQigWi9O2H2nax7pqfRhmq45HyuqpOACgWY68MuYdAQ0lbjXB448//o53vGPz5s3Lly9/8MEHp85Bc7lcpeuXSqVp248kWZE4TnYyW26bIQ70w7mpe7nUP9S7CNNOJmWwenEzYdTuv//+N7zhDW9961s3b94cQmhra5ucnKz+21KplMvlZmgHgOPXckizVwQg5cStSP3whz9817vetXXr1ne+852VlgULFoyMjFQ/UCwWV65cOUM7JFf5kGavCABkl8NxxMSt6IyPj1966aWf+cxnXve61z333HPPPfdcqVRatWpVCGFwcDCEMDY2Njw8vHr16hBCrXaADDI5IA70Q2AOPLsVneuvv/7pp59+73vfW23ZuHHjxz/+8f7+/i1btixdunRkZKSvr6+rqyuE0NraOm37cXLf+VEpEdmR6N6e6JWPA3UDiEaLATfRCoXCrF6VYYJyVErEzNLUQxK9LYleeYD4m+0kk1rcTAgAANAQbibMFqeBj0qJyI5E9/ZEr/zxcFkPIFnELYBZSPoc12QdAKIkbhFf5oUAYTj7iQAADxhJREFUACSauAXTE/aA+qrLqGJEAkgWcQsgQ0zWocI5NSAa4hbx5RBIDJmiASSC4ZqYELdgekZnoL6MKsxMPGgctaWJxC2gURzegNgyLgHRELeA5GlikDNFC4I0kAQGKGJC3AKIF2EGssku3zhqSxOJW0CjRHN4E04AgNgSt4DkkayaS/0B4BiJWwDxIswAQGqIW0CyCScASeH27wgoctyIWwDEkRkDACkgbgEAQBw58ZQC4hYAWWHiAs1l14uAIseNuAXArEWQW8wYAEgBcQsAgATI4AXq7GxpiolbAGSFiQsAERO3AGYtg2dYD5PZDQeAWRG3AABIACd6SCJxCwDiyEVUgBRobfYKZNSuXbumLo6Pj3//+98fHR097GO12oHj13LIHP7b8iF1XysAIE3ErSb40pe+dPnll1cXd+7cefHFFw8MDGzatGnbtm1HbQfi73iyHBA39mhgztxMGKknnniir69vYGCgvb290lIqlbZu3bp9+/Z8Pj8xMbF27doLL7ywu7u7Vntz1z8Cbp6hoXQwEkQvBUgBcStSn//85zs7O6+66qpPfepTlZahoaGOjo58Ph9C6Ozs7O3tHR4e7u7urtV+5N8sFArT/r/cgggzS8pcVkQEoHFqzSSpF3ErUldccUVra+vg4GC1pVgs9vT0VBfb29srMalW+5HEKoihWUWj9AWq9G0RGacnp5jxqtZMUgyrF3ErUq2thz8sVyqVpt4LnsvlKnt7rfakO+qgVq/NNHoyLf0BAIiSV2U0WVtb2+TkZHWxVCrlcrkZ2pmbWk85e/qZ+PMWRABILnGryRYsWDAyMlJdLBaLK1eunKEdSJ/0Bar0bRGQVsYrGk3carJVq1aFECpPc42NjQ0PD69evXqG9qSLbFAzegKJlpFr7xnZTCDLPLvVZK2trf39/Vu2bFm6dOnIyEhfX19XV9cM7cxNox8VAwCAI7WYbiZaoVDwZkKA9MnI+34yspkzm0MR1I0ImGTWi6tbQKqYhZAOGenAGdlMIMvELQBqEl8B4HiIWySbuSDAkYyNCTKH78jXSpWdPf7ELSBVHG8AgPgQtwCoSXzNICfL60IZgQpxi2RzGAM4krERKlKfe9O6XWniZ44BAAAawtUtAOB/OVleF8oIVIhbhJCBS+0AQAalb2JjzpY44hYAANSBLMSRxC0AYseUBYB0ELcIwYQGACAJzNkSR9wi8ZwFBwDiwFSEI4lbAMSOKQsA6SBuAeAqMWSOvR6iIW6ReEk8TjjIAQBkgbgF/C85EACgjsQtmsbMHuLDbggV2Tk2pX4DISZam70CkEXlQxr09wuFQoP+MommYzAtHYNp6RhVSsHxELdICUNhXTQ6B0ZPx2BaOgbT0jGAunMzIU2Tpjk9AOng2ATUl6tbAAAADSFuAQAANISbCWNtfHx89+7dS5YsmcPd5NV3K2VHBjd5BqpRpRRTqUaVUkylGlVKMZVqVGWwFMuWLWv2KqSEuBVfO3fu7OvrW7NmzT333HPRRRdddtlls/rPs3b3eaFQGB0dbfZaxIVqVCnFVKpRpRRTqUaVUkylGlXZLIU3x9SLuBVTpVJp69at27dvz+fzExMTa9euvfDCC7u7u6d+pqUlhDDa0hIyFqwAACAZWrJ2DSQpbrvttiuvvPLWW2+tLH7gAx9YtWrVJZdcMvUz1cvay5Y5/QAAQD1l8JpeI7i6FVPFYrGnp6e62N7ePkOPtzMAAEAMiVsxVSqVpj6UmcvljrwO6cIkAADEmRfBx1RbW9vk5GR1sVQq5XK5Jq4PAAAwW+JWTC1YsGBkZKS6WCwWV65c2cT1AQAAZkvciqlVq1aFEAYHB0MIY2Njw8PDq1evbvZKAQAAs+DNhPH1ox/9aMuWLUuXLh0ZGfnkJz953nnnNXuNAACAWRC3AAAAGsLNhAAAAA0hbgEAADREbuvWrc1eB+ZifHz8xz/+8fPPP/+Sl7yk2evSBLt27TrllFOqi9NWI/UlGhsbu/fee5988sk/+qM/qjZmsxQhhNHR0Z/85Cetra3z58+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:\"icfp2023\"","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:\"icfp2023\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"icfp2023\"","","\"","icfp2023","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f2481cf9c50\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f2481cf9bb0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f2481cf92f0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f2481cf9ed0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f2481cf9e30\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f2481cf9d90\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f2481cf9cf0\u003e":"tag:\"icfp2023\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f2481cf9cf0\u003e":"tag:\"icfp2023\""},"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:\"icfp2023\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"icfp2023\"","","\"","icfp2023","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f2481cf9c50\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f2481cf9bb0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f2481cf92f0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f2481cf9ed0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f2481cf9e30\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f2481cf9d90\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f2481cf9cf0\u003e":"tag:\"icfp2023\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f2481cf9cf0\u003e":"tag:\"icfp2023\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":58508,"difficulty_rating":"easy-medium"}]}}