{"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":58528,"title":"ICFP 2023:Orchestra - Greedy algorithm for Musician Placement","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 16 musicians onto the stage,mxy, of Problem 22 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than 46 million; Best known 47221761. 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\nSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2 and blocks. \r\nPlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information.\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: 862.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 431.25px; transform-origin: 407px 431.25px; 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: 377.5px 8px; transform-origin: 377.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place the 16 musicians onto the stage,mxy, of Problem 22 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than 46 million; Best known 47221761. 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: 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: 384px 8px; transform-origin: 384px 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 and blocks. \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: 352px 8px; transform-origin: 352px 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.\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,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==\" 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,mscrit,mscrit10,min_score);\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:160; % 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\u003e5,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","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\ntic\r\nload(fname);\r\nfprintf('\\n\\nmat Load Time: %.1f\\n',toc); %Load Time of orc from .mat, 0.1 sec\r\n\r\n%fname='orc_d_mu_axy_am_pxyr.mat'  orc cell array of size 90\r\npid=22; % Stage is a Line [10:990, 10:10] in what they call [X,Y]\r\nmin_score=46000000; %Best known score 47221761\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\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 tic\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:%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 fprintf('Table of max Happiness X per Musician Type\\n');\r\n for i=1:nmut % 9\r\n  fprintf('Musician Type-%i  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 7 figures lower down\\n\\n');\r\n %Figures/Titles\r\n fprintf ('Problem: %i Orchestra\\n',pid)\r\n \r\n figure(7);\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 \r\n%Plot of Happiness for each Musician Type as a function of X with No blocks\r\n for i=1: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: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\nvalid=scr\u003emin_score; % Challenging Threshold 46M   Highest Score 47.2e6\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-15T18:43: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-15T03:38:34.000Z","updated_at":"2023-07-15T18:43:58.000Z","published_at":"2023-07-15T18:37:05.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 16 musicians onto the stage,mxy, of Problem 22 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than 46 million; Best known 47221761. 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\u003eSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2 and blocks. \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.\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\"}]}"},{"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":58528,"title":"ICFP 2023:Orchestra - Greedy algorithm for Musician Placement","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 16 musicians onto the stage,mxy, of Problem 22 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than 46 million; Best known 47221761. 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\nSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2 and blocks. \r\nPlease submit the template to view the tables and graphs. The graphs show the mscrit and mscrit10 information.\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: 862.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 431.25px; transform-origin: 407px 431.25px; 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: 377.5px 8px; transform-origin: 377.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place the 16 musicians onto the stage,mxy, of Problem 22 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than 46 million; Best known 47221761. 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: 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: 384px 8px; transform-origin: 384px 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 and blocks. \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: 352px 8px; transform-origin: 352px 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.\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,mscrit,mscrit10,min_score);\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:160; % 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\u003e5,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","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\ntic\r\nload(fname);\r\nfprintf('\\n\\nmat Load Time: %.1f\\n',toc); %Load Time of orc from .mat, 0.1 sec\r\n\r\n%fname='orc_d_mu_axy_am_pxyr.mat'  orc cell array of size 90\r\npid=22; % Stage is a Line [10:990, 10:10] in what they call [X,Y]\r\nmin_score=46000000; %Best known score 47221761\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\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 tic\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:%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 fprintf('Table of max Happiness X per Musician Type\\n');\r\n for i=1:nmut % 9\r\n  fprintf('Musician Type-%i  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 7 figures lower down\\n\\n');\r\n %Figures/Titles\r\n fprintf ('Problem: %i Orchestra\\n',pid)\r\n \r\n figure(7);\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 \r\n%Plot of Happiness for each Musician Type as a function of X with No blocks\r\n for i=1: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: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\nvalid=scr\u003emin_score; % Challenging Threshold 46M   Highest Score 47.2e6\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-15T18:43: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-15T03:38:34.000Z","updated_at":"2023-07-15T18:43:58.000Z","published_at":"2023-07-15T18:37:05.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 16 musicians onto the stage,mxy, of Problem 22 using a Greedy algorithm using provided Happiness tables. Score an Attendee happiness of higher than 46 million; Best known 47221761. 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\u003eSimplest solution would be mxy(:,1)=10:10:160 where mxy(:,2)=10 but this scores only 13M suffering from 1/d2 and blocks. \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.\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\"}]}"},{"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:\"greedy algorithm\"","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:\"greedy algorithm\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"greedy algorithm\"","","\"","greedy algorithm","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f636c153980\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f636c153840\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f636c152c60\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f636c153c00\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f636c153b60\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f636c153ac0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f636c153a20\u003e":"tag:\"greedy algorithm\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f636c153a20\u003e":"tag:\"greedy algorithm\""},"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:\"greedy algorithm\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"greedy algorithm\"","","\"","greedy algorithm","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f636c153980\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f636c153840\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f636c152c60\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f636c153c00\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f636c153b60\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f636c153ac0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f636c153a20\u003e":"tag:\"greedy algorithm\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f636c153a20\u003e":"tag:\"greedy algorithm\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":58528,"difficulty_rating":"medium"},{"id":58533,"difficulty_rating":"medium"}]}}