{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-06T14:01:22.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-06T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":58773,"title":"ICFP 2023 Orchestra:  Score Optimization of 2-Musicians and 1-Attendee","description":"The Template solves all cases.   Please submit the template and view the graphs.\r\nThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The ICFP 2023 Orchestra Spec shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \r\nThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\r\nThe Joy here is to see the figures of optimal placement and the data per case.\r\n\r\nThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\r\nThe scoring and blocking functions are provided in the template.\r\n\r\nThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 830.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 415.25px; transform-origin: 407px 415.25px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 255px 8px; transform-origin: 255px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 346.5px 8px; transform-origin: 346.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334px 8px; transform-origin: 334px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 374px 8px; transform-origin: 374px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 246px 8px; transform-origin: 246px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 306.5px 8px; transform-origin: 306.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 202.5px 8px; transform-origin: 202.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring and blocking functions are provided in the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 425.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 212.75px; text-align: left; transform-origin: 384px 212.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 560px;height: 420px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wcUEBYgkR6rLQAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyMC1KdWwtMjAyMyAwOToyMjozMtgdKaQAABqvSURBVHic7dx/TFX33cDx77mXwDqcgd4hmWwaChco0zqgs9VU2hT5w0Wchjk0zBp164SSdg1ZTIgrLOAMWn/gMtdqlyaNlJCxkWFmE1ypgFdbO5xR/HG5cyLEH6j3em1ii8C59/njPjvhEW19CnI+5/h+pX/cc7w3+XwpnLfnh2jhcFgBAGA2h9kDAACgFEECAAhBkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIIKVgnTixInr168bm/39/QcPHvR6vSaOBACYKJYJks/n+9nPfnbixInIZktLy4oVK1pbW0tKSurq6sydDQAwflFmD/BAhoeHy8vLExISIpu6rldVVTU2Nrrdbr/fn5eXt2TJkuTkZHOHBACMhzWCtG3btoULF3Z3d0c2Ozo64uLi3G63UsrlcuXm5no8nrFB0jRtsgcFAMHC4bDZI3wZCwTpk08+OXbs2F//+teXX345sicYDGZkZBhviI2Nvd+dJOFf/a8nPT3dlnfO7LouZd+lsS5rkf93dOlB+uyzzyorK//4xz+O3qnr+uivrNPptGV4AOCRIj1IW7ZsefLJJ/v6+vr6+gKBwJkzZ2bMmBEdHR0KhYz36LoeHR1t4pAAgPGTHqSEhIRr167V19crpS5dutTe3v6tb30rMzPTuJ+klAoGg4sWLTJvRgDABNAsdLHr5ZdfXr58eX5+figUev7552tqap5//nmfz1dYWPjhhx8az+AZNM1KqwOAh0r+IVH6GdI9ORyOrVu3lpeXp6amdnd319bWjq0RAMBapAdzPOT/dQAAJo38Q6JlflMDAMDeCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARIgyewAAE0fT/vdFOGzqHMDXYY0geb3evr6+1NTU5OTkyB6/33/hwgXjDWlpaVOnTjVpOkCASIqMDt21CViBFhb/Lbt9+/YPPvggJyfn008//elPf/rLX/5SKfXOO+/s2LEjJiYm8p66uroFCxbc9UFNs8DqgImhaXfnZ+wePNrkHxKlz+fz+ZYtW9bZ2RkfH3/9+vXc3NzDhw+7XK7XX3/96aefLi4u/pLPyv/qAxPjfu2hSRhF/iFR+kMNKSkpzc3N8fHxSqmoqKhQKDQyMqKUOnv2bEpKit/vHx4eNntGAMAEkB7MCF3Xm5qa6uvrFy5c+Oqrr+q6PmvWrCeeeCIQCASDwcLCwpqamrGf0jQtLS0t8trr9U7uyMAk4gwJ95eenh550dPTI/yAb42HGgKBwODgYGJi4uHDh1etWvX555/n5+dv2LAhKSlpYGBg+fLlDQ0NK1euHPtBOoRHQjjMPSTcj3EY1IyHMKWyxhmSYfXq1dnZ2a+99trondXV1bdu3XrzzTfverP8C6bAhOEpO3wV+YdE6feQzp8/v2/fPmMzMTHxypUrvb29TU1Nxs6hoSGHQ/pCgIcrHP7f86TIf5FNwFKkH8dDodDmzZvPnz+vlLp+/brH48nPz79z505lZaXP51NKDQwMtLW1FRQUmD0pIECkQ6QI1iT9HpLb7d64cWNhYWF2dvbx48dLSkry8vKUUhUVFUVFRbNnzz516lRZWdnYf4QEALAW6ZcUx0P+BVMAmDTyD4nSL9kBAB4RBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIUWYP8EC8Xm9fX19qampycrKxs7+//9y5czNmzEhPTzdxNgDAhLDAGdL27dvLyso+/PDDn//852+//XZkZ0tLy4oVK1pbW0tKSurq6sydEAAwflo4HDZ7hi/j8/mWLVvW2dkZHx9//fr13Nzcw4cPx8XF/fCHP2xsbHS73X6/Py8vr7m5efTJU4SmSV8dAEwa+YdE6WdIKSkpzc3N8fHxSqmoqKhQKDQyMtLR0REXF+d2u5VSLpcrNzfX4/GYPSkAYFyk30NyOBxut1vX9aampvr6+ldeeSUxMfHIkSMZGRnGe2JjY71e7z0/btxeut8brKhL6zJ7BMDmcsI5Zo8wYSx0l116kCICgcDg4GBiYuLhw4dXrVql67qmacafOp3O+52H2qlDo9nppwWQxmZ/5zMOg6MPmzJJv2QXkZCQsHr16r179z722GPvvfdedHR0KBQy/lTXdafTaeJ4AIDxkx6k8+fP79u3z9hMTEy8cuXKtGnTuru7jZ3BYDAnhzMGALA26UEKhUKbN28+f/68Uur69esejyc/P3/u3LlKqfb2dqWUz+fzeDzz5s0zeVAAwPhIv4fkdrs3btxYWFiYnZ19/PjxkpKSvLw8pdTWrVvLy8tTU1O7u7tra2sTEhLMnhQAMC7SH0sfD/kP3X89XVoXDzUAD49df8TkHxKlX7IDADwiCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARoswe4IH4fL7e3l6Xy5WdnR3Z4/f7L1y4YLwhLS1t6tSpJk0HAJgAFghSdXX1Rx99lJOT4/V6p0yZ8u6778bExDQ3N+/YsSMmJibynrq6ugULFpg7JwBgPKQH6cyZM42NjZ2dnfHx8UqpgoKC/fv3/+QnPzl9+nRFRUVxcbHZAwIAJob0e0hxcXF79uyJ1EgplZycfPnyZaXU2bNnU1JS/H7/8PCwqQMCACaG9DOk6dOnT58+PfK6t7e3ra1t/fr1uq5fvHixuro6EAgEg8HCwsKampp7fjw9PT3ywuv1TtLEACCJcRiUT3qQDAMDA2vWrCktLc3MzLx06VJ+fv6GDRuSkpIGBgaWL1/e0NCwcuXKsZ+iQwAeccZhUNM0cyf5StIv2UWcPHly6dKlq1atKi0tVUolJSXt2rUrKSlJKZWYmJifn9/V1WX2jACAcbFAkI4cObJu3bqqqqq1a9dG9vT29jY1NRlvGBoacjgssBAAwJeQfhzv7+8vKyvbsmXLiy++ODw8PDw8rOv6nTt3KisrfT6fUmpgYKCtra2goMDsSQEA4yL9HlJ9ff3t27fXr19v7CkuLn7jjTcqKiqKiopmz5596tSpsrIy/hESAFidFg6HzZ7hYdE0e66uS+vKCeeYPQVgW3b9EZN/SJR+yQ4A8IggSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEaLMHuCB+Hy+3t5el8uVnZ1t7Ozv7z937tyMGTPS09NNnM1CNE2Fw/d+AQCms0CQqqurP/roo5ycHK/XO2XKlHfffTcmJqalpaW2tnb+/PldXV0//vGPX3vtNbPHtIBw+P8UiBoBEEV6kM6cOdPY2NjZ2RkfH6+UKigo2L9//7Jly6qqqhobG91ut9/vz8vLW7JkSXJystnDWkCkSYoaAZBHepDi4uL27NkTqZFSKjk5+fLlyx0dHXFxcW63Wynlcrlyc3M9Hs89g2RczfN6vZM2s0yRDt1zD2UCbMxCNzWkB2n69OnTp0+PvO7t7W1ra1u/fr3X683IyDDeExsbe7/e0CHD6Ct1d+0BYGPGYVAb+9dSYSzzlN3AwMCaNWtKS0szMzN1XR/9lXU6nWEOrg/GuFJnXLsDACGsEaSTJ08uXbp01apVpaWlSqno6OhQKGT8qa7rTqfTvOks4677RjQJgCgWCNKRI0fWrVtXVVW1du3ayJ5p06Z1d3cbbwgGgzk5OSZNZyVjTyM5sQQgh/Qg9ff3l5WVbdmy5cUXXxweHh4eHtZ1fe7cuUqp9vZ2pZTP5/N4PPPmzTN7UgDAuEh/qKG+vv727dvr16839hQXF7/xxhtbt24tLy9PTU3t7u6ura1NSEgwcUjL4cQIgECajR8H0DR7rq5L68oJc4kSeFjs+iMm/5Ao/ZIdAOARQZAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIEGX2AP8PnZ2dCxYsiLz2+/0XLlww/igtLW3q1KkmzQUAmACWCdLu3bsbGho6Ozsjm83NzTt27IiJiYls1tXVGa0CAFiRBYJ08+bN2tra1tbW2NhYY+fp06crKiqKi4tNHAwAMIEscA9p586dLpdr06ZNo3eePXs2JSXF7/cPDw9/yWfT/+shzwgAQlnoMGiBM6TKykqHw9He3m7s0XX94sWL1dXVgUAgGAwWFhbW1NTc87Ner3eyxgQAiYzDoKZp5k7ylSxwhuRw3D3k1atX8/Pz9+zZc/To0UOHDnV0dDQ0NJgyGwBgolggSGMlJSXt2rUrKSlJKZWYmJifn9/V1WX2UACAcbFkkHp7e5uamozNoaGhsWdRAABrseRx/M6dO5WVlT6fTyk1MDDQ1tZWUFBg9lAAgHGxwEMNY6Wnp1dUVBQVFc2ePfvUqVNlZWX8IyQAsDotHA6bPcPDomn2XF2X1pUTzjF7CsC27PojJv+QaMlLdgAA+yFIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARLBSkDo7O0dv9vf3Hzx40Ov1mjXPJNM07Sv3AIB1WSZIu3fvrqioMDZbWlpWrFjR2tpaUlJSV1dn4mCTJhwOjy6QpmnhcNjEeQBgYkWZPcBXu3nzZm1tbWtra2xsbGSPrutVVVWNjY1ut9vv9+fl5S1ZsiQ5OdncOSdBpEn/VP+kRgDsxwJB2rlzp8vl2rRp0+9+97vIno6Ojri4OLfbrZRyuVy5ubkej+eeQUpPT4+8sM2VPaNJXVqX2bMAsADjMCifBYJUWVnpcDja29uNPcFgMCMjw9iMjY29X29s0yFD5NyIMyQAD8g4DMq/62yBe0gOx91D6ro++ivrdDofkaOz0aG77icBgA1YIEhjRUdHh0IhY1PXdafTaeI8k+OusyKaBMBmLBmkadOmdXd3G5vBYDAnJ8fEeSbH2LPAR+S8EMAjwpJBmjt3rlIqclfJ5/N5PJ558+aZPRQAYFws8FDDWA6HY+vWreXl5ampqd3d3bW1tQkJCWYPBQAYFzs/rMWjaABgkH9ItOQlOwCA/RAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIkSZPcDX5Pf7L1y4YGympaVNnTrVxHkAAONk1SA1Nzfv2LEjJiYmsllXV7dgwQJzRwIAjIdVg3T69OmKiori4mKzBwEATAyr3kM6e/ZsSkqK3+8fHh42exYAwATQwuGw2TP8v+m6PmvWrCeeeCIQCASDwcLCwpqamrFv0zQtLS0t8trr9U7ujAAgQnp6euRFT0+P8AO+JYN06dKl2traDRs2JCUlDQwMLF++vKSkZOXKlXe9TdMsuToAeBjkHxKlz/cgqqurb9269eabb961X/5XHwAmjfxDoiXvIfX29jY1NRmbQ0NDDoclFwIAMFjyOH7nzp3Kykqfz6eUGhgYaGtrKygoMHsoAMC4SD+Du5/6+vpt27bNnj371KlTZWVla9euHfse+eenADBp5B8Spc83HvK/+gAwaeQfEi15yQ4AYD8ECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgECQAgAkECAIhAkAAAIhAkAIAIBAkAIAJBAgCIQJAAACIQJACACAQJACACQQIAiECQAAAiECQAgAgWDlJ/f//Bgwe9Xq/Zg0y29PR0s0d4KOy6LmXfpbEuTCyrBqmlpWXFihWtra0lJSV1dXVmjwMAGK8oswf4OnRdr6qqamxsdLvdfr8/Ly9vyZIlycnJZs8FAPj6LHmG1NHRERcX53a7lVIulys3N9fj8Zg9FABgXCx5hhQMBjMyMozN2NjY+91J0jRtsoaaVKzLcuy6NNaFCWTJIOm6Pvrbxel0hsPhsW+7504AgEyWvGQXHR0dCoWMTV3XnU6nifMAAMbPkkGaNm1ad3e3sRkMBnNyckycBwAwfpYM0ty5c5VS7e3tSimfz+fxeObNm2f2UACAcdEseqPl448/Li8vT01N7e7urqmpWbRokdkTAQDGxapBAgDYjCUv2QEA7IcgAQBEIEgAABGcVVVVZs8w8fr7+48dOzYyMvLtb3/b7FkmTGdn58yZM41Ne6zR5/MdP3781q1b3/nOd4ydNlia1+v917/+5XA44uPjjZ02WFfEiRMnnE5nbGxsZNMG6/L7/WfOnLn8X1OmTImJiVF2WdrRo0evXbv23e9+19gpdl02DFJLS8vrr78+NDS0d+/eYDD47LPPmj3RBNi9e3ddXd3atWsjm/ZYY3V19e9///svvvjiL3/5y/79+xcvXhwVFWWDpW3fvn3Xrl2Dg4NvvfXW4ODg008/rezyv0wp5fP5ioqKfvCDH6SkpCi7rOv999/fsGHDBx98sH///v3792dlZc2cOdMGS2tvb1+7du2dO3cOHDjwt7/9bdmyZZqmiV5X2F5GRkaysrJ6enrC4fCNGzfmzJnzn//8x+yhxiUQCGzYsCErK+u5556L7LHHGk+fPv39738/EAhENhcvXvznP//ZBkvr6ekx1nXt2rWMjIwbN27YYF0RQ0NDBQUFL7zwQmtra9gu34rhcPhXv/rVvn37Ru+xwdJGRkaeffbZjz/+OLL5ox/96MCBA8LXZbd7SPb7ReA7d+50uVybNm0y9thjjXFxcXv27DGuaCUnJ1++fNkGS0tJSWlubo6sKyoqKhQKjYyM2GBdEdu2bVu4cGFkIcou34pKqbNnz6akpPj9/uHh4cgeGyzt0KFDSUlJzzzzTGTz73//+6JFi4Svy25BevBfBG4VlZWVv/71r7/5zW8ae+yxxunTp8+fPz/yure3t62tbeHChTZYmsPhcLvduq43NjauXr36lVdeSUxMtMG6lFKffPLJsWPHXn31VWOPPdal6/rFixerq6sXL1781FNPbdy4UdliacFg8Hvf+95vfvObp556Kjs7+5133lHi12W3ID3gLwK3EIfj7v9HNlvjwMDAmjVrSktLMzMzbbO0QCAwODiYmJh4+PDhmzdv2mBdn332WWVl5bZt20bvtMG6lFJXr17Nz8/fs2fP0aNHDx061NHR0dDQYIOl+Xy+1tbWWbNmnTx5sqGh4e233+7s7BS+LrsF6VH4ReB2WuPJkyeXLl26atWq0tJSZaOlJSQkrF69eu/evY899th7771ng3Vt2bLlySef7Ovra29vDwQCZ86c8Xq9NliXUiopKWnXrl1JSUlKqcTExPz8/K6uLhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 316px 8px; transform-origin: 316px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy)\r\n %Given 1 Attendee and 2 Musicians Optimize Score\r\n %Place Musicicans,mxy, within the bounds of the stage [xmin xmax ymin ymax] to\r\n % achieve maximum score sum for i=1:2 1000000*am(1,mu(i))/dist_squared(axy,mxy(i,:)\r\n % where mu(i) is musician type 1 or 2 and am is an Affinity matrix [1,2]\r\n %sxy(600,2) contains all the integer stage points; note:mxy is not limited to integers\r\n % Musicians must be spaced by 10 or more\r\n % A musician gets no score if the other musician is 5 or less from the musician's \r\n % line-of-sight to the attendee (a function distP2Seg is provided)\r\n \r\n %Performance approx 0.62s  Best known Time:0.28s\r\n for x1=xmin:xmax\r\n  for y1=ymin:ymax\r\n   for x2=xmin:xmax\r\n    for y2=ymin:ymax\r\n      if (y2-y1)^2+(x2-x1)^2\u003c100,continue;end\r\n      mxy=[x1 y1;x2 y2];\r\n      [Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n      if Totscr\u003e=score\r\n       return;\r\n      end\r\n    end %y2\r\n   end %x2\r\n  end %y1\r\n end %x1\r\n \r\nend %Orc_2M1A\r\n\r\nfunction [Totscr,muscr]=Calc_score(mxy,mu,am,axy)\r\n%No error checking,volume,pillars\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_score\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n %if sL2==0 % Segment is a point  %Error check removed\r\n % d2=(px-vx)^2+(py-vy)^2;\r\n %else % non-point segment\r\n  t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n  if t\u003c0 % Pt beyond normal of segment\r\n   return\r\n   %d2=(px-vx)^2+(py-vy)^2;\r\n  elseif t\u003e1 % Pt beyond normal of segment\r\n    return\r\n   %d2=(px-wx)^2+(py-wy)^2;\r\n  else\r\n   sx=vx+t*(wx-vx);\r\n   sy=vy+t*(wy-vy);\r\n   d2=(px-sx)^2+(py-sy)^2;\r\n  end\r\n %end\r\n %d=sqrt(d2);\r\nend %distP2S2Z\r\n","test_suite":"%%\r\nvalid=1;\r\n\r\norcm=[40 60 5 24 10 39 35 16 1 2 10 20 214053; % mid right 214054\r\n      40 60 5 24 10 39 12 1 1 2 10 20 305630;  %Bot mid 305631\r\n      50 80 25 40 10 60 5 35 1 1 20 20 93947;  %Left Mid 93948\r\n      50 80 25 40 10 60 5 35 1 2 10 -20 24999; %Left with Neg Affinity 25000\r\n      50 80 25 40 10 60 15 70 1 1 10 10 65897; %TL Diag 15 65898\r\n      500 500 1 30 1 30 450 450 1 1 10 10 55;  %56\r\n      30 40 10 18 5 25 15 35 1 2 10 10  127329; %Top Mid; narrow stage\r\n      60 40 10 50 10 30 35 35 1 2 -10 -20 -14105];  %pair Negatve -14104\r\n\r\nOrctime=0;\r\nfigptr=0;\r\n\r\nfor i=1:size(orcm,1)\r\npxyr=[];\r\n[rwx, rhy, xmin, xmax, ymin, ymax, axy, mu, am, score]= ...\r\n  deal(orcm(i,1),orcm(i,2),orcm(i,3),orcm(i,4),orcm(i,5),orcm(i,6),orcm(i,7:8),orcm(i,9:10),orcm(i,11:12),orcm(i,13));\r\n\r\n%stage=ones(xmax-xmin+1,ymax-ymin+1);\r\nstage=ones(ymax-ymin+1,xmax-xmin+1);\r\n[sy,sx]=find(stage);\r\nsxy_base=[sx sy]-1; % Make LL [0,0] Stage(x,y) points\r\n\r\nsxy=sxy_base+[xmin ymin]; % 5 10;5 11  \r\nsxy=sortrows(sxy,[1 2],{'ascend' 'descend'}); %Matlab Find TL by col to BR\r\n\r\nsxy=flipud(sortrows(sxy,1,'ascend')); %Matlab find sequence TL by col to BR\r\n\r\nif mu(1)==mu(2)\r\n am(2)=[]; %if Only one musician type then am reduced\r\nend\r\n\r\n  ztic=tic;\r\n  mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy);\r\n  Orctime=Orctime+toc(ztic);\r\n  dt=toc(ztic);\r\n  \r\n%Validity Checks\r\n if sum((mxy(1,:)-mxy(2,:)).^2)\u003c100\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Spacing of Musicians\\n\\n',i);\r\n end\r\n \r\n if min(mxy(:,1))\u003cxmin || max(mxy(:,1))\u003exmax || min(mxy(:,2))\u003cymin || max(mxy(:,2))\u003eymax\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Positioning of Musicians off Stage\\n\\n',i);\r\n end\r\n \r\n%[Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n %Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for ii=1:na\r\n   bflag=0;\r\n   \r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n%    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(ii,1),axy(ii,2)); %Intra Seg dist\r\n%    d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n     px=mxy(k,1); py=mxy(k,2);\r\n     vx=mxy(j,1); vy=mxy(j,2);\r\n     wx=axy(ii,1); wy=axy(ii,2);\r\n     \r\n     dv2=Inf;\r\n     sL2=(vx-wx)^2+(vy-wy)^2;\r\n     t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n     if t\u003e=0 \u0026\u0026 t\u003c=1\r\n      sx=vx+t*(wx-vx);\r\n      sy=vy+t*(wy-vy);\r\n      dv2=(px-sx)^2+(py-sy)^2;\r\n     end\r\n     \r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end %k\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(ii,mu(j))/d2am(ii,j);\r\n  end %ii\r\n end % j  mxy(j,:)\r\n Totscr=sum(muscr);\r\n\r\n\r\n if Totscr\u003cscore\r\n  valid=0;\r\n  fprintf('Pid:%i  Score:%.0f less than required %.0f\\n\\n',i,Totscr,score);\r\n end\r\n\r\n\r\nfprintf('\\nPid:%i  Score: %.0f   Time:%0.3f\\n',i,Totscr,dt);\r\nfprintf('axy x:%3i  y:%3i\\n',axy);\r\nfprintf('mxy(1,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(1,:),muscr(1),mu(1),am(1,1));\r\nfprintf('mxy(2,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(2,:),muscr(2),mu(2),am(1,mu(2)));\r\n\r\n\r\n%draw_orcs(axy,mxy,swx,shy,xmin,xmax,ymin,ymax,pxyr);\r\n figptr=figptr+1;\r\n figure(figptr);\r\n plot(axy(:,1),axy(:,2),'or');hold on  % Attendees\r\n axis tight; axis equal\r\n \r\n room= [0 0;rwx 0;rwx rhy;0 rhy;0 0]; %rwx, rhy\r\n plot(room(:,1),room(:,2),'k');\r\n stage=[xmin ymin;xmax ymin;xmax ymax;xmin ymax;xmin ymin];\r\n plot(stage(:,1),stage(:,2),'color',[.8 0 .8]);\r\n %plot(mxy(:,1),mxy(:,2),'.r'); % Musicians\r\n plot(mxy(1,1),mxy(1,2),'*b');\r\n plot(mxy(2,1),mxy(2,2),'xk');\r\n hold off\r\n \r\nend % orcm\r\n\r\nfprintf('Total Time: %.3f\\n',Orctime);\r\n\r\n\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-20T18:08:52.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-20T16:09:25.000Z","updated_at":"2023-07-20T18:08:54.000Z","published_at":"2023-07-20T18:08:54.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring and blocking functions are provided in the template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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LhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":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":58773,"title":"ICFP 2023 Orchestra:  Score Optimization of 2-Musicians and 1-Attendee","description":"The Template solves all cases.   Please submit the template and view the graphs.\r\nThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The ICFP 2023 Orchestra Spec shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \r\nThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\r\nThe Joy here is to see the figures of optimal placement and the data per case.\r\n\r\nThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\r\nThe scoring and blocking functions are provided in the template.\r\n\r\nThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 830.5px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 415.25px; transform-origin: 407px 415.25px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 255px 8px; transform-origin: 255px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 346.5px 8px; transform-origin: 346.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP 2023 Orchestra Spec\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 334px 8px; transform-origin: 334px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 374px 8px; transform-origin: 374px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 246px 8px; transform-origin: 246px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 306.5px 8px; transform-origin: 306.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 202.5px 8px; transform-origin: 202.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe scoring and blocking functions are provided in the template.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 425.5px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 212.75px; text-align: left; transform-origin: 384px 212.75px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: baseline;width: 560px;height: 420px\" src=\"data:image/png;base64,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LhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\" width=\"560\" height=\"420\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 316px 8px; transform-origin: 316px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 8px; transform-origin: 0px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy)\r\n %Given 1 Attendee and 2 Musicians Optimize Score\r\n %Place Musicicans,mxy, within the bounds of the stage [xmin xmax ymin ymax] to\r\n % achieve maximum score sum for i=1:2 1000000*am(1,mu(i))/dist_squared(axy,mxy(i,:)\r\n % where mu(i) is musician type 1 or 2 and am is an Affinity matrix [1,2]\r\n %sxy(600,2) contains all the integer stage points; note:mxy is not limited to integers\r\n % Musicians must be spaced by 10 or more\r\n % A musician gets no score if the other musician is 5 or less from the musician's \r\n % line-of-sight to the attendee (a function distP2Seg is provided)\r\n \r\n %Performance approx 0.62s  Best known Time:0.28s\r\n for x1=xmin:xmax\r\n  for y1=ymin:ymax\r\n   for x2=xmin:xmax\r\n    for y2=ymin:ymax\r\n      if (y2-y1)^2+(x2-x1)^2\u003c100,continue;end\r\n      mxy=[x1 y1;x2 y2];\r\n      [Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n      if Totscr\u003e=score\r\n       return;\r\n      end\r\n    end %y2\r\n   end %x2\r\n  end %y1\r\n end %x1\r\n \r\nend %Orc_2M1A\r\n\r\nfunction [Totscr,muscr]=Calc_score(mxy,mu,am,axy)\r\n%No error checking,volume,pillars\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n  \r\n%Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n \r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for i=1:na\r\n   bflag=0;\r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(i,1),axy(i,2)); %Intra Seg dist\r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(i,mu(j))/d2am(i,j);\r\n  end\r\n end\r\n Totscr=sum(muscr);\r\nend %Calc_score\r\n\r\nfunction d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n% Distance from segment only if intra-segment\r\n% reduce to 0\u003c=t\u003c=1\r\n%The point is (px,py) and the segment is [(vx,vy) to (wx,wy)].\r\n% [px py vx vy wx wy]\r\n\r\n d2=Inf;\r\n sL2=(vx-wx)^2+(vy-wy)^2;\r\n %if sL2==0 % Segment is a point  %Error check removed\r\n % d2=(px-vx)^2+(py-vy)^2;\r\n %else % non-point segment\r\n  t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n  if t\u003c0 % Pt beyond normal of segment\r\n   return\r\n   %d2=(px-vx)^2+(py-vy)^2;\r\n  elseif t\u003e1 % Pt beyond normal of segment\r\n    return\r\n   %d2=(px-wx)^2+(py-wy)^2;\r\n  else\r\n   sx=vx+t*(wx-vx);\r\n   sy=vy+t*(wy-vy);\r\n   d2=(px-sx)^2+(py-sy)^2;\r\n  end\r\n %end\r\n %d=sqrt(d2);\r\nend %distP2S2Z\r\n","test_suite":"%%\r\nvalid=1;\r\n\r\norcm=[40 60 5 24 10 39 35 16 1 2 10 20 214053; % mid right 214054\r\n      40 60 5 24 10 39 12 1 1 2 10 20 305630;  %Bot mid 305631\r\n      50 80 25 40 10 60 5 35 1 1 20 20 93947;  %Left Mid 93948\r\n      50 80 25 40 10 60 5 35 1 2 10 -20 24999; %Left with Neg Affinity 25000\r\n      50 80 25 40 10 60 15 70 1 1 10 10 65897; %TL Diag 15 65898\r\n      500 500 1 30 1 30 450 450 1 1 10 10 55;  %56\r\n      30 40 10 18 5 25 15 35 1 2 10 10  127329; %Top Mid; narrow stage\r\n      60 40 10 50 10 30 35 35 1 2 -10 -20 -14105];  %pair Negatve -14104\r\n\r\nOrctime=0;\r\nfigptr=0;\r\n\r\nfor i=1:size(orcm,1)\r\npxyr=[];\r\n[rwx, rhy, xmin, xmax, ymin, ymax, axy, mu, am, score]= ...\r\n  deal(orcm(i,1),orcm(i,2),orcm(i,3),orcm(i,4),orcm(i,5),orcm(i,6),orcm(i,7:8),orcm(i,9:10),orcm(i,11:12),orcm(i,13));\r\n\r\n%stage=ones(xmax-xmin+1,ymax-ymin+1);\r\nstage=ones(ymax-ymin+1,xmax-xmin+1);\r\n[sy,sx]=find(stage);\r\nsxy_base=[sx sy]-1; % Make LL [0,0] Stage(x,y) points\r\n\r\nsxy=sxy_base+[xmin ymin]; % 5 10;5 11  \r\nsxy=sortrows(sxy,[1 2],{'ascend' 'descend'}); %Matlab Find TL by col to BR\r\n\r\nsxy=flipud(sortrows(sxy,1,'ascend')); %Matlab find sequence TL by col to BR\r\n\r\nif mu(1)==mu(2)\r\n am(2)=[]; %if Only one musician type then am reduced\r\nend\r\n\r\n  ztic=tic;\r\n  mxy=Orc_2M1A(axy,mu,am,xmin,xmax,ymin,ymax,score,sxy);\r\n  Orctime=Orctime+toc(ztic);\r\n  dt=toc(ztic);\r\n  \r\n%Validity Checks\r\n if sum((mxy(1,:)-mxy(2,:)).^2)\u003c100\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Spacing of Musicians\\n\\n',i);\r\n end\r\n \r\n if min(mxy(:,1))\u003cxmin || max(mxy(:,1))\u003exmax || min(mxy(:,2))\u003cymin || max(mxy(:,2))\u003eymax\r\n  valid=0;\r\n  fprintf('Pid:%i  Invalid Positioning of Musicians off Stage\\n\\n',i);\r\n end\r\n \r\n%[Totscr,muscr]=Calc_score(mxy,mu,am,axy);\r\n Lmu=length(mu);\r\n na=size(axy,1);\r\n %Calc each mu score\r\n d2am=zeros(na,Lmu);\r\n for j=1:Lmu\r\n  d2am(:,j)=sum((axy-mxy(j,:)).^2,2);\r\n end\r\n muscr=zeros(Lmu,1);\r\n dmax=25;\r\n for j=1:Lmu\r\n  for ii=1:na\r\n   bflag=0;\r\n   \r\n   for k=1:Lmu %search for any blockng musician \r\n    if k==j,continue;end\r\n%    dv2=distP2S2Z(mxy(k,1),mxy(k,2),mxy(j,1),mxy(j,2),axy(ii,1),axy(ii,2)); %Intra Seg dist\r\n%    d2=distP2S2Z(px,py,vx,vy,wx,wy)\r\n     px=mxy(k,1); py=mxy(k,2);\r\n     vx=mxy(j,1); vy=mxy(j,2);\r\n     wx=axy(ii,1); wy=axy(ii,2);\r\n     \r\n     dv2=Inf;\r\n     sL2=(vx-wx)^2+(vy-wy)^2;\r\n     t=( (px-vx)*(wx-vx)+(py-vy)*(wy-vy) )/sL2;\r\n     if t\u003e=0 \u0026\u0026 t\u003c=1\r\n      sx=vx+t*(wx-vx);\r\n      sy=vy+t*(wy-vy);\r\n      dv2=(px-sx)^2+(py-sy)^2;\r\n     end\r\n     \r\n    if min(dv2)\u003c=dmax\r\n     bflag=1;\r\n     break;\r\n    end\r\n   end %k\r\n   \r\n   if bflag\r\n     continue;\r\n   end\r\n   \r\n   muscr(j)=muscr(j)+1000000*am(ii,mu(j))/d2am(ii,j);\r\n  end %ii\r\n end % j  mxy(j,:)\r\n Totscr=sum(muscr);\r\n\r\n\r\n if Totscr\u003cscore\r\n  valid=0;\r\n  fprintf('Pid:%i  Score:%.0f less than required %.0f\\n\\n',i,Totscr,score);\r\n end\r\n\r\n\r\nfprintf('\\nPid:%i  Score: %.0f   Time:%0.3f\\n',i,Totscr,dt);\r\nfprintf('axy x:%3i  y:%3i\\n',axy);\r\nfprintf('mxy(1,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(1,:),muscr(1),mu(1),am(1,1));\r\nfprintf('mxy(2,:) x:%2i  y:%2i scr:%8.0f  Type:%1i  Affinity:%2i\\n',mxy(2,:),muscr(2),mu(2),am(1,mu(2)));\r\n\r\n\r\n%draw_orcs(axy,mxy,swx,shy,xmin,xmax,ymin,ymax,pxyr);\r\n figptr=figptr+1;\r\n figure(figptr);\r\n plot(axy(:,1),axy(:,2),'or');hold on  % Attendees\r\n axis tight; axis equal\r\n \r\n room= [0 0;rwx 0;rwx rhy;0 rhy;0 0]; %rwx, rhy\r\n plot(room(:,1),room(:,2),'k');\r\n stage=[xmin ymin;xmax ymin;xmax ymax;xmin ymax;xmin ymin];\r\n plot(stage(:,1),stage(:,2),'color',[.8 0 .8]);\r\n %plot(mxy(:,1),mxy(:,2),'.r'); % Musicians\r\n plot(mxy(1,1),mxy(1,2),'*b');\r\n plot(mxy(2,1),mxy(2,2),'xk');\r\n hold off\r\n \r\nend % orcm\r\n\r\nfprintf('Total Time: %.3f\\n',Orctime);\r\n\r\n\r\n\r\nassert(valid)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":3097,"edited_at":"2023-07-20T18:08:52.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-07-20T16:09:25.000Z","updated_at":"2023-07-20T18:08:54.000Z","published_at":"2023-07-20T18:08:54.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Template solves all cases.   Please submit the template and view the graphs.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2023 Competition in July was to place musicians on a stage to maximize the attendees net Joy.  The \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://drive.google.com/file/d/16GFrZMudBrNwjMi3tOaP_iiSHh5pUtXL/view?usp=sharing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP 2023 Orchestra Spec\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e shows details of the contest. The musicians played various instruments with attendees having preference values for each instrument type. Musicians could block attendees from seeing musicians behind them. Blocking occurs if a_i to m_j vector touched within 5 of m_k. No musicians allowed within 10 of one another. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to place Two musicians onto the stage,mxy, to maximize Joy for one attendee,axy. Score an Attendee Joy higher than a min_score. The Joy table am is Joy co-factor for each musician type. Joy is scaled by 1/distance-squared between Musician and Attendee. Joy(j,i)=1000000*am(i,mu(j))/d2(i,j).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Joy here is to see the figures of optimal placement and the data per case.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to minimize the time, best known time of 0.28s, and/or to clean the code for size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe scoring and blocking functions are provided in the template.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"420\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"560\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"baseline\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis figure is a case where the Attendee is Grumpy and dislikes both Musicians to different amounts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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LhssbebMmTNmzCgqKlJKpaenL1y48MCBA8LXZbcgPQq/CNw2azxy5Mi6deuqqqqMpwdtsLTz58/v27fP2ExMTLxy5YoN1pWQkHD79u36+vr6+vpLly61t7d7PB4brEsp1dvb29TUZGwODQ05HA4bLO3xxx8fvel0Op1Op/R1mfhAxcOg6/pzzz136NChcDjc09Mze/bsa9eumT3UBDh06JDxlJ091tjX15eVldXW1jb0XyMjIzZYWk9PT2Zm5r///e9wOHzt2rX58+f/4x//sMG6RvvFL34RecrOHus6d+5cZmZm5MGzq1evzp8/v6OjwwZLGxoaeuaZZ9ra2sLh8I0bNxYsWHD06FHh67JbkMLh8NGjR+fPn//SSy9lZ2cfOHDA7HEmxugghW2xxs2bN6f9X7/97W/Dtlja+++/P2fOnDVr1syZM+ett96K7LTBugxGkMJ2Wde+ffuysrJeeumlrKysP/3pT5GdNljap59++sILLxQVFWVnZ//hD3+I7JS8Ltv+tu/PP//8G9/4xtgnAuzExmu0+tJCoZDf73/88cfvukBv9XXdjw3WFQqFBgcHx67CBkv74osvoqOjLfGtaNsgAQCsRVYeAQCPLIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARCBIAAARCBIAQASCBAAQgSABAEQgSAAAEQgSAEAEggQAEIEgAQBEIEgAABEIEgBABIIEABCBIAEARPgfBeVjYdEW0loAAAAASUVORK5CYII=\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":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,iVBORw0KGgoAAAANSUhEUgAAAbkAAAFDCAIAAAAoP+cAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH5wgJDR4sZKxFvgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAwOS1BdWctMjAyMyAwNjozMDo0NGDt0jEAACAASURBVHic7d1/TNN3/gfwd9vv0bl6XEmHJiW3HSdtHc5zyJ0LRFmCkoWcTBLMXMa5Rc0l2OPCcuTmhRnLHXBL5RaBZfzRxBGjpjF6x8KSJVcyFLpiloBbsOhKT6npNHaxpdPDHNT28/3jgx9qf30K+/Tz6bs+HyFLP28+bV9d7ZP35/1+9/ORMQxDAAAgJbnUBQAAUABZCQDAD1kJAMAPWQkAwA9ZCQDAD1kJAMAPWQkAwA9ZCQDAD1kJAMAPWQkAwA9ZCQDAD1kJAMAPWQkAwA9ZCQDAD1kJAMAPWQkAwA9ZCQDAD1kJAMAPWQkAwE/grLTb7dGbbrd7eHj4ypUrMbslbPd6vcPDwy6XK/ZBZbKkNwAARPF/Aj5Wf3+/1Wrl4rKjo+PixYvl5eUul2vt2rUDAwNKpTJZ+9DQkNlsrqysnJyc3LNnT0tLy/LjMgyRyQh3DbXo2wAA4mCEEAgEjhw5UlZWtn37drZlenp606ZNgUCA3dy9e/f58+eTtT969KisrGxmZoZhmHv37m3ZsuXmzZuxz0HI0g8AgOiEOQbv6enRaDRdXV1ci1qttlgsBQUF7GZxcfGdO3eStY+NjanVap1ORwjRaDRVVVUOh2PpgWSypR9OfAsAQIYJcwxuMpnkcvno6CjXotVqtVote9vj8YyMjDQ1NSVrd7lcGzdu5O6rUqmWRy2jD70JIYQY9PqlFoNBkOIBgAoJJjNEJExWyuVJ+6c+n+/AgQNGo7G0tDRZ+7Vr12RR/USFQsHEjEiyY5QyGWEYV06MVxoMBmnfeAHl0mshufVycuy1SFtAZtcMTU1N1dfX79+/32g0pmjPy8uLRCLcb8PhsEKhWN47JhzZ0AQAEJGQ8+AxxsfHW1paOjs7X3vttdTt69atczqd3A7BYLC2tnb5DvG9SPr7lTnz157k1mshufVycum1SC5T/Uqv19vc3Hz8+PHq6upQKBQKhcLhcLL2bdu2EULY4U632+1wOCoqKjJUGADAKmSqX3n27Nn5+Xl2PofV2Nh47NixZO3d3d2tra0lJSVOp9NsNhcWFsY/pkGvx19JAJCELHYWJYvl0kA1AKyI5B9/fB8cAIAfshIAgB+yEgCAH7ISAIAfshIAgB+yEgCAH7ISAIAfshIAgB+yEgCAH7ISAIAfshIAgB+yEgCAH7ISAIAfshIAgB+yEgCAH7ISAIAfshIAgB+yEgCAH7ISAIAfshIAgB+yEgCAn8DXvLXb7Tt27OA23W63x+PRaDRbt25NvbPf75+dneV+pdfr8/Pzha0NAGDVhMzK/v5+q9Vqt9vZzY6OjosXL5aXl7tcrrVr1w4MDCiVymQ7Dw4Onjhxgtuht7c3OnMBAKQlTFbOzc2ZzWabzaZSqdiWa9eunTt3zm63FxQUEELq6uo+++yzvXv3JtyZEDI9Pd3W1tbY2ChIPQAAwhJmvLKnp0ej0XR1dXEtarXaYrGwQUkIKS4uvnPnTrKdCSHXr1/fsGGD3+8PhUKClAQAICBh+pUmk0kul4+OjnItWq1Wq9Wytz0ez8jISFNTU7Kdw+HwrVu3Ojo6AoFAMBhsaGjo7OxM+EQGg4EQ4nK5BCkbALIf+6mXnDD9Srk86eP4fL4DBw4YjcbS0tJkO9+9e7empsZisVy+fPnSpUtjY2NWqzXho7lcLgQlwFMlSz71mV0zNDU1VV9fv3//fqPRmGK3oqKivr6+oqIiQsj69etramomJyczWhgAwIpkMCvHx8cPHTrU3t5+8ODB1Ht6PJ4LFy5wm4uLiyk6qgAA4stUJHm93ubm5uPHj1dXV4dCoVAoFA6Hk+28sLBgMpncbjchxOfzjYyM1NXVZagwAIBVEHgtOufs2bPz8/PcfA4hpLGx8dixYwl3NhgMbW1t+/bt27x589WrV5ubm7G4EgCyioxhGKlrSJfBYMiGIV4AEJ/kH38MCwIA8ENWAgDwQ1YCAPBDVgIA8ENWAgDwQ1YCAPBDVgIA8ENWAgDwQ1YCAPBDVgIA8ENWAgDwQ1YCAPBDVgIA8ENWAgDwQ1YCAPBDVgIA8ENWAgDwQ1YCAPBDVgIA8ENWAgDwoykrZ2ZmpC4BAJ5SAmel3W6P3nS73cPDw1euXElnZ6/XOzw8HH+pNplMxtsCAJBRQl4fvL+/32q1cgnY0dFx8eLF8vJyl8u1du3agYEBpVKZbOehoSGz2VxZWTk5Oblnz56WlhZuT4ZhZLLla/NG3wYAEIcwWTk3N2c2m202m0qlYluuXbt27tw5u91eUFBACKmrq/vss8/27t2bcOdwONze3n7u3DmdTuf3+3fu3Pn6668XFxdzj8/GJUFQAoBEhDkG7+np0Wg0XV1dXItarbZYLGxQEkKKi4vv3LmTbOexsTG1Wq3T6QghGo2mqqrK4XCwv5I9xu0c3wIAkGnC9CtNJpNcLh8dHeVatFqtVqtlb3s8npGRkaampmQ7B4PBjRs3cpsqlYobtYw+9GZv6PX6+DFNAMhVBoNB6hIIESor5fKk/VOfz3fgwAGj0VhaWpps53A4HN1PVCgUMQfa7KE3919BagYAKrB9I8kTM7Nrhqampurr6/fv3280GlPslpeXF4lEuM1wOKxQKLjNmDFKxCUAiC+DWTk+Pn7o0KH29vaDBw+m3nPdunVOp5PbDAaD5eXlmSsMAGClMpWVXq+3ubn5+PHj1dXVoVAoFAqFw+FkO2/bto0Qwo5gut1uh8NRUVHB/TamI4mpcAAQn5DrK6OdPXt2fn6em88hhDQ2Nh47dizhznK5vLu7u7W1taSkxOl0ms3mwsLC6B2wZggApJXt0ZNiaDLLKwcAARkMBmkXwGSqXymU+DVDiEgAEB8d587gDr0xCQ4AkqAgK7FmCAAkR0FWYh4cACRHQVYSzIMDgNSyfW4nxckrEZoAIJpsz0rMgwNANqDjGBzz4AAgLQqyEvPgACA5CrISAEByFGQl1gwBgOQoyErCxiWREYbIsv4L7ACQk7J9Hny5R8nEtiA0AUA02Z6Vy2uGCCISACRDxzF4zHilhJUAwNOJgqzEmiEAkBwFWYl5cACQHAVZSZ4co0RQAoD4sn1uB/PgAJANsj0rMQ8OANmAjmNwzIMDgLQE7lfa7fYdO3Zwm2632+PxaDSarVu3Ru/m9Xq//fbb559/3mAwsC1+v392dpbbQa/X5+fns7fZyZzofiWmdwBAZEJmZX9/v9Vqtdvt7GZHR8fFixfLy8tdLtfatWsHBgaUSiUhZGhoyGw2V1ZWTk5O7tmzp6WlhRAyODh44sQJdgdCSG9vL5e5S/PgUeOVCEoAEBsjhEAgcOTIkbKysu3bt7Mt09PTmzZtCgQC7Obu3bvPnz/PMMyjR4/KyspmZmYYhrl3796WLVtu3rzJMMy777575syZFE9BGML+CFIwANBFr9dLW4Aw45U9PT0ajaarq4trUavVFouloKCA3SwuLr5z5w4hZGxsTK1W63Q6QohGo6mqqnI4HISQ69evb9iwwe/3h0Kh6EeWPZaiBQAg04Q5BjeZTHK5fHR0lGvRarVarZa97fF4RkZGmpqaCCHBYHDjxo3cbiqVyuVyhcPhW7dudXR0BAKBYDDY0NDQ2dnJ7sDEzYPr9XqXyyVI2QCQ/bhZDWkJ06+Uy5M+js/nO3DggNFoLC0tJYSEw+HoLqFCoWAY5u7duzU1NRaL5fLly5cuXRobG7NardEPEn2XmZkZQWoGACq4XK5s6B5lds3Q1NRUfX39/v37jUYj25KXlxeJRLgdwuGwQqEoKirq6+srKioihKxfv76mpmZycpLbB98HBwDJZTArx8fHDx061N7efvDgQa5x3bp1TqeT2wwGg+Xl5R6P58KFC1zj4uJiio4qAID4MhVJXq+3ubn5+PHj1dXVoVAoFAqFw2FCyLZt2wgh7Mim2+12OBwVFRULCwsmk8ntdhNCfD7fyMhIXV0d91AMzp0BAFLL1Hccz549Oz8/z87nsBobG48dOyaXy7u7u1tbW0tKSpxOp9lsLiwsLCwsbGtr27dv3+bNm69evdrc3By9oJ1w15B4fDtDNQMAJJPtfbT4c2cQriG7KwcAARkMBmlneHDuDAAAfnRMoeDcGQAgLQqyEmuGAEByFGQl5sEBQHIUZCXBNSQAQGrZPreDa0gAQDbI9qzEPDgAZAM6jsExDw4A0qIgK9OfB5cRGfuzol8BAPCiICvjD7rFPwyPiVphk5eL/vgbAJAlKMhKFkMYvUHPEDoGK1cUplgUBZD9sn1uZ0VSJGmWh+zSyUEYIiOy6OhkQzNhNzN2LALflwfIpJzKysyJiVoBkzfFoiiyuoNx9nFkS/dFYgIIAlmZEemHacJFUQKMVzJLHcyYh4rpqCJJAdKErMwKT/QlVzdlxN5phdEX3/dMFqMp4jVhHCd7rvh9Uqd51C+4OyDiQQLISulxkznxN1KL7yTSsigq/eRNmP7xAxdsR16Q/vKq3w7IbchK6f3IRVFPLD6Njpbkj5FiykhwqZ8l9fQUj6gXGBNnPybd2DGQ5bERBCUQQpCVT7OEEZAsF1LkRYaiZCnQueAULtiTxTdDCHk8WMwtS0i2f8LXzO3HMEz83ZhkewINkJVZ5Gn+2CQdQIhaApW0i5rOPunJaF879qEZtlEW/coZ3j8K3LCDjJCn+B+M+JCVkFnp/wFgokYfE9496UMl2X8VJDmTtCzJ7TTuKVu6CwI085CV8NRJnadL45VkadRStpLr9z25CpdhuC+trq5QPrLUE18xovM0rqTHq3Lj7oTkfUzg7zja7fboTbfbPTw8fOXKlZjdvF7v8PBwzFXZEjYCiCzZuVp+zNf2mcc/Tz7T45+V1UeIbCnvBJT08WQyIltGZDLu+7tPNCZH4n/oJGS/sr+/32q1cnHZ0dFx8eLF8vJyl8u1du3agYEBpVJJCBkaGjKbzZWVlZOTk3v27GlpaUnWCCC+ZMsSfsz8ePRwZIrfkrj+HRPdeUweMlxX8fGaqVR3oTWrJMcIIRAIHDlypKysbPv27WzL9PT0pk2bAoEAu7l79+7z588zDPPo0aOysrKZmRmGYe7du7dly5abN28mbIx/Fr1eL0i1AKkk6gMm6BWm8atUd2ASdDYTtsS3Mkl+Uj1QGqX+mHpSSFDqqkj+8RfmGLynp0ej0XR1dXEtarXaYrEUFBSwm8XFxXfu3CGEjI2NqdVqnU5HCNFoNFVVVQ6HI2GjIIUBrIhMJuM5Mo5LChlDZCvOy5Q1CPZI6WLzizz+4SRsiW9NHX4k/odOwhyDm0wmuVw+OjrKtWi1Wq1Wy972eDwjIyNNTU2EkGAwuHHjRm43lUrlcrlUKlV8Y8InMhgMhBCMaUKOYIMjagqIYZjlET1m+YSp5MnBAf4JHPZWolyiLqvYT73khMlKuTxp/9Tn8x04cMBoNJaWlhJCwuFw9NusUCgYhknYmPDRkJKQOfEBxDz+glN6JyJdXvaU6h7Ri+upnegQE/uplzwxM3uu36mpqfr6+v379xuNRrYlLy8vEolwO4TDYYVCkbAxo4UBpLB08EiWJnijfvH4RpIlkdFfSOceJNETJB075M5mkvS+IJEMrq8cHx9vaWnp7Ox87bXXuMZ169Y5nU5uMxgM1tbWJmzMXGGQkxL2Cle2sPzJL5gLUdSPknBx/lIDklR0mepXer3e5ubm48ePV1dXh0KhUCgUDocJIdu2bSOEsCObbrfb4XBUVFQkbMxQYZAzYpbwxQdKqrxL3rNLsG/qTiIbaknmg3jvC7TIVL/y7Nmz8/Pz7HwOq7Gx8dixY3K5vLu7u7W1taSkxOl0ms3mwsJCQkjCRgBJLCdv1PmS2Tld8uSBdswy9eidY04QlzguEaH0oOl8UwaDAXM7wIk/i2Wy5Tbc4GNUU8q7JPot90mJz8qEz5i4vCcfOfUjxD9dwj2fEpJ//PF9cKBVguxIGSZPpA8XVdn6NRauf/pES/wLjDkzchqnuIfVQVbCUyc6O+JzhPfEGanvLq2E195Y+nuQvCeLPmw6kJUAyxKeOGN1wZGi27t89o0nB0ZJXJZFX8diJc/N3X8lFUNKyEqAZal7kSJYysSosHsiJZF90kFWAmSxmPMOJfxtih3I8qH38mLN5Nc9xqF3CshKgAQymhrLB9qyRI0J7vD4Rpr9ykTT9/E1pPdYsARZCSCB1FG1tJBzRYfcGKPMMGQlQLaIDVA29VKEavLFoQyWuQsts+fOAIBVi/1yZNyZ2UBM6FcCZLX4M2jELDjn5mpiltaverUTJIR+JUAuSLYwE4SCrASgWLIVPwhKweEYHIB6sSvY8W3FDEBWAlBvacgyarASESk4HIMD5BxZVpzXPccgKwGoF3NdoNWcbgP4ICsBqBdzxM1OguMwXFjISoBcgEnwTMPcDgDd4i9WgUnwTEBWAtBt+azmBBGZQTgGB8gF8deSBGEJ3K+02+07duzgbXS73R6PR6fT/eIXv2Bb/H7/7Owst4Ner8/Pzxe2NoBcFfNl8B9z6QtIRsis7O/vt1qtdrs9dWN3d/e//vWv7du3f/jhh7/97W//+Mc/EkIGBwdPnDihVCrZfXp7e+MzFwASWvoyeNR4JYJScMJk5dzcnNlsttlsKpUqdePU1NSpU6dsNptWq11YWKitrX311Vd/9atfTU9Pt7W1NTY2ClIPwNMmpl8pbTE5SZjxyp6eHo1G09XVxdt448aNqqoqrVZLCFEqleXl5TabjRBy/fr1DRs2+P3+UCgkSEkATwnZYyla4McTpl9pMpnkcvno6ChvY15e3nfffcdt/vDDDzKZLBwO37p1q6OjIxAIBIPBhoaGzs7OhE9kMBgIIS6XS5CyAXJAzs+Ds596yQnTr5TLEzxOwsbKysrvv/++u7v7q6++OnXq1PT0NMMwd+/erampsVgsly9fvnTp0tjYmNVqTfhELpcLQQkQL4fnwbPkUy/2mqGCgoLTp097PJ6+vr779+/X1dUplcqioqK+vr6ioiJCyPr162tqaiYnJ0UuDIBeS19qJAyREYYwqS4JCasl9lr0Bw8ezM/Pf/zxx+zm4cOHd+3a5fF4JiYm9u7dyzYuLi4m7JMCAEhF7Eh68OBBY2Ojz+cjhHz99dcTExM1NTULCwsmk8ntdhNCfD7fyMhIXV2dyIUB0AsXkBCB2P1KrVb73nvv1dbWlpaW3r59+6OPPsrPz8/Pz29ra9u3b9/mzZuvXr3a3NyMxZUAK8LFJYIyQ2j632owGLJhiBcgq6QYmqTo081L8o8/zp0BQLflNUM4vVAmYQoFIBdwh96YBM8QZCUA3div6MRP70hYUk5CVgLQDReQEAeyEoB60Z1KpGSGYG4HgGLxx9oIzQxBVgJQDJPgosExOAD1MAkuAmQlAN1ivqiDuMwQZCUAAD9kJQDdcOIMcSArAaiHE2eIAPPgABTDmiHRICsBKIY1Q6LBMTgA9bBmSATISgC6Yc2QOJCVAHTDPLg4kJUA1MM8uAgwtwNAMcyDiwZZCUAxzIOLBsfgANTDPLgIBM5Ku92eTqPb7R4eHvZ4PNGNXq93eHgYV2oEWBHMg4tDyKzs7+9va2vjbezu7n777bdtNltTU9NHH33ENg4NDb355ps2m+3w4cO9vb0CVgWQ2zAPLg5hxivn5ubMZrPNZlOpVKkbp6amTp06ZbPZtFrtwsJCbW3tq6++umnTpvb29nPnzul0Or/fv3Pnztdff724uFiQ2gByHubBRSBMv7Knp0ej0XR1dfE23rhxo6qqSqvVEkKUSmV5ebnNZhsbG1Or1TqdjhCi0WiqqqocDocghQHkNtljKVpAEML0K00mk1wuHx0d5W3My8v77rvvuM0ffvhBJpMFg8GNGzdyjSqVKtmopcFgIIRgTBOA9TTMg7OfeskJ06+UyxM8TsLGysrK77//vru7+6uvvjp16tT09DTDMOFwOPrPoEKhSPZ+u1wuBCVAjNyeB8+ST73Ya4YKCgpOnz7t8Xj6+vru379fV1enVCrz8vIikQi3TzgcVigUIhcGQCnMg4tD7LXoDx48mJ+f//jjj9nNw4cP79q1a926dU6nk9snGAzW1taKXBgAjbig5PIR0zsZIna/8sGDB42NjT6fjxDy9ddfT0xM1NTUbNu2jRDCjmy63W6Hw1FRUSFyYQA0woIh0Yjdr9Rqte+9915tbW1paent27c/+uij/Px8Qkh3d3dra2tJSYnT6TSbzYWFhSIXBkCp6LhEUGYOTX+FDAZDNgzxAmSJFOOSFH2u0yT5xx/nzgCg1dOwYCh74NwZAHTL7QVD2QNZCUAxLBgSDbISgGKYBxcNshKAbjhxhjgwtwNAK1xAQkzISgBaYR5cTDgGB6Ab5sHFgawEoBjmwUWDrAQA4IesBKAY1gyJBlkJQDesGRIH5sEBaIU1Q2JCVgLQCmuGxIRjcAC6Yc2QOJCVALRir20bP70jYUk5DFkJQKuYI242N3EYniHISgCK4QISosHcDgCVMAkuMmQlAJUwCS4yHIMDUAyT4KIRuF9pt9t37NjB2zg7O/uf//ynqKiotLSUbfH7/bOzs9wOer2evRYuACST8MQZ6F1miJBZ2d/fb7Va7XZ76sZPPvnk5MmTlZWVV69e/fWvf93Z2UkIGRwcPHHihFKpZPfp7e2Nz1wAiBYTjgjKjBImK+fm5sxms81mU6lUqRsjkciHH3746aef6nS6+/fvV1RUvPXWW6WlpdPT021tbY2NjYLUA/CUwJfBRSPMeGVPT49Go+nq6uJtJIREIpFnnnmGELJmzRqZTLa4uEgIuX79+oYNG/x+fygUSvFEBoPBYDAIUjMA1WSPpWjJDVnyqRemX2kymeRy+ejoKG+jXC5vb283Go27du1yOBz79u17+eWXw+HwrVu3Ojo6AoFAMBhsaGhgD8zjuVwuQQoGoN3TMw/Ofuolj0th+pVyeYLHSdhICJmYmFizZs1zzz2nVqtv3Ljx8OHDu3fv1tTUWCyWy5cvX7p0aWxszGq1ClIYQG7DPLhoxF4z9MUXX1y5csVqtTY2NlosFkLIyZMni4qK+vr6ioqKCCHr16+vqamZnJwUuTAA6uACEmISOyuDwaDBYFAoFOzmCy+84PV6PR7PhQsXuH0WFxeT9UkBACQhdiS9+OKLX3755Y0bNwgh9+/fn5iYeOWVVxYWFkwmk9vtJoT4fL6RkZG6ujqRCwOgDi4gISaxv+NYWlr6/vvvv/HGGy+99JLT6dy7d29DQwMhpK2tbd++fZs3b7569WpzczMWVwKkA2uGREPT/1+DwYB5cABWiqFJij7U6ZP8449zZwBQ6elZM5QlMIUCQDGsGRINshKAVlgzJCZkJQCtMA8uJmQlAMUwDy4azO0AUAnXkBAZshKASpgHFxmOwQEohnlw0SArAWjFBmV0vxJxmTnISgAqxU/mYHono5CVAFSK71EiKDMKWQlAKywYEhPmwQHogwVD4kNWAtAHC4bEh2NwAFphwZCYkJUAVMKJM0SGrASgEk6cITJkJQCtMA8uJsztANAH8+DiQ1YC0Afz4OLDMTgArTAPLiaBs9Jut6fTODs7Ozw8fO3atehGr9c7PDyMKzUCpAPz4CITMiv7+/vb2tp4Gz/55JPf/e53NpvtT3/609GjR9nGoaGhN99802azHT58uLe3V8CqspPBYJC6BMHk0msh9LycdObBaXktVBBmvHJubs5sNttsNpVKlboxEol8+OGHn376qU6nu3//fkVFxVtvvWUwGNrb28+dO6fT6fx+/86dO19//fXi4mJBagPIVZgHF5MwWdnT06PRaLq6uv7+97+nbiSERCKRZ555hhCyZs0amUy2uLg4NjamVqt1Oh0hRKPRVFVVORyOhFmZS38n8VqyVva/nJmZmZgWro+p1+uj27P/tdBCmKw0mUxyuXx0dJS3US6Xt7e3G43GXbt2ORyOffv2vfzyy4ODgxs3buT2UalUCUctMZQJEAPz4KIRZrxSLk/wOAkbCSETExNr1qx57rnn1Gr1jRs3Hj58GA6Ho0deFAoF3ngAXpgHF5PYa4a++OKLK1euWK3WxsZGi8VCCDl58mReXl4kEuH2CYfDCoVC5MIA6IJ5cJGJnZXBYNBgMHBR+MILL3i93nXr1jmdzuh9ysvLRS4MgC7xx144GssosbPyxRdf/PLLL2/cuEEIuX///sTExCuvvLJt2zZCCDuy6Xa7HQ5HRUWFyIUBUAoRKQ6xv+NYWlr6/vvvv/HGGy+99JLT6dy7d29DQwMhpLu7u7W1taSkxOl0ms3mwsJCkQsDAEgBy7IAAPjh++AAAPyQlQAA/Og4J5vX6/3222+ff/55Gr+EkLp4v98/OzvLber1+vz8fBGrE4bdbt+xY4fUVaxSsuJpf2vcbrfH49FoNFu3bpW6lhVLXbwkbw0FWTk0NGQ2mysrKycnJ/fs2dPS0iJ1RSvAW/zg4OCJEyeUSiW72dvbS13o9Pf3W63WhKeYyn4piqf6reno6Lh48WJ5ebnL5Vq7du3AwAD3QrIfb/HSvDVMdnv06FFZWdnMzAzDMPfu3duyZcvNmzelLipd6RT/7rvvnjlzRorqBBAIBI4cOVJWVrZ9+3apa1kx3uLpfWump6c3bdoUCATYzd27d58/f17aktKXTvGSvDXZPl6Z8LQaUheVrnSKv379+oYNG/x+fygUkqLGH4U7PYrUhawGb/H0vjVqtdpisRQUFLCbxcXFd+7ckbak9KVTvCRvTbYfgweDwXROq5GdeIsPh8O3bt3q6OgIBALBYLChoaGzs1P0Mlcv4elRaJG6eKrfGq1Wq9Vq2dsej2dkZKSpqUnaktLHW7xUb0229yupPq0Gb/F3796tqamxWCyXL1++dOnS2NiY1WoVvczVS3Z6FCqkLp72t4bl8/kOHDhgNBpLS0ulrmXFkhUv1VuT7f/WqT6tBm/xRUVFfX19RUVFhJD169fXidNjJQAAAyBJREFU1NRMTk6KXSUkkgNvzdTUVH19/f79+41Go9S1rFiK4qV6a7I9K6k+rQZv8R6P58KFC9zm4uIi1T21XEL7WzM+Pn7o0KH29vaDBw9KXcuKpS5eqrcm299+qk+rkaz4b775hh2uXlhYMJlMbrebEOLz+UZGRurq6iQt+WmXG2+N1+ttbm4+fvx4dXV1KBQKhULhcFjqotKVrHjp3xqR591X4fLly5WVlW+//fbWrVs///xzqctZmYTFv/POO9wyiDNnzpSVlb399ttlZWUnT56UrtLVu3TpEo1rhlgxxefGW/PBBx/on/TXv/5V6qLSlax4yd8aas6d8fDhw2eeeYau4yBO6uIjkcj//vc/el9dDsNbk7XEf2uoyUoAAAnhryUAAD9kJQAAP2QlAAA/ZCUAAD9kJQAAP2QlAGS1/v7+f/zjH1JXgawEgCz29ddfDwwMPHz4UOpCkJUAkK0ePnxoNpubm5ulLoQQZCUAZK2//e1vf/jDH372s59JXQghyEoAkETMNY68Xu/w8HD0ybD//e9/P/vss9lzjSN8xxEAxBZzSbiEl/Crrq7++c9/rlQq7969+9///vedd9555513JKwZWQkA4pmbmzObzTabTaVSsVkZDod/85vfnDt3TqfT+f3+nTt3Dg4OFhcXc/M5n332mdPpPHr0qLSXosQxOAAIJhKJsGeW5Ny+ffvBgwfcZvwl4ZJdwu/Zx5RK5U9+8hPJr9mLrAQAwcjl8s8///ybb75hN2/fvn369Omf/vSn3A4mk+nPf/7zs88+y7XwXsKvvr7+2LFjGS6cX7ZfxxEA6NLS0tLb20sIKSwsPH369F/+8pfo38afbpKW6w8iKwFAYC0tLR988MH8/Hw6V6ONv4RfXl5eJqtbJRyDA4DAZmdnw+HwCy+8wB2Mp0DL9QeRlQAgpNnZ2bNnzx49evT3v//9+Pg4b1zScv1BHIMDgGAikcg///nPo0ePsptGo7G/v/+Xv/xlfn5+srvI5fLu7u7W1taSkhKn02k2mwsLC8WqdwWwvhIAskKWX38QWQkAwC9LIxwAIKv8P8Wiu5Lf8+ZaAAAAAElFTkSuQmCC\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"}],"term":"tag:\"2023\"","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:\"2023\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"2023\"","","\"","2023","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fdd4770fb58\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fdd4770fab8\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fdd4770ddf8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fdd4770fdd8\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fdd4770fd38\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fdd4770fc98\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fdd4770fbf8\u003e":"tag:\"2023\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fdd4770fbf8\u003e":"tag:\"2023\""},"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:\"2023\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"2023\"","","\"","2023","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fdd4770fb58\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fdd4770fab8\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fdd4770ddf8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fdd4770fdd8\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fdd4770fd38\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fdd4770fc98\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fdd4770fbf8\u003e":"tag:\"2023\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fdd4770fbf8\u003e":"tag:\"2023\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":58773,"difficulty_rating":"easy-medium"},{"id":58842,"difficulty_rating":"unrated"}]}}