{"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":636,"title":"Spherical radius given four points","description":"Determine the radius of a sphere provided four non-coplanar points on the surface of the sphere.\r\n\r\n pts = [x1 y1 z1;\r\n        x2 y2 z2;\r\n        x3 y3 z3;\r\n        x4 y4 z4]\r\n\r\nHint: See \u003chttp://steve.hollasch.net/cgindex/geometry/sphere4pts.html\u003e\r\n\r\nExample: \r\n\r\n pts = [1 0 0;\r\n        0 1 0;\r\n        0 0 1;\r\n       -1 0 0]\r\n r=1","description_html":"\u003cp\u003eDetermine the radius of a sphere provided four non-coplanar points on the surface of the sphere.\u003c/p\u003e\u003cpre\u003e pts = [x1 y1 z1;\r\n        x2 y2 z2;\r\n        x3 y3 z3;\r\n        x4 y4 z4]\u003c/pre\u003e\u003cp\u003eHint: See \u003ca href=\"http://steve.hollasch.net/cgindex/geometry/sphere4pts.html\"\u003ehttp://steve.hollasch.net/cgindex/geometry/sphere4pts.html\u003c/a\u003e\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre\u003e pts = [1 0 0;\r\n        0 1 0;\r\n        0 0 1;\r\n       -1 0 0]\r\n r=1\u003c/pre\u003e","function_template":"function r = Sphere_radius(pts)\r\n  r = 1;\r\nend","test_suite":"%%\r\npts=[0 3 2;1 -1 1;2 1 0;5 1 3]; % c(2 1 3) r=3\r\ny_correct = 3;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\n pts=[1 0 0;0 1 0;0 0 1;-1 0 0]; % c(0 0 0) r=1\r\ny_correct = 1;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\npts=[1 0 -1;0 1 -1;0 0 0;-1 0 -1]; % c(0 0 -1) r=1\r\ny_correct = 1;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\npts=[2 0 -2;0 2 -2;0 0 0;-2 0 -2]; % c(0 0 -2) r=2\r\ny_correct = 2;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\npts=[-5 -1 -3;1 -1 -3;-2 -4 -3;-2 -1 0]; % c(-2 -1 -3) r=3\r\ny_correct = 3;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":254,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":17,"created_at":"2012-04-29T17:20:14.000Z","updated_at":"2026-03-13T04:56:44.000Z","published_at":"2012-04-29T17:20:14.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine the radius of a sphere provided four non-coplanar points on the surface of the sphere.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ pts = [x1 y1 z1;\\n        x2 y2 z2;\\n        x3 y3 z3;\\n        x4 y4 z4]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHint: See\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://steve.hollasch.net/cgindex/geometry/sphere4pts.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://steve.hollasch.net/cgindex/geometry/sphere4pts.html\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ pts = [1 0 0;\\n        0 1 0;\\n        0 0 1;\\n       -1 0 0]\\n r=1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":58842,"title":"ICFP 2023 Orchestra:  Score Optimization of Puzzle-17 Second point","description":"The ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The ICFP 2023 Orchestra Spec shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \r\nThis Challenge is to place a second musician onto the stage, mxy, to increase Joy by at least 23400.  The Joy table am is Joy co-factor of each attendee for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\r\nThe Joy here is to brute force a solution.\r\nThe scoring of a placed musician is a discontinuous non-linear function due to vignetting and the 1/distance-squared scaling. There appears to be a grumpy audience cluster at the top left such that vignetting them and their negative Joy raises the Joy of a musician's placement on the xmax stage edge.\r\nGiven all the contest parameters and an initial musician placed at Top-Left of stage (xmax,ymax) return a muscian position (x,y) and type to raise total Joy by at least 23400. A non-integer solution exists with x=xmax.\r\n\r\nThe scoring and blocking functions are provided in the template.\r\n \r\nProblem 17: Stage in Pink and 5000 audience as black dots in top right corner of arena. The first musician is placed at (xmax,ymax)\r\n\r\nThis plot shows the scoring of a second point placed at (xmax, y) where y is the y-axis of the graph and the x-axis is the additive score created by this second point. The first point is placed at (xmax,1220) thus no points allowed (1210:1220]. Down to 1202.6 the entire audience is blocked from viewing. Different samplings are shown: */1, Green/0.1, Black/.01, and Red/.001  To achieve the \u003e23400 requires a resolution of 0.001.  This graph gives clues for limiting the search range.","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: 1608px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 804px; transform-origin: 407px 804px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 346.5px 8px; transform-origin: 346.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334px 8px; transform-origin: 334px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 382px 8px; transform-origin: 382px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place a second musician onto the stage, mxy, to increase Joy by at least 23400.  The Joy table am is Joy co-factor of each attendee for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 127.5px 8px; transform-origin: 127.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Joy here is to brute force a solution.\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: 369px 8px; transform-origin: 369px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring of a placed musician is a discontinuous non-linear function due to vignetting and the 1/distance-squared scaling. There appears to be a grumpy audience cluster at the top left such that vignetting them and their negative Joy raises the Joy of a musician's placement on the xmax stage edge.\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: 384px 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven all the contest parameters and an initial musician placed at Top-Left of stage (xmax,ymax) return a muscian position (x,y) and type to raise total Joy by at least 23400. A non-integer solution exists with x=xmax.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 202.5px 8px; transform-origin: 202.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring and blocking functions are provided in the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 425.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 212.75px; text-align: left; transform-origin: 384px 212.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgJDTImvUjHDgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwOS1BdWctMjAyMyAwNjo1MDozOKla/X0AABafSURBVHic7dxhaNT3/cDx7+WsbqRISqaCAUvQNKGlSEwrU1oftORBoa4FKXWTdtQOqk5oSx4IfdAIWkYqWxsfFGYZg6GTUkFIYQNlrsb/tWUse9Cm1RiqkUBnNpPek45qcrn/g2yn07vpMvU+8V6vR7lPvuon11/zNveLyRSLxQQA1VZX7QUAICVBAiAIQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiCEedVeAJjbMpnMDZ4sFou3dBPmOkHiFrrxT1UAgsStNVf+Utza2jo0NFTtLa4v4J7+2sHN4h5STRsaGjp69OjZs2evHI6Ojh49evTaz3pl55UOA/y3BKl2/eIXv9i+ffsf/vCHn/zkJ7/85S9nhn19fRs3bjxy5MjWrVt7e3tLh8vOKx2ei+ZKU+fKnjAbRWrS6dOnH3jggYmJiWKx+Le//a2tre3ChQtTU1Pt7e2nT58uFosXLlxYuXLlmTNnisVi2Xmlw1dygdUCn224WdxDqlHLly8/fPjwPffck1KaN2/e9PT01NRUf39/Q0NDS0tLSqmxsXHdunW5XK65ubnsfGRkpOzhq/6g1tbWmTf81R74zwSpRtXV1bW0tBQKhUOHDh04cOCnP/3pkiVLPvroo7a2ttKZ+vr6mYrk8/lr5/X19WUPX0WHgBvkHlJNm5iY+Pbbb5csWfJ///d/X3/9daFQuPI7prLZbLFYTCmVnVc6DDA7glTTFi1a9OMf//jdd9/97ne/+5vf/Gb+/PnT09Ol9xYKhWw2m1IqO690GGB2BKlGffnll/v37y89XLJkyV//+tfFixcPDg6Whvl8vqOjI6VUdl7pMMDsCFKNmp6e/tnPfvbll1+mlP7+97/ncrnOzs7Vq1enlI4fP55SGh4ezuVya9asSSmVnVc6DDA7Ga/716yDBw/29PSsWrXqL3/5y9atW1966aWU0ieffNLV1bVixYrBwcHdu3c/8cQTM4fLzisdLslkXGB3Pj/LjpvF5wtuIUGqBYLEzeLbvoH/yQ1mxo+847rcQwIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIIR51V6AahoeHh4ZGWlsbFy1atXMZHx8/OzZs6UD991338KFC2feHh0dPXXq1LJly1pbW0sHyg4BZkGQateuXbv++Mc/dnR0DA0N3X333b/+9a8XLFhw+PDht956a8GCBTNnent7H3300ZRSX19fT0/P2rVrBwYGnnrqqZdffrnSEGCWitSkzz///IEHHpiYmJh5+OSTT77//vvFYvGVV17Zv3//VYenpqba29tPnz5dLBYvXLiwcuXKM2fOlB1e9QtdYJS4GLguXyHVqIaGhn379t1zzz0zD5ubm7/66quU0smTJ5999tnx8fGFCxfeddddM+/t7+9vaGhoaWlJKTU2Nq5bty6Xy42MjFw7bG5uvuoPKr2UNzQ0dHs+NELxWi43TpBq1NKlS5cuXTrz9sjIyLFjx7Zs2VIoFM6dO7dr166JiYl8Pr9hw4bdu3enlPL5fFtbW+nX1tfXDw0N1dfXXzu89g/SoRpXugAymUx1NyE+32VX68bGxl544YVt27bdf//958+f7+zs3Ldv38cff/zhhx/29/cfPHgwpVQoFK78bJLNZovFYtlhFT4A4E4hSDXt008/ffrpp5977rlt27allJqamvbu3dvU1JRSWrJkSWdn58DAQEpp/vz509PTpV9VKBSy2WzZ4W3/CIA7hyDVro8++ujFF1/cuXPn5s2bZyYjIyOHDh0qHbh06VJdXV1KafHixYODg6V5Pp/v6OgoO7xduwN3IEGqUaOjo9u3b3/zzTcfe+yxycnJycnJQqFw8eLF7u7u4eHhlNLY2NixY8fWr1+fUlq9enVK6fjx4yml4eHhXC63Zs2assNqfkjAHOebGmrUgQMHvvnmmy1btpQmmzZtev3111977bVnn332wQcf/Oyzz7Zv3z7zj5Dq6ur27NnT1dW1YsWKwcHBnp6eRYsWpZTKDgFmJ+NGNLdOJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIYV61F6CahoeHR0ZGGhsbV61aVRqOjo6eOnVq2bJlra2tVx4uO690GOC/5Suk2rVr166XXnrpyJEjO3fu/NGPfnTx4sWUUl9f38aNG48cObJ169be3t7S4bLzSocBZqNITfr8888feOCBiYmJmYdPPvnk+++/PzU11d7efvr06WKxeOHChZUrV545c6ZYLJadVzp8JRcYJS4GrstXSDWqoaFh375999xzz8zD5ubmr776qr+/v6GhoaWlJaXU2Ni4bt26XC6XUio7r3QYYHbcQ6pRS5cuXbp06czbIyMjx44d27Jly9DQUFtbW+lMfX390NBQSimfz187r6+vL3v4KqV7S2Xfyx3PzUVunCDVurGxsRdeeGHbtm3333//F198kclkSu/KZrPFYjGlVCgUrp2XHV77++tQjStdAFdeLVCWl+xq2qeffvr0008/99xz27ZtSynNnz9/enq69N5CoZDNZivNKx0GmB1Bql0fffTRiy++uHPnzs2bN89MFi9ePDg4WDqQz+c7OjoqzSsdBpgdQapRo6Oj27dvf/PNNx977LHJycnJyclCobB69eqU0vHjx1NKw8PDuVxuzZo1KaWy80qHAWbHPaQadeDAgW+++WbLli2lyaZNm15//fU9e/Z0dXWtWLFicHCwp6dn0aJFKaW6urqy87JDgNnJlL0RDTdFJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQ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B++6664rP5Vks9mZF14KhULZOcDseMmOy5qamvbu3dvU1JRSWrJkSWdn58DAwPz586enp0tnCoVCNptNKVWaA8yOIHHZyMjIoUOHSg8vXbpUV1e3ePHiwcHB0jCfz3d0dKSUKs0BZkeQuOzixYvd3d3Dw8MppbGxsWPHjq1fv3716tUppePHj6eUhoeHc7ncmjVrUkqV5gCz4xsx+TcHDhz4+c9//uCDD3722Wfbt2/fvHlzSumTTz7p6upasWLF4ODg7t27n3jiiZnDleYlvtOXEhcD1+US4RbyOYgSFwPX5SU7AEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAk/iejo6NHjx4dGhqq9iLAnCdIzF5fX9/GjRuPHDmydevW3t7eaq/zP2ltba32CjfEntzB5lV7AeaqQqGwc+fO9957r6WlZXx8/PHHH//BD37Q3Nxc7b2AuUqQmKX+/v6GhoaWlpaUUmNj47p163K53LVBymQy1dhuNubKqvbkTiVIzFI+n29rays9rK+vv/ZOUrFYvL1LAXOYe0jMUqFQuPKvwNlsVn6A/4UgMUvz58+fnp4uPSwUCtlstor7AHOdIDFLixcvHhwcLD3M5/MdHR1V3AeY6wSJWVq9enVK6fjx4yml4eHhXC63Zs2aai8FzGEZr/sza5988klXV9eKFSsGBwd37979xBNPVHsjYA4TJABC8JIdACEIEgAhZHfu3FntHbgzjY6O/ulPf5qamvre975X7V1SSml8fPyLL7746l/uvvvuBQsWpAp7Vmv5EydO3HvvvdddI8LOV65a6bkNsipzhSBxS/T19b366quXLl1699138/n897///WpvlH7729/u2LHj97///QcffPDBBx+0t7ffe++9Zfes1vLvvPNOb2/v5s2bZx5WWiPCzletWva5DbIqc0kRbrapqan29vbTp08Xi8ULFy6sXLnyzJkz1V6q+Morr+zfv//KSdk9q7L8xMTEjh072tvbH3nkkf+wW4Sdr121WO65jbAqc457SNx8ZX/uarWXSidPnly+fPn4+Pjk5OTMpOyeVVn+7bffbmxsfOONN0qTSmtUfedrV03lntsIqzLn+OGq3Hw38nNXb7NCoXDu3Lldu3ZNTEzk8/kNGzbs3r277J719fW3f/nu7u66urqZf2U8o9JzWPWdr1217HMbYVXmHF8hcfMF/Lmr58+f7+zs3Ldv38cff/zhhx/29/cfPHiw7J5VWb6u7ur/EyutUfWdr1217HMbYVXmHEHi5gv4c1ebmpr27t3b1NSUUlqyZElnZ+fAwEDZPYMsX2mNgDuXfW5jrkpwgsTNF/Dnro6MjBw6dKj08NKlS3V1dWX3DLJ8pTUC7lz2uY25KsEJEjdfwJ+7evHixe7u7uHh4ZTS2NjYsWPH1q9fX3bPIMtXWiPgzmWf25irEl31vsGPO9nHH3+8du3a559/ftWqVb/73e+qvU6xWCzu37+/vb39+eefb29v/9WvfjUzLLtntZb/8MMPr/xe6kprRNj5qlXLPrdBVmUO8cNVuYX+8Y9/fOc737n2Nni1TE9Pf/vtt9euVHbPIMtXWiPazpWe20pbBXl6CUWQAAjBX08ACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACOH/ASvjkMvaesP1AAAAAElFTkSuQmCC\" data-image-state=\"image-loaded\"\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: 2px 8px; transform-origin: 2px 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: 374px 8px; transform-origin: 374px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eProblem 17: Stage in Pink and 5000 audience as black dots in top right corner of arena. The first musician is placed at (xmax,ymax)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 651.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 325.75px; text-align: left; transform-origin: 384px 325.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: 882px;height: 646px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"882\" height=\"646\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.5px 8px; transform-origin: 375.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis plot shows the scoring of a second point placed at (xmax, y) where y is the y-axis of the graph and the x-axis is the additive score created by this second point. The first point is placed at (xmax,1220) thus no points allowed (1210:1220]. Down to 1202.6 the entire audience is blocked from viewing. Different samplings are shown: */1, Green/0.1, Black/.01, and Red/.001  To achieve the \u0026gt;23400 requires a resolution of 0.001.  This graph gives clues for limiting the search range.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function pxyt = find_pxyt(mxy,mu,am,axy,xmin,xmax,ymin,ymax,min_score)\r\n% pxyt  [x,y,musician]; mxy(musician,:)=[x,y] where x is expected to be xmax\r\n%mxy(3,:)=[1022 1220];\r\n \r\n y=1200; %Solve for y such that mpscr \u003e min_score\r\n % Resolution of .001 required to achieve min_score\r\n % Brute force works with bounds from Performance graph\r\n \r\n %The scoring function is discontinuous and non-linear due to vignetting and 1/distance^2 scale\r\n pxy=[xmax y];\r\n [Totscr,muscr,mpscr]=Calc_scoreP(pxy,mxy,mu,am,axy); %Calc scores for pxy placement \r\n % mpscr is pxy score vec of musician types\r\n \r\n pxyt=[xmax y find(mpscr==max(mpscr),1,'first')];\r\n\r\nend % find_pxyt\r\n\r\nfunction [Totscr,muscr,mpscr]=Calc_scoreP(pxy,mxy,mu,am,axy)\r\n%Evaluate pxy for all musician types, only process non [0 0] mxy values\r\n% mpscr is vector of score for all musician types if placed at pxy\r\n%No error checking,volume,pillars\r\n Lmu=length(mu)+1;\r\n mxy=[mxy;pxy]; % augment mxy\r\n na=size(axy,1);\r\n nmut=max(mu);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu-1,1);\r\n mpscr=zeros(nmut,1);\r\n dmax=25; % square of the distance 5 vignetting rule\r\n for j=1:Lmu\r\n  if mxy(j,1)==0,continue;end % Unfilled mxy\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if mxy(k,1)==0,continue;end % Unfilled mxy\r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n    continue;\r\n   end\r\n   \r\n   if j==Lmu % Special End Point being evaluated for all types\r\n    for t=1:nmut\r\n     mpscr(t)=mpscr(t)+1000000*am(i,t)/d2am(i,j);\r\n    end\r\n   else % Standard scoring\r\n     muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n   end\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_scoreP\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance Squared from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n if t\u003c0 % Pt beyond normal of segment\r\n  return\r\n elseif t\u003e1 % Pt beyond normal of segment\r\n  return\r\n else\r\n  sx=vx+t*(wx-vx);\r\n  sy=vy+t*(wy-vy);\r\n  d2=(px-sx)^2+(py-sy)^2;\r\n end\r\nend %distP2S2Z\r\n\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\n%dir_struct=dir;\r\n%for i=1:size(dir_struct,1)\r\n% fprintf('%i %s %i\\n',i,dir_struct(i).name,dir_struct(i).bytes)\r\n%end\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\ntic\r\npid=17;\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\nLmu=length(mu); % number of musicians\r\nmxy=zeros(Lmu,2);\r\nnmut=max(mu); % number of musician types\r\nna=size(axy,1); % number of attendees\r\n\r\nmxy(3,:)=[xmax ymax]; %Placed best scoring musician at Corner nearest Audience\r\n \r\nmin_score=23400;\r\nztic=tic;\r\npxyt = find_pxyt(mxy,mu,am,axy,xmin,xmax,ymin,ymax,min_score);\r\nfprintf('x:%.0f y:%.4f t:%.0f  Time:%.3f\\n',pxyt,toc(ztic));\r\n\r\n[bTotscr,muscr]=Calc_score(mxy,mu,am,axy); % Base score prior to adding pxyt\r\nfprintf('Base Score: %.2f\\n',bTotscr);\r\n\r\nif pxyt(3)~=3\r\n mxy(pxyt(3),:)=pxyt(1:2);\r\nelse % should not have a 23400 score\r\n tptr=find(mu==3);\r\n mxy(tptr(end),:)=pxyt(1:2);\r\nend\r\n[Totscr,muscr]=Calc_score(mxy,mu,am,axy); % Base score prior to adding pxyt\r\nfprintf('Total Score: %.2f\\n',Totscr);\r\n\r\n\r\nvalid=Totscr\u003ebTotscr+min_score;\r\nassert(valid)\r\n\r\nfunction [Totscr,muscr]=Calc_score(mxy,mu,am,axy)\r\n%No error checking,volume,pillars\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  if mxy(j,1)==0,continue;end % Unfilled mxy\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if mxy(k,1)==0,continue;end % Unfilled mxy\r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_score\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n %if sL2==0 % Segment is a point  %Error check removed\r\n % d2=(px-vx)^2+(py-vy)^2;\r\n %else % non-point segment\r\n  t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n  if t\u003c0 % Pt beyond normal of segment\r\n   return\r\n   %d2=(px-vx)^2+(py-vy)^2;\r\n  elseif t\u003e1 % Pt beyond normal of segment\r\n    return\r\n   %d2=(px-wx)^2+(py-wy)^2;\r\n  else\r\n   sx=vx+t*(wx-vx);\r\n   sy=vy+t*(wy-vy);\r\n   d2=(px-sx)^2+(py-sy)^2;\r\n  end\r\n %end\r\n %d=sqrt(d2);\r\nend %distP2S2Z\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-08-09T18:47:46.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-08-09T13:28:37.000Z","updated_at":"2023-08-09T18:47:47.000Z","published_at":"2023-08-09T18:47:47.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 Joy.  The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place a second musician onto the stage, mxy, to increase Joy by at least 23400.  The Joy table am is Joy co-factor of each attendee for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Joy here is to brute force a solution.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring of a placed musician is a discontinuous non-linear function due to vignetting and the 1/distance-squared scaling. There appears to be a grumpy audience cluster at the top left such that vignetting them and their negative Joy raises the Joy of a musician's placement on the xmax stage edge.\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\u003eGiven all the contest parameters and an initial musician placed at Top-Left of stage (xmax,ymax) return a muscian position (x,y) and type to raise total Joy by at least 23400. A non-integer solution exists with x=xmax.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring and blocking functions are provided in the template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\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\u003eProblem 17: Stage in Pink and 5000 audience as black dots in top right corner of arena. The first musician is placed at (xmax,ymax)\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=\\\"646\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"882\\\"/\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=\\\"rId2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis plot shows the scoring of a second point placed at (xmax, y) where y is the y-axis of the graph and the x-axis is the additive score created by this second point. The first point is placed at (xmax,1220) thus no points allowed (1210:1220]. Down to 1202.6 the entire audience is blocked from viewing. Different samplings are shown: */1, Green/0.1, Black/.01, and Red/.001  To achieve the \u0026gt;23400 requires a resolution of 0.001.  This graph gives clues for limiting the search range.\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\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.png\",\"relationshipId\":\"rId2\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgJDTImvUjHDgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwOS1BdWctMjAyMyAwNjo1MDozOKla/X0AABafSURBVHic7dxhaNT3/cDx7+WsbqRISqaCAUvQNKGlSEwrU1oftORBoa4FKXWTdtQOqk5oSx4IfdAIWkYqWxsfFGYZg6GTUkFIYQNlrsb/tWUse9Cm1RiqkUBnNpPek45qcrn/g2yn07vpMvU+8V6vR7lPvuon11/zNveLyRSLxQQA1VZX7QUAICVBAiAIQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiCEedVeAJjbMpnMDZ4sFou3dBPmOkHiFrrxT1UAgsStNVf+Utza2jo0NFTtLa4v4J7+2sHN4h5STRsaGjp69OjZs2evHI6Ojh49evTaz3pl55UOA/y3BKl2/eIXv9i+ffsf/vCHn/zkJ7/85S9nhn19fRs3bjxy5MjWrVt7e3tLh8vOKx2ei+ZKU+fKnjAbRWrS6dOnH3jggYmJiWKx+Le//a2tre3ChQtTU1Pt7e2nT58uFosXLlxYuXLlmTNnisVi2Xmlw1dygdUCn224WdxDqlHLly8/fPjwPffck1KaN2/e9PT01NRUf39/Q0NDS0tLSqmxsXHdunW5XK65ubnsfGRkpOzhq/6g1tbWmTf81R74zwSpRtXV1bW0tBQKhUOHDh04cOCnP/3pkiVLPvroo7a2ttKZ+vr6mYrk8/lr5/X19WUPX0WHgBvkHlJNm5iY+Pbbb5csWfJ///d/X3/9daFQuPI7prLZbLFYTCmVnVc6DDA7glTTFi1a9OMf//jdd9/97ne/+5vf/Gb+/PnT09Ol9xYKhWw2m1IqO690GGB2BKlGffnll/v37y89XLJkyV//+tfFixcPDg6Whvl8vqOjI6VUdl7pMMDsCFKNmp6e/tnPfvbll1+mlP7+97/ncrnOzs7Vq1enlI4fP55SGh4ezuVya9asSSmVnVc6DDA7Ga/716yDBw/29PSsWrXqL3/5y9atW1966aWU0ieffNLV1bVixYrBwcHdu3c/8cQTM4fLzisdLslkXGB3Pj/LjpvF5wtuIUGqBYLEzeLbvoH/yQ1mxo+847rcQwIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIIR51V6AahoeHh4ZGWlsbFy1atXMZHx8/OzZs6UD991338KFC2feHh0dPXXq1LJly1pbW0sHyg4BZkGQateuXbv++Mc/dnR0DA0N3X333b/+9a8XLFhw+PDht956a8GCBTNnent7H3300ZRSX19fT0/P2rVrBwYGnnrqqZdffrnSEGCWitSkzz///IEHHpiYmJh5+OSTT77//vvFYvGVV17Zv3//VYenpqba29tPnz5dLBYvXLiwcuXKM2fOlB1e9QtdYJS4GLguXyHVqIaGhn379t1zzz0zD5ubm7/66quU0smTJ5999tnx8fGFCxfeddddM+/t7+9vaGhoaWlJKTU2Nq5bty6Xy42MjFw7bG5uvuoPKr2UNzQ0dHs+NELxWi43TpBq1NKlS5cuXTrz9sjIyLFjx7Zs2VIoFM6dO7dr166JiYl8Pr9hw4bdu3enlPL5fFtbW+nX1tfXDw0N1dfXXzu89g/SoRpXugAymUx1NyE+32VX68bGxl544YVt27bdf//958+f7+zs3Ldv38cff/zhhx/29/cfPHgwpVQoFK78bJLNZovFYtlhFT4A4E4hSDXt008/ffrpp5977rlt27allJqamvbu3dvU1JRSWrJkSWdn58DAQEpp/vz509PTpV9VKBSy2WzZ4W3/CIA7hyDVro8++ujFF1/cuXPn5s2bZyYjIyOHDh0qHbh06VJdXV1KafHixYODg6V5Pp/v6OgoO7xduwN3IEGqUaOjo9u3b3/zzTcfe+yxycnJycnJQqFw8eLF7u7u4eHhlNLY2NixY8fWr1+fUlq9enVK6fjx4yml4eHhXC63Zs2assNqfkjAHOebGmrUgQMHvvnmmy1btpQmmzZtev3111977bVnn332wQcf/Oyzz7Zv3z7zj5Dq6ur27NnT1dW1YsWKwcHBnp6eRYsWpZTKDgFmJ+NGNLdOJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIYV61F6CahoeHR0ZGGhsbV61aVRqOjo6eOnVq2bJlra2tVx4uO690GOC/5Suk2rVr166XXnrpyJEjO3fu/NGPfnTx4sWUUl9f38aNG48cObJ169be3t7S4bLzSocBZqNITfr8888feOCBiYmJmYdPPvnk+++/PzU11d7efvr06WKxeOHChZUrV545c6ZYLJadVzp8JRcYJS4GrstXSDWqoaFh375999xzz8zD5ubmr776qr+/v6GhoaWlJaXU2Ni4bt26XC6XUio7r3QYYHbcQ6pRS5cuXbp06czbIyMjx44d27Jly9DQUFtbW+lMfX390NBQSimfz187r6+vL3v4KqV7S2Xfyx3PzUVunCDVurGxsRdeeGHbtm3333//F198kclkSu/KZrPFYjGlVCgUrp2XHV77++tQjStdAFdeLVCWl+xq2qeffvr0008/99xz27ZtSynNnz9/enq69N5CoZDNZivNKx0GmB1Bql0fffTRiy++uHPnzs2bN89MFi9ePDg4WDqQz+c7OjoqzSsdBpgdQapRo6Oj27dvf/PNNx977LHJycnJyclCobB69eqU0vHjx1NKw8PDuVxuzZo1KaWy80qHAWbHPaQadeDAgW+++WbLli2lyaZNm15//fU9e/Z0dXWtWLFicHCwp6dn0aJFKaW6urqy87JDgNnJlL0RDTdFJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQ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B++6664rP5Vks9mZF14KhULZOcDseMmOy5qamvbu3dvU1JRSWrJkSWdn58DAwPz586enp0tnCoVCNptNKVWaA8yOIHHZyMjIoUOHSg8vXbpUV1e3ePHiwcHB0jCfz3d0dKSUKs0BZkeQuOzixYvd3d3Dw8MppbGxsWPHjq1fv3716tUppePHj6eUhoeHc7ncmjVrUkqV5gCz4xsx+TcHDhz4+c9//uCDD3722Wfbt2/fvHlzSumTTz7p6upasWLF4ODg7t27n3jiiZnDleYlvtOXEhcD1+US4RbyOYgSFwPX5SU7AEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAk/iejo6NHjx4dGhqq9iLAnCdIzF5fX9/GjRuPHDmydevW3t7eaq/zP2ltba32CjfEntzB5lV7AeaqQqGwc+fO9957r6WlZXx8/PHHH//BD37Q3Nxc7b2AuUqQmKX+/v6GhoaWlpaUUmNj47p163K53LVBymQy1dhuNubKqvbkTiVIzFI+n29rays9rK+vv/ZOUrFYvL1LAXOYe0jMUqFQuPKvwNlsVn6A/4UgMUvz58+fnp4uPSwUCtlstor7AHOdIDFLixcvHhwcLD3M5/MdHR1V3AeY6wSJWVq9enVK6fjx4yml4eHhXC63Zs2aai8FzGEZr/sza5988klXV9eKFSsGBwd37979xBNPVHsjYA4TJABC8JIdACEIEgAhZHfu3FntHbgzjY6O/ulPf5qamvre975X7V1SSml8fPyLL7746l/uvvvuBQsWpAp7Vmv5EydO3HvvvdddI8LOV65a6bkNsipzhSBxS/T19b366quXLl1699138/n897///WpvlH7729/u2LHj97///QcffPDBBx+0t7ffe++9Zfes1vLvvPNOb2/v5s2bZx5WWiPCzletWva5DbIqc0kRbrapqan29vbTp08Xi8ULFy6sXLnyzJkz1V6q+Morr+zfv//KSdk9q7L8xMTEjh072tvbH3nkkf+wW4Sdr121WO65jbAqc457SNx8ZX/uarWXSidPnly+fPn4+Pjk5OTMpOyeVVn+7bffbmxsfOONN0qTSmtUfedrV03lntsIqzLn+OGq3Hw38nNXb7NCoXDu3Lldu3ZNTEzk8/kNGzbs3r277J719fW3f/nu7u66urqZf2U8o9JzWPWdr1217HMbYVXmHF8hcfMF/Lmr58+f7+zs3Ldv38cff/zhhx/29/cfPHiw7J5VWb6u7ur/EyutUfWdr1217HMbYVXmHEHi5gv4c1ebmpr27t3b1NSUUlqyZElnZ+fAwEDZPYMsX2mNgDuXfW5jrkpwgsTNF/Dnro6MjBw6dKj08NKlS3V1dWX3DLJ8pTUC7lz2uY25KsEJEjdfwJ+7evHixe7u7uHh4ZTS2NjYsWPH1q9fX3bPIMtXWiPgzmWf25irEl31vsGPO9nHH3+8du3a559/ftWqVb/73e+qvU6xWCzu37+/vb39+eefb29v/9WvfjUzLLtntZb/8MMPr/xe6kprRNj5qlXLPrdBVmUO8cNVuYX+8Y9/fOc737n2Nni1TE9Pf/vtt9euVHbPIMtXWiPazpWe20pbBXl6CUWQAAjBX08ACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACOH/ASvjkMvaesP1AAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":636,"title":"Spherical radius given four points","description":"Determine the radius of a sphere provided four non-coplanar points on the surface of the sphere.\r\n\r\n pts = [x1 y1 z1;\r\n        x2 y2 z2;\r\n        x3 y3 z3;\r\n        x4 y4 z4]\r\n\r\nHint: See \u003chttp://steve.hollasch.net/cgindex/geometry/sphere4pts.html\u003e\r\n\r\nExample: \r\n\r\n pts = [1 0 0;\r\n        0 1 0;\r\n        0 0 1;\r\n       -1 0 0]\r\n r=1","description_html":"\u003cp\u003eDetermine the radius of a sphere provided four non-coplanar points on the surface of the sphere.\u003c/p\u003e\u003cpre\u003e pts = [x1 y1 z1;\r\n        x2 y2 z2;\r\n        x3 y3 z3;\r\n        x4 y4 z4]\u003c/pre\u003e\u003cp\u003eHint: See \u003ca href=\"http://steve.hollasch.net/cgindex/geometry/sphere4pts.html\"\u003ehttp://steve.hollasch.net/cgindex/geometry/sphere4pts.html\u003c/a\u003e\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre\u003e pts = [1 0 0;\r\n        0 1 0;\r\n        0 0 1;\r\n       -1 0 0]\r\n r=1\u003c/pre\u003e","function_template":"function r = Sphere_radius(pts)\r\n  r = 1;\r\nend","test_suite":"%%\r\npts=[0 3 2;1 -1 1;2 1 0;5 1 3]; % c(2 1 3) r=3\r\ny_correct = 3;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\n pts=[1 0 0;0 1 0;0 0 1;-1 0 0]; % c(0 0 0) r=1\r\ny_correct = 1;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\npts=[1 0 -1;0 1 -1;0 0 0;-1 0 -1]; % c(0 0 -1) r=1\r\ny_correct = 1;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\npts=[2 0 -2;0 2 -2;0 0 0;-2 0 -2]; % c(0 0 -2) r=2\r\ny_correct = 2;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n%%\r\npts=[-5 -1 -3;1 -1 -3;-2 -4 -3;-2 -1 0]; % c(-2 -1 -3) r=3\r\ny_correct = 3;\r\nassert(isequal(Sphere_radius(pts),y_correct))\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":254,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":17,"created_at":"2012-04-29T17:20:14.000Z","updated_at":"2026-03-13T04:56:44.000Z","published_at":"2012-04-29T17:20:14.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine the radius of a sphere provided four non-coplanar points on the surface of the sphere.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ pts = [x1 y1 z1;\\n        x2 y2 z2;\\n        x3 y3 z3;\\n        x4 y4 z4]]]\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHint: See\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://steve.hollasch.net/cgindex/geometry/sphere4pts.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://steve.hollasch.net/cgindex/geometry/sphere4pts.html\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ pts = [1 0 0;\\n        0 1 0;\\n        0 0 1;\\n       -1 0 0]\\n r=1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":58842,"title":"ICFP 2023 Orchestra:  Score Optimization of Puzzle-17 Second point","description":"The ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The ICFP 2023 Orchestra Spec shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \r\nThis Challenge is to place a second musician onto the stage, mxy, to increase Joy by at least 23400.  The Joy table am is Joy co-factor of each attendee for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\r\nThe Joy here is to brute force a solution.\r\nThe scoring of a placed musician is a discontinuous non-linear function due to vignetting and the 1/distance-squared scaling. There appears to be a grumpy audience cluster at the top left such that vignetting them and their negative Joy raises the Joy of a musician's placement on the xmax stage edge.\r\nGiven all the contest parameters and an initial musician placed at Top-Left of stage (xmax,ymax) return a muscian position (x,y) and type to raise total Joy by at least 23400. A non-integer solution exists with x=xmax.\r\n\r\nThe scoring and blocking functions are provided in the template.\r\n \r\nProblem 17: Stage in Pink and 5000 audience as black dots in top right corner of arena. The first musician is placed at (xmax,ymax)\r\n\r\nThis plot shows the scoring of a second point placed at (xmax, y) where y is the y-axis of the graph and the x-axis is the additive score created by this second point. The first point is placed at (xmax,1220) thus no points allowed (1210:1220]. Down to 1202.6 the entire audience is blocked from viewing. Different samplings are shown: */1, Green/0.1, Black/.01, and Red/.001  To achieve the \u003e23400 requires a resolution of 0.001.  This graph gives clues for limiting the search range.","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: 1608px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 804px; transform-origin: 407px 804px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 346.5px 8px; transform-origin: 346.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334px 8px; transform-origin: 334px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 382px 8px; transform-origin: 382px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place a second musician onto the stage, mxy, to increase Joy by at least 23400.  The Joy table am is Joy co-factor of each attendee for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 127.5px 8px; transform-origin: 127.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Joy here is to brute force a solution.\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: 369px 8px; transform-origin: 369px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring of a placed musician is a discontinuous non-linear function due to vignetting and the 1/distance-squared scaling. There appears to be a grumpy audience cluster at the top left such that vignetting them and their negative Joy raises the Joy of a musician's placement on the xmax stage edge.\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: 384px 8px; transform-origin: 384px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven all the contest parameters and an initial musician placed at Top-Left of stage (xmax,ymax) return a muscian position (x,y) and type to raise total Joy by at least 23400. A non-integer solution exists with x=xmax.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 202.5px 8px; transform-origin: 202.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring and blocking functions are provided in the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 425.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 212.75px; text-align: left; transform-origin: 384px 212.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgJDTImvUjHDgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwOS1BdWctMjAyMyAwNjo1MDozOKla/X0AABafSURBVHic7dxhaNT3/cDx7+WsbqRISqaCAUvQNKGlSEwrU1oftORBoa4FKXWTdtQOqk5oSx4IfdAIWkYqWxsfFGYZg6GTUkFIYQNlrsb/tWUse9Cm1RiqkUBnNpPek45qcrn/g2yn07vpMvU+8V6vR7lPvuon11/zNveLyRSLxQQA1VZX7QUAICVBAiAIQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiCEedVeAJjbMpnMDZ4sFou3dBPmOkHiFrrxT1UAgsStNVf+Utza2jo0NFTtLa4v4J7+2sHN4h5STRsaGjp69OjZs2evHI6Ojh49evTaz3pl55UOA/y3BKl2/eIXv9i+ffsf/vCHn/zkJ7/85S9nhn19fRs3bjxy5MjWrVt7e3tLh8vOKx2ei+ZKU+fKnjAbRWrS6dOnH3jggYmJiWKx+Le//a2tre3ChQtTU1Pt7e2nT58uFosXLlxYuXLlmTNnisVi2Xmlw1dygdUCn224WdxDqlHLly8/fPjwPffck1KaN2/e9PT01NRUf39/Q0NDS0tLSqmxsXHdunW5XK65ubnsfGRkpOzhq/6g1tbWmTf81R74zwSpRtXV1bW0tBQKhUOHDh04cOCnP/3pkiVLPvroo7a2ttKZ+vr6mYrk8/lr5/X19WUPX0WHgBvkHlJNm5iY+Pbbb5csWfJ///d/X3/9daFQuPI7prLZbLFYTCmVnVc6DDA7glTTFi1a9OMf//jdd9/97ne/+5vf/Gb+/PnT09Ol9xYKhWw2m1IqO690GGB2BKlGffnll/v37y89XLJkyV//+tfFixcPDg6Whvl8vqOjI6VUdl7pMMDsCFKNmp6e/tnPfvbll1+mlP7+97/ncrnOzs7Vq1enlI4fP55SGh4ezuVya9asSSmVnVc6DDA7Ga/716yDBw/29PSsWrXqL3/5y9atW1966aWU0ieffNLV1bVixYrBwcHdu3c/8cQTM4fLzisdLslkXGB3Pj/LjpvF5wtuIUGqBYLEzeLbvoH/yQ1mxo+847rcQwIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIIR51V6AahoeHh4ZGWlsbFy1atXMZHx8/OzZs6UD991338KFC2feHh0dPXXq1LJly1pbW0sHyg4BZkGQateuXbv++Mc/dnR0DA0N3X333b/+9a8XLFhw+PDht956a8GCBTNnent7H3300ZRSX19fT0/P2rVrBwYGnnrqqZdffrnSEGCWitSkzz///IEHHpiYmJh5+OSTT77//vvFYvGVV17Zv3//VYenpqba29tPnz5dLBYvXLiwcuXKM2fOlB1e9QtdYJS4GLguXyHVqIaGhn379t1zzz0zD5ubm7/66quU0smTJ5999tnx8fGFCxfeddddM+/t7+9vaGhoaWlJKTU2Nq5bty6Xy42MjFw7bG5uvuoPKr2UNzQ0dHs+NELxWi43TpBq1NKlS5cuXTrz9sjIyLFjx7Zs2VIoFM6dO7dr166JiYl8Pr9hw4bdu3enlPL5fFtbW+nX1tfXDw0N1dfXXzu89g/SoRpXugAymUx1NyE+32VX68bGxl544YVt27bdf//958+f7+zs3Ldv38cff/zhhx/29/cfPHgwpVQoFK78bJLNZovFYtlhFT4A4E4hSDXt008/ffrpp5977rlt27allJqamvbu3dvU1JRSWrJkSWdn58DAQEpp/vz509PTpV9VKBSy2WzZ4W3/CIA7hyDVro8++ujFF1/cuXPn5s2bZyYjIyOHDh0qHbh06VJdXV1KafHixYODg6V5Pp/v6OgoO7xduwN3IEGqUaOjo9u3b3/zzTcfe+yxycnJycnJQqFw8eLF7u7u4eHhlNLY2NixY8fWr1+fUlq9enVK6fjx4yml4eHhXC63Zs2assNqfkjAHOebGmrUgQMHvvnmmy1btpQmmzZtev3111977bVnn332wQcf/Oyzz7Zv3z7zj5Dq6ur27NnT1dW1YsWKwcHBnp6eRYsWpZTKDgFmJ+NGNLdOJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIYV61F6CahoeHR0ZGGhsbV61aVRqOjo6eOnVq2bJlra2tVx4uO690GOC/5Suk2rVr166XXnrpyJEjO3fu/NGPfnTx4sWUUl9f38aNG48cObJ169be3t7S4bLzSocBZqNITfr8888feOCBiYmJmYdPPvnk+++/PzU11d7efvr06WKxeOHChZUrV545c6ZYLJadVzp8JRcYJS4GrstXSDWqoaFh375999xzz8zD5ubmr776qr+/v6GhoaWlJaXU2Ni4bt26XC6XUio7r3QYYHbcQ6pRS5cuXbp06czbIyMjx44d27Jly9DQUFtbW+lMfX390NBQSimfz187r6+vL3v4KqV7S2Xfyx3PzUVunCDVurGxsRdeeGHbtm3333//F198kclkSu/KZrPFYjGlVCgUrp2XHV77++tQjStdAFdeLVCWl+xq2qeffvr0008/99xz27ZtSynNnz9/enq69N5CoZDNZivNKx0GmB1Bql0fffTRiy++uHPnzs2bN89MFi9ePDg4WDqQz+c7OjoqzSsdBpgdQapRo6Oj27dvf/PNNx977LHJycnJyclCobB69eqU0vHjx1NKw8PDuVxuzZo1KaWy80qHAWbHPaQadeDAgW+++WbLli2lyaZNm15//fU9e/Z0dXWtWLFicHCwp6dn0aJFKaW6urqy87JDgNnJlL0RDTdFJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQ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B++6664rP5Vks9mZF14KhULZOcDseMmOy5qamvbu3dvU1JRSWrJkSWdn58DAwPz586enp0tnCoVCNptNKVWaA8yOIHHZyMjIoUOHSg8vXbpUV1e3ePHiwcHB0jCfz3d0dKSUKs0BZkeQuOzixYvd3d3Dw8MppbGxsWPHjq1fv3716tUppePHj6eUhoeHc7ncmjVrUkqV5gCz4xsx+TcHDhz4+c9//uCDD3722Wfbt2/fvHlzSumTTz7p6upasWLF4ODg7t27n3jiiZnDleYlvtOXEhcD1+US4RbyOYgSFwPX5SU7AEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAk/iejo6NHjx4dGhqq9iLAnCdIzF5fX9/GjRuPHDmydevW3t7eaq/zP2ltba32CjfEntzB5lV7AeaqQqGwc+fO9957r6WlZXx8/PHHH//BD37Q3Nxc7b2AuUqQmKX+/v6GhoaWlpaUUmNj47p163K53LVBymQy1dhuNubKqvbkTiVIzFI+n29rays9rK+vv/ZOUrFYvL1LAXOYe0jMUqFQuPKvwNlsVn6A/4UgMUvz58+fnp4uPSwUCtlstor7AHOdIDFLixcvHhwcLD3M5/MdHR1V3AeY6wSJWVq9enVK6fjx4yml4eHhXC63Zs2aai8FzGEZr/sza5988klXV9eKFSsGBwd37979xBNPVHsjYA4TJABC8JIdACEIEgAhZHfu3FntHbgzjY6O/ulPf5qamvre975X7V1SSml8fPyLL7746l/uvvvuBQsWpAp7Vmv5EydO3HvvvdddI8LOV65a6bkNsipzhSBxS/T19b366quXLl1699138/n897///WpvlH7729/u2LHj97///QcffPDBBx+0t7ffe++9Zfes1vLvvPNOb2/v5s2bZx5WWiPCzletWva5DbIqc0kRbrapqan29vbTp08Xi8ULFy6sXLnyzJkz1V6q+Morr+zfv//KSdk9q7L8xMTEjh072tvbH3nkkf+wW4Sdr121WO65jbAqc457SNx8ZX/uarWXSidPnly+fPn4+Pjk5OTMpOyeVVn+7bffbmxsfOONN0qTSmtUfedrV03lntsIqzLn+OGq3Hw38nNXb7NCoXDu3Lldu3ZNTEzk8/kNGzbs3r277J719fW3f/nu7u66urqZf2U8o9JzWPWdr1217HMbYVXmHF8hcfMF/Lmr58+f7+zs3Ldv38cff/zhhx/29/cfPHiw7J5VWb6u7ur/EyutUfWdr1217HMbYVXmHEHi5gv4c1ebmpr27t3b1NSUUlqyZElnZ+fAwEDZPYMsX2mNgDuXfW5jrkpwgsTNF/Dnro6MjBw6dKj08NKlS3V1dWX3DLJ8pTUC7lz2uY25KsEJEjdfwJ+7evHixe7u7uHh4ZTS2NjYsWPH1q9fX3bPIMtXWiPgzmWf25irEl31vsGPO9nHH3+8du3a559/ftWqVb/73e+qvU6xWCzu37+/vb39+eefb29v/9WvfjUzLLtntZb/8MMPr/xe6kprRNj5qlXLPrdBVmUO8cNVuYX+8Y9/fOc737n2Nni1TE9Pf/vtt9euVHbPIMtXWiPazpWe20pbBXl6CUWQAAjBX08ACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACOH/ASvjkMvaesP1AAAAAElFTkSuQmCC\" data-image-state=\"image-loaded\"\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: 2px 8px; transform-origin: 2px 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: 374px 8px; transform-origin: 374px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eProblem 17: Stage in Pink and 5000 audience as black dots in top right corner of arena. The first musician is placed at (xmax,ymax)\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 651.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 325.75px; text-align: left; transform-origin: 384px 325.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: 882px;height: 646px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"882\" height=\"646\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.5px 8px; transform-origin: 375.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis plot shows the scoring of a second point placed at (xmax, y) where y is the y-axis of the graph and the x-axis is the additive score created by this second point. The first point is placed at (xmax,1220) thus no points allowed (1210:1220]. Down to 1202.6 the entire audience is blocked from viewing. Different samplings are shown: */1, Green/0.1, Black/.01, and Red/.001  To achieve the \u0026gt;23400 requires a resolution of 0.001.  This graph gives clues for limiting the search range.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function pxyt = find_pxyt(mxy,mu,am,axy,xmin,xmax,ymin,ymax,min_score)\r\n% pxyt  [x,y,musician]; mxy(musician,:)=[x,y] where x is expected to be xmax\r\n%mxy(3,:)=[1022 1220];\r\n \r\n y=1200; %Solve for y such that mpscr \u003e min_score\r\n % Resolution of .001 required to achieve min_score\r\n % Brute force works with bounds from Performance graph\r\n \r\n %The scoring function is discontinuous and non-linear due to vignetting and 1/distance^2 scale\r\n pxy=[xmax y];\r\n [Totscr,muscr,mpscr]=Calc_scoreP(pxy,mxy,mu,am,axy); %Calc scores for pxy placement \r\n % mpscr is pxy score vec of musician types\r\n \r\n pxyt=[xmax y find(mpscr==max(mpscr),1,'first')];\r\n\r\nend % find_pxyt\r\n\r\nfunction [Totscr,muscr,mpscr]=Calc_scoreP(pxy,mxy,mu,am,axy)\r\n%Evaluate pxy for all musician types, only process non [0 0] mxy values\r\n% mpscr is vector of score for all musician types if placed at pxy\r\n%No error checking,volume,pillars\r\n Lmu=length(mu)+1;\r\n mxy=[mxy;pxy]; % augment mxy\r\n na=size(axy,1);\r\n nmut=max(mu);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu-1,1);\r\n mpscr=zeros(nmut,1);\r\n dmax=25; % square of the distance 5 vignetting rule\r\n for j=1:Lmu\r\n  if mxy(j,1)==0,continue;end % Unfilled mxy\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if mxy(k,1)==0,continue;end % Unfilled mxy\r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n    continue;\r\n   end\r\n   \r\n   if j==Lmu % Special End Point being evaluated for all types\r\n    for t=1:nmut\r\n     mpscr(t)=mpscr(t)+1000000*am(i,t)/d2am(i,j);\r\n    end\r\n   else % Standard scoring\r\n     muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n   end\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_scoreP\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance Squared from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n if t\u003c0 % Pt beyond normal of segment\r\n  return\r\n elseif t\u003e1 % Pt beyond normal of segment\r\n  return\r\n else\r\n  sx=vx+t*(wx-vx);\r\n  sy=vy+t*(wy-vy);\r\n  d2=(px-sx)^2+(py-sy)^2;\r\n end\r\nend %distP2S2Z\r\n\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\n%dir_struct=dir;\r\n%for i=1:size(dir_struct,1)\r\n% fprintf('%i %s %i\\n',i,dir_struct(i).name,dir_struct(i).bytes)\r\n%end\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\ntic\r\npid=17;\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\nLmu=length(mu); % number of musicians\r\nmxy=zeros(Lmu,2);\r\nnmut=max(mu); % number of musician types\r\nna=size(axy,1); % number of attendees\r\n\r\nmxy(3,:)=[xmax ymax]; %Placed best scoring musician at Corner nearest Audience\r\n \r\nmin_score=23400;\r\nztic=tic;\r\npxyt = find_pxyt(mxy,mu,am,axy,xmin,xmax,ymin,ymax,min_score);\r\nfprintf('x:%.0f y:%.4f t:%.0f  Time:%.3f\\n',pxyt,toc(ztic));\r\n\r\n[bTotscr,muscr]=Calc_score(mxy,mu,am,axy); % Base score prior to adding pxyt\r\nfprintf('Base Score: %.2f\\n',bTotscr);\r\n\r\nif pxyt(3)~=3\r\n mxy(pxyt(3),:)=pxyt(1:2);\r\nelse % should not have a 23400 score\r\n tptr=find(mu==3);\r\n mxy(tptr(end),:)=pxyt(1:2);\r\nend\r\n[Totscr,muscr]=Calc_score(mxy,mu,am,axy); % Base score prior to adding pxyt\r\nfprintf('Total Score: %.2f\\n',Totscr);\r\n\r\n\r\nvalid=Totscr\u003ebTotscr+min_score;\r\nassert(valid)\r\n\r\nfunction [Totscr,muscr]=Calc_score(mxy,mu,am,axy)\r\n%No error checking,volume,pillars\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  if mxy(j,1)==0,continue;end % Unfilled mxy\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if mxy(k,1)==0,continue;end % Unfilled mxy\r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_score\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n %if sL2==0 % Segment is a point  %Error check removed\r\n % d2=(px-vx)^2+(py-vy)^2;\r\n %else % non-point segment\r\n  t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n  if t\u003c0 % Pt beyond normal of segment\r\n   return\r\n   %d2=(px-vx)^2+(py-vy)^2;\r\n  elseif t\u003e1 % Pt beyond normal of segment\r\n    return\r\n   %d2=(px-wx)^2+(py-wy)^2;\r\n  else\r\n   sx=vx+t*(wx-vx);\r\n   sy=vy+t*(wy-vy);\r\n   d2=(px-sx)^2+(py-sy)^2;\r\n  end\r\n %end\r\n %d=sqrt(d2);\r\nend %distP2S2Z\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-08-09T18:47:46.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-08-09T13:28:37.000Z","updated_at":"2023-08-09T18:47:47.000Z","published_at":"2023-08-09T18:47:47.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 Joy.  The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place a second musician onto the stage, mxy, to increase Joy by at least 23400.  The Joy table am is Joy co-factor of each attendee for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Joy here is to brute force a solution.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring of a placed musician is a discontinuous non-linear function due to vignetting and the 1/distance-squared scaling. There appears to be a grumpy audience cluster at the top left such that vignetting them and their negative Joy raises the Joy of a musician's placement on the xmax stage edge.\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\u003eGiven all the contest parameters and an initial musician placed at Top-Left of stage (xmax,ymax) return a muscian position (x,y) and type to raise total Joy by at least 23400. A non-integer solution exists with x=xmax.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring and blocking functions are provided in the template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\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\u003eProblem 17: Stage in Pink and 5000 audience as black dots in top right corner of arena. The first musician is placed at (xmax,ymax)\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=\\\"646\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"882\\\"/\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=\\\"rId2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis plot shows the scoring of a second point placed at (xmax, y) where y is the y-axis of the graph and the x-axis is the additive score created by this second point. The first point is placed at (xmax,1220) thus no points allowed (1210:1220]. Down to 1202.6 the entire audience is blocked from viewing. Different samplings are shown: */1, Green/0.1, Black/.01, and Red/.001  To achieve the \u0026gt;23400 requires a resolution of 0.001.  This graph gives clues for limiting the search range.\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\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image2.png\",\"relationshipId\":\"rId2\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgJDTImvUjHDgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwOS1BdWctMjAyMyAwNjo1MDozOKla/X0AABafSURBVHic7dxhaNT3/cDx7+WsbqRISqaCAUvQNKGlSEwrU1oftORBoa4FKXWTdtQOqk5oSx4IfdAIWkYqWxsfFGYZg6GTUkFIYQNlrsb/tWUse9Cm1RiqkUBnNpPek45qcrn/g2yn07vpMvU+8V6vR7lPvuon11/zNveLyRSLxQQA1VZX7QUAICVBAiAIQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiCEedVeAJjbMpnMDZ4sFou3dBPmOkHiFrrxT1UAgsStNVf+Utza2jo0NFTtLa4v4J7+2sHN4h5STRsaGjp69OjZs2evHI6Ojh49evTaz3pl55UOA/y3BKl2/eIXv9i+ffsf/vCHn/zkJ7/85S9nhn19fRs3bjxy5MjWrVt7e3tLh8vOKx2ei+ZKU+fKnjAbRWrS6dOnH3jggYmJiWKx+Le//a2tre3ChQtTU1Pt7e2nT58uFosXLlxYuXLlmTNnisVi2Xmlw1dygdUCn224WdxDqlHLly8/fPjwPffck1KaN2/e9PT01NRUf39/Q0NDS0tLSqmxsXHdunW5XK65ubnsfGRkpOzhq/6g1tbWmTf81R74zwSpRtXV1bW0tBQKhUOHDh04cOCnP/3pkiVLPvroo7a2ttKZ+vr6mYrk8/lr5/X19WUPX0WHgBvkHlJNm5iY+Pbbb5csWfJ///d/X3/9daFQuPI7prLZbLFYTCmVnVc6DDA7glTTFi1a9OMf//jdd9/97ne/+5vf/Gb+/PnT09Ol9xYKhWw2m1IqO690GGB2BKlGffnll/v37y89XLJkyV//+tfFixcPDg6Whvl8vqOjI6VUdl7pMMDsCFKNmp6e/tnPfvbll1+mlP7+97/ncrnOzs7Vq1enlI4fP55SGh4ezuVya9asSSmVnVc6DDA7Ga/716yDBw/29PSsWrXqL3/5y9atW1966aWU0ieffNLV1bVixYrBwcHdu3c/8cQTM4fLzisdLslkXGB3Pj/LjpvF5wtuIUGqBYLEzeLbvoH/yQ1mxo+847rcQwIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIARBAiAEQQIgBEECIIR51V6AahoeHh4ZGWlsbFy1atXMZHx8/OzZs6UD991338KFC2feHh0dPXXq1LJly1pbW0sHyg4BZkGQateuXbv++Mc/dnR0DA0N3X333b/+9a8XLFhw+PDht956a8GCBTNnent7H3300ZRSX19fT0/P2rVrBwYGnnrqqZdffrnSEGCWitSkzz///IEHHpiYmJh5+OSTT77//vvFYvGVV17Zv3//VYenpqba29tPnz5dLBYvXLiwcuXKM2fOlB1e9QtdYJS4GLguXyHVqIaGhn379t1zzz0zD5ubm7/66quU0smTJ5999tnx8fGFCxfeddddM+/t7+9vaGhoaWlJKTU2Nq5bty6Xy42MjFw7bG5uvuoPKr2UNzQ0dHs+NELxWi43TpBq1NKlS5cuXTrz9sjIyLFjx7Zs2VIoFM6dO7dr166JiYl8Pr9hw4bdu3enlPL5fFtbW+nX1tfXDw0N1dfXXzu89g/SoRpXugAymUx1NyE+32VX68bGxl544YVt27bdf//958+f7+zs3Ldv38cff/zhhx/29/cfPHgwpVQoFK78bJLNZovFYtlhFT4A4E4hSDXt008/ffrpp5977rlt27allJqamvbu3dvU1JRSWrJkSWdn58DAQEpp/vz509PTpV9VKBSy2WzZ4W3/CIA7hyDVro8++ujFF1/cuXPn5s2bZyYjIyOHDh0qHbh06VJdXV1KafHixYODg6V5Pp/v6OgoO7xduwN3IEGqUaOjo9u3b3/zzTcfe+yxycnJycnJQqFw8eLF7u7u4eHhlNLY2NixY8fWr1+fUlq9enVK6fjx4yml4eHhXC63Zs2assNqfkjAHOebGmrUgQMHvvnmmy1btpQmmzZtev3111977bVnn332wQcf/Oyzz7Zv3z7zj5Dq6ur27NnT1dW1YsWKwcHBnp6eRYsWpZTKDgFmJ+NGNLdOJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIYV61F6CahoeHR0ZGGhsbV61aVRqOjo6eOnVq2bJlra2tVx4uO690GOC/5Suk2rVr166XXnrpyJEjO3fu/NGPfnTx4sWUUl9f38aNG48cObJ169be3t7S4bLzSocBZqNITfr8888feOCBiYmJmYdPPvnk+++/PzU11d7efvr06WKxeOHChZUrV545c6ZYLJadVzp8JRcYJS4GrstXSDWqoaFh375999xzz8zD5ubmr776qr+/v6GhoaWlJaXU2Ni4bt26XC6XUio7r3QYYHbcQ6pRS5cuXbp06czbIyMjx44d27Jly9DQUFtbW+lMfX390NBQSimfz187r6+vL3v4KqV7S2Xfyx3PzUVunCDVurGxsRdeeGHbtm3333//F198kclkSu/KZrPFYjGlVCgUrp2XHV77++tQjStdAFdeLVCWl+xq2qeffvr0008/99xz27ZtSynNnz9/enq69N5CoZDNZivNKx0GmB1Bql0fffTRiy++uHPnzs2bN89MFi9ePDg4WDqQz+c7OjoqzSsdBpgdQapRo6Oj27dvf/PNNx977LHJycnJyclCobB69eqU0vHjx1NKw8PDuVxuzZo1KaWy80qHAWbHPaQadeDAgW+++WbLli2lyaZNm15//fU9e/Z0dXWtWLFicHCwp6dn0aJFKaW6urqy87JDgNnJlL0RDTdFJuMC459cDFyXl+wACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQ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B++6664rP5Vks9mZF14KhULZOcDseMmOy5qamvbu3dvU1JRSWrJkSWdn58DAwPz586enp0tnCoVCNptNKVWaA8yOIHHZyMjIoUOHSg8vXbpUV1e3ePHiwcHB0jCfz3d0dKSUKs0BZkeQuOzixYvd3d3Dw8MppbGxsWPHjq1fv3716tUppePHj6eUhoeHc7ncmjVrUkqV5gCz4xsx+TcHDhz4+c9//uCDD3722Wfbt2/fvHlzSumTTz7p6upasWLF4ODg7t27n3jiiZnDleYlvtOXEhcD1+US4RbyOYgSFwPX5SU7AEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAkAEIQJABCECQAQhAk/iejo6NHjx4dGhqq9iLAnCdIzF5fX9/GjRuPHDmydevW3t7eaq/zP2ltba32CjfEntzB5lV7AeaqQqGwc+fO9957r6WlZXx8/PHHH//BD37Q3Nxc7b2AuUqQmKX+/v6GhoaWlpaUUmNj47p163K53LVBymQy1dhuNubKqvbkTiVIzFI+n29rays9rK+vv/ZOUrFYvL1LAXOYe0jMUqFQuPKvwNlsVn6A/4UgMUvz58+fnp4uPSwUCtlstor7AHOdIDFLixcvHhwcLD3M5/MdHR1V3AeY6wSJWVq9enVK6fjx4yml4eHhXC63Zs2aai8FzGEZr/sza5988klXV9eKFSsGBwd37979xBNPVHsjYA4TJABC8JIdACEIEgAhZHfu3FntHbgzjY6O/ulPf5qamvre975X7V1SSml8fPyLL7746l/uvvvuBQsWpAp7Vmv5EydO3HvvvdddI8LOV65a6bkNsipzhSBxS/T19b366quXLl1699138/n897///WpvlH7729/u2LHj97///QcffPDBBx+0t7ffe++9Zfes1vLvvPNOb2/v5s2bZx5WWiPCzletWva5DbIqc0kRbrapqan29vbTp08Xi8ULFy6sXLnyzJkz1V6q+Morr+zfv//KSdk9q7L8xMTEjh072tvbH3nkkf+wW4Sdr121WO65jbAqc457SNx8ZX/uarWXSidPnly+fPn4+Pjk5OTMpOyeVVn+7bffbmxsfOONN0qTSmtUfedrV03lntsIqzLn+OGq3Hw38nNXb7NCoXDu3Lldu3ZNTEzk8/kNGzbs3r277J719fW3f/nu7u66urqZf2U8o9JzWPWdr1217HMbYVXmHF8hcfMF/Lmr58+f7+zs3Ldv38cff/zhhx/29/cfPHiw7J5VWb6u7ur/EyutUfWdr1217HMbYVXmHEHi5gv4c1ebmpr27t3b1NSUUlqyZElnZ+fAwEDZPYMsX2mNgDuXfW5jrkpwgsTNF/Dnro6MjBw6dKj08NKlS3V1dWX3DLJ8pTUC7lz2uY25KsEJEjdfwJ+7evHixe7u7uHh4ZTS2NjYsWPH1q9fX3bPIMtXWiPgzmWf25irEl31vsGPO9nHH3+8du3a559/ftWqVb/73e+qvU6xWCzu37+/vb39+eefb29v/9WvfjUzLLtntZb/8MMPr/xe6kprRNj5qlXLPrdBVmUO8cNVuYX+8Y9/fOc737n2Nni1TE9Pf/vtt9euVHbPIMtXWiPazpWe20pbBXl6CUWQAAjBX08ACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACEGQAAhBkAAIQZAACOH/ASvjkMvaesP1AAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"term":"tag:\"non-linear\"","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:\"non-linear\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"non-linear\"","","\"","non-linear","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f0814d1bd70\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f0814d1bc30\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f0814d1b370\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f0814d1bff0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f0814d1bf50\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f0814d1beb0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f0814d1be10\u003e":"tag:\"non-linear\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f0814d1be10\u003e":"tag:\"non-linear\""},"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:\"non-linear\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"non-linear\"","","\"","non-linear","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f0814d1bd70\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f0814d1bc30\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f0814d1b370\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f0814d1bff0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f0814d1bf50\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f0814d1beb0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f0814d1be10\u003e":"tag:\"non-linear\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f0814d1be10\u003e":"tag:\"non-linear\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":636,"difficulty_rating":"medium"},{"id":58842,"difficulty_rating":"unrated"}]}}