{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-05-26T00:16:20.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-05-26T00: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":42355,"title":"Minimum Set (A+A)U(A*A) OEIS A263996","description":"This Challenge is to find an integer vector A that creates the minimum set size for (A+A) U (A*A) for a given vector length, \u003chttps://oeis.org/A263996 OEIS A263996\u003e. The length, best value, Prime_max, and Value_max will be provided. \r\n\r\nThe \u003chttps://oeis.org/A263996 OEIS A263996\u003e gives the minimum set sizes thru length 50. Length 7 has best value 26 with Prime_max 5 and Value_max 8. A=[1 2 3 4 5 6 8] yields [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 24 25 30 32 36 40 48 64].\r\nThe \u003chttp://68.173.157.131/Contest/SumsAndProducts1/FinalReport Al Zimmermann Sums Contest Final Report\u003e extends A263996 for lengths 40:40:1000 with complete vector solutions. The contest winner, Rokicki, noted his method used P-smooth sets, hill climbing, and random swaps. The contest was a little tougher with only L given.\r\n\r\nExample Input/Output:\r\nL=9;Best=36;pmax=5;vmax=12;\r\nv = SP(L,Best,pmax,vmax); Yields v=[1 2 3 4 5 6 8 10 12]\r\n\r\nTheory/Hints: The V superset is found using \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1298-p-smooth-numbers psmooth(pmax,vmax)\u003e . One observation is that for every v element the set v contains prod of all v element factor permutations. The time eater will be score evaluation. Residual evaluation suggested. A history screen, prior to score evaluation, of prior processed vectors is essential. A quick history pre-screen is vector sum. Replace testing of only values that are not factors of other numbers (eg 2,3 no replace) enables a reasonable time rolling score solution without random for the small test case values. ","description_html":"\u003cp\u003eThis Challenge is to find an integer vector A that creates the minimum set size for (A+A) U (A*A) for a given vector length, \u003ca href = \"https://oeis.org/A263996\"\u003eOEIS A263996\u003c/a\u003e. The length, best value, Prime_max, and Value_max will be provided.\u003c/p\u003e\u003cp\u003eThe \u003ca href = \"https://oeis.org/A263996\"\u003eOEIS A263996\u003c/a\u003e gives the minimum set sizes thru length 50. Length 7 has best value 26 with Prime_max 5 and Value_max 8. A=[1 2 3 4 5 6 8] yields [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 24 25 30 32 36 40 48 64].\r\nThe \u003ca href = \"http://68.173.157.131/Contest/SumsAndProducts1/FinalReport\"\u003eAl Zimmermann Sums Contest Final Report\u003c/a\u003e extends A263996 for lengths 40:40:1000 with complete vector solutions. The contest winner, Rokicki, noted his method used P-smooth sets, hill climbing, and random swaps. The contest was a little tougher with only L given.\u003c/p\u003e\u003cp\u003eExample Input/Output:\r\nL=9;Best=36;pmax=5;vmax=12;\r\nv = SP(L,Best,pmax,vmax); Yields v=[1 2 3 4 5 6 8 10 12]\u003c/p\u003e\u003cp\u003eTheory/Hints: The V superset is found using \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1298-p-smooth-numbers\"\u003epsmooth(pmax,vmax)\u003c/a\u003e . One observation is that for every v element the set v contains prod of all v element factor permutations. The time eater will be score evaluation. Residual evaluation suggested. A history screen, prior to score evaluation, of prior processed vectors is essential. A quick history pre-screen is vector sum. Replace testing of only values that are not factors of other numbers (eg 2,3 no replace) enables a reasonable time rolling score solution without random for the small test case values.\u003c/p\u003e","function_template":"function v = SP(L,Best,pmax,vmax)\r\n% Only L and \u003c=Best need to be satisfied\r\n% pmax and vmax are suggestions when using psmooth numbers\r\n  v=[1:L-1 vmax];\r\nend","test_suite":"%%\r\ntic\r\npass=true;\r\nL=8;Best=30;pmax=5;vmax=10;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=39;Best=335;pmax=7;vmax=100;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=50;Best=486;pmax=7;vmax=144;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=40;Best=348;pmax=7;vmax=120;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=80;Best=1001;pmax=11;vmax=300;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=120;Best=1847;pmax=11;vmax=480;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=160;Best=2864;pmax=11;vmax=840;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=200;Best=4000;pmax=13;vmax=900;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=280;Best=6632;pmax=13;vmax=1800;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-06-04T19:18:55.000Z","updated_at":"2016-02-22T02:59:36.000Z","published_at":"2016-02-22T02:59:36.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to find an integer vector A that creates the minimum set size for (A+A) U (A*A) for a given vector length,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://oeis.org/A263996\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eOEIS A263996\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The length, best value, Prime_max, and Value_max will be provided.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://oeis.org/A263996\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eOEIS A263996\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e gives the minimum set sizes thru length 50. Length 7 has best value 26 with Prime_max 5 and Value_max 8. A=[1 2 3 4 5 6 8] yields [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 24 25 30 32 36 40 48 64]. The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://68.173.157.131/Contest/SumsAndProducts1/FinalReport\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAl Zimmermann Sums Contest Final Report\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e extends A263996 for lengths 40:40:1000 with complete vector solutions. The contest winner, Rokicki, noted his method used P-smooth sets, hill climbing, and random swaps. The contest was a little tougher with only L given.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample Input/Output: L=9;Best=36;pmax=5;vmax=12; v = SP(L,Best,pmax,vmax); Yields v=[1 2 3 4 5 6 8 10 12]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory/Hints: The V superset is found using\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1298-p-smooth-numbers\\\"\u003e\u003cw:r\u003e\u003cw:t\u003epsmooth(pmax,vmax)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e . One observation is that for every v element the set v contains prod of all v element factor permutations. The time eater will be score evaluation. Residual evaluation suggested. A history screen, prior to score evaluation, of prior processed vectors is essential. A quick history pre-screen is vector sum. Replace testing of only values that are not factors of other numbers (eg 2,3 no replace) enables a reasonable time rolling score solution without random for the small test case values.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42774,"title":"GJam March 2016 IOW: Clock Dance","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/8274486/dashboard#s=p1 GJam March 2016 Annual I/O for Women Dance Around the Clock\u003e. This is a mix of the small and large data sets.\r\n\r\nThe GJam story goes that D even dancers are arranged clockwise 1:D. Who is adjacent to dancer K after N pair swaps. The odd move swaps positions 1/2,3/4,..D-1/D. The even move swaps positions D/1, 2/3,...D-2/D-1. D=8 [1:8] becomes [2 1 4 3 6 5 8 7] after the first swap. After second swap we see [7 4 1 6 3 8 5 2].  \r\n\r\n\u003c\u003chttp://code.google.com/codejam/contest/images/?image=dance_around_the_clock.png\u0026p=5733344260128768\u0026c=8274486\u003e\u003e\r\n\r\n*Input:* [D K N] , 4\u003c=D\u003c=1E8, 1\u003c=K\u003c=D, 1\u003c=N\u003c=1E8\r\n\r\n*Output:* [KCW KCCW] , KCW is dancer to left of Kth dancer after N moves\r\n\r\n*Examples:* [m] [v]\r\n\r\n  [8 3 1] creates v=[6 4]\r\n  [8 4 2] creates v=[1 7]\r\n  [6 6 1] creates v=[5 3]\r\n \r\n\r\n*\u003chttp://code.google.com/codejam Google Code Jam 2016 Open Qualifier: April 8, 2016\u003e*\r\n\r\n*Contest Theory:* The small case was D\u003c10 and N\u003c10. This could be done brute force in the 5 minutes of entry submission allowed. However, this is clearly a case of modulo math so might as well solve the unbounded case of D/N \u003c1E8. The number being assigned as 1:D leads to confusion as mod maps to 0:D-1. Suggest offset the K dancer number by 1 for processing and then correct for the final answer. Mod is fun as mod(-1,8) yields a useful 7. Quick observation is for offsetted K vector [0:D-1] the Evens move CW and the Odds move CCW. One method used 5 mod calls to solve.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/8274486/dashboard#s=p1\"\u003eGJam March 2016 Annual I/O for Women Dance Around the Clock\u003c/a\u003e. This is a mix of the small and large data sets.\u003c/p\u003e\u003cp\u003eThe GJam story goes that D even dancers are arranged clockwise 1:D. Who is adjacent to dancer K after N pair swaps. The odd move swaps positions 1/2,3/4,..D-1/D. The even move swaps positions D/1, 2/3,...D-2/D-1. D=8 [1:8] becomes [2 1 4 3 6 5 8 7] after the first swap. After second swap we see [7 4 1 6 3 8 5 2].\u003c/p\u003e\u003cimg src = \"http://code.google.com/codejam/contest/images/?image=dance_around_the_clock.png\u0026p=5733344260128768\u0026c=8274486\"\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [D K N] , 4\u0026lt;=D\u0026lt;=1E8, 1\u0026lt;=K\u0026lt;=D, 1\u0026lt;=N\u0026lt;=1E8\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [KCW KCCW] , KCW is dancer to left of Kth dancer after N moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e [m] [v]\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[8 3 1] creates v=[6 4]\r\n[8 4 2] creates v=[1 7]\r\n[6 6 1] creates v=[5 3]\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003e\u003ca href = \"http://code.google.com/codejam\"\u003eGoogle Code Jam 2016 Open Qualifier: April 8, 2016\u003c/a\u003e\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eContest Theory:\u003c/b\u003e The small case was D\u0026lt;10 and N\u0026lt;10. This could be done brute force in the 5 minutes of entry submission allowed. However, this is clearly a case of modulo math so might as well solve the unbounded case of D/N \u0026lt;1E8. The number being assigned as 1:D leads to confusion as mod maps to 0:D-1. Suggest offset the K dancer number by 1 for processing and then correct for the final answer. Mod is fun as mod(-1,8) yields a useful 7. Quick observation is for offsetted K vector [0:D-1] the Evens move CW and the Odds move CCW. One method used 5 mod calls to solve.\u003c/p\u003e","function_template":"function v=ClockDance(m)\r\n% m [D K N] % Num Dancers, K dancernumber, N swaps\r\n% v=[CW_dancenumber CCW_dancenumber]  [pos+1, pos-1]\r\n v=[0 0];\r\n% This is a mod mod mod type contest question\r\n% Note mod(-1,8)=7\r\n% Note changing dancers from 1:D to 0:D-1 helps mod normalcy and brain function\r\n% At the end add 1 back to the v vector\r\n\r\nend","test_suite":"%%\r\nm=[8 3 1 ];\r\nv=ClockDance(m);\r\nvexp=[6 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 4 2 ];\r\nv=ClockDance(m);\r\nvexp=[1 7 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 8 ];\r\nv=ClockDance(m);\r\nvexp=[2 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[10 9 6 ];\r\nv=ClockDance(m);\r\nvexp=[2 10 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 9 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 2 10 ];\r\nv=ClockDance(m);\r\nvexp=[7 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 8 7 ];\r\nv=ClockDance(m);\r\nvexp=[3 1 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 4 3 ];\r\nv=ClockDance(m);\r\nvexp=[3 1 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 6 1 ];\r\nv=ClockDance(m);\r\nvexp=[5 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 4 6 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 5 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 4 1 ];\r\nv=ClockDance(m);\r\nvexp=[3 1 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 1 ];\r\nv=ClockDance(m);\r\nvexp=[4 2 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 2 2 ];\r\nv=ClockDance(m);\r\nvexp=[5 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 1 10 ];\r\nv=ClockDance(m);\r\nvexp=[4 2 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 3 1 ];\r\nv=ClockDance(m);\r\nvexp=[6 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 4 2 ];\r\nv=ClockDance(m);\r\nvexp=[1 7 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 8 ];\r\nv=ClockDance(m);\r\nvexp=[2 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[72137284 16112525 91351141 ];\r\nv=ClockDance(m);\r\nvexp=[54540240 54540238 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[155546 123001 56937611 ];\r\nv=ClockDance(m);\r\nvexp=[138552 138550 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[78548986 44806245 20024652 ];\r\nv=ClockDance(m);\r\nvexp=[6306564 6306562 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 5 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[61256952 31789482 70629381 ];\r\nv=ClockDance(m);\r\nvexp=[13044625 13044623 ];\r\nassert(isequal(vexp,v))\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":10,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-03-16T04:41:57.000Z","updated_at":"2016-03-16T05:17:21.000Z","published_at":"2016-03-16T05:10:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/8274486/dashboard#s=p1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam March 2016 Annual I/O for Women Dance Around the Clock\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. This is a mix of the small and large data sets.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe GJam story goes that D even dancers are arranged clockwise 1:D. Who is adjacent to dancer K after N pair swaps. The odd move swaps positions 1/2,3/4,..D-1/D. The even move swaps positions D/1, 2/3,...D-2/D-1. D=8 [1:8] becomes [2 1 4 3 6 5 8 7] after the first swap. After second swap we see [7 4 1 6 3 8 5 2].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [D K N] , 4\u0026lt;=D\u0026lt;=1E8, 1\u0026lt;=K\u0026lt;=D, 1\u0026lt;=N\u0026lt;=1E8\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [KCW KCCW] , KCW is dancer to left of Kth dancer after N moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [m] [v]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[8 3 1] creates v=[6 4]\\n[8 4 2] creates v=[1 7]\\n[6 6 1] creates v=[5 3]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGoogle Code Jam 2016 Open Qualifier: April 8, 2016\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eContest Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e The small case was D\u0026lt;10 and N\u0026lt;10. This could be done brute force in the 5 minutes of entry submission allowed. However, this is clearly a case of modulo math so might as well solve the unbounded case of D/N \u0026lt;1E8. The number being assigned as 1:D leads to confusion as mod maps to 0:D-1. Suggest offset the K dancer number by 1 for processing and then correct for the final answer. Mod is fun as mod(-1,8) yields a useful 7. Quick observation is for offsetted K vector [0:D-1] the Evens move CW and the Odds move CCW. One method used 5 mod calls to solve.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42765,"title":"Maximize Non-Co-Planar Points in an N-Cube","description":"This Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\r\n\r\n  N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\n  N=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\r\nOutput is a Qx3 matrix of the non-co-planar points.\r\n\r\nReference: The \u003chttp://68.173.157.131/Contest/Tetrahedra March 2016 Al Zimmermann Non-Coplanar contest\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\r\n\r\nTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003chttp://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar Cody Co-Planar Check\u003e may improve speed. ","description_html":"\u003cp\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eN=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\u003c/pre\u003e\u003cp\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/p\u003e\u003cp\u003eReference: The \u003ca href = \"http://68.173.157.131/Contest/Tetrahedra\"\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/a\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/p\u003e\u003cp\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\"\u003eCody Co-Planar Check\u003c/a\u003e may improve speed.\u003c/p\u003e","function_template":"function m=MaxNonCoplanarPts(N,Q);\r\n% Place Q or more points in an 0:N-1 #D grid such that each plane created uses only 3 points from the set provided\r\n% N is Cube size\r\n% Q is expected number of points in solution\r\n% Hint: Point [0,0,0] can be assumed to be in the solution for N=2 and N=3\r\n% N=3 is the 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n  m=[];\r\nend","test_suite":"%%\r\nN=2;\r\nQ=5;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n%%\r\nN=3;\r\nQ=8;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-03-07T00:22:02.000Z","updated_at":"2016-03-07T01:01:33.000Z","published_at":"2016-03-07T01:01:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar. Given the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReference: The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://68.173.157.131/Contest/Tetrahedra\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody Co-Planar Check\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e may improve speed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42341,"title":"LMI Twins : Fuzzy Image matching","description":"The image below from \u003chttp://logicmastersindia.com/2016/04P/ Logic Masters India Marathon 2016\u003e is puzzle \"Twins Co-Ordinates\" with PDF password of \"TCO_cLiEsh\".\r\n\r\nThe challenge is to find the six matching image squares given a [612,1078,3] PNG file screen captured using Snipping Tool. The matching squares may be rotated but are not reflected. The cells will not match perfectly and the PNG file is oversize into the white around the whole black frame. The image grid is 10x18. Return a 6x4 array of [r1,c1,r2,c2;...] where cell [r1,c1] is a match for [r2,c2] with r(1:10) and c(1:18).\r\nA pscript to obfuscate the solution is implemented. The method for creating a Cody pscript is included in the Test Suite.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Twins.PNG\u003e\u003e\r\n\r\nMethod Hints:\r\nMerge into a BW 612x1078 image;Trim outer white space;Locate Top Left corner of each cell;create cell array of 180  squares;grab only 55x55 squares to enable rotation check;Problem size is only  4*180*179/2;Filter positive and negative deltas separately with a + convolution; check residual delta \u003c threshold.","description_html":"\u003cp\u003eThe image below from \u003ca href = \"http://logicmastersindia.com/2016/04P/\"\u003eLogic Masters India Marathon 2016\u003c/a\u003e is puzzle \"Twins Co-Ordinates\" with PDF password of \"TCO_cLiEsh\".\u003c/p\u003e\u003cp\u003eThe challenge is to find the six matching image squares given a [612,1078,3] PNG file screen captured using Snipping Tool. The matching squares may be rotated but are not reflected. The cells will not match perfectly and the PNG file is oversize into the white around the whole black frame. The image grid is 10x18. Return a 6x4 array of [r1,c1,r2,c2;...] where cell [r1,c1] is a match for [r2,c2] with r(1:10) and c(1:18).\r\nA pscript to obfuscate the solution is implemented. The method for creating a Cody pscript is included in the Test Suite.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/Twins.PNG\"\u003e\u003cp\u003eMethod Hints:\r\nMerge into a BW 612x1078 image;Trim outer white space;Locate Top Left corner of each cell;create cell array of 180  squares;grab only 55x55 squares to enable rotation check;Problem size is only  4*180*179/2;Filter positive and negative deltas separately with a + convolution; check residual delta \u0026lt; threshold.\u003c/p\u003e","function_template":"function m=LMI_Twins(fn)\r\n% Grab png \r\nm=[];\r\npict=imread(fn); % [612,1078,3] size png,  sum(pict,3) may be useful\r\n% useful sub_pict size of 55x55\r\n\r\nend\r\n","test_suite":"%%\r\n% obfuscated check function\r\ntic\r\nfh = fopen('Eval_Twins.p','wb');\r\nfwrite(fh, hex2dec(reshape('7630312E30307630302E30300002901CC14FDFB100000081000000D80000012A48DF9D54B1FA232306002212C284B03C55EA944CADBBEC102FFDF678B732282B51740342451D4E91F086ABE90CD97AEA717741F995FCF6ED6A372B6C44524D61F2179DA76458DBA2B9AA01529272E90AD613EA63642EEECCDE54CD649A84090DE86A418D761593CBABBD4B17018634CA5451EA6A6F4386B000CBE73A136AFE2CE5946FD8FD16225562B3414B8C6268F085E3E3E8F1CFCFBBA469FCC5E0343472A562EAD16FFC1B7D27730414ECC1D42F6EB98289E998DA2EA3F4F820A10F9B23E296CDE97331C46563B702180857770F7A14412389BC1BA2',2,[]).'));\r\nfclose(fh);\r\nrehash path;\r\ntoc\r\n%%\r\ntic\r\nurl='https://sites.google.com/site/razapor/matlab_cody/Twins.PNG?attredirects=0\u0026d=1';\r\nurlwrite(url,'Twins.PNG');\r\nfprintf('url write complete %.1f\\n',toc)\r\n\r\nfn='Twins.PNG';\r\nm=LMI_Twins(fn);\r\nassert(Eval_Twins(m));\r\nfprintf('Process Complete %.1f\\n',toc)\r\n%%\r\n% Creation Process for a Cody p file\r\n% Create function  func_name.m\r\n% pcode func_name\r\n% fn='func_name.p';\r\n% fr=fopen(fn,'r');\r\n% m=fread(fr);\r\n% fclose(fr);\r\n% fw=fopen([fn(1:end-1) 'txt'],'w');\r\n% fprintf(fw,'%s',dec2hex(m)');\r\n% fclose(fw);\r\n% use wordpad to open func_name.txt\r\n% In cody in first block write:\r\n% fh = fopen('func_name.p','wb');\r\n% fwrite(fh, hex2dec(reshape('INSERT WORDPAD TEXT HERE',2,[]).'));\r\n% fclose(fh);\r\n% rehash path;","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-05-28T19:12:46.000Z","updated_at":"2016-05-12T01:56:20.000Z","published_at":"2016-05-12T01:56:20.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe image below from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://logicmastersindia.com/2016/04P/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLogic Masters India Marathon 2016\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is puzzle \\\"Twins Co-Ordinates\\\" with PDF password of \\\"TCO_cLiEsh\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe challenge is to find the six matching image squares given a [612,1078,3] PNG file screen captured using Snipping Tool. The matching squares may be rotated but are not reflected. The cells will not match perfectly and the PNG file is oversize into the white around the whole black frame. The image grid is 10x18. Return a 6x4 array of [r1,c1,r2,c2;...] where cell [r1,c1] is a match for [r2,c2] with r(1:10) and c(1:18). A pscript to obfuscate the solution is implemented. The method for creating a Cody pscript is included in the Test Suite.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethod Hints: Merge into a BW 612x1078 image;Trim outer white space;Locate Top Left corner of each cell;create cell array of 180 squares;grab only 55x55 squares to enable rotation check;Problem size is only 4*180*179/2;Filter positive and negative deltas separately with a + convolution; check residual delta \u0026lt; threshold.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":44784,"title":"Project Euler: Problem 14 Longest Collatz sequence(harder version)","description":"This problem is a harder version of \"Problem 44448. Project Euler: Problem 14 Longest Collatz sequence\", because of time limits. \u003chttps://ww2.mathworks.cn/matlabcentral/cody/problems/44448\u003e \r\n\r\nThe following iterative sequence is defined for the set of positive integers:\r\nn → n/2 (n is even) n → 3n + 1 (n is odd)\r\nUsing the rule above and starting with 13, we generate the following sequence:\r\n13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.\r\nWhich starting number, no more than N, produces the longest chain, and how long? Don't cheat!","description_html":"\u003cp\u003eThis problem is a harder version of \"Problem 44448. Project Euler: Problem 14 Longest Collatz sequence\", because of time limits. \u003ca href = \"https://ww2.mathworks.cn/matlabcentral/cody/problems/44448\"\u003ehttps://ww2.mathworks.cn/matlabcentral/cody/problems/44448\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThe following iterative sequence is defined for the set of positive integers:\r\nn → n/2 (n is even) n → 3n + 1 (n is odd)\r\nUsing the rule above and starting with 13, we generate the following sequence:\r\n13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.\r\nWhich starting number, no more than N, produces the longest chain, and how long? Don't cheat!\u003c/p\u003e","function_template":"function y = euler014_v2(x)\r\n  y = x;\r\nend","test_suite":"1\r\n%%\r\nassessFunctionAbsence({'tic','toc','pause','etime','clock','now','str2num','timer'},'FileName','euler014_v2.m')\r\n\r\n2\r\n%%\r\nN = 2e8;\r\nnum_correct = 169941673;\r\nlen_correct = 954;\r\ntic\r\n[num, len] = euler014_v2(N);\r\nt=toc\r\nassert(t\u003e1);\r\nassert(isequal(num, num_correct));\r\nassert(isequal(len, len_correct));\r\n\r\n3\r\n%%\r\nN = 4e8;\r\nnum_correct = 268549803;\r\nlen_correct = 965;\r\ntic\r\n[num, len] = euler014_v2(N);\r\nt=toc\r\nassert(t\u003e1);\r\nassert(isequal(num, num_correct));\r\nassert(isequal(len, len_correct));\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":4,"created_by":3668,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2018-11-11T06:11:05.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-11-09T16:59:43.000Z","updated_at":"2018-11-11T06:11:05.000Z","published_at":"2018-11-09T16:59:43.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is a harder version of \\\"Problem 44448. Project Euler: Problem 14 Longest Collatz sequence\\\", because of time limits.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://ww2.mathworks.cn/matlabcentral/cody/problems/44448\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://ww2.mathworks.cn/matlabcentral/cody/problems/44448\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe following iterative sequence is defined for the set of positive integers: n → n/2 (n is even) n → 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1. Which starting number, no more than N, produces the longest chain, and how long? Don't cheat!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44832,"title":"Generate Convolution Matrix of 2D Kernel with Different Convolution Shapes (Full, Same, Valid)","description":"In this problem the challenge is to build the Matrix Form equivalent of the function `conv2()` of MATLAB.\r\n\r\nThe function to be built will generate a sparse matrix `mK` which is the convolution matrix of the 2D Kernel 'mH' (Which is an input to the function).  \r\nThe input to the function is the 2D Kernel and dimensions of the image to apply the convolution upon and the shape of the convolution ('full', 'same', 'valid' as in 'conv2()').\r\n\r\nThe output sparse matrix should match the output of using 'conv2()' on the same image using the same convolution shape.\r\n\r\nFor instance:\r\n\r\n  CONVOLUTION_SHAPE_FULL  = 1;\r\n  CONVOLUTION_SHAPE_SAME  = 2;\r\n  CONVOLUTION_SHAPE_VALID = 3;\r\n  \r\n  numRowsImage = 100;\r\n  numColsImage = 80;\r\n  \r\n  numRowsKernel = 7;\r\n  numColsKernel = 5;\r\n  \r\n  mI = rand(numRowsImage, numColsImage);\r\n  mH = rand(numRowsKernel, numColsKernel);\r\n  \r\n  maxThr = 1e-9;\r\n  \r\n  \r\n  %% Full Convolution\r\n  \r\n  convShape       = CONVOLUTION_SHAPE_FULL;\r\n  \r\n  numRowsOut = numRowsImage + numRowsKernel - 1;\r\n  numColsOut = numColsImage + numColsKernel - 1;\r\n  \r\n  mORef   = conv2(mI, mH, 'full');\r\n  mK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\r\n  mO      = reshape(mK * mI(:), numRowsOut, numColsOut);\r\n  \r\n  mE = mO - mORef;\r\n  assert(max(abs(mE(:))) \u003c maxThr);\r\n\r\nThe test case will examine all 3 modes.\r\nTry to solve it once with very clear code (No vectorization tricks) and then optimize.\r\n\r\nA good way to build the output sparse function is using:\r\n\r\n  mK = sparse(vRows, vCols, vVals, numElementsOutputImage, numElementsInputImage);\r\n\r\nLook for the documentation of `sparse()` function for more details.","description_html":"\u003cp\u003eIn this problem the challenge is to build the Matrix Form equivalent of the function `conv2()` of MATLAB.\u003c/p\u003e\u003cp\u003eThe function to be built will generate a sparse matrix `mK` which is the convolution matrix of the 2D Kernel 'mH' (Which is an input to the function).  \r\nThe input to the function is the 2D Kernel and dimensions of the image to apply the convolution upon and the shape of the convolution ('full', 'same', 'valid' as in 'conv2()').\u003c/p\u003e\u003cp\u003eThe output sparse matrix should match the output of using 'conv2()' on the same image using the same convolution shape.\u003c/p\u003e\u003cp\u003eFor instance:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eCONVOLUTION_SHAPE_FULL  = 1;\r\nCONVOLUTION_SHAPE_SAME  = 2;\r\nCONVOLUTION_SHAPE_VALID = 3;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003enumRowsImage = 100;\r\nnumColsImage = 80;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003enumRowsKernel = 7;\r\nnumColsKernel = 5;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emI = rand(numRowsImage, numColsImage);\r\nmH = rand(numRowsKernel, numColsKernel);\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emaxThr = 1e-9;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003e%% Full Convolution\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003econvShape       = CONVOLUTION_SHAPE_FULL;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003enumRowsOut = numRowsImage + numRowsKernel - 1;\r\nnumColsOut = numColsImage + numColsKernel - 1;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emORef   = conv2(mI, mH, 'full');\r\nmK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\r\nmO      = reshape(mK * mI(:), numRowsOut, numColsOut);\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emE = mO - mORef;\r\nassert(max(abs(mE(:))) \u0026lt; maxThr);\r\n\u003c/pre\u003e\u003cp\u003eThe test case will examine all 3 modes.\r\nTry to solve it once with very clear code (No vectorization tricks) and then optimize.\u003c/p\u003e\u003cp\u003eA good way to build the output sparse function is using:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003emK = sparse(vRows, vCols, vVals, numElementsOutputImage, numElementsInputImage);\r\n\u003c/pre\u003e\u003cp\u003eLook for the documentation of `sparse()` function for more details.\u003c/p\u003e","function_template":"function [ mK ] = CreateImageConvMtx( mH, numRows, numCols, convShape )\r\n%Generates a Convolution Matrix for the 2D Kernel (The Matrix mH) with\r\n%support for different convolution shapes (Full / Same / Valid).\r\n% Input:\r\n%   - mH                -   Input 2D Convolution Kernel.\r\n%                           Structure: Matrix.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: (-inf, inf).\r\n%   - numRows           -   Number of Rows.\r\n%                           Number of rows in the output convolution\r\n%                           matrix.\r\n%                           Structure: Scalar.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: {1, 2, 3, ...}.\r\n%   - numCols           -   Number of Columns.\r\n%                           Number of columns in the output convolution\r\n%                           matrix.\r\n%                           Structure: Scalar.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: {1, 2, 3, ...}.\r\n%   - convShape         -   Convolution Shape.\r\n%                           The shape of the convolution which the output\r\n%                           convolution matrix should represent. The\r\n%                           options should match MATLAB's conv2() function\r\n%                           - Full / Same / Valid.\r\n%                           Structure: Scalar.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: {1, 2, 3}.\r\n% Output:\r\n%   - mK                -   Convolution Matrix.\r\n%                           The output convolution matrix. Multiplying in\r\n%                           the column stack form on an image should be\r\n%                           equivalent to applying convolution on the\r\n%                           image.\r\n%                           Structure: Matrix (Sparse).\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: (-inf, inf).\r\n% References:\r\n%   1.  MATLAB's 'convmtx2()' - https://www.mathworks.com/help/images/ref/convmtx2.html.\r\n% Remarks:\r\n%   1.  gf\r\n% TODO:\r\n%   1.  \r\n%   Release Notes:\r\n%   -   1.0.000     dd/mm/yyyy  firstName lastName\r\n%       *   First release version.\r\n% ----------------------------------------------------------------------------------------------- %\r\n\r\nCONVOLUTION_SHAPE_FULL  = 1;\r\nCONVOLUTION_SHAPE_SAME  = 2;\r\nCONVOLUTION_SHAPE_VALID = 3;\r\n\r\nswitch(convShape)\r\n    case(CONVOLUTION_SHAPE_FULL)\r\n        % Code for the 'full' case\r\n    case(CONVOLUTION_SHAPE_SAME)\r\n        % Code for the 'same' case\r\n    case(CONVOLUTION_SHAPE_VALID)\r\n        % Code for the 'valid' case\r\nend\r\n\r\n\r\nend\r\n\r\n","test_suite":"%% Testing\r\n\r\n\r\nCONVOLUTION_SHAPE_FULL  = 1;\r\nCONVOLUTION_SHAPE_SAME  = 2;\r\nCONVOLUTION_SHAPE_VALID = 3;\r\n\r\nmaxThr = 1e-9;\r\n\r\n\r\nfor numRowsImage = 28:32\r\n    for numColsImage = 28:32\r\n        \r\n        mI = rand(numRowsImage, numColsImage);\r\n        \r\n        for numRowsKernel = 3:7\r\n            for numColsKernel = 3:7\r\n                \r\n                mH = rand(numRowsKernel, numColsKernel);\r\n                \r\n                for convShape = 1:3\r\n                    \r\n                    switch(convShape)\r\n                        case(CONVOLUTION_SHAPE_FULL)\r\n                            numRowsOut = numRowsImage + numRowsKernel - 1;\r\n                            numColsOut = numColsImage + numColsKernel - 1;\r\n                            \r\n                            convShapeString = 'full';\r\n                        case(CONVOLUTION_SHAPE_SAME)\r\n                            numRowsOut = numRowsImage;\r\n                            numColsOut = numColsImage;\r\n                            \r\n                            convShapeString = 'same';\r\n                        case(CONVOLUTION_SHAPE_VALID)\r\n                            numRowsOut = numRowsImage - numRowsKernel + 1;\r\n                            numColsOut = numColsImage - numColsKernel + 1;\r\n                            \r\n                            convShapeString = 'valid';\r\n                    end\r\n                    \r\n                    mORef   = conv2(mI, mH, convShapeString);\r\n                    mK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\r\n                    mO      = reshape(mK * mI(:), numRowsOut, numColsOut);\r\n                    \r\n                    disp([' ']);\r\n                    disp(['Validating solution for the following parameters:']);\r\n                    disp(['Image Size - [', num2str(numRowsImage), ' x ', num2str(numColsImage), ']']);\r\n                    disp(['Kernel Size - [', num2str(numRowsKernel), ' x ', num2str(numColsKernel), ']']);\r\n                    disp(['Convolution Shape - ', convShapeString]);\r\n                    \r\n                    mE = mO - mORef;\r\n                    maxAbsDev = max(abs(mE(:)));\r\n                    if(maxAbsDev \u003e= maxThr)\r\n                        disp([' ']);\r\n                        disp(['Validation Failed']);\r\n                        disp([' ']);\r\n                    end\r\n                    assert(maxAbsDev \u003c maxThr);\r\n                    \r\n                end\r\n            end\r\n        end\r\n    end\r\nend\r\n            \r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6204,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2019-01-15T23:13:37.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-01-15T21:20:18.000Z","updated_at":"2019-01-15T23:13:37.000Z","published_at":"2019-01-15T21:20:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem the challenge is to build the Matrix Form equivalent of the function `conv2()` of MATLAB.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function to be built will generate a sparse matrix `mK` which is the convolution matrix of the 2D Kernel 'mH' (Which is an input to the function). The input to the function is the 2D Kernel and dimensions of the image to apply the convolution upon and the shape of the convolution ('full', 'same', 'valid' as in 'conv2()').\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe output sparse matrix should match the output of using 'conv2()' on the same image using the same convolution shape.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor instance:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[CONVOLUTION_SHAPE_FULL  = 1;\\nCONVOLUTION_SHAPE_SAME  = 2;\\nCONVOLUTION_SHAPE_VALID = 3;\\n\\nnumRowsImage = 100;\\nnumColsImage = 80;\\n\\nnumRowsKernel = 7;\\nnumColsKernel = 5;\\n\\nmI = rand(numRowsImage, numColsImage);\\nmH = rand(numRowsKernel, numColsKernel);\\n\\nmaxThr = 1e-9;\\n\\n%%Full Convolution\\n\\nconvShape       = CONVOLUTION_SHAPE_FULL;\\n\\nnumRowsOut = numRowsImage + numRowsKernel - 1;\\nnumColsOut = numColsImage + numColsKernel - 1;\\n\\nmORef   = conv2(mI, mH, 'full');\\nmK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\\nmO      = reshape(mK * mI(:), numRowsOut, numColsOut);\\n\\nmE = mO - mORef;\\nassert(max(abs(mE(:))) \u003c maxThr);]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe test case will examine all 3 modes. Try to solve it once with very clear code (No vectorization tricks) and then optimize.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA good way to build the output sparse function is using:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[mK = sparse(vRows, vCols, vVals, numElementsOutputImage, numElementsInputImage);]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLook for the documentation of `sparse()` function for more details.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44545,"title":"\"Percentages may not total 100 due to rounding\"","description":"*Percentages* are commonly *rounded* when presented in tables.  As a result, the sum of the individual numbers does not always add up to 100%.  A warning is therefore sometimes appended to such tables, along the lines: _\"Percentages may not total 100 due to rounding\"_.\r\n\r\nEXAMPLE 1:\r\nA survey of eleven people for their opinion on a new policy found five to be in favour, five opposed, and one undecided/neutral.  Percentage-wise this becomes\r\n\r\n  In favour:          45% (5 of 11)\r\n  Undecided/neutral:   9% (1 of 11)  \r\n  Opposed:            45% (5 of 11)  \r\n\r\nThe total of these is 99%, rather than the expected 100%.  Despite this conflict, in this example *all of the individual numbers have been correctly entered*.  \r\n\r\nEXAMPLE 2:\r\nIn the same report, a survey of a further ten people on a different policy found four to be in favour, four opposed, and two undecided/neutral.  Suppose the data were presented in the following table\r\n\r\n  In favour:          45%\r\n  Undecided/neutral:  20%\r\n  Opposed:            45%\r\n\r\nGiven the background information, we would quickly recognise this as inconsistent, with a spurious total of 110%, rather than the expected 100%.  In fact, we would probably guess that a copy-and-paste mistake had occurred.  However, it is important to realise that even if we looked at this table alone, in isolation, without any background knowledge of the survey size or the true number of responses in any category, just by knowing that there are only three categories we can firmly conclude that in this example *one or more of the individual numbers must have been entered incorrectly*.  \r\n\r\nYOUR JOB:  \r\nGiven a list (vector) of integer percentages, determine whether among the individual values at least one of them _must_ have been incorrectly entered (return |true|), as in Example 2, or whether there might not be any incorrect entries (return |false|), as in Example 1.","description_html":"\u003cp\u003e\u003cb\u003ePercentages\u003c/b\u003e are commonly \u003cb\u003erounded\u003c/b\u003e when presented in tables.  As a result, the sum of the individual numbers does not always add up to 100%.  A warning is therefore sometimes appended to such tables, along the lines: \u003ci\u003e\"Percentages may not total 100 due to rounding\"\u003c/i\u003e.\u003c/p\u003e\u003cp\u003eEXAMPLE 1:\r\nA survey of eleven people for their opinion on a new policy found five to be in favour, five opposed, and one undecided/neutral.  Percentage-wise this becomes\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eIn favour:          45% (5 of 11)\r\nUndecided/neutral:   9% (1 of 11)  \r\nOpposed:            45% (5 of 11)  \r\n\u003c/pre\u003e\u003cp\u003eThe total of these is 99%, rather than the expected 100%.  Despite this conflict, in this example \u003cb\u003eall of the individual numbers have been correctly entered\u003c/b\u003e.\u003c/p\u003e\u003cp\u003eEXAMPLE 2:\r\nIn the same report, a survey of a further ten people on a different policy found four to be in favour, four opposed, and two undecided/neutral.  Suppose the data were presented in the following table\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eIn favour:          45%\r\nUndecided/neutral:  20%\r\nOpposed:            45%\r\n\u003c/pre\u003e\u003cp\u003eGiven the background information, we would quickly recognise this as inconsistent, with a spurious total of 110%, rather than the expected 100%.  In fact, we would probably guess that a copy-and-paste mistake had occurred.  However, it is important to realise that even if we looked at this table alone, in isolation, without any background knowledge of the survey size or the true number of responses in any category, just by knowing that there are only three categories we can firmly conclude that in this example \u003cb\u003eone or more of the individual numbers must have been entered incorrectly\u003c/b\u003e.\u003c/p\u003e\u003cp\u003eYOUR JOB:  \r\nGiven a list (vector) of integer percentages, determine whether among the individual values at least one of them \u003ci\u003emust\u003c/i\u003e have been incorrectly entered (return \u003ctt\u003etrue\u003c/tt\u003e), as in Example 2, or whether there might not be any incorrect entries (return \u003ctt\u003efalse\u003c/tt\u003e), as in Example 1.\u003c/p\u003e","function_template":"% \"May not sum to total due to rounding: the probability of rounding errors\"\r\n% Henry Bottomley, 03 June 2008\r\n% http://www.se16.info/hgb/rounding.pdf\r\n\r\n% \"How to make rounded percentages add up to 100%\"\r\n% https://stackoverflow.com/questions/13483430/how-to-make-rounded-percentages-add-up-to-100\r\n% cf. https://stackoverflow.com/questions/5227215/how-to-deal-with-the-sum-of-rounded-percentage-not-being-100\r\nfunction containsMistake = checkForMistake(z)\r\n    containsMistake = true * + false,\r\nend","test_suite":"%% Basics\r\nassessFunctionAbsence({'regexp', 'regexpi'}, 'FileName','checkForMistake.m')\r\n\r\n%% Example 1 (Row vector)\r\nxVec = round( 100*[5 1 5]/11 );\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) )\r\n\r\n%% Example 1 (Column vector)\r\nxVec = round( 100*[5 1 5]/11 )';\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) )\r\n\r\n%% Example 2 (Row vector)\r\nxVec = [42 20 45];\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) )\r\n\r\n%% One percentage, over and under\r\nxVec = [100];\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test a')\r\nxVec = round([100.5]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test b')\r\nxVec = round([99.49]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test c')\r\n\r\n%% Two percentages, over and under\r\nxVec = [50 50];\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test a')\r\nxVec = round([49.5 50.5]);\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test b')\r\nxVec = round([50.5 50.5]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test c')\r\nxVec = round([49.49 50.49]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test d')\r\n\r\n%% Equal percentages\r\nfor j = [2:250 1000:1000:10000]\r\n    xVec = round( repelem(100/j, j) );\r\n    containsMistake = false;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Geometric series (from Bottomley, §5)\r\nfor j = 10:30\r\n    xVec = round( 10 * (9/10).^[0:j] );\r\n    containsMistake = j \u003c 21;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Geometric series (from Bottomley, §5), permuted\r\nfor j = 2:40\r\n    xVec = round( 10 * (9/10).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 21;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) I\r\nfor j = 2:100\r\n    xVec = round( (99/100).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 66;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) II\r\nfor j = 2:30\r\n    xVec = round( 20 * (4/5).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 12;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) III\r\nfor j = 2:20\r\n    xVec = round( 25 * (3/4).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 10;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) IV\r\nfor j = 2:20\r\n    xVec = round( 50 * (1/2).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 5;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Systematic overestimation\r\nfor j = 2:100\r\n    num = randi(round(100/j)+1) - 1;\r\n    xRaw = repelem(num+0.5, j);   % cf. https://oletus.github.io/float16-simulator.js/\r\n    sm = sum(xRaw);\r\n    xRaw = [xRaw max(100-sm, 0)];\r\n    if sm \u003e 100.5,                % Not sm\u003e100, because need to account for extra zero added.\r\n        containsMistake = true;\r\n    else\r\n        containsMistake = false;\r\n    end;\r\n    xVec = round( xRaw );\r\n    xVec = xVec( randperm(j+1) );\r\n    assert( isequal(checkForMistake(xVec), containsMistake) , ['Failed with xRaw = ' num2str(xRaw)] )\r\nend;\r\n\r\n%% Systematic underestimation\r\nfor j = 2:100\r\n    num = randi(round(100/j)+1) - 1;\r\n    xRaw = repelem(num+0.499755859375, j);   % cf. https://oletus.github.io/float16-simulator.js/ \u0026 https://au.mathworks.com/help/matlab/matlab_prog/floating-point-numbers.html\r\n    cs = cumsum(xRaw);\r\n    if cs(end) \u003e 100,\r\n        xRaw( cs \u003e 100 ) = [];\r\n        containsMistake = true;\r\n    else\r\n        xRaw = [xRaw (100-cs(end))];\r\n        containsMistake = false;\r\n    end;\r\n    xVec = round( xRaw );\r\n    assert( isequal(checkForMistake(xVec), containsMistake) , ['Failed with xRaw = ' num2str(xRaw)] )\r\nend;","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-03-23T08:02:20.000Z","updated_at":"2018-03-24T13:53:40.000Z","published_at":"2018-03-24T13:53:40.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePercentages\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are commonly\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003erounded\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e when presented in tables. As a result, the sum of the individual numbers does not always add up to 100%. A warning is therefore sometimes appended to such tables, along the lines:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\\\"Percentages may not total 100 due to rounding\\\"\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE 1: A survey of eleven people for their opinion on a new policy found five to be in favour, five opposed, and one undecided/neutral. Percentage-wise this becomes\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[In favour:          45% (5 of 11)\\nUndecided/neutral:   9% (1 of 11)  \\nOpposed:            45% (5 of 11)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe total of these is 99%, rather than the expected 100%. Despite this conflict, in this example\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eall of the individual numbers have been correctly entered\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE 2: In the same report, a survey of a further ten people on a different policy found four to be in favour, four opposed, and two undecided/neutral. Suppose the data were presented in the following table\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[In favour:          45%\\nUndecided/neutral:  20%\\nOpposed:            45%]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the background information, we would quickly recognise this as inconsistent, with a spurious total of 110%, rather than the expected 100%. In fact, we would probably guess that a copy-and-paste mistake had occurred. However, it is important to realise that even if we looked at this table alone, in isolation, without any background knowledge of the survey size or the true number of responses in any category, just by knowing that there are only three categories we can firmly conclude that in this example\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eone or more of the individual numbers must have been entered incorrectly\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYOUR JOB: Given a list (vector) of integer percentages, determine whether among the individual values at least one of them\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emust\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e have been incorrectly entered (return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etrue\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e), as in Example 2, or whether there might not be any incorrect entries (return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efalse\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e), as in Example 1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44655,"title":"Computational power of Cody servers","description":"It has been \u003chttps://en.wikipedia.org/wiki/Moore%27s_law#History predicted\u003e that the performance of integrated circuits would _double_ every 18 months.  That suggests the time to perform a given computation should _halve_ roughly every 18 months.  \r\n\r\nWhat about on Cody?  Observational data is available from the final test case of \u003chttps://www.mathworks.com/matlabcentral/cody/problems/963-we-love-vectorized-solutions-problem-1-remove-the-row-average Problem 963\u003e to help us quantify the improvement in performance!  And thereby even make predictions for future computations.\r\n\r\n Solution    Date\t   Runtime [s]\r\n ...\r\n 144393\t     04-Oct-12\t   4.230\r\n ...\r\n 654812\t     17-Apr-15\t   3.099\r\n ...\r\n 1272817     20-Sep-17\t   2.0402\r\n ...\r\n\r\nThe complete data set will be provided to you as input.  You should assume the general trend can be described by the following law:\r\n\r\n runtime = r0 - δ [1 - exp(-t/k)]\r\n runtime = r∞ + δ exp(-t/k)\r\n\r\nwhere |r0| is the runtime at the start of the period in seconds, |r∞| is the predicted runtime (in seconds) that will be approached far in the future, |δ = r0 - r∞|, and |t| is the time in nominal years since the start of the period, and |k| is a kinetic parameter (in nominal years).  \r\n\r\nThe start of the period is defined by the earliest date in the series.  Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.\r\n\r\nYour task is to \u003chttps://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html fit the curve\u003e and thereby predict the runtime for various future dates.  Your output should be rounded to four decimal places.  \r\n\r\nMETHOD:  You _must_ use \u003chttps://au.mathworks.com/help/matlab/ref/fminsearch.html |fminsearch|\u003e to perform the non-linear regression, and you _must_ set the options using \u003chttps://au.mathworks.com/help/matlab/ref/optimset.html |optimset|\u003e to ensure sufficient accuracy.  The 'best' fit is defined — _for this problem, as in the common convention_ — as that which minimises the sum of the squares of the residuals.  \r\n\r\nEXAMPLE:\r\n\r\n % Input\r\n futureDate = '21-Nov-2023';\r\n data.solutionNumber = [1036949, ..., 1272817];\r\n data.date = ['29-Oct-2016'; ...; '20-Sep-2017'];\r\n data.runtime = [1.2630, ..., 2.0402];\r\n % Output\r\n predictedRuntime = 0.3619;  % seconds\r\n\r\n","description_html":"\u003cp\u003eIt has been \u003ca href = \"https://en.wikipedia.org/wiki/Moore%27s_law#History\"\u003epredicted\u003c/a\u003e that the performance of integrated circuits would \u003ci\u003edouble\u003c/i\u003e every 18 months.  That suggests the time to perform a given computation should \u003ci\u003ehalve\u003c/i\u003e roughly every 18 months.\u003c/p\u003e\u003cp\u003eWhat about on Cody?  Observational data is available from the final test case of \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/963-we-love-vectorized-solutions-problem-1-remove-the-row-average\"\u003eProblem 963\u003c/a\u003e to help us quantify the improvement in performance!  And thereby even make predictions for future computations.\u003c/p\u003e\u003cpre\u003e Solution    Date\t   Runtime [s]\r\n ...\r\n 144393\t     04-Oct-12\t   4.230\r\n ...\r\n 654812\t     17-Apr-15\t   3.099\r\n ...\r\n 1272817     20-Sep-17\t   2.0402\r\n ...\u003c/pre\u003e\u003cp\u003eThe complete data set will be provided to you as input.  You should assume the general trend can be described by the following law:\u003c/p\u003e\u003cpre\u003e runtime = r0 - δ [1 - exp(-t/k)]\r\n runtime = r∞ + δ exp(-t/k)\u003c/pre\u003e\u003cp\u003ewhere \u003ctt\u003er0\u003c/tt\u003e is the runtime at the start of the period in seconds, \u003ctt\u003er∞\u003c/tt\u003e is the predicted runtime (in seconds) that will be approached far in the future, \u003ctt\u003eδ = r0 - r∞\u003c/tt\u003e, and \u003ctt\u003et\u003c/tt\u003e is the time in nominal years since the start of the period, and \u003ctt\u003ek\u003c/tt\u003e is a kinetic parameter (in nominal years).\u003c/p\u003e\u003cp\u003eThe start of the period is defined by the earliest date in the series.  Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.\u003c/p\u003e\u003cp\u003eYour task is to \u003ca href = \"https://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html\"\u003efit the curve\u003c/a\u003e and thereby predict the runtime for various future dates.  Your output should be rounded to four decimal places.\u003c/p\u003e\u003cp\u003eMETHOD:  You \u003ci\u003emust\u003c/i\u003e use \u003ca href = \"https://au.mathworks.com/help/matlab/ref/fminsearch.html\"\u003e\u003ctt\u003efminsearch\u003c/tt\u003e\u003c/a\u003e to perform the non-linear regression, and you \u003ci\u003emust\u003c/i\u003e set the options using \u003ca href = \"https://au.mathworks.com/help/matlab/ref/optimset.html\"\u003e\u003ctt\u003eoptimset\u003c/tt\u003e\u003c/a\u003e to ensure sufficient accuracy.  The 'best' fit is defined — \u003ci\u003efor this problem, as in the common convention\u003c/i\u003e — as that which minimises the sum of the squares of the residuals.\u003c/p\u003e\u003cp\u003eEXAMPLE:\u003c/p\u003e\u003cpre\u003e % Input\r\n futureDate = '21-Nov-2023';\r\n data.solutionNumber = [1036949, ..., 1272817];\r\n data.date = ['29-Oct-2016'; ...; '20-Sep-2017'];\r\n data.runtime = [1.2630, ..., 2.0402];\r\n % Output\r\n predictedRuntime = 0.3619;  % seconds\u003c/pre\u003e","function_template":"function predictedRuntime = predictor(futureDate, data)\r\n    % Preliminaries:\r\n    ...\r\n    \r\n    \r\n    % Use fminsearch to find the parameters that minimize the objective function.\r\n    myObjectiveFun = ...\r\n    myOptions = ...\r\n    ... = fminsearch\r\n\r\n    % Report your prediction of the runtime at the specified future date.\r\n    predictedRuntime = ...\r\nend\r\n\r\n% Function that accepts a trial set of parameters and the observed data, \r\n% and returns the sum of squared errors for the model . \r\n% https://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html\r\nfunction SSE = sseVal(...)\r\n    % runtime = r0 - δ [1 - exp(-t/k)]\r\n    % runtime = r∞ + δ exp(-t/k)\r\n    \r\n    ...\r\n    \r\n    SSE = ...\r\nend\r\n","test_suite":"data.solutionNumber = [1036949\t1048171\t1051202\t1078061\t1078699\t1081561\t886761\t1165117\t1202850\t1211446\t1241478\t1241530\t1329044\t1323931\t1382633\t1345204\t1281524\t1272814\t1272815\t1272823\t1272845\t1287012\t1287386\t1262442\t1262445\t1251993\t1252843\t1407137\t1412687\t1448359\t1448368\t1410187\t1465616\t1472214\t1472225\t1490596\t1490602\t1541085\t1541132\t860114\t143879\t144156\t144393\t202249\t210894\t539555\t182974\t276887\t1133109\t654812\t1272817];\r\ndata.date = ['29-Oct-2016';\t'08-Nov-2016';\t'12-Nov-2016';\t'09-Dec-2016';\t'10-Dec-2016';\t'14-Dec-2016';\t'06-May-2016';\t'18-Apr-2017';\t'02-Jun-2017';\t'13-Jun-2017';\t'28-Jul-2017';\t'28-Jul-2017';\t'06-Nov-2017';\t'01-Nov-2017';\t'16-Dec-2017';\t'15-Nov-2017';\t'05-Oct-2017';\t'20-Sep-2017';\t'20-Sep-2017';\t'20-Sep-2017';\t'20-Sep-2017';\t'15-Oct-2017';\t'15-Oct-2017';\t'05-Sep-2017';\t'05-Sep-2017';\t'16-Aug-2017';\t'17-Aug-2017';\t'06-Jan-2018';\t'10-Jan-2018';\t'24-Feb-2018';\t'24-Feb-2018';\t'08-Jan-2018';\t'18-Mar-2018';\t'27-Mar-2018';\t'27-Mar-2018';\t'13-Apr-2018';\t'13-Apr-2018';\t'26-May-2018';\t'26-May-2018';\t'31-Mar-2016';\t'02-Oct-2012';\t'03-Oct-2012';\t'04-Oct-2012';\t'08-Feb-2013';\t'01-Mar-2013';\t'03-Dec-2014';\t'29-Dec-2012';\t'09-Jul-2013';\t'03-Mar-2017';\t'17-Apr-2015';\t'20-Sep-2017'];\r\ndata.runtime = [1.2630\t0.624\t1.3326\t1.2939\t0.5995\t1.1307\t1.3505\t1.2613\t1.2737\t1.3081\t1.2774\t1.252\t1.2179\t1.4431\t1.2637\t1.1614\t1.2542\t1.9135\t1.2996\t1.2595\t1.2664\t1.1858\t1.1501\t1.2516\t1.2786\t1.9461\t1.2492\t1.3654\t1.3263\t1.1484\t1.1728\t1.6177\t1.0538\t1.0571\t1.0454\t1.3873\t1.0600\t1.1154\t1.0635\t1.4359\t4.498\t4.198\t4.230\t5.264\t4.022\t3.153\t4.740\t4.112\t2.3409\t3.099\t2.0402];\r\n\r\n%% Anti-hacking provision\r\n% ADDED 2019-06-29.  \r\n% Ensure only builtin functions will be called.  \r\n! rm -v fileread.m\r\n! rm -v assert.m\r\n\r\n%% Required methodology\r\nassessFunctionPresence({'fminsearch', 'optimset'}, 'FileName','predictor.m', 'Feedback','You must use the specified methodology')\r\n\r\n%% Anti-hardcoding test\r\n% Adapted from a comment at https://www.mathworks.com/matlabcentral/cody/problems/44343 .\r\nassert(~any(cellfun(@(x)ismember(max([0,str2num(x)]),[2012,2019:2023,3000]),regexp(fileread('predictor.m'),'[\\d\\.\\+\\-\\*\\/\\(\\) \\[\\]\\,\\;]+','match'))), 'Please don''t hard-code your ''solution''.') \r\nassert(~any(cellfun(@(x)ismember(max([0,str2num(x)]),[2012,2019:2023,3000]),regexp(fileread('predictor.m'),'\\d+','match'))), 'Please do not hard-code your ''solution''.') \r\n\r\n%% January 2019\r\nfutureDate = '22-Jan-2019';\r\npredictedRuntime_correct = round(0.935043294718475, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '23-Jan-2019';\r\npredictedRuntime_correct = round(0.934448955935569, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '24-Jan-2019';\r\npredictedRuntime_correct = round(0.933855075296061, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% January 2020\r\nfutureDate = '09-Jan-2020';\r\npredictedRuntime_correct = round(0.751755426901932, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '13-Jan-2020';\r\npredictedRuntime_correct = round(0.749945312632780, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% January 2021\r\nfutureDate = '06-Jan-2021';\r\npredictedRuntime_correct = round(0.608254613313523, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '11-Jan-2021';\r\npredictedRuntime_correct = round(0.606545074994730, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% February 2022\r\nfutureDate = '06-Feb-2022';\r\npredictedRuntime_correct = round(0.491354117473879, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '10-Feb-2022';\r\npredictedRuntime_correct = round(0.490345992043568, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% November 2023\r\nfutureDate = '06-Nov-2023';\r\npredictedRuntime_correct = round(0.364155581026111, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '21-Nov-2023';\r\npredictedRuntime_correct = round(0.361853937995679, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '25-Nov-2023';\r\npredictedRuntime_correct = round(0.361244649648014, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '27-Nov-2023';\r\npredictedRuntime_correct = round(0.360940709522436, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% Let's all meet up in the year 3000\r\nfutureDate = '01-Jan-3000';\r\npredictedRuntime_correct = round(0.164021404839, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% Enforce antihacking\r\n% Assure no 'workarounds' that avoid appropriate use of optimset.\r\n% (Added 29 May 2018.)\r\nfutureDate = {'19-Dec-2019';\t'04-Oct-2020';\t'06-Nov-2020';\t'20-Nov-2020';\t'07-Dec-2020';\t'09-Dec-2020';\t'11-Dec-2020';\t'25-Feb-2021';\t'04-Mar-2021';\t'18-Apr-2021';\t'19-May-2021';\t'23-Jul-2021'};\r\npRuntime_c_unrounded = {0.761350673860113\t0.641651747331991\t0.629650497697623\t0.624650604424140\t0.618651428148657\t0.617950799242008\t0.617251250072375\t0.591452258418511\t0.589151203003048\t0.574651625923890\t0.564951737257372\t0.545350739105932};\r\nfor j = 1 : length(futureDate)\r\n    assert(isequal(predictor(futureDate{j}, data), round(pRuntime_c_unrounded{j}, 4)))\r\nend;\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2019-06-29T12:58:19.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2018-05-27T08:32:09.000Z","updated_at":"2019-06-29T12:58:19.000Z","published_at":"2018-05-27T12:35:16.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt has been\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Moore%27s_law#History\\\"\u003e\u003cw:r\u003e\u003cw:t\u003epredicted\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e that the performance of integrated circuits would\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edouble\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e every 18 months. That suggests the time to perform a given computation should\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ehalve\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e roughly every 18 months.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat about on Cody? Observational data is available from the final test case of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/963-we-love-vectorized-solutions-problem-1-remove-the-row-average\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 963\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to help us quantify the improvement in performance! And thereby even make predictions for future computations.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ Solution    Date     Runtime [s]\\n ...\\n 144393       04-Oct-12     4.230\\n ...\\n 654812       17-Apr-15     3.099\\n ...\\n 1272817     20-Sep-17     2.0402\\n ...]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe complete data set will be provided to you as input. You should assume the general trend can be described by the following law:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ runtime = r0 - δ [1 - exp(-t/k)]\\n runtime = r∞ + δ exp(-t/k)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er0\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the runtime at the start of the period in seconds,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er∞\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the predicted runtime (in seconds) that will be approached far in the future,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eδ = r0 - r∞\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003et\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the time in nominal years since the start of the period, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ek\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a kinetic parameter (in nominal years).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe start of the period is defined by the earliest date in the series. Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour task is to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003efit the curve\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and thereby predict the runtime for various future dates. Your output should be rounded to four decimal places.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMETHOD: You\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emust\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e use\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/help/matlab/ref/fminsearch.html\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efminsearch\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to perform the non-linear regression, and you\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emust\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e set the options using\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/help/matlab/ref/optimset.html\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eoptimset\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to ensure sufficient accuracy. The 'best' fit is defined —\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efor this problem, as in the common convention\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e — as that which minimises the sum of the squares of the residuals.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ % Input\\n futureDate = '21-Nov-2023';\\n data.solutionNumber = [1036949, ..., 1272817];\\n data.date = ['29-Oct-2016'; ...; '20-Sep-2017'];\\n data.runtime = [1.2630, ..., 2.0402];\\n % Output\\n predictedRuntime = 0.3619;  % seconds]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":3074,"title":"Compute the cokurtosis of a given portfolio.","description":"As input data, you are given a nObs-by-nAssets matrix _portRet_ of return series for assets in a portfolio along with an nAssets-by-1 vector _portWeights_ of portfolio weights. Example: \r\n\r\n \u003e\u003e nObs = 504; % Number of observations\r\n\r\n \u003e\u003e nAssets = 5; % Number of assets in the portfolio\r\n\r\n \u003e\u003e portRet = randn(nObs, nAssets); % Sample portfolio return series\r\n\r\n \u003e\u003e portWeights = rand(nAssets, 1); \r\n\r\n \u003e\u003e portWeights = portWeights/sum(portWeights); % Portfolio weights are \u003e=0 and sum to 1.\r\n\r\nThe task is to compute the *portfolio cokurtosis* , which is a scalar statistic associated with the portfolio. A full description of this statistic, along with sample MATLAB code for computing it, can be found here:\r\n\r\nhttp://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\r\n\r\nWrite a function that accepts _portRet_ and _portWeights_ as input arguments and returns the scalar statistic _portCokurt_ as its output. You can use the code at the website above as a starting point, but try to simplify and shorten it in the spirit of Cody.\r\n\r\n\r\n\r\n","description_html":"\u003cp\u003eAs input data, you are given a nObs-by-nAssets matrix \u003ci\u003eportRet\u003c/i\u003e of return series for assets in a portfolio along with an nAssets-by-1 vector \u003ci\u003eportWeights\u003c/i\u003e of portfolio weights. Example:\u003c/p\u003e\u003cpre\u003e \u0026gt;\u0026gt; nObs = 504; % Number of observations\u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; nAssets = 5; % Number of assets in the portfolio\u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; portRet = randn(nObs, nAssets); % Sample portfolio return series\u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; portWeights = rand(nAssets, 1); \u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; portWeights = portWeights/sum(portWeights); % Portfolio weights are \u0026gt;=0 and sum to 1.\u003c/pre\u003e\u003cp\u003eThe task is to compute the \u003cb\u003eportfolio cokurtosis\u003c/b\u003e , which is a scalar statistic associated with the portfolio. A full description of this statistic, along with sample MATLAB code for computing it, can be found here:\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\"\u003ehttp://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\u003c/a\u003e\u003c/p\u003e\u003cp\u003eWrite a function that accepts \u003ci\u003eportRet\u003c/i\u003e and \u003ci\u003eportWeights\u003c/i\u003e as input arguments and returns the scalar statistic \u003ci\u003eportCokurt\u003c/i\u003e as its output. You can use the code at the website above as a starting point, but try to simplify and shorten it in the spirit of Cody.\u003c/p\u003e","function_template":"function portCokurt = computePortCokurt(portRet, portWeights)\r\n\r\n\r\nend","test_suite":"%%\r\nrng('default')\r\nR = randn(504, 5);\r\nw = ones(5, 1)/5;\r\nassert(abs(computePortCokurt(R, w)-0.119749008958925)\u003c1e-3)\r\n\r\n%%\r\nrng('default')\r\nR = randn(252, 15);\r\nw = ones(15, 1)/15;\r\nassert(abs(computePortCokurt(R, w)-0.013012357540290)\u003c1e-3)\r\n\r\n%% \r\nrng('default')\r\nR = randn(100, 1);\r\nw = 1;\r\nassert(abs(computePortCokurt(R, w)-6.280759230562035)\u003c1e-3)\r\n\r\n%%\r\nrng('default')\r\nR = randn(5, 10);\r\nw = [0.1*ones(5, 1); 0.5; zeros(4, 1)];\r\nassert(abs(computePortCokurt(R, w)-0.169198885214440)\u003c1e-3)","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":2328,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-03-10T11:04:22.000Z","updated_at":"2015-03-11T18:00:35.000Z","published_at":"2015-03-10T11:25:35.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs input data, you are given a nObs-by-nAssets matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportRet\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of return series for assets in a portfolio along with an nAssets-by-1 vector\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportWeights\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of portfolio weights. Example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ \u003e\u003e nObs = 504; % Number of observations\\n\\n \u003e\u003e nAssets = 5; % Number of assets in the portfolio\\n\\n \u003e\u003e portRet = randn(nObs, nAssets); % Sample portfolio return series\\n\\n \u003e\u003e portWeights = rand(nAssets, 1); \\n\\n \u003e\u003e portWeights = portWeights/sum(portWeights); % Portfolio weights are \u003e=0 and sum to 1.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe task is to compute the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportfolio cokurtosis\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e , which is a scalar statistic associated with the portfolio. A full description of this statistic, along with sample MATLAB code for computing it, can be found here:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function that accepts\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportRet\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportWeights\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e as input arguments and returns the scalar statistic\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportCokurt\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e as its output. You can use the code at the website above as a starting point, but try to simplify and shorten it in the spirit of Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2122,"title":"Simple Robotics 2 - End effector attitude","description":"Given a structure as input to your function with the following fields:\r\n* robot.links(L1,L2,L3)\r\n* robot.jointangles(alfa1,alfa2,alfa3)\r\n* robot.attitude(x,y,tht)\r\nReturn the same struct with the correct end effector position and orientation in \"robot.attitude\". In a stretched out posture, the end effector angle is 0.\r\nIn other words calculate the end effector x,y and alfa.\r\n\r\nWhen the robot arm is aligned with the positive x-axis of the robot's base coordinate system, the end-effector angle is defined to be zero.\r\n\r\nYou can easily modify this function to generate xdata and ydata for plotting the robot arm. Check the testcases for the requested accuracy.\r\n\r\nTip: calculate the x,y position of the heart of the orange end-effector as a function of the angles alfa1...3 and link lengths L1...3. L1 is the length of the first link (connected to the base of the robot). good luck.\r\n\r\nTip2: alfa1 in the picture is negative.\r\n\r\nTip3: make a little drawing on a piece of paper to see how the end effector coordinate system relates to the angles of the hinges (joints)/jointspace.\r\n\r\nAs a visual reference, check the picture below.\r\n\r\n\u003c\u003chttp://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\u003e\u003e","description_html":"\u003cp\u003eGiven a structure as input to your function with the following fields:\r\n* robot.links(L1,L2,L3)\r\n* robot.jointangles(alfa1,alfa2,alfa3)\r\n* robot.attitude(x,y,tht)\r\nReturn the same struct with the correct end effector position and orientation in \"robot.attitude\". In a stretched out posture, the end effector angle is 0.\r\nIn other words calculate the end effector x,y and alfa.\u003c/p\u003e\u003cp\u003eWhen the robot arm is aligned with the positive x-axis of the robot's base coordinate system, the end-effector angle is defined to be zero.\u003c/p\u003e\u003cp\u003eYou can easily modify this function to generate xdata and ydata for plotting the robot arm. Check the testcases for the requested accuracy.\u003c/p\u003e\u003cp\u003eTip: calculate the x,y position of the heart of the orange end-effector as a function of the angles alfa1...3 and link lengths L1...3. L1 is the length of the first link (connected to the base of the robot). good luck.\u003c/p\u003e\u003cp\u003eTip2: alfa1 in the picture is negative.\u003c/p\u003e\u003cp\u003eTip3: make a little drawing on a piece of paper to see how the end effector coordinate system relates to the angles of the hinges (joints)/jointspace.\u003c/p\u003e\u003cp\u003eAs a visual reference, check the picture below.\u003c/p\u003e\u003cimg src = \"http://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\"\u003e","function_template":"function newrobot = forwardkinematics(oldrobot)\r\n%   * robot.links(L1,L2,L3)\r\n% * robot.jointangles(alfa1,alfa2,alfa3)\r\n% * robot.attitude(x,y,tht)\r\nend","test_suite":"%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[0 0 0];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude;\r\ncorrect_attitude=[0 sum(robot.links) pi/2];\r\nassert(isequal(yc,correct_attitude))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[pi/4 0  0];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude;\r\ncorrect_attitude=[-0.5*sqrt(2)*sum(robot.links) 0.5*sqrt(2)*sum(robot.links) 3*pi/4];\r\nassert(isequal(yc,correct_attitude))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[pi/4 pi 3*pi/4];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[-0.5*sqrt(2)*(robot.links(1)-robot.links(2)) 0.5*sqrt(2)*(robot.links(1)-robot.links(2))+robot.links(3) pi/2]\r\nassert(all(abs(yc-correct_attitude)\u003c=eps))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-pi/4 pi/4 0];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude;\r\ncorrect_attitude=[0.5*sqrt(2)*robot.links(1) 0.5*sqrt(2)*robot.links(1)+sum(robot.links(2:3)) pi/2];\r\nassert(all(abs(yc-correct_attitude)\u003c=eps))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-2.1513    2.9568    2.8725];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[0.246878929631356  -0.220349832044192   5.248796326794897]\r\nassert(all(abs(yc-correct_attitude)\u003c=1e-8))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-0.0919    1.8867   -2.2501];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[-0.260952279814086   0.667368060676958   1.115496326794896];\r\nassert(all(abs(yc-correct_attitude)\u003c=1e-8))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-0.4916    2.6121    1.8360];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[0.070611406176580  -0.000086942065283   5.527296326794897];\r\nassert(all(abs(yc-correct_attitude)\u003c=1e-8))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":20079,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-01-16T04:52:06.000Z","updated_at":"2014-01-25T01:02:46.000Z","published_at":"2014-01-24T01:47:31.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven a structure as input to your function with the following fields: * robot.links(L1,L2,L3) * robot.jointangles(alfa1,alfa2,alfa3) * robot.attitude(x,y,tht) Return the same struct with the correct end effector position and orientation in \\\"robot.attitude\\\". In a stretched out posture, the end effector angle is 0. In other words calculate the end effector x,y and alfa.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen the robot arm is aligned with the positive x-axis of the robot's base coordinate system, the end-effector angle is defined to be zero.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou can easily modify this function to generate xdata and ydata for plotting the robot arm. Check the testcases for the requested accuracy.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTip: calculate the x,y position of the heart of the orange end-effector as a function of the angles alfa1...3 and link lengths L1...3. L1 is the length of the first link (connected to the base of the robot). good luck.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTip2: alfa1 in the picture is negative.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTip3: make a little drawing on a piece of paper to see how the end effector coordinate system relates to the angles of the hinges (joints)/jointspace.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs a visual reference, check the picture below.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2103,"title":"Simple Robotics 1: On track?","description":"As a small extension to problem:\r\n\u003chttp://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\u003e,\r\nimagine that Pe represents the attitude of a robotic end effector with 3 degrees of freedom (x,y and tht).\r\n\r\n\u003c\u003chttp://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\u003e\u003e\r\n\r\nThe end-effector (kind of orange) has to stay parallel to the straight line within a distance indicated by \"errorlevel\". The error levels for the distance are 1 cm (ridiculous accuracy) and .5 degrees for the end effector angle.\r\n\r\nWrite a function which returns true if the end-effector is \"on track\" and false if the position of the origin of the coordinate frame which is considered to be attached to the centre of the end effector, falls outside the area indicated by the dash-dotted line. Also return false if the end effector orientation is too far off from the direction of the straight line.","description_html":"\u003cp\u003eAs a small extension to problem: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\"\u003ehttp://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\u003c/a\u003e,\r\nimagine that Pe represents the attitude of a robotic end effector with 3 degrees of freedom (x,y and tht).\u003c/p\u003e\u003cimg src = \"http://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\"\u003e\u003cp\u003eThe end-effector (kind of orange) has to stay parallel to the straight line within a distance indicated by \"errorlevel\". The error levels for the distance are 1 cm (ridiculous accuracy) and .5 degrees for the end effector angle.\u003c/p\u003e\u003cp\u003eWrite a function which returns true if the end-effector is \"on track\" and false if the position of the origin of the coordinate frame which is considered to be attached to the centre of the end effector, falls outside the area indicated by the dash-dotted line. Also return false if the end effector orientation is too far off from the direction of the straight line.\u003c/p\u003e","function_template":"function y = isontrack(p1,p2,pe)\r\n  true;\r\nend","test_suite":"%%\r\np1=[0.218246;0.224576];%meters\r\np2=[0.769657;0.602542];%meters\r\ndirection=34.428783;%degrees\r\n\r\npointsx=[   0.350085000000000\r\n   0.375000000000000\r\n   0.770085000000000\r\n   0.753475000000000\r\n   0.609915000000000\r\n   0.290763000000000\r\n   0.301441000000000\r\n   0.301441000000000];\r\n   \r\npointsy=[      0.285805000000000\r\n   0.400212000000000\r\n   0.602331000000000\r\n   0.585551000000000\r\n   0.497839000000000\r\n   0.259873000000000\r\n   0.275127000000000\r\n   0.275127000000000];\r\n\r\norientations=0*pointsx+direction;\r\norientations(end)=direction+0.6;\r\ncorrectanswers= [    0\r\n     0\r\n     1\r\n     1\r\n     1\r\n     0\r\n     1\r\n     0];\r\n\r\nfor j=1:length(pointsx)\r\n    y(j)=isontrack(p1,p2,[pointsx(j); pointsy(j); orientations(j)]);\r\n    assert(y(j)==correctanswers(j))\r\nend","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":20079,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-01-10T14:00:37.000Z","updated_at":"2014-01-15T07:35:45.000Z","published_at":"2014-01-15T07:35:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs a small extension to problem:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, imagine that Pe represents the attitude of a robotic end effector with 3 degrees of freedom (x,y and tht).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe end-effector (kind of orange) has to stay parallel to the straight line within a distance indicated by \\\"errorlevel\\\". The error levels for the distance are 1 cm (ridiculous accuracy) and .5 degrees for the end effector angle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function which returns true if the end-effector is \\\"on track\\\" and false if the position of the origin of the coordinate frame which is considered to be attached to the centre of the end effector, falls outside the area indicated by the dash-dotted line. Also return false if the end effector orientation is too far off from the direction of the straight line.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2226,"title":"Wayfinding 4 - Crossing, level 2","description":"This is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e\r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing [2]\u003e \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas [3]\u003e. \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i62.tinypic.com/358qa1w.png\u003e\u003e\r\n\r\nFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas assignment 3\u003e.\r\n\r\nHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in |F| is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if |AB| crosses first for example area |F2|, then |F3|, and then |F2| again, the output vector should contain |[ ... 2 3 2 ... ]|. That would also be the case when |F3| is contained in |F2|. But when |F2| is contained in |F3|, then |F2| is never crossed, as it has a lower index in F than |F3|. Consider the areas non-transparent and stacked on top of each other.\r\n\r\nThe inputs of the function |WayfindingPassed(AB,F)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array |F| of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F. \r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\r\n\r\n\r\nYour output |f| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 1 4 1 4 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.","description_html":"\u003cp\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\"\u003e[2]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003e[3]\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i62.tinypic.com/358qa1w.png\"\u003e\u003cp\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003eassignment 3\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in \u003ctt\u003eF\u003c/tt\u003e is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if \u003ctt\u003eAB\u003c/tt\u003e crosses first for example area \u003ctt\u003eF2\u003c/tt\u003e, then \u003ctt\u003eF3\u003c/tt\u003e, and then \u003ctt\u003eF2\u003c/tt\u003e again, the output vector should contain \u003ctt\u003e[ ... 2 3 2 ... ]\u003c/tt\u003e. That would also be the case when \u003ctt\u003eF3\u003c/tt\u003e is contained in \u003ctt\u003eF2\u003c/tt\u003e. But when \u003ctt\u003eF2\u003c/tt\u003e is contained in \u003ctt\u003eF3\u003c/tt\u003e, then \u003ctt\u003eF2\u003c/tt\u003e is never crossed, as it has a lower index in F than \u003ctt\u003eF3\u003c/tt\u003e. Consider the areas non-transparent and stacked on top of each other.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingPassed(AB,F)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array \u003ctt\u003eF\u003c/tt\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\u003c/pre\u003e\u003cp\u003eYour output \u003ctt\u003ef\u003c/tt\u003e will contain the indices in \u003ctt\u003eF\u003c/tt\u003e of the crossed areas, in the correct order. In the example above, the correct answer is \u003ctt\u003e[ 3 1 4 1 4 1]\u003c/tt\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    5   -8    0\r\n    -6    2    7    1\r\n    ];\r\nF{2} = [\r\n    4   -2    4    6\r\n    6   -7   -3   -2\r\n    ];\r\nF{3} = [\r\n    -5    6    3   -1\r\n    -6   -8    4   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 3 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 21 ; 0 0 ];\r\nf_correct = randperm(20);\r\nF = arrayfun(@(n)[n+[0 1 1 0];-1 -1 1 1],f_correct,'uni',0);\r\nf = WayfindingPassed(AB,F);\r\nassert(isequal(f(f_correct),f_correct(f)));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    9    0   -4    5\r\n    2    8   -1   -9   -8\r\n    ];\r\nF{2} = [\r\n    -2  -10   -4    0\r\n    8    7   -5    5\r\n    ];\r\nF{3} = [\r\n    -6    2   10\r\n    10   -4    8\r\n    ];\r\nF{4} = [\r\n    -10    8  -10\r\n    4   -8    2\r\n    ];\r\nF{5} = [\r\n    0    4    8   -3    1\r\n    -10    9   -8   -5    2\r\n    ];\r\nF{6} = [\r\n    6    6   -9   10\r\n    6   -3    4   -7\r\n    ];\r\nF{7} = [\r\n    9    7   -7\r\n    0    7   -5\r\n    ];\r\nF{8} = [\r\n    2    0   10\r\n    6  -10    0\r\n    ];\r\nF{9} = [\r\n    -7    2   -7   -7\r\n    3    5   -3    7\r\n    ];\r\nF{10} = [\r\n    -5    6    1    5\r\n    -10    0    8    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 7 8 10 7 3 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    2    5    8    5\r\n    2   -2    9   -5\r\n    ];\r\nF{2} = [\r\n    -8    2   -2    8   -8   -2\r\n    0    4    5   -9    8   -2\r\n    ];\r\nF{3} = [\r\n    5   -6   -2    1    0   10\r\n    10   -8    0   10   -2   -5\r\n    ];\r\nF{4} = [\r\n    10   -4  -10   -2    9\r\n    4    1    8   -4   -1\r\n    ];\r\nF{5} = [\r\n    -9   -7    2   -3\r\n    2   -9   -4    5\r\n    ];\r\nF{6} = [\r\n    -3   10    6    9    4   -2\r\n    10   -6    2    2    5   -5\r\n    ];\r\nF{7} = [\r\n    -1   -5   -5\r\n    3    0   -4\r\n    ];\r\nF{8} = [\r\n    8   -6    8   10   -7\r\n    8   -2   -5    3    7\r\n    ];\r\nF{9} = [\r\n    1  -10   -3   10    5\r\n    -5   -6    3   -6    8\r\n    ];\r\nF{10} = [\r\n    -7    0    8   -8\r\n    7   -8    3    9\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 9 10 9 3 1 8 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 4 -6 ; 0 0 ];\r\nF{1} = [\r\n    -4   -4    2    2   -2   -3   -3   -2    2    2   -4\r\n    2   -4   -4   -2    2    2   -2   -2    2    4    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; 15 -8 ];\r\nF{1} = [\r\n    -4    4    4   -4\r\n    6    2    6    2\r\n    ];\r\nF{2} = [\r\n    -2   -2    6    6   -2\r\n    -0   -4   -0   -4   -0\r\n    ];\r\nF{3} = [\r\n    -1   -1    2    2\r\n    -6   -4   -6   -4\r\n    ];\r\nF{4} = [\r\n    -1    1   -1    1\r\n    -7   -7   -9   -9\r\n    ];\r\nF{5} = [\r\n    -2     2    -1     2    -1     1\r\n    14    10     6     6    10    14\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 5 1 2 3 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; -6 6 ];\r\nF{1} = [\r\n    -5    7    7   -5\r\n    -9   -9    9    9\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    -7   -7   -5   -5\r\n    ];\r\nF{3} = [\r\n    -2   -2    2    2\r\n    4    2    2    4\r\n    ];\r\nF{4} = [\r\n    2    2   -2   -2\r\n    4    2    2    4\r\n    ];\r\nF{5} = [\r\n    -1    1    1   -1\r\n    2    2   -2   -2\r\n    ];\r\nF{6} = [\r\n    -2    0   -2\r\n    -2   -3   -4\r\n    ];\r\nF{7} = [\r\n    0    2    2\r\n    -3   -4   -2\r\n    ];\r\nF{8} = [\r\n    -1    0    1\r\n    -8   -6   -8\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [8 2 1 7 1 5 4 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 2 -2 ; 8 -6 ];\r\nF{1} = [\r\n    -4   -4    4    4\r\n    -4   -0   -0   -4\r\n    ];\r\nF{2} = [\r\n    -4   -4    4    4\r\n    2    6    6    2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [2 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 8 -4 ; 8 -8 ];\r\nF{1} = [\r\n    -6    2    2   -4   -4    8    8   -6\r\n    -6   -6   -4   -4    2    2    4    4\r\n    ];\r\nF{2} = [\r\n    -2   -2    4    4\r\n    -0   -2   -2   -0\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -8 8 ; 8 -8 ];\r\nF{1} = [\r\n    -2   -2    0    0\r\n    -0    2    2   -0\r\n    ];\r\nF{2} = [\r\n    2    4    4   -6   -6   -4    2    4    4    2    2   -4   -4    2\r\n    -0   -0   -6   -6    4    6    6    4    2    2    4    4   -4   -4\r\n    ];\r\nF{3} = [\r\n    -3   -3    1    0\r\n    -1   -3   -3   -1\r\n    ];\r\nF{4} = [\r\n    5    9    9    5\r\n    -3   -3   -9   -9\r\n    ];\r\nF{5} = [\r\n    -9  -10  -10   -9\r\n    9    9   10   10\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 2 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\nAB = [ 0 0 ; -8 8 ];\r\nF{1} = [\r\n    -4   -2   -2   -4\r\n    8    8    4    4\r\n    ];\r\nF{2} = [\r\n    2    4    4    2\r\n    -0   -0   -6   -6\r\n    ];\r\nF{3} = [\r\n    -4   -2   -2   -6   -6\r\n    -4   -4   -6   -6   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nassert(isempty(f));\r\n\r\n%%\r\n\r\nAB = [ 7 -8 ; 0 0 ];\r\nF{1} = [\r\n    8    9    9    8\r\n    3    3   -2   -2\r\n    ];\r\nF{2} = [\r\n    -9   -7   -7   -4   -4   -3   -3    0    0    1    1    4    4    5    5   -2   -8   -9\r\n    -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    3    4    3    2\r\n    ];\r\nF{3} = [\r\n    -2   -1   -1   -2\r\n    1    1   -4   -4\r\n    ];\r\nF{4} = [\r\n    -6   -5   -5   -3    1    2    2    3    3    1   -4   -6\r\n    1    1   -3   -5   -5   -4    1    1   -5   -8   -7   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 4 2 3 2 4 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 -2 ; 0 -4 ];\r\nF{1} = [\r\n    -3    3    3    2    2   -2   -2    2    2   -3\r\n    -5   -5    3    3   -3   -3    2    2    3    3\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    1    1   -1   -1\r\n    ];\r\nF{3} = [\r\n    -4    4    4    5    5   -5   -5   -4\r\n    4    4   -7   -7    5    5   -1   -1\r\n    ];\r\nF{4} = [\r\n    -5   -4   -4    4    4   -5\r\n    -1   -1   -6   -6   -7   -7\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -2 0 ; 6 -6 ];\r\nF{1} = [\r\n    2   -4   -4    2    2   -2    0   -2    2\r\n    -4   -4    4    4    2    2   -0   -2   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 1 1 ];\r\nassert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-01T22:33:13.000Z","updated_at":"2014-03-06T07:49:23.000Z","published_at":"2014-03-06T07:49:23.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[2]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[3]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eWhich areas are traversed?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eassignment 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the one listed. If an area is crossed twice, it is listed twice in the returned vector. And if\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e crosses first for example area\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and then\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e again, the output vector should contain\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[ ... 2 3 2 ... ]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. That would also be the case when\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. But when\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is never crossed, as it has a lower index in F than\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Consider the areas non-transparent and stacked on top of each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe inputs of the function\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eWayfindingPassed(AB,F)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = {\\n  [ x11 x12 ... x1n ;\\n    y11 y12 ... y1n ]\\n  [ x21 x22 ... x2n ;\\n    y21 y22 ... y2n ]\\n }]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour output\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ef\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will contain the indices in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the crossed areas, in the correct order. In the example above, the correct answer is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[ 3 1 4 1 4 1]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2242,"title":"Wayfinding 5 - Travel contour","description":"This is the fifth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/?term=tag%3Awayfinding search:tag=wayfinding\u003e for the other assignments.\r\n\r\nThis time, you will travel around a polygon, over its contour. You get the nodes of the polygon, in the correct order, as a |2xn| array |F|. The last node of |F| is connected to the first node.\r\n\r\n|a| is the index in |F| of the starting node, and |b| is the goal. \r\n\r\n\u003c\u003chttp://i61.tinypic.com/iq8p69.png\u003e\u003e\r\n\r\nCalculate the shortest distance from |a| to |b| over the contour of the polygon. \r\n\r\nThe distance is measured as the Euclidean distance between points. You can not enter the internal area of the polygon. The contour of the polygon does not self-intersect.","description_html":"\u003cp\u003eThis is the fifth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See  \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/?term=tag%3Awayfinding\"\u003esearch:tag=wayfinding\u003c/a\u003e for the other assignments.\u003c/p\u003e\u003cp\u003eThis time, you will travel around a polygon, over its contour. You get the nodes of the polygon, in the correct order, as a \u003ctt\u003e2xn\u003c/tt\u003e array \u003ctt\u003eF\u003c/tt\u003e. The last node of \u003ctt\u003eF\u003c/tt\u003e is connected to the first node.\u003c/p\u003e\u003cp\u003e\u003ctt\u003ea\u003c/tt\u003e is the index in \u003ctt\u003eF\u003c/tt\u003e of the starting node, and \u003ctt\u003eb\u003c/tt\u003e is the goal.\u003c/p\u003e\u003cimg src = \"http://i61.tinypic.com/iq8p69.png\"\u003e\u003cp\u003eCalculate the shortest distance from \u003ctt\u003ea\u003c/tt\u003e to \u003ctt\u003eb\u003c/tt\u003e over the contour of the polygon.\u003c/p\u003e\u003cp\u003eThe distance is measured as the Euclidean distance between points. You can not enter the internal area of the polygon. The contour of the polygon does not self-intersect.\u003c/p\u003e","function_template":"function d = polygon_distance(F,a,b)\r\n  d = 0;\r\nend","test_suite":"%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 1;\r\nb = 3;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 2;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 1;\r\nb = 2;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 1;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 4;\r\nb = 1;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 1;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 3;\r\nb = 3;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 0;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [zeros(1,101) ones(1,101);0:100 100:-1:0];\r\na = 1;\r\nfor b = randi(size(F,2)/2,1,100)\r\n  d = polygon_distance(F,a,b);\r\n  d_correct = b-1;\r\n  assert(isequal(d,d_correct));\r\nend\r\n\r\n%%\r\nF = [zeros(1,101) ones(1,101);0:100 100:-1:0];\r\na = 1;\r\nfor b = randi(size(F,2)/2,1,100)+size(F,2)/2\r\n  s = rand(1)+1;\r\n  d = polygon_distance(F*s,a,b);\r\n  d_correct = (size(F,2)-b+1)*s;\r\n  assert(abs(d-d_correct)\u003c1e-10);\r\nend\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2014-03-10T14:22:52.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-10T09:32:11.000Z","updated_at":"2014-03-10T14:22:52.000Z","published_at":"2014-03-10T13:43:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the fifth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/?term=tag%3Awayfinding\\\"\u003e\u003cw:r\u003e\u003cw:t\u003esearch:tag=wayfinding\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for the other assignments.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis time, you will travel around a polygon, over its contour. You get the nodes of the polygon, in the correct order, as a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e2xn\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e array\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. The last node of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is connected to the first node.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the index in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the starting node, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the goal.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCalculate the shortest distance from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e over the contour of the polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe distance is measured as the Euclidean distance between points. You can not enter the internal area of the polygon. The contour of the polygon does not self-intersect.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2291,"title":"GJam 2014 Qualifier: Deceitful War (Small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2974486/dashboard#s=p3 GJam 2014 Qualifier Deceitful War\u003e.\r\n\r\nMy condensed summary of the problem statement.\r\n\r\nGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\r\n\r\nUnsurprisingly when A truthfully states masses player B consistently wins.\r\n\r\nPlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\r\n\r\nPart one is determine the best possible score for A when playing deceitfully.\r\n\r\nPart two is determine the best possible score if player A did not look and is honest.\r\n\r\n*Examples:*\r\n\r\n  A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n  \r\n  A 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n  B 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n  Deceitful A Wins 8\r\n  Optimal Honest A Wins 4\r\n\r\n*Input:* A,B vectors of length N (Small has N\u003c=10, Large(future challenge N\u003c=1000)\r\n\r\n*Output:* Deceitful Wins, Optimal Honest Wins\r\n\r\n\r\n\r\n\r\n\r\n*Note:*\r\n\r\nIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003chttp://www.go-hero.net/jam/14/solutions/0/4/MATLAB GJam Deceitful Solutions\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2974486/dashboard#s=p3\"\u003eGJam 2014 Qualifier Deceitful War\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eMy condensed summary of the problem statement.\u003c/p\u003e\u003cp\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/p\u003e\u003cp\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/p\u003e\u003cp\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/p\u003e\u003cp\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/p\u003e\u003cp\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\nDeceitful A Wins 8\r\nOptimal Honest A Wins 4\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Deceitful Wins, Optimal Honest Wins\u003c/p\u003e\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003ca href = \"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\"\u003eGJam Deceitful Solutions\u003c/a\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\u003c/p\u003e","function_template":"function W = War(m)\r\n% W=[Deceitful Wins, Optimal Honest Wins]\r\n  W=[0 0];\r\nend","test_suite":"%%\r\nm=[0.270000 0.550000 0.910000 0.330000 0.520000 0.300000 ;0.850000 0.450000 0.060000 0.240000 0.120000 0.880000 ];\r\nWexp=[5 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.164000 0.255000 0.009000 0.445000 0.209000 0.100000 0.391000 0.536000 0.027000 0.118000 ;0.673000 0.782000 0.582000 0.882000 0.591000 0.855000 0.745000 0.955000 0.991000 0.600000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 0.480000 0.760000 0.680000 0.160000 0.640000 0.360000 ;0.200000 0.440000 0.960000 0.280000 0.880000 0.520000 0.120000 ];\r\nWexp=[5 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.170000 0.100000 0.120000 0.200000 0.540000 0.150000 ;0.490000 0.070000 0.240000 0.680000 0.610000 0.340000 ];\r\nWexp=[2 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.780000 0.770000 0.900000 0.810000 0.880000 0.840000 0.600000 0.730000 0.930000 0.990000 ;0.270000 0.150000 0.260000 0.510000 0.570000 0.310000 0.170000 0.140000 0.400000 0.040000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.320000 0.820000 0.350000 0.770000 0.020000 0.550000 0.040000 0.990000 0.610000 0.190000 ;0.730000 0.530000 0.750000 0.800000 0.670000 0.870000 0.330000 0.250000 0.080000 0.680000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.100000 0.380000 0.050000 0.210000 0.130000 0.440000 0.180000 ;0.560000 0.920000 0.540000 0.900000 0.670000 0.790000 0.820000 0.970000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.420000 ;0.080000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.690000 0.310000 0.540000 0.230000 0.710000 0.030000 0.490000 0.600000 0.510000 0.860000 ;0.830000 0.340000 0.370000 0.740000 0.430000 0.200000 0.090000 0.170000 0.910000 0.400000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 0.920000 0.710000 0.130000 0.230000 0.620000 0.140000 0.260000 0.360000 0.310000 ;0.440000 0.010000 0.640000 0.350000 0.820000 0.550000 0.780000 0.790000 0.060000 0.570000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.504000 0.218000 0.479000 0.101000 0.050000 0.445000 0.471000 0.084000 0.034000 0.008000 ;0.992000 0.546000 0.647000 0.849000 0.891000 0.739000 0.765000 0.555000 0.613000 0.748000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.570000 0.470000 0.640000 0.550000 0.060000 0.430000 0.040000 0.280000 0.130000 0.510000 ;0.700000 0.740000 0.770000 0.810000 0.870000 0.790000 0.940000 0.910000 0.850000 0.660000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.020000 0.510000 0.120000 0.220000 0.250000 0.100000 0.490000 0.530000 0.350000 ;0.800000 0.960000 0.760000 0.820000 0.710000 0.570000 0.940000 0.690000 0.900000 0.550000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.030000 0.360000 0.410000 0.330000 0.430000 0.540000 0.300000 0.280000 0.100000 ;0.770000 0.910000 0.700000 0.550000 0.590000 0.780000 0.650000 0.860000 0.750000 0.990000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.920000 0.370000 0.900000 0.200000 0.150000 0.020000 0.530000 0.860000 0.250000 0.190000 ;0.170000 0.980000 0.140000 0.680000 0.830000 0.470000 0.950000 0.340000 0.880000 0.540000 ];\r\nWexp=[7 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.020000 0.490000 0.280000 0.080000 0.830000 0.170000 0.140000 0.850000 ;0.420000 0.650000 0.950000 0.890000 0.030000 0.580000 0.380000 0.060000 0.370000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.670000 0.050000 0.590000 0.330000 0.820000 0.030000 0.740000 0.560000 0.950000 0.620000 ;0.210000 0.380000 0.770000 0.080000 0.260000 0.640000 0.460000 0.790000 0.310000 0.410000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.840000 0.800000 0.420000 0.580000 0.670000 0.070000 0.360000 ;0.690000 0.870000 0.310000 0.600000 0.760000 0.200000 0.380000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.450000 0.380000 0.280000 0.590000 0.620000 0.230000 0.810000 ;0.320000 0.190000 0.680000 0.140000 0.090000 0.940000 0.170000 ];\r\nWexp=[6 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.207000 0.288000 0.180000 0.595000 0.748000 0.459000 0.802000 0.387000 0.027000 0.090000 ;0.450000 0.982000 0.694000 0.613000 0.486000 0.423000 0.685000 0.847000 0.432000 0.604000 ];\r\nWexp=[4 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.750000 0.970000 0.820000 0.840000 0.680000 0.780000 0.730000 0.270000 0.220000 0.150000 ;0.130000 0.920000 0.390000 0.320000 0.230000 0.080000 0.800000 0.330000 0.720000 0.590000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.140000 0.600000 0.950000 0.160000 0.650000 0.580000 0.910000 0.230000 0.020000 ;0.120000 0.510000 0.530000 0.280000 0.350000 0.070000 0.400000 0.930000 0.490000 0.090000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.545000 0.527000 0.500000 0.727000 0.018000 0.400000 0.191000 0.982000 0.409000 0.591000 ;0.945000 0.745000 0.355000 0.673000 0.045000 0.118000 0.682000 0.827000 0.645000 0.482000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.930000 0.980000 0.470000 0.810000 0.830000 0.460000 0.510000 0.540000 ;0.490000 0.640000 0.170000 0.290000 0.140000 0.440000 0.590000 0.760000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.580000 ;0.330000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.640000 0.820000 0.700000 0.480000 0.520000 0.610000 0.060000 0.240000 0.300000 ;0.550000 0.450000 0.090000 0.030000 0.850000 0.670000 0.760000 0.360000 0.790000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 ;0.900000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.100000 0.040000 0.110000 0.650000 0.250000 0.570000 0.480000 0.150000 0.800000 ;0.550000 0.020000 0.920000 0.080000 0.700000 0.360000 0.910000 0.710000 0.820000 0.850000 ];\r\nWexp=[5 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.890000 0.060000 0.090000 0.750000 0.730000 0.810000 0.950000 0.660000 0.390000 ;0.530000 0.970000 0.610000 0.670000 0.690000 0.380000 0.590000 0.300000 0.720000 0.110000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.870000 0.600000 0.860000 0.830000 0.680000 0.810000 0.700000 0.920000 0.760000 ;0.170000 0.510000 0.330000 0.050000 0.240000 0.030000 0.410000 0.480000 0.520000 ];\r\nWexp=[9 9];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.940000 0.720000 0.810000 0.220000 0.280000 0.530000 0.440000 0.160000 0.880000 0.970000 ;0.120000 0.030000 0.470000 0.560000 0.380000 0.340000 0.690000 0.090000 0.250000 0.750000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.410000 0.360000 0.230000 0.140000 0.180000 0.050000 0.500000 0.270000 0.090000 0.450000 ;0.680000 0.950000 0.910000 0.860000 0.730000 0.550000 0.590000 0.820000 0.640000 0.770000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.278000 0.852000 0.370000 0.824000 0.389000 0.704000 0.546000 0.204000 0.296000 0.056000 ;0.833000 0.315000 0.991000 0.028000 0.907000 0.630000 0.361000 0.037000 0.065000 0.954000 ];\r\nWexp=[7 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.713000 0.657000 0.778000 0.435000 0.565000 0.870000 0.963000 0.343000 0.481000 0.593000 ;0.287000 0.333000 0.454000 0.130000 0.370000 0.759000 0.176000 0.611000 0.231000 0.398000 ];\r\nWexp=[10 6];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.590000 0.750000 0.650000 0.900000 0.740000 0.880000 0.850000 ;0.400000 0.070000 0.540000 0.380000 0.570000 0.150000 0.490000 ];\r\nWexp=[7 7];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.110000 0.920000 0.540000 0.840000 0.380000 0.770000 0.900000 0.490000 0.870000 0.750000 ;0.620000 0.480000 0.330000 0.440000 0.890000 0.130000 0.430000 0.080000 0.340000 0.560000 ];\r\nWexp=[10 5];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.480000 0.650000 0.770000 0.690000 0.720000 0.560000 0.660000 0.550000 0.510000 0.730000 ;0.310000 0.440000 0.300000 0.060000 0.200000 0.420000 0.030000 0.070000 0.110000 0.140000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.900000 0.680000 0.600000 0.800000 ;0.350000 0.050000 0.170000 0.880000 ];\r\nWexp=[4 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.730000 0.910000 0.450000 0.640000 0.090000 ;0.550000 0.360000 0.270000 0.820000 0.180000 ];\r\nWexp=[4 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.530000 0.740000 0.410000 0.320000 0.820000 0.970000 0.620000 0.500000 0.710000 0.090000 ;0.180000 0.760000 0.380000 0.150000 0.470000 0.210000 0.560000 0.120000 0.590000 0.440000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.487000 0.092000 0.714000 0.160000 0.504000 0.277000 0.479000 0.605000 0.462000 0.832000 ;0.210000 0.824000 0.118000 0.387000 0.664000 0.874000 0.445000 0.739000 0.546000 0.017000 ];\r\nWexp=[8 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.100000 ;0.400000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.688000 0.872000 0.615000 0.477000 0.734000 0.624000 0.394000 0.532000 0.954000 0.817000 ;0.193000 0.119000 0.349000 0.073000 0.037000 0.009000 0.128000 0.303000 0.046000 0.064000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.910000 0.550000 0.300000 0.570000 0.920000 0.400000 0.450000 0.150000 0.110000 0.190000 ;0.090000 0.790000 0.890000 0.740000 0.850000 0.940000 0.340000 0.380000 0.720000 0.260000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.723000 0.639000 0.824000 0.697000 0.840000 0.882000 0.437000 0.782000 0.588000 0.218000 ;0.345000 0.151000 0.067000 0.849000 0.815000 0.235000 0.521000 0.765000 0.950000 0.681000 ];\r\nWexp=[9 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.150000 0.350000 0.090000 0.110000 0.330000 0.220000 ;0.390000 0.460000 0.850000 0.700000 0.570000 0.610000 0.500000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.850000 0.790000 0.550000 0.380000 0.300000 0.400000 0.770000 0.740000 0.320000 0.570000 ;0.260000 0.210000 0.110000 0.130000 0.020000 0.040000 0.230000 0.190000 0.090000 0.060000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.961000 0.330000 0.010000 0.816000 0.583000 0.913000 0.893000 0.951000 0.126000 0.398000 ;0.767000 0.029000 0.262000 0.641000 0.175000 0.544000 0.359000 0.932000 0.680000 0.476000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 ;0.700000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.240000 0.050000 0.190000 0.110000 0.920000 0.590000 0.730000 0.380000 0.780000 0.950000 ;0.860000 0.700000 0.430000 0.620000 0.220000 0.540000 0.410000 0.890000 0.680000 0.490000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\n% function GJam_Qual_2014d\r\n% % \r\n% %War\r\n% fn='D-small-attempt0.in';\r\n% %fn='D-large.in';\r\n% [data] = read_file(fn); % \r\n% \r\n% fidG = fopen('D-small-output.out', 'w');\r\n% %fidG = fopen('D-large-output001.out', 'w');\r\n% tic\r\n% \r\n% for i=1:size(data,2) % Cell array has N rows of cases\r\n% % m=sort(data{i},2);\r\n%  m=data{i};\r\n%  dw = dWar(m) ;% \r\n%  w = War(m) ;%  \r\n%  \r\n%    fprintf('Case #%i: %i %i\\n',i,dw,w);\r\n%    fprintf(fidG,'Case #%i: %i %i\\n',i,dw,w);\r\n%     \r\n% end\r\n% toc\r\n% \r\n% fclose(fidG);\r\n% \r\n% end\r\n% \r\n% function dw=dWar(m)\r\n% % Post contest\r\n% % Lie to burn opponent best pieces\r\n%  N=sort(m(1,:));\r\n%  K=sort(m(2,:));\r\n%  \r\n%  dw=0;\r\n%  for i=1:length(N)\r\n%   if N(i)\u003eK(1) % Lie to above to beat lowest\r\n%    dw=dw+1;\r\n%    K=K(2:end);\r\n%   else % Lie to just below best\r\n%    K=K(1:end-1);\r\n%   end\r\n%  end\r\n%  \r\n% end\r\n% \r\n% function w=War(m)\r\n% % Optimal truthful strategy\r\n% % Best lucky sequence\r\n%  w=0;\r\n% \r\n%  Nm=sort(m(1,:));\r\n%  Km=sort(m(2,:));\r\n%  \r\n%  Nmz=[Nm' ones(size(Nm,2),1)];\r\n%  Kmz=[Km' zeros(size(Km,2),1)];\r\n%  z=[Nmz;Kmz]; \r\n%  z=sortrows(z,-1);\r\n%  \r\n%  while ~isempty(z)\r\n%   ptr1=find(z(:,2)==1,1,'last');\r\n%   ptr0=find(z(1:ptr1,2)==0,1,'last');\r\n%   if isempty(ptr0)\r\n%    % score\r\n%    w=w+1;\r\n%    z(ptr1,:)=[];\r\n%    ptr0=find(z(:,2)==0,1,'last');\r\n%    z(ptr0,:)=[];  \r\n%   else\r\n%    z(ptr1,:)=[];\r\n%    z(ptr0,:)=[];  \r\n%   end\r\n%  end \r\n%  % Create worst Ken/B Scenario\r\n%  \r\n% end\r\n% \r\n% \r\n% function [d] = read_file(fn)\r\n% % Read whole array then parse\r\n% % dlmread valid for numeric arrays\r\n%  m=dlmread(fn);\r\n%  m(1,:)=[];\r\n%  for i=1:size(m,1)/3\r\n%   d{i}=m(3*i-1:3*i,1:m(3*i-2,1));\r\n%  end\r\n%  \r\n% end % read_file\r\n% Data Set file\r\n%4\r\n%1\r\n%0.5\r\n%0.6\r\n%2\r\n%0.7 0.2\r\n%0.8 0.3\r\n%3\r\n%0.5 0.1 0.9\r\n%0.6 0.4 0.3\r\n%9\r\n%0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n%0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-04-19T14:08:56.000Z","updated_at":"2014-04-19T15:00:47.000Z","published_at":"2014-04-19T15:00:47.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/2974486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 Qualifier Deceitful War\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMy condensed summary of the problem statement.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\\n\\nA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\\nDeceitful A Wins 8\\nOptimal Honest A Wins 4]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Deceitful Wins, Optimal Honest Wins\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Deceitful Solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2646,"title":"Determine the number of maximal cliques in an undirected graph","description":"In an undirected graph, a clique is a subset of vertices that are fully connected, i.e. there is an edge between all pairs of vertices in the subset. A _maximal_ clique is one in which the subset of vertices is not part of a larger clique. So, for instance, a fully connected graph has many cliques, but only one maximal clique.\r\n\r\nGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return the number (num) of maximal cliques.\r\n\r\n*Example*\r\n\r\nConsider the graph shown below,\r\n\r\n\u003c\u003chttps://dl.dropboxusercontent.com/u/13345152/examplegraph.png\u003e\u003e\r\n\r\nwhich has the following adjacency matrix:\r\n\r\n  A = [ 0 1 0 0 0\r\n        1 0 1 1 0\r\n        0 1 0 1 0\r\n        0 1 1 0 1\r\n        0 0 0 1 0 ]\r\n\r\nThe number of maximal cliques is 3. The maximal cliques are {1,2}, {2,3,4}, and {4,5}.\r\n\r\nNOTE: You may assume the data type of the adjacency matrix is double.","description_html":"\u003cp\u003eIn an undirected graph, a clique is a subset of vertices that are fully connected, i.e. there is an edge between all pairs of vertices in the subset. A \u003ci\u003emaximal\u003c/i\u003e clique is one in which the subset of vertices is not part of a larger clique. So, for instance, a fully connected graph has many cliques, but only one maximal clique.\u003c/p\u003e\u003cp\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return the number (num) of maximal cliques.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eConsider the graph shown below,\u003c/p\u003e\u003cimg src = \"https://dl.dropboxusercontent.com/u/13345152/examplegraph.png\"\u003e\u003cp\u003ewhich has the following adjacency matrix:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ]\r\n\u003c/pre\u003e\u003cp\u003eThe number of maximal cliques is 3. The maximal cliques are {1,2}, {2,3,4}, and {4,5}.\u003c/p\u003e\u003cp\u003eNOTE: You may assume the data type of the adjacency matrix is double.\u003c/p\u003e","function_template":"function num = maximalcliques(A)\r\n  num = 0;\r\nend","test_suite":"%%\r\nA = 0;\r\nassert(isequal(maximalcliques(A),1))\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = ones(N)-eye(N);\r\n  assert(isequal(maximalcliques(A),1))\r\nend\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = zeros(N);\r\n  assert(isequal(maximalcliques(A),N))\r\nend\r\n\r\n%%\r\nA = [ 0 0 0 0\r\n      0 0 0 1\r\n      0 0 0 0\r\n      0 1 0 0 ];\r\nassert(isequal(maximalcliques(A),3))\r\n\r\n%%\r\nA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ];\r\nassert(isequal(maximalcliques(A),3))\r\n\r\n%%\r\nA = [ 0 1 1 0 0 0\r\n      1 0 1 1 0 0\r\n      1 1 0 0 1 0\r\n      0 1 0 0 1 0\r\n      0 0 1 1 0 1\r\n      0 0 0 0 1 0 ];\r\nassert(isequal(maximalcliques(A),5))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2014-10-28T21:35:49.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-10-28T21:07:46.000Z","updated_at":"2014-10-28T22:05:37.000Z","published_at":"2014-10-28T21:35:49.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn an undirected graph, a clique is a subset of vertices that are fully connected, i.e. there is an edge between all pairs of vertices in the subset. A\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emaximal\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e clique is one in which the subset of vertices is not part of a larger clique. So, for instance, a fully connected graph has many cliques, but only one maximal clique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return the number (num) of maximal cliques.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider the graph shown below,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich has the following adjacency matrix:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[A = [ 0 1 0 0 0\\n      1 0 1 1 0\\n      0 1 0 1 0\\n      0 1 1 0 1\\n      0 0 0 1 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe number of maximal cliques is 3. The maximal cliques are {1,2}, {2,3,4}, and {4,5}.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNOTE: You may assume the data type of the adjacency matrix is double.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAADAFBMVEV4eHiTk5P29vaBgYGcnJzAwMC3t7eKiorS0tLt7e3b29vk5OTJycn///9vb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD61b95AAAAyklEQVR42q2SSQ6FIAxAWzQxkcj976lEE5R+hojQOmw+Cxa8RwcoGnhf6oNDD0AvGL8j/E2wC+JiXwSaAKbbatGkLjBrX13szynmtPXnKc2eCRiMGQtXxrq2hmZRuuXx6SVdPlPpopeC387sFMMIwdsyAMFAEcHuptW5oIaKYgjHBBoZ512snMeJ8g7o0DmA5jwKXRdqy9W6gfMzhd7iMOySlxq0qn/z4leR43HNQ8WrLtYi1Dz+pnjsmt/8ZsulwLgQOOeC4EyQHH5z1GUZiLNTtwAAAABJRU5ErkJggg==\"}]}"},{"id":2647,"title":"Find the maximal cliques in an undirected graph","description":"This is a variant of a \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2646-determine-the-number-of-maximal-cliques-in-an-undirected-graph previous problem\u003e on maximal cliques. Instead of simply computing the number of maximal cliques in an undirected graph, now you must return the cliques themselves.\r\n\r\nGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return an array (C) in which each column encodes one of the maximal cliques in the graph. If C(i,j) = 1, then the ith vertex in the graph is included in the jth clique. The order of columns does not matter, but all maximal cliques must be given - that is, size(C,2) should equal the number of maximal cliques.\r\n\r\n*Example*\r\n\r\nConsider the graph shown below,\r\n\r\n\u003c\u003chttps://dl.dropboxusercontent.com/u/13345152/examplegraph.png\u003e\u003e\r\n\r\nwhich has the following adjacency matrix:\r\n\r\n  A = [ 0 1 0 0 0\r\n        1 0 1 1 0\r\n        0 1 0 1 0\r\n        0 1 1 0 1\r\n        0 0 0 1 0 ]\r\n\r\nThe maximal cliques are {1,2}, {2,3,4}, and {4,5}. Therefore, one (of three) valid outputs is:\r\n\r\n  C = [ 1 0 0\r\n        1 1 0\r\n        0 1 0\r\n        0 1 1\r\n        0 0 1 ]\r\n\r\nNOTE: You may assume the data type of the adjacency matrix (A) is double.","description_html":"\u003cp\u003eThis is a variant of a \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2646-determine-the-number-of-maximal-cliques-in-an-undirected-graph\"\u003eprevious problem\u003c/a\u003e on maximal cliques. Instead of simply computing the number of maximal cliques in an undirected graph, now you must return the cliques themselves.\u003c/p\u003e\u003cp\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return an array (C) in which each column encodes one of the maximal cliques in the graph. If C(i,j) = 1, then the ith vertex in the graph is included in the jth clique. The order of columns does not matter, but all maximal cliques must be given - that is, size(C,2) should equal the number of maximal cliques.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eConsider the graph shown below,\u003c/p\u003e\u003cimg src = \"https://dl.dropboxusercontent.com/u/13345152/examplegraph.png\"\u003e\u003cp\u003ewhich has the following adjacency matrix:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ]\r\n\u003c/pre\u003e\u003cp\u003eThe maximal cliques are {1,2}, {2,3,4}, and {4,5}. Therefore, one (of three) valid outputs is:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eC = [ 1 0 0\r\n      1 1 0\r\n      0 1 0\r\n      0 1 1\r\n      0 0 1 ]\r\n\u003c/pre\u003e\u003cp\u003eNOTE: You may assume the data type of the adjacency matrix (A) is double.\u003c/p\u003e","function_template":"function C = maximalcliques(A)\r\n  C = [];\r\nend","test_suite":"%%\r\nA = 0;\r\nassert(isequal(maximalcliques(A),1))\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = ones(N)-eye(N);\r\n  assert(isequal(maximalcliques(A),ones(N,1)))\r\nend\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = zeros(N);\r\n  C = maximalcliques(A);\r\n  assert(isequal(fliplr(sortrows(C')'),eye(N)))\r\nend\r\n\r\n%%\r\nA = [ 0 0 0 0\r\n      0 0 0 1\r\n      0 0 0 0\r\n      0 1 0 0 ];\r\nC = maximalcliques(A);\r\nC = fliplr(sortrows(C')');\r\nC_correct = [ 1 0 0\r\n              0 1 0\r\n              0 0 1\r\n              0 1 0 ];\r\nassert(isequal(C,C_correct))\r\n\r\n%%\r\nA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ];\r\nC = maximalcliques(A);\r\nC = fliplr(sortrows(C')');\r\nC_correct = [ 1 0 0\r\n              1 1 0\r\n              0 1 0\r\n              0 1 1\r\n              0 0 1 ];\r\nassert(isequal(C,C_correct))\r\n\r\n%%\r\nA = [ 0 1 1 0 0 0\r\n      1 0 1 1 0 0\r\n      1 1 0 0 1 0\r\n      0 1 0 0 1 0\r\n      0 0 1 1 0 1\r\n      0 0 0 0 1 0 ];\r\nC = maximalcliques(A);\r\nC = fliplr(sortrows(C')');\r\nC_correct = [ 1 0 0 0 0\r\n              1 1 0 0 0\r\n              1 0 1 0 0\r\n              0 1 0 1 0\r\n              0 0 1 1 1\r\n              0 0 0 0 1 ];\r\nassert(isequal(C,C_correct))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2014-10-28T22:05:02.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-10-28T21:53:54.000Z","updated_at":"2014-10-28T22:05:02.000Z","published_at":"2014-10-28T22:05:02.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is a variant of a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2646-determine-the-number-of-maximal-cliques-in-an-undirected-graph\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eprevious problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e on maximal cliques. Instead of simply computing the number of maximal cliques in an undirected graph, now you must return the cliques themselves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return an array (C) in which each column encodes one of the maximal cliques in the graph. If C(i,j) = 1, then the ith vertex in the graph is included in the jth clique. The order of columns does not matter, but all maximal cliques must be given - that is, size(C,2) should equal the number of maximal cliques.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider the graph shown below,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich has the following adjacency matrix:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[A = [ 0 1 0 0 0\\n      1 0 1 1 0\\n      0 1 0 1 0\\n      0 1 1 0 1\\n      0 0 0 1 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe maximal cliques are {1,2}, {2,3,4}, and {4,5}. Therefore, one (of three) valid outputs is:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[C = [ 1 0 0\\n      1 1 0\\n      0 1 0\\n      0 1 1\\n      0 0 1 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNOTE: You may assume the data type of the adjacency matrix (A) is double.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAADAFBMVEV4eHiTk5P29vaBgYGcnJzAwMC3t7eKiorS0tLt7e3b29vk5OTJycn///9vb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD61b95AAAAyklEQVR42q2SSQ6FIAxAWzQxkcj976lEE5R+hojQOmw+Cxa8RwcoGnhf6oNDD0AvGL8j/E2wC+JiXwSaAKbbatGkLjBrX13szynmtPXnKc2eCRiMGQtXxrq2hmZRuuXx6SVdPlPpopeC387sFMMIwdsyAMFAEcHuptW5oIaKYgjHBBoZ512snMeJ8g7o0DmA5jwKXRdqy9W6gfMzhd7iMOySlxq0qn/z4leR43HNQ8WrLtYi1Dz+pnjsmt/8ZsulwLgQOOeC4EyQHH5z1GUZiLNTtwAAAABJRU5ErkJggg==\"}]}"},{"id":2697,"title":"Probability of winning single-elimination tournament","description":"Find the probability that the p^{th} player will win a single-elimination tournament with 2^n players where M(i,j)=probability that player i will beat player j in a head-to-head matchup.  In the first round player 1 plays player 2, player 3 plays player 4 and so on.  (In each round each surviving competitor plays his surviving \"next door neighbor\" in the bracket.)\r\n\r\nSee also problem \u003c2254\u003e.\r\n\r\nTrivial example :\r\n\r\nif \r\n\r\n   \r\n\r\n  M = [ NaN 0.7 ; 0.3 NaN ]\r\n\r\nthen \r\n\r\n  winprob(M,1)=0.7 \r\n\r\nand \r\n\r\n  winprob(M,2)=0.3","description_html":"\u003cp\u003eFind the probability that the p^{th} player will win a single-elimination tournament with 2^n players where M(i,j)=probability that player i will beat player j in a head-to-head matchup.  In the first round player 1 plays player 2, player 3 plays player 4 and so on.  (In each round each surviving competitor plays his surviving \"next door neighbor\" in the bracket.)\u003c/p\u003e\u003cp\u003eSee also problem \u003ca href = \"2254\"\u003e2254\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eTrivial example :\u003c/p\u003e\u003cp\u003eif\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eM = [ NaN 0.7 ; 0.3 NaN ]\r\n\u003c/pre\u003e\u003cp\u003ethen\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ewinprob(M,1)=0.7 \r\n\u003c/pre\u003e\u003cp\u003eand\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ewinprob(M,2)=0.3\r\n\u003c/pre\u003e","function_template":"function prob = winprob(M,p)\r\n  prob = 1;\r\nend","test_suite":"1\r\n%%\r\nM = [ NaN 1 ; 0 NaN ];\r\nassert(isequal(winprob(M,1),1));\r\nassert(isequal(winprob(M,2),0));\r\n\r\n2\r\n%%\r\nM = [ NaN 0.7 ; 0.3 NaN ];\r\nassert(isequal(winprob(M,1),0.7));\r\nassert(isequal(winprob(M,2),0.3));\r\n\r\n3\r\n%%\r\nM = zeros(8)+NaN;\r\nfor i=1:7\r\n    for j=i+1:8\r\n        r=rand();\r\n        M(i,j)=r;\r\n        M(j,i)=1-r;\r\n    end\r\nend\r\n\r\nepsilon=1e-8;\r\ntotprob=0;\r\nfor i=1:8\r\n    totprob=totprob+winprob(M,i);\r\nend\r\nassert(abs(totprob-1)\u003cepsilon);\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":4567,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2014-12-02T02:09:00.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-11-30T16:23:41.000Z","updated_at":"2014-12-02T02:09:00.000Z","published_at":"2014-11-30T16:23:41.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFind the probability that the p^{th} player will win a single-elimination tournament with 2^n players where M(i,j)=probability that player i will beat player j in a head-to-head matchup. In the first round player 1 plays player 2, player 3 plays player 4 and so on. (In each round each surviving competitor plays his surviving \\\"next door neighbor\\\" in the bracket.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSee also problem\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"2254\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e2254\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTrivial example :\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eif\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[M = [ NaN 0.7 ; 0.3 NaN ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[winprob(M,1)=0.7]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eand\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[winprob(M,2)=0.3]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2737,"title":"Prouhet–Tarry–Escott (basic)","description":"Inspired by \u003chttp://www.mathworks.com/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves problem 660.\u003e\r\n\r\nGiven n return two disjoint sets of integers _A_ and _B_ with same cardinality having following property:\r\n\r\n\u003c\u003chttps://i.imgur.com/gSW7nWy.png\u003e\u003e\r\n\r\nfor i = 1:n\r\n\r\nTry to minimize sets cardinality. ","description_html":"\u003cp\u003eInspired by \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves\"\u003eproblem 660.\u003c/a\u003e\u003c/p\u003e\u003cp\u003eGiven n return two disjoint sets of integers \u003ci\u003eA\u003c/i\u003e and \u003ci\u003eB\u003c/i\u003e with same cardinality having following property:\u003c/p\u003e\u003cimg src = \"https://i.imgur.com/gSW7nWy.png\"\u003e\u003cp\u003efor i = 1:n\u003c/p\u003e\u003cp\u003eTry to minimize sets cardinality.\u003c/p\u003e","function_template":"function [A, B] = prouhet(n)\r\n  A = 1:n;\r\n  B = -A;\r\nend","test_suite":"%%\r\nn = 1;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\nn = 2;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\nn = 5;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\nn = 7;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\n%n = 9;\r\n%[A, B] = prouhet(n);\r\n%assert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\n%assert(isempty(intersect(A, B)));\r\n%assert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\n%assert(isequal(sum(uint64(A(:)).^uint64(1:n)), sum(uint64(A(:)).^uint64(1:n))));\r\n%disp(sprintf('Each set has %i elements.', numel(A)))\r\n%if numel(A) \u003c=20\r\n%    disp('A:')\r\n%    disp(A)\r\n%    disp('B:')\r\n%    disp(B)\r\n%end\r\n%%\r\n% test info\r\n%\r\n% larger n will be added later\r\n%\r\n% scoring function will be added later as well\r\n% scoring will be entirely based on size of output: smaller output == better score\r\n% something like this:\r\n%\r\n% score = 0;\r\n% for n = 1:25\r\n%   [A, B] = prouhet(n)\r\n%   assert(...);\r\n%   score = score + numel(A);\r\n% end\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":14358,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":"2016-10-08T00:11:00.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-12-08T09:56:20.000Z","updated_at":"2020-07-22T23:41:27.000Z","published_at":"2016-10-07T08:07:12.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInspired by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eproblem 660.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven n return two disjoint sets of integers\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e with same cardinality having following property:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003efor i = 1:n\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTry to minimize sets cardinality.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAiAFYBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/AOyutU1rQfiN/ZWu63eDRdXOdKuo1iURS55gc7Pf5T9OuTjsp9CvJYisfiPVoWPR0EBI/OIipdAt9Vs9Pa11e8F9PFKwS72KhmjPKllXgEZ2nHXbnvVjV9RXSdIur90kZYIy5Eabm/AZGfpkVbTPlruIZsDJAwCafWX4htNSvtBu7fR9QNhqLJm3uNisFccgEMCMHoeOhrkfAerXfifS5odQ1bUrXXNOk+z6jafuhskH8QGz7rYyPxHOM1tajoevRtHd6X4lvmkhdXazuY4WiuFByUJCBlJGRuzx6Vsahq0Gm3FhDMkpa+uBbxFFBAfaW554GFY/gaLPURd6nfWyhwtrsRgyY+Ygk4OeeCvGBjryCMZPjzSdK1vwld2Oqh/LkwIDEuZRP/AYx3bPbvk54zWh4attVtPDWnW+t3KXOpxwqtxKg4Zv6nGMnucnjNS69PfWvh7UrjTIfOv47aR7aPGd8gUlRjvzjiuZ0OCW58QXlndrqlzp/wBhgVXvFlEcswZmkk+fG058sAKBjaSABXYyIVtXSAbWCFYwuFwccY4IH5Vg+Rr/APeuf/AqH/4zXRLnaM9cVw2qaAZfihpusaHcfZ76OPZrAC5jltyPkDf9NCQNvsMngAHu647xfbzTa1pUxtrya3tbe6mjFrvDNclUSNdycrlXl5JA65OK2/D+nS2GlWxvdkmqPbwi+uFHM0qoFLE9+lYN4ni7/hI5b5ND0y8ghJSxEmptF5SkYZyvlMN7c854HA6sWln1Px60ZFv4a0WN+xk1Z3A/AQj+dafha31iHSTLr1xBLqlxM8k4tyTFHztVEzzgKo/HJrcoorP1qa/g0e6l0xLZr1UPk/apCkQb1YgHgdffpx1rmNMbxjplp5MXhnS5WYmSWZ9aYvM56ux8jkn8gMAYAAqC/uvHepXMGnvBomk2s0ircyR37S3AiJ+YR/IoDEZAPbPHrXfUVycd/wCIZr26Q28yIEl2r5QCribam1iOW8td3cEuMDAIq8Lu5h011trec3Usgji3+e4Un+Ji65Cjr0xxUPgyCez0a4tLiCWFor66ZRIG+ZXmZwQzAFh8/XFdJRRWR4mtZr7w5e2UKs32lBDJtGWEbMFcgdyELED2rNt/7YJibUWlAIYxqiyZAMj7Q/lYG4J5YORjIOO9ZetaZd6xq2rhbKdhcfZrFVeHakkCsWlbeeV/1jjIO75AQDxXe0UUUUUUUUUUUV//2Q==\"}]}"},{"id":2191,"title":"Order of things - 3","description":"This problem is closely related to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1 Problem 2189, Order of things - 1\u003e and \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2 Problem 2190, Order of things - 2\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other. \r\n\r\n* However, this time the tasks are grouped, and groups of tasks should be executed at once.\r\n* It may (still) be impossible to find a solution, since dependencies may be cyclic. But this may now also be due to the grouping of tasks. In any case, return an empty vector if no order is found.\r\n* There are still multiple orders possible, return them as multiple rows of the output vector.\r\n* The tasks within a group should of course be specified in the right order, when interdependent.\r\n\r\nThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency. \r\n\r\n   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  0  0  0\r\nC  0  1  0  0  0\r\nD  0  1  1  0  0\r\nE  1  0  0  0  0\r\n\r\nThe |1| on row |C|, column |B|, indicates that task |C| depends on task |B|. \r\n\r\nThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u003e 0, e.g.\r\n\r\n [ 1 1 2 3 3 ] \r\n\r\nReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\r\n\r\n [ \r\n   1 2 3 4 5\r\n   1 2 3 5 4\r\n   2 1 3 4 5\r\n   2 1 3 5 4\r\n ]\r\n\r\nIf no order fulfilling the dependencies exists, return an empty vector.","description_html":"\u003cp\u003eThis problem is closely related to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\"\u003eProblem 2189, Order of things - 1\u003c/a\u003e and \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\"\u003eProblem 2190, Order of things - 2\u003c/a\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/p\u003e\u003cul\u003e\u003cli\u003eHowever, this time the tasks are grouped, and groups of tasks should be executed at once.\u003c/li\u003e\u003cli\u003eIt may (still) be impossible to find a solution, since dependencies may be cyclic. But this may now also be due to the grouping of tasks. In any case, return an empty vector if no order is found.\u003c/li\u003e\u003cli\u003eThere are still multiple orders possible, return them as multiple rows of the output vector.\u003c/li\u003e\u003cli\u003eThe tasks within a group should of course be specified in the right order, when interdependent.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/p\u003e\u003cpre\u003e   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  0  0  0\r\nC  0  1  0  0  0\r\nD  0  1  1  0  0\r\nE  1  0  0  0  0\u003c/pre\u003e\u003cp\u003eThe \u003ctt\u003e1\u003c/tt\u003e on row \u003ctt\u003eC\u003c/tt\u003e, column \u003ctt\u003eB\u003c/tt\u003e, indicates that task \u003ctt\u003eC\u003c/tt\u003e depends on task \u003ctt\u003eB\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, e.g.\u003c/p\u003e\u003cpre\u003e [ 1 1 2 3 3 ] \u003c/pre\u003e\u003cp\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/p\u003e\u003cpre\u003e [ \r\n   1 2 3 4 5\r\n   1 2 3 5 4\r\n   2 1 3 4 5\r\n   2 1 3 5 4\r\n ]\u003c/pre\u003e\u003cp\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/p\u003e","function_template":"function order = calculation_order(dependencies,groups)\r\n  order  = 1:size(dependencies,1);\r\nend","test_suite":"%%\r\ndependencies = [\r\n0  0  0  0  1\r\n0  0  1  1  0\r\n0  0  0  0  0\r\n0  0  1  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 3  3  1  2  1 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n5  3  4  2  1\r\n5  3  4  1  2\r\n4  3  5  2  1\r\n4  3  5  1  2\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  1  0  0  0\r\n0  0  1  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  1  0\r\n];\r\ngroups = [ 2  2  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n4  3  2  1  5\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  0  1\r\n0  0  1  0  0\r\n];\r\ngroups = [ 1  1  2  3  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n2  1  3  5  4\r\n4  3  1  5  2\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  0\r\n0  0  1  0  0\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 5  1  2  3  4 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  0\r\n1  0  0  0  0\r\n0  0  0  1  0\r\n0  1  0  0  0\r\n0  0  1  0  0\r\n];\r\ngroups = [ 1  1  2  3  2 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  1\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  0  0\r\n];\r\ngroups = [ 2  2  3  1  1 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies_ = ones(10+randi(10));\r\ndependencies_ = dependencies_-triu(dependencies_);\r\norder_ = randperm(size(dependencies_,1));\r\ndependencies = dependencies_(order_,order_);\r\norder_ = 0;\r\norder = calculation_order(dependencies,1:size(dependencies_,1));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\norder = calculation_order(dependencies,ones(1,size(dependencies_,1)));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2014-02-21T15:59:05.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-02-18T08:50:55.000Z","updated_at":"2014-02-21T15:59:05.000Z","published_at":"2014-02-21T09:38:58.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is closely related to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2189, Order of things - 1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2190, Order of things - 2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHowever, this time the tasks are grouped, and groups of tasks should be executed at once.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt may (still) be impossible to find a solution, since dependencies may be cyclic. But this may now also be due to the grouping of tasks. In any case, return an empty vector if no order is found.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are still multiple orders possible, return them as multiple rows of the output vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe tasks within a group should of course be specified in the right order, when interdependent.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   A  B  C  D  E\\nA  0  0  0  0  0\\nB  0  0  0  0  0\\nC  0  1  0  0  0\\nD  0  1  1  0  0\\nE  1  0  0  0  0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e on row\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, column\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, indicates that task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e depends on task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, e.g.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ 1 1 2 3 3 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ \\n   1 2 3 4 5\\n   1 2 3 5 4\\n   2 1 3 4 5\\n   2 1 3 5 4\\n ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2192,"title":"Order of things - 4","description":"*This is the last assignment in the _Order of Things_-series. If that past incompleteness kept you from solving it, you may start now.* Open that bottle of wine, and spend an entertaining evening coding.\r\n\r\nThis problem is closely related to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1 Problem 2189, Order of things - 1\u003e, \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2 Problem 2190, Order of things - 2\u003e, and \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2191-order-of-things-3 Problem 2191, Order of things - 3\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other. \r\n\r\nHowever, this is the most complex case, as \r\n* Calculations are preferably grouped, but may, due to their dependencies, not all be clustered. So groups of events may be split over different clusters. The number of clusters per group should be kept to a minimum. \r\n\r\nThe same complications as in problem 3 may apply:\r\n* It may (still) be impossible to find a solution, since dependencies may be cyclic. But this is now no longer due to the grouping of tasks, as you may, if necessary, break the rule of grouping. In any case, return an empty vector if no order is found.\r\n* There are still multiple orders possible, return them as multiple rows of the output vector.\r\n* The tasks within a group should of course be specified in the right order, when interdependent.\r\n\r\nThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency. \r\n\r\n   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  1  0  0\r\nC  1  0  0  0  0\r\nD  0  0  1  0  0\r\nE  1  0  0  0  0\r\n\r\nThe |1| on row |C|, column |B|, indicates that task |C| depends on task |B|. \r\n\r\nThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u003e 0, for every task, e.g. \r\n\r\n [ 1 1 2 2 3 ] \r\n\r\nReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\r\n\r\n [ \r\n   1 3 4 2 5\r\n   1 3 4 5 2\r\n   1 5 3 4 2\r\n ]\r\n\r\nIf no order fulfilling the dependencies exists, return an empty vector.","description_html":"\u003cp\u003e\u003cb\u003eThis is the last assignment in the \u003ci\u003eOrder of Things\u003c/i\u003e-series. If that past incompleteness kept you from solving it, you may start now.\u003c/b\u003e Open that bottle of wine, and spend an entertaining evening coding.\u003c/p\u003e\u003cp\u003eThis problem is closely related to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\"\u003eProblem 2189, Order of things - 1\u003c/a\u003e, \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\"\u003eProblem 2190, Order of things - 2\u003c/a\u003e, and \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2191-order-of-things-3\"\u003eProblem 2191, Order of things - 3\u003c/a\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/p\u003e\u003cp\u003eHowever, this is the most complex case, as \r\n* Calculations are preferably grouped, but may, due to their dependencies, not all be clustered. So groups of events may be split over different clusters. The number of clusters per group should be kept to a minimum.\u003c/p\u003e\u003cp\u003eThe same complications as in problem 3 may apply:\r\n* It may (still) be impossible to find a solution, since dependencies may be cyclic. But this is now no longer due to the grouping of tasks, as you may, if necessary, break the rule of grouping. In any case, return an empty vector if no order is found.\r\n* There are still multiple orders possible, return them as multiple rows of the output vector.\r\n* The tasks within a group should of course be specified in the right order, when interdependent.\u003c/p\u003e\u003cp\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/p\u003e\u003cpre\u003e   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  1  0  0\r\nC  1  0  0  0  0\r\nD  0  0  1  0  0\r\nE  1  0  0  0  0\u003c/pre\u003e\u003cp\u003eThe \u003ctt\u003e1\u003c/tt\u003e on row \u003ctt\u003eC\u003c/tt\u003e, column \u003ctt\u003eB\u003c/tt\u003e, indicates that task \u003ctt\u003eC\u003c/tt\u003e depends on task \u003ctt\u003eB\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, for every task, e.g.\u003c/p\u003e\u003cpre\u003e [ 1 1 2 2 3 ] \u003c/pre\u003e\u003cp\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/p\u003e\u003cpre\u003e [ \r\n   1 3 4 2 5\r\n   1 3 4 5 2\r\n   1 5 3 4 2\r\n ]\u003c/pre\u003e\u003cp\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/p\u003e","function_template":"function order = calculation_order(dependencies,groups)\r\n  order  = 1:size(dependencies,1);\r\nend","test_suite":"dependencies = [\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  1\r\n0  0  0  0  1\r\n0  1  0  0  0\r\n];\r\ngroups = [ 3  1  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n3  2  5  4  1\r\n3  5  2  4  1\r\n5  4  2  3  1\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  1  0\r\n0  1  0  0  0\r\n0  0  0  1  0\r\n];\r\ngroups = [ 3  1  1  2  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n3  4  2  5  1\r\n3  4  5  2  1\r\n5  3  4  2  1\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  0  1  0  0\r\n0  0  0  1  0\r\n0  0  0  1  0\r\n0  0  0  0  0\r\n0  0  1  0  0\r\n];\r\ngroups = [ 1  3  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n2  1  4  5  3\r\n5  1  4  2  3\r\n4  1  3  2  5\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n    0 0 0 0 0\r\n    0 0 0 0 0\r\n    0 1 0 0 0\r\n    0 0 1 0 0\r\n    1 0 0 1 0\r\n    ];\r\ngroups = [1 2 2 2 2];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n    1 2 3 4 5\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  1  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 1  3  4  2  5 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n0  0  0  1  0\r\n0  0  1  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 1  3  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n1  2  4  5  3\r\n1  2  3  5  4\r\n1  5  4  2  3\r\n1  5  3  2  4\r\n1  4  3  2  5\r\n1  3  4  2  5\r\n5  4  3  2  1\r\n5  3  4  2  1\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies_ = ones(randi(10));\r\ndependencies_ = dependencies_-triu(dependencies_);\r\norder_ = randperm(size(dependencies_,1));\r\ndependencies = dependencies_(order_,order_);\r\norder_ = 0;\r\norder = calculation_order(dependencies,1:size(dependencies_,1));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\norder = calculation_order(dependencies,ones(1,size(dependencies_,1)));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-02-18T08:57:21.000Z","updated_at":"2014-03-04T07:49:56.000Z","published_at":"2014-03-04T07:49:56.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis is the last assignment in the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOrder of Things\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e-series. If that past incompleteness kept you from solving it, you may start now.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Open that bottle of wine, and spend an entertaining evening coding.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is closely related to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2189, Order of things - 1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2190, Order of things - 2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2191-order-of-things-3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2191, Order of things - 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHowever, this is the most complex case, as * Calculations are preferably grouped, but may, due to their dependencies, not all be clustered. So groups of events may be split over different clusters. The number of clusters per group should be kept to a minimum.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe same complications as in problem 3 may apply: * It may (still) be impossible to find a solution, since dependencies may be cyclic. But this is now no longer due to the grouping of tasks, as you may, if necessary, break the rule of grouping. In any case, return an empty vector if no order is found. * There are still multiple orders possible, return them as multiple rows of the output vector. * The tasks within a group should of course be specified in the right order, when interdependent.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   A  B  C  D  E\\nA  0  0  0  0  0\\nB  0  0  1  0  0\\nC  1  0  0  0  0\\nD  0  0  1  0  0\\nE  1  0  0  0  0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e on row\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, column\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, indicates that task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e depends on task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, for every task, e.g.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ 1 1 2 2 3 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ \\n   1 3 4 2 5\\n   1 3 4 5 2\\n   1 5 3 4 2\\n ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":43648,"title":"Arc length of points interpolation","description":"Given a n by m matrix representing m vectors in n dimensions. Calculate the \u003chttps://en.wikipedia.org/wiki/Arc_length arc length\u003e of the closed loop curve going though these points in the order that they are given. The parametric curve, |c(t)| , between points |p(k)| and |p(k+1)| is defined as,\r\n\r\n|c(t) = p(k-1) * (-t/2+t^2-t^3/2) + p(k) * (1-5/2*t^2+3/2*t^3) + p(k+1) * (t/2+2*t^2-3/2*t^3) + p(k+2) * (-t^2/2+t^3/2)|,\r\n\r\nwhere |t| goes from 0 to 1. These interpolation polynomials can also be found using the constraints |c(0)=p(k)|, |c(1)=p(k+1)|, |c'(0)=(p(k+1)-p(k-1))/2| and |c'(1)=(p(k+2)-p(k))/2|.\r\n\r\nFor example for the points\r\n\r\n  points = [[1; 0] [0; 1] [-1; 0] [0; -1]];\r\n\r\nwould yield to following curve: \r\n\r\n\u003c\u003chttp://i.imgur.com/CIb8jFU.png\u003e\u003e","description_html":"\u003cp\u003eGiven a n by m matrix representing m vectors in n dimensions. Calculate the \u003ca href = \"https://en.wikipedia.org/wiki/Arc_length\"\u003earc length\u003c/a\u003e of the closed loop curve going though these points in the order that they are given. The parametric curve, \u003ctt\u003ec(t)\u003c/tt\u003e , between points \u003ctt\u003ep(k)\u003c/tt\u003e and \u003ctt\u003ep(k+1)\u003c/tt\u003e is defined as,\u003c/p\u003e\u003cp\u003e\u003ctt\u003ec(t) = p(k-1) * (-t/2+t^2-t^3/2) + p(k) * (1-5/2*t^2+3/2*t^3) + p(k+1) * (t/2+2*t^2-3/2*t^3) + p(k+2) * (-t^2/2+t^3/2)\u003c/tt\u003e,\u003c/p\u003e\u003cp\u003ewhere \u003ctt\u003et\u003c/tt\u003e goes from 0 to 1. These interpolation polynomials can also be found using the constraints \u003ctt\u003ec(0)=p(k)\u003c/tt\u003e, \u003ctt\u003ec(1)=p(k+1)\u003c/tt\u003e, \u003ctt\u003ec'(0)=(p(k+1)-p(k-1))/2\u003c/tt\u003e and \u003ctt\u003ec'(1)=(p(k+2)-p(k))/2\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eFor example for the points\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003epoints = [[1; 0] [0; 1] [-1; 0] [0; -1]];\r\n\u003c/pre\u003e\u003cp\u003ewould yield to following curve:\u003c/p\u003e\u003cimg src = \"http://i.imgur.com/CIb8jFU.png\"\u003e","function_template":"function dist = arcLength(points)\r\n    dist = 1;\r\nend","test_suite":"%%\r\npoints = [[1; 0] [0; 1] [-1; 0] [0; -1]];\r\ndist_correct = 5.945066529883204;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = eye(2);\r\ndist_correct = 2 * sqrt(2);\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = [cos(2*pi/500*(1:500)); sin(2*pi/500*(1:500))];\r\ndist_correct = 6.283185305221142;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = [[0 0 0]' [1 0 0]' [1 0 1]' [0 0 1]' [0 1 1]' [1 1 1]' [1 1 0]' [0 1 0]'];\r\ndist_correct = 8.367321074314315;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = [6 -8 -7 -7 3 5;8 -4 9 -1 -9 5;-7 1 9 8 7 -2;8 9 0 6 8 3;3 9 6 9 3 -6];\r\ndist_correct = 101.32625280165301;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\nw = 0.887321243287836;\r\npoints = [-w  0  w  1 1 1 w 0 -w -1 -1 -1; -1 -1 -1 -w 0 w 1 1  1  w  0 -w];\r\ndist_correct = 8;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)","published":true,"deleted":false,"likes_count":0,"comments_count":3,"created_by":40782,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2016-12-14T19:45:19.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2016-10-30T02:02:55.000Z","updated_at":"2016-12-14T19:45:19.000Z","published_at":"2016-10-30T02:03:39.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven a n by m matrix representing m vectors in n dimensions. Calculate the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Arc_length\\\"\u003e\u003cw:r\u003e\u003cw:t\u003earc length\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e of the closed loop curve going though these points in the order that they are given. The parametric curve,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(t)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e , between points\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(k)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(k+1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is defined as,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(t) = p(k-1) * (-t/2+t^2-t^3/2) + p(k) * (1-5/2*t^2+3/2*t^3) + p(k+1) * (t/2+2*t^2-3/2*t^3) + p(k+2) * (-t^2/2+t^3/2)\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003et\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e goes from 0 to 1. These interpolation polynomials can also be found using the constraints\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(0)=p(k)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(1)=p(k+1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec'(0)=(p(k+1)-p(k-1))/2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec'(1)=(p(k+2)-p(k))/2\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example for the points\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[points = [[1; 0] [0; 1] [-1; 0] [0; -1]];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewould yield to following curve:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":43676,"title":"Count the Digits in the Box","description":"In this problem you must provide an accurate census of all the digits inside a given box. The problem is complicated by the fact that your census report also appears inside the box, thereby influencing the result. Here is the simplest form of the problem.\r\n\r\n ----------------------------------------------\r\n |  The number of 0's inside the box is: ___  |\r\n |  The number of 1's inside the box is: ___  |\r\n |  The number of 2's inside the box is: ___  |\r\n |  The number of 3's inside the box is: ___  |\r\n |  The number of 4's inside the box is: ___  |\r\n |  The number of 5's inside the box is: ___  |\r\n |  The number of 6's inside the box is: ___  |\r\n |  The number of 7's inside the box is: ___  |\r\n |  The number of 8's inside the box is: ___  |\r\n |  The number of 9's inside the box is: ___  |\r\n ----------------------------------------------\r\n\r\nSuppose you start to fill it in like this: there's only one 2, so you put a 1 next to the 2. But there are now two 1's, so you put a 2 next to the 1. But now there are three 2's... and so on. This problem eventually converges and can be answered as follows.\r\n\r\n --------------------------------------------\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   3 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   2 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\r\n\r\nCount the numbers and you'll see the sums all work out. We will complicate this problem by adding some extra numbers to the top of the box. \r\n\r\n*Example*\r\n\r\nIf\r\n\r\n extras = 22222\r\n\r\nthen we can see by inspection that one solution is\r\n\r\n census = [1 7 7 2 1 1 1 3 1 1]\r\n\r\nas shown below\r\n\r\n --------------------------------------------\r\n | Here are some extra numbers:       22222 |\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   7 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   3 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\r\n\r\nIn general, your answer might not be unique. We'll just test whether you meet the criteria.","description_html":"\u003cp\u003eIn this problem you must provide an accurate census of all the digits inside a given box. The problem is complicated by the fact that your census report also appears inside the box, thereby influencing the result. Here is the simplest form of the problem.\u003c/p\u003e\u003cpre\u003e ----------------------------------------------\r\n |  The number of 0's inside the box is: ___  |\r\n |  The number of 1's inside the box is: ___  |\r\n |  The number of 2's inside the box is: ___  |\r\n |  The number of 3's inside the box is: ___  |\r\n |  The number of 4's inside the box is: ___  |\r\n |  The number of 5's inside the box is: ___  |\r\n |  The number of 6's inside the box is: ___  |\r\n |  The number of 7's inside the box is: ___  |\r\n |  The number of 8's inside the box is: ___  |\r\n |  The number of 9's inside the box is: ___  |\r\n ----------------------------------------------\u003c/pre\u003e\u003cp\u003eSuppose you start to fill it in like this: there's only one 2, so you put a 1 next to the 2. But there are now two 1's, so you put a 2 next to the 1. But now there are three 2's... and so on. This problem eventually converges and can be answered as follows.\u003c/p\u003e\u003cpre\u003e --------------------------------------------\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   3 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   2 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\u003c/pre\u003e\u003cp\u003eCount the numbers and you'll see the sums all work out. We will complicate this problem by adding some extra numbers to the top of the box.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf\u003c/p\u003e\u003cpre\u003e extras = 22222\u003c/pre\u003e\u003cp\u003ethen we can see by inspection that one solution is\u003c/p\u003e\u003cpre\u003e census = [1 7 7 2 1 1 1 3 1 1]\u003c/pre\u003e\u003cp\u003eas shown below\u003c/p\u003e\u003cpre\u003e --------------------------------------------\r\n | Here are some extra numbers:       22222 |\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   7 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   3 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\u003c/pre\u003e\u003cp\u003eIn general, your answer might not be unique. We'll just test whether you meet the criteria.\u003c/p\u003e","function_template":"function census = getDigitCensus(extras)\r\n  census = [0 0 0 0 0 0 0 0 0 0];\r\nend","test_suite":"%%\r\nextras = 22222;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 6380059;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 99999432;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 347879;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 83870955;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 1111111111;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))","published":true,"deleted":false,"likes_count":3,"comments_count":4,"created_by":7,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-11-21T20:00:30.000Z","updated_at":"2016-12-14T15:19:55.000Z","published_at":"2016-12-13T23:01:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem you must provide an accurate census of all the digits inside a given box. The problem is complicated by the fact that your census report also appears inside the box, thereby influencing the result. Here is the simplest form of the problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ ----------------------------------------------\\n |  The number of 0's inside the box is: ___  |\\n |  The number of 1's inside the box is: ___  |\\n |  The number of 2's inside the box is: ___  |\\n |  The number of 3's inside the box is: ___  |\\n |  The number of 4's inside the box is: ___  |\\n |  The number of 5's inside the box is: ___  |\\n |  The number of 6's inside the box is: ___  |\\n |  The number of 7's inside the box is: ___  |\\n |  The number of 8's inside the box is: ___  |\\n |  The number of 9's inside the box is: ___  |\\n ----------------------------------------------]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose you start to fill it in like this: there's only one 2, so you put a 1 next to the 2. But there are now two 1's, so you put a 2 next to the 1. But now there are three 2's... and so on. This problem eventually converges and can be answered as follows.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ --------------------------------------------\\n | The number of 0's inside the box is:   1 |\\n | The number of 1's inside the box is:   7 |\\n | The number of 2's inside the box is:   3 |\\n | The number of 3's inside the box is:   2 |\\n | The number of 4's inside the box is:   1 |\\n | The number of 5's inside the box is:   1 |\\n | The number of 6's inside the box is:   1 |\\n | The number of 7's inside the box is:   2 |\\n | The number of 8's inside the box is:   1 |\\n | The number of 9's inside the box is:   1 |\\n --------------------------------------------]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCount the numbers and you'll see the sums all work out. We will complicate this problem by adding some extra numbers to the top of the box.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ extras = 22222]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen we can see by inspection that one solution is\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ census = [1 7 7 2 1 1 1 3 1 1]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eas shown below\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ --------------------------------------------\\n | Here are some extra numbers:       22222 |\\n | The number of 0's inside the box is:   1 |\\n | The number of 1's inside the box is:   7 |\\n | The number of 2's inside the box is:   7 |\\n | The number of 3's inside the box is:   2 |\\n | The number of 4's inside the box is:   1 |\\n | The number of 5's inside the box is:   1 |\\n | The number of 6's inside the box is:   1 |\\n | The number of 7's inside the box is:   3 |\\n | The number of 8's inside the box is:   1 |\\n | The number of 9's inside the box is:   1 |\\n --------------------------------------------]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn general, your answer might not be unique. We'll just test whether you meet the criteria.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44692,"title":"Is input the global variable z?","description":"When the input is certainly not the global variable |z|, your function must return |false|.  Otherwise return |true|.  All inputs \u0026 variable values will be scalar.  ","description_html":"\u003cp\u003eWhen the input is certainly not the global variable \u003ctt\u003ez\u003c/tt\u003e, your function must return \u003ctt\u003efalse\u003c/tt\u003e.  Otherwise return \u003ctt\u003etrue\u003c/tt\u003e.  All inputs \u0026 variable values will be scalar.\u003c/p\u003e","function_template":"function isGlobal = checkInput(z)\r\n    \r\n    inName = inputname(1)\r\n    \r\n    if inName == 'z', \r\n        isGlobal = true;\r\n    else\r\n        isGlobal = false;\r\n    end;\r\n    \r\nend","test_suite":"%% No silly stuff\r\n% This Test Suite can be updated if inappropriate 'hacks' are discovered \r\n% in any submitted solutions, so your submission's status may therefore change over time.  \r\nassessFunctionAbsence({'regexp', 'regexpi'}, 'FileName','checkInput.m')\r\n\r\nRE = regexp(fileread('checkInput.m'), '\\w+', 'match');\r\ntabooWords = {'ans'};\r\ntestResult = cellfun( @(z) ismember(z, tabooWords), RE );\r\nmsg = ['Please do not do that in your code!' char([10 13]) ...\r\n    'Found: ' strjoin(RE(testResult)) '.' char([10 13]) ...\r\n    'Banned word.' char([10 13])];\r\nassert(~any( testResult ), msg)\r\n\r\n\r\n%% Contrast with local variables (1)\r\nglobal z\r\nx = 3;\r\ny = 2;\r\nz = 1;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Contrast with local variables (2)\r\nglobal z\r\nx = 1;\r\ny = 2;\r\nz = 3;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Contrast with local variables (3)\r\nglobal z\r\nx = 3;\r\ny = 1;\r\nz = 2;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n\r\n%% Contrast with unnamed variables (1)\r\nglobal z\r\nz = 2;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(1) )\r\nassert( ~checkInput(3) )\r\n\r\n%% Contrast with unnamed variables (2)\r\nglobal z\r\nz = 1;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(2) )\r\nassert( ~checkInput(3) )\r\n\r\n%% Contrast with unnamed variables (3)\r\nglobal z\r\nz = 3;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(1) )\r\nassert( ~checkInput(2) )\r\n\r\n\r\n%% Contrast with other global variables (1)\r\nglobal x y z\r\nx = 3;\r\ny = 1;\r\nz = 2;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Contrast with other global variables (2)\r\nglobal x y z\r\nx = 2;\r\ny = 1;\r\nz = 3;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n\r\n%% Contrast with variables named in anonymous function (1)\r\nglobal x y z\r\nx = 2;\r\nz = 3;\r\ntestX = @(x)  checkInput(x);\r\ntestZ = @(z)  checkInput(z);\r\nassert( ~testX(x) )\r\nassert( ~testZ(x) )\r\nassert( testX(z) )\r\nassert( testZ(z) )\r\n\r\n%% Contrast with variables named in anonymous function (2)\r\nglobal x y z\r\nx = 3;\r\nz = 2;\r\ntestX = @(x)  checkInput(x);\r\ntestZ = @(z)  checkInput(z);\r\nassert( ~testX(x) )\r\nassert( ~testZ(x) )\r\nassert( testX(z) )\r\nassert( testZ(z) )\r\n\r\n\r\n%% Local variables only (1)\r\nclear global\r\nx = 1;\r\ny = 2;\r\nz = 3;\r\nassert( ~checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Local variables only (2)\r\nclear global \r\nx = 3;\r\ny = 2;\r\nz = 1;\r\nassert( ~checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )","published":true,"deleted":false,"likes_count":0,"comments_count":5,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-06-27T13:53:36.000Z","updated_at":"2018-06-27T14:26:51.000Z","published_at":"2018-06-27T14:26:51.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen the input is certainly not the global variable\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ez\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, your function must return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efalse\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Otherwise return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etrue\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. All inputs \u0026amp; variable values will be scalar.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44734,"title":"Solve the 2-norm Regularization Problem","description":"In data fitting, regularization is a technique to stabilize an ill-posed problem. \u003chttps://en.wikipedia.org/wiki/Tikhonov_regularization Ridge Regression (aka Tikhonov regularizaton)\u003e adds the 2-norm of the coefficient vector to the least squares problem. The cost function looks like this:\r\n\r\nJ=1/2*norm(A*x-b,2)^2+norm(alpha*x,2)^2   (MATLAB equation if image doesn't display)\r\n\r\n\u003c\u003chttps://image.ibb.co/n0G5xp/Equation1.png\u003e\u003e\r\n\r\nwhere |x| is the coefficient vector, |b| corresponds to observations, |A| comes from evaluating terms of an equation, alpha corresponds to a chosen scalar weight value, and |J| is the cost. The minimization of this cost function is ridge regression. When alpha is zero and the least squares problem is ill-conditioned, this problem is unstable meaning that small changes in |b| cause large changes in |x|. Choosing alpha appropriately for a given problem stabilizes the problem causing small changes in |b| causes a small change in |x|.\r\n\r\nThis Cody problem is about solving the Ridge Regression problem. Implement the solution to the ridge regression problem. This is best done by solving a dual problem. Minimizes a different cost function yields the solution that solves the Ridge Regression problem:\r\n\r\nJ = 1/2*norm([A;alpha*eye(n)]*x-[b;zeros(1,n)],2)^2  (MATLAB equation if image doesn't display)\r\n\r\n\u003c\u003chttps://image.ibb.co/hkAZOU/equation2.png\u003e\u003e\r\n\r\nTherefore, write a function that minimum of the dual problem for a given A, alpha, and b.","description_html":"\u003cp\u003eIn data fitting, regularization is a technique to stabilize an ill-posed problem. \u003ca href = \"https://en.wikipedia.org/wiki/Tikhonov_regularization\"\u003eRidge Regression (aka Tikhonov regularizaton)\u003c/a\u003e adds the 2-norm of the coefficient vector to the least squares problem. The cost function looks like this:\u003c/p\u003e\u003cp\u003eJ=1/2*norm(A*x-b,2)^2+norm(alpha*x,2)^2   (MATLAB equation if image doesn't display)\u003c/p\u003e\u003cimg src = \"https://image.ibb.co/n0G5xp/Equation1.png\"\u003e\u003cp\u003ewhere \u003ctt\u003ex\u003c/tt\u003e is the coefficient vector, \u003ctt\u003eb\u003c/tt\u003e corresponds to observations, \u003ctt\u003eA\u003c/tt\u003e comes from evaluating terms of an equation, alpha corresponds to a chosen scalar weight value, and \u003ctt\u003eJ\u003c/tt\u003e is the cost. The minimization of this cost function is ridge regression. When alpha is zero and the least squares problem is ill-conditioned, this problem is unstable meaning that small changes in \u003ctt\u003eb\u003c/tt\u003e cause large changes in \u003ctt\u003ex\u003c/tt\u003e. Choosing alpha appropriately for a given problem stabilizes the problem causing small changes in \u003ctt\u003eb\u003c/tt\u003e causes a small change in \u003ctt\u003ex\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThis Cody problem is about solving the Ridge Regression problem. Implement the solution to the ridge regression problem. This is best done by solving a dual problem. Minimizes a different cost function yields the solution that solves the Ridge Regression problem:\u003c/p\u003e\u003cp\u003eJ = 1/2*norm([A;alpha*eye(n)]*x-[b;zeros(1,n)],2)^2  (MATLAB equation if image doesn't display)\u003c/p\u003e\u003cimg src = \"https://image.ibb.co/hkAZOU/equation2.png\"\u003e\u003cp\u003eTherefore, write a function that minimum of the dual problem for a given A, alpha, and b.\u003c/p\u003e","function_template":"function x = ridgeRegression(A,alpha,b)\r\n  x = A\\b;\r\nend","test_suite":"clc; clear; close all;\r\n%% Test 1\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 0;\r\nc = [50.5072813195826;14.809837633449];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 2\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 1;\r\nc = [46.3633165923753;14.8348826094771];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 3\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 10;\r\nc = [5.15542113869052;15.0827828176993];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 4\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 100;\r\nc = [0.146854633219172;14.986428814777];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 5\r\n% This one is rank deficient without regularization.\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = x.^(0:6);\r\nc = A\\y;\r\nalpha = 0;\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 6\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = x.^(0:6);\r\nalpha = 10;\r\nc = [-1.48348345971319;-21.370159200147;1.50455732468686;-0.0214851248485215;0.000148821639521563;-5.20003346155603e-07;7.26127822714741e-10];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 7\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = x.^(0:6);\r\nalpha = 10000;\r\nc = [3.07150764626882e-05;0.0011811811626465;0.0297325806037763;0.00644572962571577;-7.30850526187996e-05;2.69506809802866e-07;-3.12356553672693e-10];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":9579,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-27T03:50:10.000Z","updated_at":"2018-09-20T12:02:32.000Z","published_at":"2018-08-27T03:55:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image2.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn data fitting, regularization is a technique to stabilize an ill-posed problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Tikhonov_regularization\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRidge Regression (aka Tikhonov regularizaton)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e adds the 2-norm of the coefficient vector to the least squares problem. The cost function looks like this:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eJ=1/2*norm(A*x-b,2)^2+norm(alpha*x,2)^2 (MATLAB equation if image doesn't display)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the coefficient vector,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e corresponds to observations,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e comes from evaluating terms of an equation, alpha corresponds to a chosen scalar weight value, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eJ\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the cost. The minimization of this cost function is ridge regression. When alpha is zero and the least squares problem is ill-conditioned, this problem is unstable meaning that small changes in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e cause large changes in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Choosing alpha appropriately for a given problem stabilizes the problem causing small changes in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e causes a small change in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Cody problem is about solving the Ridge Regression problem. Implement the solution to the ridge regression problem. This is best done by solving a dual problem. Minimizes a different cost function yields the solution that solves the Ridge Regression problem:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eJ = 1/2*norm([A;alpha*eye(n)]*x-[b;zeros(1,n)],2)^2 (MATLAB equation if image doesn't display)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTherefore, write a function that minimum of the dual problem for a given A, alpha, and b.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":44718,"title":"Optimize the Tollbooths","description":"Your company has recently built its own highway from which they hope to generate some revenue. The highway has no branches or intersections, it is a simple line segment. Your company also has access to simple data from some potential customers that describe their start and endpoint locations and their budget.\r\n\r\nTollbooths are also located on various locations on the highway. The total toll a customer pays is the sum of all tolls on the tollbooths that lie between their start and end locations. If a customer cannot afford the total toll they must pay, then they simply don't make the trip and end up paying nothing.\r\n\r\nThe customer wants to start or end their destination at the precise location of a tollbooth, so we can represent the problem as follows. We have a graph that is a simple path with N nodes. Each node represents a potential start or end location of a customer and there is a single tollbooth located on each node. So the total toll a customer pays is the sum of the tolls on the nodes they cross to reach their endpoint. Both the start point and end point are also toll booths.\r\n\r\nYour task is to set the tolls on each of the tollbooths to generate the *maximum revenue* for your company. The answer is the pricing of each toll booth.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20px; 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: normal; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"display: block; min-width: 0px; padding-top: 0px; transform-origin: 332px 171px; vertical-align: baseline; perspective-origin: 332px 171px; \"\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 42px; white-space: pre-wrap; perspective-origin: 309px 42px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour company has recently built its own highway from which they hope to generate some revenue. The highway has no branches or intersections, it is a simple line segment. Your company also has access to simple data from some potential customers that describe their start and endpoint locations and their budget.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 42px; white-space: pre-wrap; perspective-origin: 309px 42px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eTollbooths are also located on various locations on the highway. The total toll a customer pays is the sum of all tolls on the tollbooths that lie between their start and end locations. If a customer cannot afford the total toll they must pay, then they simply don't make the trip and end up paying nothing.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 52.5px; white-space: pre-wrap; perspective-origin: 309px 52.5px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe customer wants to start or end their destination at the precise location of a tollbooth, so we can represent the problem as follows. We have a graph that is a simple path with N nodes. Each node represents a potential start or end location of a customer and there is a single tollbooth located on each node. So the total toll a customer pays is the sum of the tolls on the nodes they cross to reach their endpoint. Both the start point and end point are also toll booths.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 21px; white-space: pre-wrap; perspective-origin: 309px 21px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour task is to set the tolls on each of the tollbooths to generate the\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: bold; \"\u003emaximum revenue\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e for your company. The answer is the pricing of each toll booth.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = toll_pricing_strategy(option,budget)\r\n   y=zeros(1,size(option,2));\r\n  % Optimize much !\r\nend","test_suite":"%% \r\noption=[1 0; 0 1; 1 1];\r\nbudget=[10;10;10];\r\ny_correct=[10,10];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption = [1 0 0; 0 1 0; 1 1 1];\r\nbudget=[10;10;15];\r\ny_correct=[10,5,0];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption=[0 1 1 0;1 1 1 0;1 0 0 0; 0 0 1 1];\r\nbudget=[15 ;25 ;15; 20];\r\ny_correct=[10,0,15,5];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption=[0   0   0   1   1   1\r\n   0   0   1   1   1   1\r\n   1   1   0   0   0   0\r\n   0   1   1   1   0   0\r\n   1   1   1   1   1   1\r\n   0   1   1   1   1   1];\r\nbudget=[ 42 ;31 ;12 ;63 ;105 ;87];\r\ny_correct=[18,12,20,31,11,13];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption=[1   1   1   1   1   0   0   0\r\n   0   0   0   1   1   1   1  0\r\n   1   1   1   0   0   0   0   0\r\n   0   1   1   1   1   1   0   0\r\n   0   0   1   1   1   1   1   0\r\n   0   1   1   1   1   1   0   0\r\n   1   1   1   0   0   0   0   0\r\n   0   0   0   1   1   1   1   1];\r\nbudget=[25;50;60;120;40;80;20;60];\r\ny_correct=[30,10,20,5,15,30,10,0];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))","published":true,"deleted":false,"likes_count":0,"comments_count":6,"created_by":195572,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2020-10-03T13:41:47.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-04T21:46:46.000Z","updated_at":"2020-10-03T13:41:47.000Z","published_at":"2018-08-04T21:50:10.000Z","restored_at":null,"restored_by":null,"spam":false,"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\u003eYour company has recently built its own highway from which they hope to generate some revenue. The highway has no branches or intersections, it is a simple line segment. Your company also has access to simple data from some potential customers that describe their start and endpoint locations and their budget.\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\u003eTollbooths are also located on various locations on the highway. The total toll a customer pays is the sum of all tolls on the tollbooths that lie between their start and end locations. If a customer cannot afford the total toll they must pay, then they simply don't make the trip and end up paying nothing.\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 customer wants to start or end their destination at the precise location of a tollbooth, so we can represent the problem as follows. We have a graph that is a simple path with N nodes. Each node represents a potential start or end location of a customer and there is a single tollbooth located on each node. So the total toll a customer pays is the sum of the tolls on the nodes they cross to reach their endpoint. Both the start point and end point are also toll booths.\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\u003eYour task is to set the tolls on each of the tollbooths to generate the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emaximum revenue\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e for your company. The answer is the pricing of each toll booth.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44720,"title":" God of War: The Chains Of Olympus","description":"The Spartan warrior, Kratos, is held by a chain of _n \u003e 1_ links in the underworld. His only chance of survival is to break the chain by removing the minimum number of single link, so that it would be possible to create a chain of any integer length between 1 and _n_ links, inclusive, from the resulting pieces. He only has enough stamina to remove the minimum number of single links. Anything more, and he forever remains doomed in the underworld.\r\n\r\nAt what points should he break chain to free himself and continue his vengeance journey to Olympus? \r\n\r\n*ILLUSTRATION:* \r\n\r\nn = 3 link chain can be broken, such that the resulting pieces can combine to give a chain of any integer length between 1 and _n_ links, inclusive, by removing a minimum of a single link in any of the following way:\r\n\r\n      Segments                 Breakpoints\r\n    O-  O-O                        [1]      \r\n    O -O- O                        [2]\r\n    O-O  -O                        [3]\r\n\r\nYou are to return only one of these possible breakpoints i.e. either 1, 2, or 3 will be accepted as a correct solution for n = 3.\r\n\r\nSimilarly, n = 8 link chain can only be broken by removing a minimum of two single link as shown:\r\n\r\n\r\n      Segments                Breakpoints\r\n\r\n   O- O-O -O- O-O-O-O            [1,4]\r\n\r\n   O- O-O-O-O -O- O-O-O          [1,5]\r\n\r\n   O- O-O-O-O -O- O-O            [1,6]\r\n\r\n   O -O- O -O- O-O-O-O           [2,4]\r\n\r\n   O -O- O-O- -O- O-O-O          [2,5] \r\n\r\n   O -O- O-O-O -O- O-O           [2,6]   \r\n\r\n   O -O- O-O-O-O -O- O           [2,7]\r\n\r\n   O-O -O- -O- O-O-O-O           [3,4] \r\n\r\n   O-O -O- O -O- O-O-O           [3,5]\r\n\r\n   O-O -O- O-O -O- O-O           [3,6]\r\n\r\n   O-O -O- O-O-O -O- O           [3,7]\r\n\r\n   O-O -O- O-O-O-O -O            [3,8]\r\n\r\n   O-O-O -O- -O- O-O-O           [4,5]\r\n\r\n   O-O-O -O- O -O- O-O           [4,6]\r\n\r\n   O-O-O -O- O-O -O- O           [4,7]\r\n\r\n   O-O-O -O- O-O-O -O            [4,8]\r\n\r\n   O-O-O-O -O- -O- O-O           [5,6]\r\n\r\n   O-O-O-O -O- O -O- O           [5,7]\r\n\r\n   O-O-O-O -O- O-O -O            [5,8]","description_html":"\u003cp\u003eThe Spartan warrior, Kratos, is held by a chain of \u003ci\u003en \u0026gt; 1\u003c/i\u003e links in the underworld. His only chance of survival is to break the chain by removing the minimum number of single link, so that it would be possible to create a chain of any integer length between 1 and \u003ci\u003en\u003c/i\u003e links, inclusive, from the resulting pieces. He only has enough stamina to remove the minimum number of single links. Anything more, and he forever remains doomed in the underworld.\u003c/p\u003e\u003cp\u003eAt what points should he break chain to free himself and continue his vengeance journey to Olympus?\u003c/p\u003e\u003cp\u003e\u003cb\u003eILLUSTRATION:\u003c/b\u003e\u003c/p\u003e\u003cp\u003en = 3 link chain can be broken, such that the resulting pieces can combine to give a chain of any integer length between 1 and \u003ci\u003en\u003c/i\u003e links, inclusive, by removing a minimum of a single link in any of the following way:\u003c/p\u003e\u003cpre\u003e      Segments                 Breakpoints\r\n    O-  O-O                        [1]      \r\n    O -O- O                        [2]\r\n    O-O  -O                        [3]\u003c/pre\u003e\u003cp\u003eYou are to return only one of these possible breakpoints i.e. either 1, 2, or 3 will be accepted as a correct solution for n = 3.\u003c/p\u003e\u003cp\u003eSimilarly, n = 8 link chain can only be broken by removing a minimum of two single link as shown:\u003c/p\u003e\u003cpre\u003e      Segments                Breakpoints\u003c/pre\u003e\u003cpre\u003e   O- O-O -O- O-O-O-O            [1,4]\u003c/pre\u003e\u003cpre\u003e   O- O-O-O-O -O- O-O-O          [1,5]\u003c/pre\u003e\u003cpre\u003e   O- O-O-O-O -O- O-O            [1,6]\u003c/pre\u003e\u003cpre\u003e   O -O- O -O- O-O-O-O           [2,4]\u003c/pre\u003e\u003cpre\u003e   O -O- O-O- -O- O-O-O          [2,5] \u003c/pre\u003e\u003cpre\u003e   O -O- O-O-O -O- O-O           [2,6]   \u003c/pre\u003e\u003cpre\u003e   O -O- O-O-O-O -O- O           [2,7]\u003c/pre\u003e\u003cpre\u003e   O-O -O- -O- O-O-O-O           [3,4] \u003c/pre\u003e\u003cpre\u003e   O-O -O- O -O- O-O-O           [3,5]\u003c/pre\u003e\u003cpre\u003e   O-O -O- O-O -O- O-O           [3,6]\u003c/pre\u003e\u003cpre\u003e   O-O -O- O-O-O -O- O           [3,7]\u003c/pre\u003e\u003cpre\u003e   O-O -O- O-O-O-O -O            [3,8]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- -O- O-O-O           [4,5]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- O -O- O-O           [4,6]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- O-O -O- O           [4,7]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- O-O-O -O            [4,8]\u003c/pre\u003e\u003cpre\u003e   O-O-O-O -O- -O- O-O           [5,6]\u003c/pre\u003e\u003cpre\u003e   O-O-O-O -O- O -O- O           [5,7]\u003c/pre\u003e\u003cpre\u003e   O-O-O-O -O- O-O -O            [5,8]\u003c/pre\u003e","function_template":"function breakpoints = Chains(n)\r\n  \r\nend","test_suite":"%%\r\nn = 2;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n, 'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 3;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 5;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 7;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 8;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=2,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 23;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=2,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 50;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=3,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 100;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=4,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 150;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=4,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 200;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=5,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 500;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=6,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 1000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=7,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 2500;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints) \u003c= 8,'Argghh...You failed to release Kratos. Too much breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 5000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=9,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 10000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=9,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 20000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=10,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2018-09-18T17:56:51.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-05T20:04:25.000Z","updated_at":"2024-11-25T15:31:13.000Z","published_at":"2018-08-05T20:33:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Spartan warrior, Kratos, is held by a chain of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en \u0026gt; 1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e links in the underworld. His only chance of survival is to break the chain by removing the minimum number of single link, so that it would be possible to create a chain of any integer length between 1 and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e links, inclusive, from the resulting pieces. He only has enough stamina to remove the minimum number of single links. Anything more, and he forever remains doomed in the underworld.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAt what points should he break chain to free himself and continue his vengeance journey to Olympus?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eILLUSTRATION:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003en = 3 link chain can be broken, such that the resulting pieces can combine to give a chain of any integer length between 1 and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e links, inclusive, by removing a minimum of a single link in any of the following way:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[      Segments                 Breakpoints\\n    O-  O-O                        [1]      \\n    O -O- O                        [2]\\n    O-O  -O                        [3]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are to return only one of these possible breakpoints i.e. either 1, 2, or 3 will be accepted as a correct solution for n = 3.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSimilarly, n = 8 link chain can only be broken by removing a minimum of two single link as shown:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[      Segments                Breakpoints\\n\\n   O- O-O -O- O-O-O-O            [1,4]\\n\\n   O- O-O-O-O -O- O-O-O          [1,5]\\n\\n   O- O-O-O-O -O- O-O            [1,6]\\n\\n   O -O- O -O- O-O-O-O           [2,4]\\n\\n   O -O- O-O- -O- O-O-O          [2,5] \\n\\n   O -O- O-O-O -O- O-O           [2,6]   \\n\\n   O -O- O-O-O-O -O- O           [2,7]\\n\\n   O-O -O- -O- O-O-O-O           [3,4] \\n\\n   O-O -O- O -O- O-O-O           [3,5]\\n\\n   O-O -O- O-O -O- O-O           [3,6]\\n\\n   O-O -O- O-O-O -O- O           [3,7]\\n\\n   O-O -O- O-O-O-O -O            [3,8]\\n\\n   O-O-O -O- -O- O-O-O           [4,5]\\n\\n   O-O-O -O- O -O- O-O           [4,6]\\n\\n   O-O-O -O- O-O -O- O           [4,7]\\n\\n   O-O-O -O- O-O-O -O            [4,8]\\n\\n   O-O-O-O -O- -O- O-O           [5,6]\\n\\n   O-O-O-O -O- O -O- O           [5,7]\\n\\n   O-O-O-O -O- O-O -O            [5,8]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44724,"title":"Let's Make A Deal: The Player's Dilemma 2","description":"Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, either immediately opens your door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers you the choice, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\r\n\r\nWe will now play the game using the assumptions:\r\n\r\n# The host can open any of the doors including that picked by the player.\r\n# The host can open a door to reveal either a goat or the car.\r\n# The host doesn't always offer the chance to switch between the originally chosen \r\n  door and the closed doors.\r\n\r\nIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\r\n\r\n   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\r\n\r\nIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\r\n\r\nInterpreting the matrix in terms of the assumptions implies that all elements p_ij of the conditional probability matrix can be nonzero with the constraint that\r\n\r\n  p_i1 + p_i2 + p_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \r\n\r\nOn the game show, you have initially chosen door D and the host, Monty Hall, opened door H, using the conditional probability Ph.\r\n\r\nWhat is the probability *Pws* that you will win the car by switching your choice to the door remaining?\r\n\r\n*If switching option is not available (i.e. host opens a door with the car behind it) return NaN.*\r\n","description_html":"\u003cp\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, either immediately opens your door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers you the choice, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\u003c/p\u003e\u003cp\u003eWe will now play the game using the assumptions:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe host can open any of the doors including that picked by the player.\u003c/li\u003e\u003cli\u003eThe host can open a door to reveal either a goat or the car.\u003c/li\u003e\u003cli\u003eThe host doesn't always offer the chance to switch between the originally chosen \r\n  door and the closed doors.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/p\u003e\u003cpre\u003e   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\u003c/pre\u003e\u003cp\u003eIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/p\u003e\u003cp\u003eInterpreting the matrix in terms of the assumptions implies that all elements p_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ep_i1 + p_i2 + p_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \r\n\u003c/pre\u003e\u003cp\u003eOn the game show, you have initially chosen door D and the host, Monty Hall, opened door H, using the conditional probability Ph.\u003c/p\u003e\u003cp\u003eWhat is the probability \u003cb\u003ePws\u003c/b\u003e that you will win the car by switching your choice to the door remaining?\u003c/p\u003e\u003cp\u003e\u003cb\u003eIf switching option is not available (i.e. host opens a door with the car behind it) return NaN.\u003c/b\u003e\u003c/p\u003e","function_template":"function Pws = MontyHall2(D,H,Ph)\r\n  Pws = ;\r\nend","test_suite":"\r\n%% CASE 1: Host always opens the door containing the car.\r\n%      Ph = [1   0   0\r\n%            0   1   0\r\n%            0   0   1]\r\n% In this case, the host does not offer the player the choice of switching\r\n% doors. Hence, return Pws = NaN.\r\n%__________________________________________________________________________\r\nD = 1;\r\nH = 2;\r\nPh = diag([1 1 1]);\r\nPws_correct = NaN;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 3;\r\nPh = diag([1 1 1]);\r\nPws_correct = NaN;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = diag([1 1 1]);\r\nPws_correct = NaN;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\n%% CASE 2: Host (uniformly) randomly opens any door.\r\n%      Ph = [1/3  1/3  1/3\r\n%            1/3  1/3  1/3\r\n%            1/3  1/3  1/3]\r\n% In this case, the game is fair because the host does not make any effort\r\n% to open any particular door. Hence, the chance of winning or losing by\r\n% switching is equal i.e. Psw = 0.5.\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 3: Host opens door 2 if the car is not behind it. Otherwise,\r\n% the host opens door 3.\r\n%      Ph = [0   1   0\r\n%            0   0   1\r\n%            0   1   0]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 3;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 1;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 2;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 0;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 4: Host opens the door based on the standard assumptions of \r\n%  Marilyn vos Savant.\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPws_correct = 0.3333;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 5: Host opens the door based on a completely random approach.\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0.5045;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0.4955;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0.4745;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.5000    0.1000    0.4000\r\n      0.0500    0.5000    0.4500\r\n      0.3333    0.0667    0.6000];\r\nPws_correct = 0.8696;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.5000    0.1000    0.4000\r\n      0.0500    0.5000    0.4500\r\n      0.3333    0.0667    0.6000];\r\nPws_correct = 0.4706;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.5000    0.1000    0.4000\r\n      0.0500    0.5000    0.4500\r\n      0.3333    0.0667    0.6000];\r\nPws_correct = 0.1304;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2018-08-10T08:50:31.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2018-08-08T10:20:24.000Z","updated_at":"2018-08-10T08:50:31.000Z","published_at":"2018-08-08T12:55:34.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, either immediately opens your door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers you the choice, \\\"Do you want to pick door No. 2?\\\" Is it to your advantage to switch your choice?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe will now play the game using the assumptions:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open any of the doors including that picked by the player.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open a door to reveal either a goat or the car.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   Ph = [ p_11   p_12   p_13\\n          p_21   p_22   p_23\\n          p_31   p_32   p_33 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInterpreting the matrix in terms of the assumptions implies that all elements p_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[p_i1 + p_i2 + p_i3 = 1    i.e. the host must always open a door to reveal the car or a goat.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn the game show, you have initially chosen door D and the host, Monty Hall, opened door H, using the conditional probability Ph.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the probability\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePws\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that you will win the car by switching your choice to the door remaining?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eIf switching option is not available (i.e. host opens a door with the car behind it) return NaN.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44727,"title":"Let's Make A Deal: Criminal Minds","description":"The game of Let's Make A Deal proceeds as follows;\r\n\r\nThe player is given the choice of three doors: Behind one door is a car; behind the others, goats. The player picks a door, say No. 1, and the host, either immediately opens that door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers the player the choice, \"Do you want to pick door No. 2?\"\r\n\r\nThe game play is guided by the following set of rules:\r\n\r\n# The host can open any of the doors including that picked by the player.\r\n# The host can open a door to reveal either a goat or the car.\r\n# The host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\r\n\r\nIn order to manipulate the game play, the host does not always (uniformly) randomly hide the car behind the doors. Instead, based on previous games statistics, the host determines the probability Pc. \r\n\r\n Pc = [pc_1  pc_2  pc_3]   pc_i is the probability of the host placing car behind door i. \r\n\r\nIf the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\r\n\r\n   Ph = [ ph_11   ph_12   ph_13\r\n          ph_21   ph_22   ph_23\r\n          ph_31   ph_32   ph_33 ]\r\n\r\nIn the above matrix, ph_ij represents the probability that the host opens door j given that the car is behind door i.\r\n\r\nInterpreting the matrix in terms of the assumptions implies that all elements ph_ij of the conditional probability matrix can be nonzero with the constraint that\r\n\r\n ph_i1 + ph_i2 + ph_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \r\n\r\nOn the game show, the host places the car behind a door with probability Pc in order to manipulate the outcome. The player then choose door D and the host, Monty Hall, opens door H using the conditional probability Ph.\r\n\r\nIf the door H opened by the host has a goat behind it, what is the probability *Pws* that the player will win the car by switching the initial door choice to the door remaining?\r\n\r\n*If switching option is not available (i.e. host always opens a door with the car behind it) return NaN.*\r\n","description_html":"\u003cp\u003eThe game of Let's Make A Deal proceeds as follows;\u003c/p\u003e\u003cp\u003eThe player is given the choice of three doors: Behind one door is a car; behind the others, goats. The player picks a door, say No. 1, and the host, either immediately opens that door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers the player the choice, \"Do you want to pick door No. 2?\"\u003c/p\u003e\u003cp\u003eThe game play is guided by the following set of rules:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe host can open any of the doors including that picked by the player.\u003c/li\u003e\u003cli\u003eThe host can open a door to reveal either a goat or the car.\u003c/li\u003e\u003cli\u003eThe host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIn order to manipulate the game play, the host does not always (uniformly) randomly hide the car behind the doors. Instead, based on previous games statistics, the host determines the probability Pc.\u003c/p\u003e\u003cpre\u003e Pc = [pc_1  pc_2  pc_3]   pc_i is the probability of the host placing car behind door i. \u003c/pre\u003e\u003cp\u003eIf the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/p\u003e\u003cpre\u003e   Ph = [ ph_11   ph_12   ph_13\r\n          ph_21   ph_22   ph_23\r\n          ph_31   ph_32   ph_33 ]\u003c/pre\u003e\u003cp\u003eIn the above matrix, ph_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/p\u003e\u003cp\u003eInterpreting the matrix in terms of the assumptions implies that all elements ph_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/p\u003e\u003cpre\u003e ph_i1 + ph_i2 + ph_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \u003c/pre\u003e\u003cp\u003eOn the game show, the host places the car behind a door with probability Pc in order to manipulate the outcome. The player then choose door D and the host, Monty Hall, opens door H using the conditional probability Ph.\u003c/p\u003e\u003cp\u003eIf the door H opened by the host has a goat behind it, what is the probability \u003cb\u003ePws\u003c/b\u003e that the player will win the car by switching the initial door choice to the door remaining?\u003c/p\u003e\u003cp\u003e\u003cb\u003eIf switching option is not available (i.e. host always opens a door with the car behind it) return NaN.\u003c/b\u003e\u003c/p\u003e","function_template":"function Pws = MontyHall3(D,H,Ph,Pc)\r\n  \r\nend","test_suite":"%% CASE 1: Monty Hall (uniformly) randomly opens any door.\r\n%      Ph = [1/3  1/3  1/3\r\n%            1/3  1/3  1/3\r\n%            1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1A: Host always hides the car behind one particular door.\r\n%   Pc = [1  0  0] or [0  1  0]  or  [0  0  1]\r\n%__________________________________________________________________________\r\n% 1. Pc = [1 0 0], D = 1,  H = 3. \r\n% The host always hides the car behind door 1.\r\n% Consequently, a player with an initial door choice of D = 1 cannot win\r\n% by switching doors after the host opens door H = 3 i.e. Psw = 0.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [1  0  0];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 2. Pc = [1 0 0], D = 1, H = 2.\r\n% The host always hides the car behind door 1.\r\n% Consequently, a player with an initial door choice of D = 1 cannot win\r\n% by switching doors after the host opens door H = 2 i.e. Psw = 0.\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [1  0  0];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 3. Pc = [0 1 0], D = 1, H = 2. \r\n% The host always hides the car behind door 2.\r\n% Consequently, a player with an initial door choice of D = 1 does not\r\n% have the option to switch doors after the host opens door H = 2.\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0  1  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 4. Pc = [0 1 0], D = 1, H = 3. \r\n% The host always hides the car behind door 2.\r\n% Consequently, a player with an initial door choice of D = 1 can only win\r\n% by switching to door 2 after the host opens door H = 3. i.e. Psw = 1.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0  1  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 5. Pc = [0 0 1], D = 1, H = 2\r\n% The host always hides the car behind door 3.\r\n% Consequently, a player with an initial door choice of D = 1 does not\r\n% have the option to switch doors after the host opens door H = 2.\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0  0  1];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\n% 6. Pc = [0 0 1], D = 1, H = 3\r\n% The host always hides the car behind door 3.\r\n% Consequently, a player with an initial door choice of D = 1 does not\r\n% have the option to switch doors after the host opens door H = 3.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0  0  1];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1B: Host hides the car behind two particular doors with equal probability.\r\n% Pc = [0  0.5  0.5]  or [0.5  0.5  0]  or  [0.5  0  0.5]\r\n%__________________________________________________________________________\r\n% 1. Pc = [0  0.5  0.5], D = 3, H = 1.\r\n% The car is either behind door 2 or 3. If the host opens door H = 1, the\r\n% player's chance of winning by switching from door D = 3 to door 2 is\r\n% equal i.e. Psw = 0.5.\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0.5;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n% 2. Pc = [0  0.5  0.5], D = 3, H = 2.\r\n% The host never hides the car behind door 1. Hence, the player can never\r\n% wi by switching to door 1.\r\nD = 3;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n% 3. Pc = [0.5  0.5  0], D = 3, H = 1.\r\n% The host never hides the car behind door 3. Hence, the player can only \r\n% win by switching to door 2.\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 4. Pc = [0.5  0.5  0], D = 3, H = 2.\r\n% The host never hides the car behind door 3. Hence, the player can only \r\n% win by switching to door 1.\r\nD = 3;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 5. Pc = [0.5  0  0.5], D = 3, H = 1.  \r\n% The host never hides the car behind door 2. Hence, the player can\r\n% never win by switching to door 2.\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1C: Hosts hides the car behind any of the three doors with equal probability.\r\n%   Pc = [1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n% The host does not manipulate the game. Hence, it is a fair game.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1D: Host hides the car with a pre-determined probability.\r\n%   Pc = [0.26  0.43  0.31]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6232;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.5439;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.4189;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3768;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.5811;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.4561;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 2: Monty Hall opens the door based on the standard assumptions of \r\n%  Marilyn vos Savant.\r\n%      Ph = [ 0    1   0\r\n%             1    0   0\r\n%            0.5  0.5  0]\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2A: Host always hides the car behind one particular door.\r\n%   Pc = [1  0  0] or [0  1  0]  or  [0  0  1]\r\n%__________________________________________________________________________\r\n \r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  0  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  0  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  1  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  1  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0  1];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0  1];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2B: Host hides the car behind two particular doors with equal \r\n% probability.\r\n% Pc = [0  0.5  0.5]  or [0.5  0.5  0]  or  [0.5  0  0.5]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2C: Hosts hides the car behind any of the three doors with equal \r\n% probability.\r\n%   Pc = [1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2D: Host hides the car with a pre-determined probability.\r\n%   Pc = [0.26  0.43  0.31]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3735;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.2650;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.7350;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6265;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\n%% CASE 3: Host opens the door based on a completely randomized approach.\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3A: Host always hides the car behind one particular door.\r\n%   Pc = [1  0  0] or [0  1  0]  or  [0  0  1]\r\n%__________________________________________________________________________\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  0  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  0  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  1  0];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0  1];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0  1];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3B: Host hides the car behind two particular doors with equal probability.\r\n% Pc = [0  0.5  0.5]  or [0.5  0.5  0]  or  [0.5  0  0.5]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0.6136;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3C: Hosts hides the car behind any of the three doors with equal \r\n% probability.\r\n%   Pc = [1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.6136;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.4745;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3D: Host hides the car with a pre-determined probability.\r\n%   Pc = [0.26  0.43  0.31]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.5690;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6274;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3123;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3726;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6877;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.4310;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2018-08-10T13:05:15.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-09T10:04:50.000Z","updated_at":"2018-08-10T13:05:15.000Z","published_at":"2018-08-10T13:00:57.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game of Let's Make A Deal proceeds as follows;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe player is given the choice of three doors: Behind one door is a car; behind the others, goats. The player picks a door, say No. 1, and the host, either immediately opens that door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers the player the choice, \\\"Do you want to pick door No. 2?\\\"\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game play is guided by the following set of rules:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open any of the doors including that picked by the player.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open a door to reveal either a goat or the car.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn order to manipulate the game play, the host does not always (uniformly) randomly hide the car behind the doors. Instead, based on previous games statistics, the host determines the probability Pc.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ Pc = [pc_1  pc_2  pc_3]   pc_i is the probability of the host placing car behind door i.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   Ph = [ ph_11   ph_12   ph_13\\n          ph_21   ph_22   ph_23\\n          ph_31   ph_32   ph_33 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the above matrix, ph_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInterpreting the matrix in terms of the assumptions implies that all elements ph_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ ph_i1 + ph_i2 + ph_i3 = 1    i.e. the host must always open a door to reveal the car or a goat.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn the game show, the host places the car behind a door with probability Pc in order to manipulate the outcome. The player then choose door D and the host, Monty Hall, opens door H using the conditional probability Ph.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the door H opened by the host has a goat behind it, what is the probability\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePws\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that the player will win the car by switching the initial door choice to the door remaining?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eIf switching option is not available (i.e. host always opens a door with the car behind it) return NaN.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44723,"title":"Let's Make A Deal: The Player's Dilemma ","description":"Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\r\n\r\nWe will now play the game using the standard assumptions:\r\n\r\n# The host must always open a door that was not picked by the contestant.\r\n# The host must always open a door to reveal a goat and never the car.\r\n# The host must always offer the chance to switch between the originally chosen door and the remaining closed door.\r\n\r\nIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door 1, then the host's choice of which goat-hiding door to open is represented by a conditional probability matrix Ph \r\n     \r\n   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\r\n\r\nIn the above matrix, p_ij represents the probability that the host opens door j\r\ngiven that the car is behind door i. \r\n\r\nInterpreting the matrix in terms of the standard assumptions implies \r\n\r\n p_i1 = 0            i.e.  the host cannot open door 1, the player's initial choice.  \r\n  \r\n p_i2 + pi3 = 1      i.e. the host must always open a door, 2 or 3, not initially picked by the player.\r\n\r\n p_ii = 0            i.e. the host must always open a door to reveal a goat and never the car.\r\n\r\nOn the game show, you have initially chosen door 1 and the host, Monty Hall, opened door H (2 or 3), using the conditional probability Ph. \r\n\r\nWhat is the probability *Pws* that you will win the car by switching your choice to the door remaining? ","description_html":"\u003cp\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\u003c/p\u003e\u003cp\u003eWe will now play the game using the standard assumptions:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe host must always open a door that was not picked by the contestant.\u003c/li\u003e\u003cli\u003eThe host must always open a door to reveal a goat and never the car.\u003c/li\u003e\u003cli\u003eThe host must always offer the chance to switch between the originally chosen door and the remaining closed door.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door 1, then the host's choice of which goat-hiding door to open is represented by a conditional probability matrix Ph\u003c/p\u003e\u003cpre\u003e   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\u003c/pre\u003e\u003cp\u003eIn the above matrix, p_ij represents the probability that the host opens door j\r\ngiven that the car is behind door i.\u003c/p\u003e\u003cp\u003eInterpreting the matrix in terms of the standard assumptions implies\u003c/p\u003e\u003cpre\u003e p_i1 = 0            i.e.  the host cannot open door 1, the player's initial choice.  \u003c/pre\u003e\u003cpre\u003e p_i2 + pi3 = 1      i.e. the host must always open a door, 2 or 3, not initially picked by the player.\u003c/pre\u003e\u003cpre\u003e p_ii = 0            i.e. the host must always open a door to reveal a goat and never the car.\u003c/pre\u003e\u003cp\u003eOn the game show, you have initially chosen door 1 and the host, Monty Hall, opened door H (2 or 3), using the conditional probability Ph.\u003c/p\u003e\u003cp\u003eWhat is the probability \u003cb\u003ePws\u003c/b\u003e that you will win the car by switching your choice to the door remaining?\u003c/p\u003e","function_template":"function Psw = MontyHall(H, Ph)\r\n  \r\nend","test_suite":"%%\r\nH = 2;\r\nPh = [0 0.55 0.45;0 0 1;0 1 0];\r\nPws_correct = 0.6452;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.55 0.45;0 0 1;0 1 0];\r\nPws_correct = 0.6897;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.25 0.75;0 0 1;0 1 0];\r\nPws_correct = 0.8;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.25 0.75;0 0 1;0 1 0];\r\nPws_correct = 0.5714;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.5 0.5;0 0 1;0 1 0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.5 0.5;0 0 1;0 1 0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.80 0.20;0 0 1;0 1 0];\r\nPws_correct = 0.5556;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.80 0.20;0 0 1;0 1 0];\r\nPws_correct = 0.8333;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.60 0.40;0 0 1;0 1 0];\r\nPws_correct = 0.6250;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.60 0.40;0 0 1;0 1 0];\r\nPws_correct = 0.7143;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.23 0.77;0 0 1;0 1 0];\r\nPws_correct = 0.8130;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.23 0.77;0 0 1;0 1 0];\r\nPws_correct = 0.5650;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.27 0.73;0 0 1;0 1 0];\r\nPws_correct = 0.7874;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.27 0.73;0 0 1;0 1 0];\r\nPws_correct = 0.5780;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.90 0.10;0 0 1;0 1 0];\r\nPws_correct = 0.5263;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.90 0.10;0 0 1;0 1 0];\r\nPws_correct = 0.9091;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 1 0;0 0 1;0 1 0];\r\nPws_correct = 0.5;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 1 0;0 0 1;0 1 0];\r\nPws_correct = 1;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.37 0.63;0 0 1;0 1 0];\r\nPws_correct = 0.7299;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.37 0.63;0 0 1;0 1 0];\r\nPws_correct = 0.6135;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.01 0.99;0 0 1;0 1 0];\r\nPws_correct = 0.9901;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.01 0.99;0 0 1;0 1 0];\r\nPws_correct = 0.5025;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2018-09-18T18:38:37.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-08T07:42:36.000Z","updated_at":"2018-09-18T18:38:37.000Z","published_at":"2018-08-08T08:37:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, \\\"Do you want to pick door No. 2?\\\" Is it to your advantage to switch your choice?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe will now play the game using the standard assumptions:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host must always open a door that was not picked by the contestant.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host must always open a door to reveal a goat and never the car.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host must always offer the chance to switch between the originally chosen door and the remaining closed door.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door 1, then the host's choice of which goat-hiding door to open is represented by a conditional probability matrix Ph\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   Ph = [ p_11   p_12   p_13\\n          p_21   p_22   p_23\\n          p_31   p_32   p_33 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInterpreting the matrix in terms of the standard assumptions implies\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ p_i1 = 0            i.e.  the host cannot open door 1, the player's initial choice.  \\n\\n p_i2 + pi3 = 1      i.e. the host must always open a door, 2 or 3, not initially picked by the player.\\n\\n p_ii = 0            i.e. the host must always open a door to reveal a goat and never the car.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn the game show, you have initially chosen door 1 and the host, Monty Hall, opened door H (2 or 3), using the conditional probability Ph.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the probability\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePws\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that you will win the car by switching your choice to the door remaining?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":46053,"title":"Construct finite difference approximations of derivatives","description":"In solving a differential equation with a finite-difference method, one computes derivatives with various combinations of the function's values at chosen grid points. For example, the forward difference formula for the first derivative is\r\n\r\n f' = (f_{j+1} - f_j)/h\r\n\r\nwhere j is the grid index and h is the spacing between points. The systematic approach for deriving such formulas is to \u003chttp://www2.math.umd.edu/~dlevy/classes/amsc466/lecture-notes/differentiation-chap.pdf use Taylor series\u003e. In the example above, one can write\r\n\r\n f_{j+1} = f_j + h f' + h^2 f''/2 + h^3 f'''/6 + ...\r\n\r\nThen solving for f' and neglecting terms of order h^2 and higher gives\r\n\r\n f' = (f_{j+1} - f_j)/h - h f''/2\r\n\r\nBecause the exponent on h in the last term is 1, the method is called a first order method.\r\n\r\nWrite a function that takes the order |n| of the derivative and a vector |terms| indicating the terms to use (based on the number of grid cells away from the point in question) and produces a vector of coefficients, the order of the error term, and the numerical coefficient of the error term. In the above example, |n = 1| and |terms = [1 0]|, and \r\n\r\n coeffs   = [1 -1]\r\n errOrder = 1\r\n errCoeff = -0.5; \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: 435.55px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 217.775px; transform-origin: 407px 217.775px; vertical-align: baseline; \"\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: 380.183px 7.91667px; transform-origin: 380.183px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn solving a differential equation with a finite-difference method, one computes derivatives with various combinations of the function's values at chosen grid points. For example, the forward difference formula for the first derivative is\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 37.5833px; 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 18.7917px; text-align: left; transform-origin: 384px 18.7917px; 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: 13.5917px 7.91667px; transform-origin: 13.5917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e       \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-15px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKkAAABLCAYAAAALWaemAAAEa0lEQVR4nO2d3ZHiMBCEOwdnQAJOYCNwBGRABtQlsO/3RAzUReAcuBCIgRS4B9GnwYvBsq0f2/1VqbZg+RHtsTQzHsmAEEIIIYQQQggRiQrA1+OvGI50S0AFoAVwBXAEcAdwytqjZSDdElEBuMEJXQGo4cS+w40O4jXSLSEtnLDN4/EOXvxdrk4tAOmWiC84oW+5O7IwpFtCzpAfNQbplogdvA+1z9yXJSHdEnKAF1s+1HCkW2QauFTJEcAFXuyjaRL+J9ItIXt4USn0Bc9ii59ItwwwOuVoIIYh3RJi/Solnocj3RLCFMoNy77efJyhhbAW3RbBFd6vyk0Fl28c05f7xBaajC9Jt1VTwR+k74HvaeAO6NDXD+3HAT5aHnPgp46ih8D+lqDbJmjgxW4+vLb7nvOH14WUrFVwaRsGI6WPTjF1Ex1sGmVuv4oGN/Qg2veUbqQxdRMdWL1zjfDZazbSmLqJDjcML474ghtBTnAH6dMIsmYjjambMNjC3KHFEQwYWNz7jrUaaWzdRmHTIhc4x7cvebt7dGQJzvEe4cURNKIhv2+tRhpbt2BodDwD2MG+M4JXIdoYnZmZb4QbBAOGbrrGBhJDWl8aZglGOqdus8C8Xf14TCPsS/zy9SGjRy7Y1xDhGDDUneeZPrKNWh1e/K/7frIEI51Tt8lw1OyOin25PxbAliwwYV9vCCsrC/Gr1jjdp9AtCF72GnrG0KhLHEWPcNMUReIoF3K9OtSvWoOR5tAt+INDhugzyhHXYn9LAyc4/ewQQv2qMUbKqzIl6JhLt8GcEF50EMXnmIEK3o/aw7kvF4RPPaF+VYiRMijtVrrn1DOXbm+p4R17W+FiHf6+DjYoO+1EIxh74JnnCxnhdhO+rxRy6PaWFv5s4dl8Nc+/q15hdDsWFmNMbbHW1nAajpJCWTHRdLMV16mCIOv/TGlzikEdGoyf6rZIEt3oj6ascKnhR+wpbc6TqobzyVs4TZY8backiW6quBZFM6biWoikWN9Q26aIIrGFEil3oUgd3f8C8EctW5u0BDpXxXXq6P7vTN+nNq79/nyI+mHFderEfInRvSgQu42fktaiSGzFtXKCokhYca1tpUWxMGgquVBE+Kr/Tc52nOq1Q1p57OE3CNusS8ZqFU31ZcMKtU0cpz2eR0wWlegqU9mEbMqwaOyKzwr+bmYqKCmbMZsyLBZO7bxbGe8HqVrJstncJmFc7nHGBs7KlcDsi2Y8USwcRbvLibl0R7elEVmxm9Yy4K3wnJa6YYNpKVEOvBp4fzzmEo1vPBuwCtVFNpgfPcMbKEdNG/WrMEhkwS7p4a0SbUmijfp1tVBkwVannfFzSm/x7AoIkRy7xPxV+skasBBZ4BLzV0UldtmN/FGRBRsUvRopcy2cFOI/n24yS390Cdu/i5VibzL7iu5Uf4IWI4rEvCvNs/7oDs5QV1/CJ8ri024y1h/lrYuESAp3V+7zN2s4w2yhSjYhhBBCCCGEEEIIIYQQQsTkHzIr3fuGMmo5AAAAAElFTkSuQmCC\" alt=\"f' = (f_{j+1} - f_j})/h\" style=\"width: 84.5px; height: 37.5px;\" width=\"84.5\" height=\"37.5\"\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: 365.642px 7.91667px; transform-origin: 365.642px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ewhere j is the grid index and h is the spacing between points. The systematic approach for deriving such formulas is to\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://www2.math.umd.edu/~dlevy/classes/amsc466/lecture-notes/differentiation-chap.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003euse Taylor series\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: 116.3px 7.91667px; transform-origin: 116.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. In the example above, one can write\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 36.0833px; 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 18.0417px; text-align: left; transform-origin: 384px 18.0417px; 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: 13.5917px 7.91667px; transform-origin: 13.5917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e       \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-15px\"\u003e\u003cimg src=\"data:image/png;base64,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\" alt=\"f_{j+1} = f_j + hf' + h^2 f''/2 + h^3 f'''/6 + ...\" style=\"width: 226.5px; height: 36px;\" width=\"226.5\" height=\"36\"\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: 51.7333px 7.91667px; transform-origin: 51.7333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThen solving for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAkCAYAAAAD3IPhAAABNklEQVRYhe2XXbGEMAxGj4c6wAAGVsEqwEEdrINrAQ1IwAMWqgEL3IcmU3Zm2W2ZBnjgPPET2kyS5gtwc3MDQAM8Mu0aKydaIAAj0AMz4L/YLsBk4chDFh/k3sv9DLgP9n/yvq/tiJNNZ1LYn7LZuPFNkPdtbWdevEflF5qiXPsiZlm8y7TXFFaPSicLL+SfjAmjqAziSMi0d2L/qah34Yl18iKlKKye+S+bdcSTVA3dtCelaFg9/1U7Jo1OT9FCXsc1Retlq7EditbLVmM7jIaUoqoFuQdt94tcn4oKXdWesZcRwxGgFI1K9RGgFFXdEnE0Q1W3RBzNUBnIFUdTJi7SX3QEMBmOStFh6vAj7Yj1sf7dUHE8XKXXI4IjHelTektLVOZATE84yxGlIabJc4GecnMp/gGjCl04ApTc8QAAAABJRU5ErkJggg==\" alt=\"f'\" style=\"width: 17.5px; height: 18px;\" width=\"17.5\" height=\"18\"\u003e\u003c/span\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: 94.9083px 7.91667px; transform-origin: 94.9083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and neglecting terms of order \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAnCAYAAAD3h5P5AAABYklEQVRYhe2WYc2DMBCGHw84wAAGUICCOagDHGABDZ8EPMzCNGCB/ehdOFgZa8uWfEmfpFlGcz16974tUChcQwv0MtpfJa2AO/CQ30XGn8x9lQlw5n8DzPIC/TcT1/jd7nGSPDQXtXh9Mt8EnrcpyVU0E3ml0+RDbGCFF4sKJ0W5vcSGqnLKKMEP0hT7IGHXNljtEouT+CQa1pLfEmLvZPhbbbLwXul79LDJOt1UbDE7qPAOCSWOqp5azAqmZT06Z7Yq1h3bU05xRFhV/bkAnTwb8ALqzYtNJsbaMjQ+bp36c8bvaJShC6gLNHnDepOFRlTJJ7O4Y3szWRcke/iIyiw+4ndpS2Zd0L1EZ9Kx7dVeudpbbcmlDLwva0hsl6FimnlVqO13yFJZ1Gz7vSf11PuIG8e9hrXf1mKXVeDsCtV+O5nfOyELXTx0hdp+Txyf4UmcXaE125PtZ9/khUKh8L94Ap3giAaNUZJzAAAAAElFTkSuQmCC\" alt=\"h^2\" style=\"width: 15.5px; height: 19.5px;\" width=\"15.5\" height=\"19.5\"\u003e\u003c/span\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: 53.3px 7.91667px; transform-origin: 53.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and higher gives\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 38.5833px; 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 19.2917px; text-align: left; transform-origin: 384px 19.2917px; 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: 13.5917px 7.91667px; transform-origin: 13.5917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e       \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-15px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAABNCAYAAABAKBoaAAAHIklEQVR4nO2dzXHjOBCFXw687VEJKAFHoAiUgY97U20Cus9JMag2AuWgDUExKAXvAX5Gi+YfKIL44fuqUFMzI1tgE2g0uhsNQAghhBBCCCGEEEIIIcQqNAA+vv8U05HcRFU0AG4AHgBOAL4AXJL2qAwkN1EdDYAn3KBuAOzhBvYX3KonupHcRJXc4Abx4fvvO/iBvkvVqQKQ3ER1fMAN6mfqjhSG5Caq5Arte+cguYnq2MHveY+J+1ISkpuokk/4ga0973QkN1ENB7jw2AnAHX5gn0zTIP/NluSmCMmGOMIPYA7qO14HtvhNzXI7wflCqOieUILV5qCXnKucmEatcrPPdUvcF5EAuw+WiTidWuVmHaWfifsiEsCwWenm4WmBFkItcmtzhFcI+8R9EQl4wO+DU9PA72FD+XqzhSYW5SS3JaGiu6MuRScm0MBPiPPEnznATZ6pn5/aj094Z9acSfaudRBiHucitxg8oUSrzXKAH9iHkc+2f+Y68rmQY8AN3N6VDq3cV92YckuJPZSlRKsNYkNnS5uHnNxTJ4z9mdwVQky5pcQ6SvlcDZxVI8thA/CU3iPC765ZIcSUW0r4XJT/Hu4ZL/C+hdqiKsIQovU/4BNXbhhfGWtWCDHllhKbV0FlwPdnow9SCBUyZ79IZxoLgQxRq0KILbdU2ISkA1xf7cS3FkKuz7AKNhR2hxNMn4bcwQkyZ8cRsRp/au49B82U56tVIcSWWyrO8Errht95GbSKYrybw/d3co6d0K906L8ZypFgKbvFFRcnOH85B0Pfl9EpU0LKJwdAyAvmy2iH6KyTbUrrC72VoBCWlFtO2INaV7yOb2sVLZ2m3ZbNA8OyomLqW5TZ1ygJYxQStREnfF8SCz8fsiqmgn0NGaR0OrW1M0OGtlFWnx3/16fdS1AIS8otF2xexRO/LZ9YadpdoVhO+C758vND44MKe/F8D1oD7dW+L7bOHPCcBzNhX7te/hAh++AatwxryC0FdhvUNZHoP1j6GWgNWCWzQ7/ivGB8TD0Q/n4mMWa6tKFQc7QOTnAvmi+TGj/E/AvdB9egEFLILQWcaH1+kRg5CJwvISnjDwyPDSrsxa0D63GdauZdkc9AtrS9xw28XySE0H3wHIUwxSRci1RySwEXvy7fV1dJeask58Jt1FRFyX4MjadPRLIOqDFDtFeue8QGft97hPfmhr7Q0H1wiEKgw7ZdgSilPFPJbW3GjjvTKuJ2gVZTzO/s4oRx5XEL+H2j7OGdXvYkm3WG9Q2GA/I2CTnh5k4yOp1CVu7dG9+XCynktjbWYdj1jDb/4Ay3WM6xDni2hYlaViGMOZsBJ8Oh/6cFt5iP4wa/CrCzD/PvQ1qRXva5WGG902LV8qMpn7PZmyMlyG3suDMn7xPD+QFj0Mq6wfskvsy/3TA84ceSwBpE8t9ZjbmWg9DuV99pSw48ysEmjeTqJc8JyW2cmElOi2M9rmu9yD1eNeXctqQC28O9uBucTEo2/ddEchvG+g9yrw0BoN5KOKIsrE9rbsvRMrE5DzmG6F+YUwlHiBgwOvFOy9E6YSbhmhb4bOxeXhVjRErOeH8LmeOFMUXVkrDhkDWFuXaU4R8A/6ola1uuJ8D5VUTlpVTaa+0ow38LfZ/avPZn/BVVSXEWOMMhaycZ5RhlEPXzgflWzl8zvm8sCSordGON2Bp/MN/K+XvG9805EpAM3VgjRFwY0s85zf8HhkOK0F5CFIYN6RdhgYcexxRpYDUmWXFlMaekQFLY2S2HhHLliNdTd8UMKvEDQ/ol1Bv9OZWm7ULe8CSq3lNcbI3MpbIJ59SiXI0jXi0Bej+LiI1uGF0nFpcDvOPPttCsxx3cXNqZv38h0+xEWzm5+W5P6DBT7ugi0rjYMwZdLaQ0GRU3a09yu5Blngy3Bw+4B4x2qYNYlFovWM0BOvwu8JOe1aKsxTB10bTbgxKKxPyUPLtCq00ptC8iFctxR/82jBZ0iDOXN0az0liOh6xE4XBAtkug0wGmQTcPXuo6ZHXZ7UTWK73YBjQ7bVi4wWso8gmFIudwwPgktzkEUggiOXaFAnyZsjNelYWK2sTBKgTl6Yjk0El1hVcGtAZs9EGrVxzGLjkWYjVsDvwJTjnY8JWNPmj1igPzdJa++VmIYOwp1Ct+bwts7UGxPIwyyDoQWWDL4neFHK2yEMtDC0zWl8gCmxjTjiLI+x0X+meUqyOywDoMuyyAVEVxtwDvSlTkRmSDrcHXZbLSf1DEkdqC4M3XUgYiK5h41Hfcub1duCDTAzQFIWUgsmXouLP1H+zglIKORb/PFGUgpStWZ6yGv/Uf3KEowxJcML79OkKKVyTgCH/fRBd7OCVwg7zgS8Dw7hlO2XY1fkYhSCEqxuZ6jDUdPxeiYg4Iux1M1pgQQgghhBBCCCGEEEIIIYQQQgghhBBCWP4HvMwy/Pk8LhMAAAAASUVORK5CYII=\" alt=\"f' = (f_{j+1} - f_j)/h - hf''/2\" style=\"width: 130px; height: 38.5px;\" width=\"130\" height=\"38.5\"\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: 81.3px 7.91667px; transform-origin: 81.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBecause the exponent on \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: \u0026quot;STIXGeneral\u0026quot;, \u0026quot;STIXGeneral-webfont\u0026quot;, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);\"\u003eh\u003c/span\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: 191.35px 7.91667px; transform-origin: 191.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e in the last term is 1, the method is called a first order method.\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: 110.717px 7.91667px; transform-origin: 110.717px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function that takes the order\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: \u0026quot;STIXGeneral\u0026quot;, \u0026quot;STIXGeneral-webfont\u0026quot;, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);\"\u003en\u003c/span\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: 91.7917px 7.91667px; transform-origin: 91.7917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e of the derivative and a vector\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 19.25px 7.91667px; transform-origin: 19.25px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eterms\u003c/span\u003e\u003c/span\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: 130.3px 7.91667px; transform-origin: 130.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e indicating the terms to use (based on the number of grid cells away from the point in question) and produces a vector of coefficients, the order of the error term, and the numerical coefficient of the error term. In the above example,\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 19.25px 7.91667px; transform-origin: 19.25px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003en = 1\u003c/span\u003e\u003c/span\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: 13.6167px 7.91667px; transform-origin: 13.6167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eterms = [1 0]\u003c/span\u003e\u003c/span\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: 15.5583px 7.91667px; transform-origin: 15.5583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 61.3px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 30.65px; transform-origin: 404px 30.65px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; 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; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 69.3px 7.91667px; transform-origin: 69.3px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e coeffs   = [1 -1]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; 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; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e errOrder = 1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; 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; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 65.45px 7.91667px; transform-origin: 65.45px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e errCoeff = -0.5;\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [coeff,errOrder,errCoeff] = FDderiv(n,terms)\r\n%  n        = order of the derivative sought\r\n%  terms    = grid indices of terms to include\r\n%  coeff    = coefficients of the terms in the formula \r\n%  errOrder = exponent of h in the first non-zero higher-order term\r\n%  errCoeff = coefficient of the first non-zero higher-order term\r\n\r\n  coeff    = ...\r\n  errOrder = ...\r\n  errCoeff = ...\r\nend","test_suite":"%%\r\n%  First-order forward difference for the first derivative\r\nn = 1;\r\nterms = [1 0];\r\ncoeff_correct = [1 -1];\r\nerrOrder_correct = 1;\r\nerrCoeff_correct = -1/2;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  First-order backward difference for the first derivative\r\nn = 1;\r\nterms = [0 -1];\r\ncoeff_correct = [1 -1];\r\nerrOrder_correct = 1;\r\nerrCoeff_correct = 1/2;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the first derivative\r\nn = 1;\r\nterms = [1 -1];\r\ncoeff_correct = [1/2 -1/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/6;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order forward difference for the first derivative\r\nn = 1;\r\nterms = [2 1 0];\r\ncoeff_correct = [-1/2 2 -3/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = 1/3;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order backward difference for the first derivative\r\nn = 1;\r\nterms = [0 -1 -2];\r\ncoeff_correct = [3/2 -2 1/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = 1/3;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Fourth-order centered difference for the first derivative\r\nn = 1;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [-1 8 0 -8 1]/12\r\nerrOrder_correct = 4;\r\nerrCoeff_correct = 1/30;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the second derivative\r\nn = 2;\r\nterms = [1 0 -1];\r\ncoeff_correct = [1 -2 1];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/12;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Fourth-order centered difference for the second derivative\r\nn = 2;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [-1 16 -30 16 -1]/12;\r\nerrOrder_correct = 4;\r\nerrCoeff_correct = 1/90;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the third derivative\r\nn = 3;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [1/2 -1 0 1 -1/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/4;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the fourth derivative\r\nn = 4;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [1 -4 6 -4 1];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/6;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":46909,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-07-22T03:37:57.000Z","updated_at":"2020-11-15T13:41:30.000Z","published_at":"2020-07-22T05:20:57.000Z","restored_at":null,"restored_by":null,"spam":false,"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\u003eIn solving a differential equation with a finite-difference method, one computes derivatives with various combinations of the function's values at chosen grid points. For example, the forward difference formula for the first derivative is\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f' = (f_{j+1} - f_j})/h\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ef\\\\prime=\\\\frac{f_{j+1}-f_j}{h}\u003c/w:t\u003e\u003c/w:r\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\u003ewhere j is the grid index and h is the spacing between points. The systematic approach for deriving such formulas is to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www2.math.umd.edu/~dlevy/classes/amsc466/lecture-notes/differentiation-chap.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003euse Taylor series\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. In the example above, one can write\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f_{j+1} = f_j + hf' + h^2 f''/2 + h^3 f'''/6 + ...\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e f_{j+1} = f_j + h f\\\\prime +  \\\\frac{h^2}{2}f\\\\prime\\\\prime +  \\\\frac{h^3}{6}f\\\\prime\\\\prime\\\\prime + \\\\ldots\u003c/w:t\u003e\u003c/w:r\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\u003eThen solving for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f'\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$f\\\\prime$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and neglecting terms of order \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"h^2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$h^2$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and higher gives\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f' = (f_{j+1} - f_j)/h - hf''/2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ef\\\\prime = \\\\frac{f_{j+1} - f_j}{h} - \\\\frac{h}{2}f\\\\prime\\\\prime\u003c/w:t\u003e\u003c/w:r\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\u003eBecause the exponent on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"h\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003eh\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e in the last term is 1, the method is called a first order method.\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\u003eWrite a function that takes the order\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"n\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003en\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e of the derivative and a vector\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eterms\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e indicating the terms to use (based on the number of grid cells away from the point in question) and produces a vector of coefficients, the order of the error term, and the numerical coefficient of the error term. In the above example,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en = 1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eterms = [1 0]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ coeffs   = [1 -1]\\n errOrder = 1\\n errCoeff = -0.5;]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":42685,"title":"Cody meets Xiangqi: foresee the unseen (Part 2)","description":"This is the second part of the Xiangqi series. The first part in this series is: \u003chttp://www.mathworks.com/matlabcentral/cody/problems/42674-cody-meets-xiangqi-foresee-the-unseen Cody meets Xiangqi: foresee the unseen (Part 1)\u003e\r\n\r\nBeing increasingly interested in \u003chttps://en.wikipedia.org/wiki/Xiangqi Xiangqi\u003e (a.k.a., *Chinese Chess*), Mr. Cody has designed a new Xiangqi match for \u003chttps://en.wikipedia.org/wiki/Xiang_Yu Xiang Yu\u003e and \u003chttps://de.wikipedia.org/wiki/Han_Gaozu Liu Bang\u003e by taking into account the likelihood of tie games. The new rule is described as follows:\r\n\r\nOnce\r\n\r\n   1) Xiang Yu wins Na games consecutively,\r\n   2) Liu Bang wins Nb games consecutively, \r\n   3) No ties occur consecutively, \r\n\r\n*whichever comes first*, Mr. Cody announces the outcome accordingly as follows:\r\n\r\n   1) Xiang Yu is the final winner,\r\n   2) Liu Bang is the final winner, \r\n   3) They end up with a final draw.\r\n\r\nAgain, Cody asks us --- active Cody players --- to foresee the outcome of this unseen match using Monte Carlo simulations. Our task is to write the following function\r\n\r\n                         [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)\r\n\r\nwhere \r\n\r\n* a: the probability that Xiang Yu wins one individual game\r\n* b: the probability that Liu Bang wins one individual game\r\n* Na: # of consecutive wins required for Xiang Yu to become the final winner\r\n* Nb: # of consecutive wins required for Liu Bang to become the final winner\r\n* Nc: # of consecutive ties required to result in a final draw\r\n* Pa: the probability that Xiang Yu wins the match\r\n* Pb: the probability that Liu Bang wins the match\r\n* Pc: the probability of a final draw\r\n\r\nThe main focus of this problem is on *Monte Carlo simulations*, rather than analytical approaches. Your provided solution Xiangqi2.m will be checked by a P-file EvaluateSolution.p, which mainly does 3 things as follows:\r\n\r\n1) Call your function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc) and then Check if the result P = [Pa, Pb, Pc] is within tolerance of its expected value Q. That is, If norm(P - Q) \u003c tol holds, it means that your solution is accurate enough. If this does not hold, your solution will be rejected. \r\n\r\n2) Check if your solution is based on *pure Monte Carlo simulations* or *analytical approaches*. If it is based on analytical approaches (i.e., using analytical expressions to directly compute the probabilities), then your solution will be rejected. EvaluateSolution.p accomplishes this goal by exploiting a combination of distinct features possessed by analytical solutions, but are generally not shared by Monte Carlo simulations. \r\n\r\n3) If your solution passes the above two checks, then the score of your solution will be determined based on the speed of your code. The faster your solution is, the smaller score you get. \r\n\r\nIf you have any concerns or suggestions on this problem, please feel free to leave me a comment. Thanks. \r\n\r\n ","description_html":"\u003cp\u003eThis is the second part of the Xiangqi series. The first part in this series is: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/42674-cody-meets-xiangqi-foresee-the-unseen\"\u003eCody meets Xiangqi: foresee the unseen (Part 1)\u003c/a\u003e\u003c/p\u003e\u003cp\u003eBeing increasingly interested in \u003ca href = \"https://en.wikipedia.org/wiki/Xiangqi\"\u003eXiangqi\u003c/a\u003e (a.k.a., \u003cb\u003eChinese Chess\u003c/b\u003e), Mr. Cody has designed a new Xiangqi match for \u003ca href = \"https://en.wikipedia.org/wiki/Xiang_Yu\"\u003eXiang Yu\u003c/a\u003e and \u003ca href = \"https://de.wikipedia.org/wiki/Han_Gaozu\"\u003eLiu Bang\u003c/a\u003e by taking into account the likelihood of tie games. The new rule is described as follows:\u003c/p\u003e\u003cp\u003eOnce\u003c/p\u003e\u003cpre\u003e   1) Xiang Yu wins Na games consecutively,\r\n   2) Liu Bang wins Nb games consecutively, \r\n   3) No ties occur consecutively, \u003c/pre\u003e\u003cp\u003e\u003cb\u003ewhichever comes first\u003c/b\u003e, Mr. Cody announces the outcome accordingly as follows:\u003c/p\u003e\u003cpre\u003e   1) Xiang Yu is the final winner,\r\n   2) Liu Bang is the final winner, \r\n   3) They end up with a final draw.\u003c/pre\u003e\u003cp\u003eAgain, Cody asks us --- active Cody players --- to foresee the outcome of this unseen match using Monte Carlo simulations. Our task is to write the following function\u003c/p\u003e\u003cpre\u003e                         [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)\u003c/pre\u003e\u003cp\u003ewhere\u003c/p\u003e\u003cul\u003e\u003cli\u003ea: the probability that Xiang Yu wins one individual game\u003c/li\u003e\u003cli\u003eb: the probability that Liu Bang wins one individual game\u003c/li\u003e\u003cli\u003eNa: # of consecutive wins required for Xiang Yu to become the final winner\u003c/li\u003e\u003cli\u003eNb: # of consecutive wins required for Liu Bang to become the final winner\u003c/li\u003e\u003cli\u003eNc: # of consecutive ties required to result in a final draw\u003c/li\u003e\u003cli\u003ePa: the probability that Xiang Yu wins the match\u003c/li\u003e\u003cli\u003ePb: the probability that Liu Bang wins the match\u003c/li\u003e\u003cli\u003ePc: the probability of a final draw\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe main focus of this problem is on \u003cb\u003eMonte Carlo simulations\u003c/b\u003e, rather than analytical approaches. Your provided solution Xiangqi2.m will be checked by a P-file EvaluateSolution.p, which mainly does 3 things as follows:\u003c/p\u003e\u003cp\u003e1) Call your function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc) and then Check if the result P = [Pa, Pb, Pc] is within tolerance of its expected value Q. That is, If norm(P - Q) \u0026lt; tol holds, it means that your solution is accurate enough. If this does not hold, your solution will be rejected.\u003c/p\u003e\u003cp\u003e2) Check if your solution is based on \u003cb\u003epure Monte Carlo simulations\u003c/b\u003e or \u003cb\u003eanalytical approaches\u003c/b\u003e. If it is based on analytical approaches (i.e., using analytical expressions to directly compute the probabilities), then your solution will be rejected. EvaluateSolution.p accomplishes this goal by exploiting a combination of distinct features possessed by analytical solutions, but are generally not shared by Monte Carlo simulations.\u003c/p\u003e\u003cp\u003e3) If your solution passes the above two checks, then the score of your solution will be determined based on the speed of your code. The faster your solution is, the smaller score you get.\u003c/p\u003e\u003cp\u003eIf you have any concerns or suggestions on this problem, please feel free to leave me a comment. Thanks.\u003c/p\u003e","function_template":"function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)\r\n% a: the probability that Xiang Yu wins one individual game\r\n% b: the probability that Liu Bang wins one individual game\r\n% Na: # of consecutive wins required for Xiang Yu to become the final winner\r\n% Nb: # of consecutive wins required for Liu Bang to become the final winner\r\n% Nc: # of consecutive ties required to result in a final draw\r\n% Pa: the probability that Xiang Yu wins the match\r\n% Pb: the probability that Liu Bang wins the match\r\n% Pc: the probability of a final draw\r\n    Pa = ;\r\n    Pb = ;\r\n    Pc = ;\r\nend","test_suite":"%%\r\n% Thanks to Alfonso Nieto-Castanon\r\nurlwrite('https://sites.google.com/a/alfnie.com/alfnie/software/SetSolutionScore.p?attredirects=0\u0026amp;d=1','SetSolutionScore.p');\r\nrehash path;\r\n\r\n%%\r\nfh = fopen('EvaluateSolution.p','wb');\r\nfwrite(fh, hex2dec(reshape('7630312E30307630302E3030000C701C97F61FB1000002D5000001CF000004E73DD68930A391F7C60A534B45A03EAF72EB08941F39EE01BF25BAE04DF43CF342FC1A763DF6B8F26BBED0BD4F2ABBB5927B1EEBAE8795E487F6E4EF2737CBB6646BC4DF145E14664B3A4DACCD7CB01C4EC2328AD76F196231D2CA02CDC2B15466FBA5BDDF9E6C0E5DE12CF07B2AAA50BD2F04FFB92E9BECBE232E01031340A8EDCA5C10DAC01BBE43685ED0AB79D9C6F2A090FB4E0E75CAA236D3D73AD659E0705C42792BC77D85951B2FC49DE856FB97AFD74C1DB66C874EDF5517BCFA14C6706CA5E61DE60F2771B64F6D634B858A1A30AD7C49778534CCCE7551C637DC53846B02140046F729C5EB2DC9C65F16C2FC4F34EA9F03A2056B8218ACAB9A9A8BC5DC8F2F3312740F86626ABA38E00903CE76846DEE175BEE04DC0815E050E4CD95BA8E5BD27A0B57F2413B71A0E4837FB0F86328AA82732C584F1F55C6CCD79CBC69D052011BA93357AAE3568E0086F159C083D665645A38584955283925F900254A6562F0C755323C40805328D04F27FD863E8B774B52E27FC3AA30CE689AC57DEFEE274DBBC2A4D9D320CF19AD873AA0AE806721EE78496F7ADA99EA48060F26FDEE7ED5E9F85B27F79AE176A6E8EAC4DD5127299122FF88139BC4B56A2ED3C5338A72676C4C99AD6DEBCD8BB5EB09',2,[]).')); rehash path; fclose(fh);\r\n\r\n%%\r\nfid = fopen('Xiangqi2.m');\r\ndelim = {' ', '\\n', ',', '.', ';', '''', '@', '+', '-', '*', '/', '\\', '^', '\u003e', '\u003c', '=', '\u0026', '|', '~', '{', '}', '[', ']', '(', ')'};\r\nfile = textscan(fid, '%s', 'CommentStyle', '%', 'MultipleDelimsAsOne', 1, 'Delimiter', delim); fclose(fid); \r\nassert(~any(ismember({'rng','RandStream','seed','state','twister','shufle','default'},file{1})));\r\n\r\n%%\r\na = 0; b = 0; Na = 2; Nb = 3; Nc = 2; tol = 1e-6;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol); \r\n\r\n%%\r\na = 0; b = 1; Na = 1; Nb = 2; Nc = 1; tol = 1e-6;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol); \r\n\r\n%%\r\na = 1; b = 0; Na = 3; Nb = 2; Nc = 1; tol = 1e-6;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol); \r\n\r\n%%\r\na = 0.15; b = 0.85; Na = 4; Nb = 2; Nc = 1; tol = 1e-4;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol);\r\n\r\n%%\r\na = 0.9; b = 0; Na = 3; Nb = 1; Nc = 2; tol = 1e-3;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol);\r\n\r\n%%\r\na = 0.65; b = 0.3; Na = 3; Nb = 2; Nc = 2; tol = 1e-3;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol);\r\n\r\n%%\r\nNa = 3; Nb = 2; Nc = 1; tol = 2e-3; \r\np = sort(rand(2,30)); \r\np = sort([p(1,:);diff(p);1-p(2,:)]);\r\nfor k = size(p,2):-1:1\r\n    a = p(3,k); b = p(2,k);\r\n    score(k) = EvaluateSolution(a, b, Na, Nb, Nc, tol);    \r\nend\r\nSetSolutionScore(round(mean(score)));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":12569,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2015-11-12T00:41:35.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2015-11-08T20:51:55.000Z","updated_at":"2015-11-12T03:39:15.000Z","published_at":"2015-11-10T00:22:37.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the second part of the Xiangqi series. The first part in this series is:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/42674-cody-meets-xiangqi-foresee-the-unseen\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody meets Xiangqi: foresee the unseen (Part 1)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBeing increasingly interested in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Xiangqi\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eXiangqi\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (a.k.a.,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eChinese Chess\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e), Mr. Cody has designed a new Xiangqi match for\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Xiang_Yu\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eXiang Yu\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://de.wikipedia.org/wiki/Han_Gaozu\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLiu Bang\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e by taking into account the likelihood of tie games. The new rule is described as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOnce\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1) Xiang Yu wins Na games consecutively,\\n   2) Liu Bang wins Nb games consecutively, \\n   3) No ties occur consecutively,]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ewhichever comes first\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, Mr. Cody announces the outcome accordingly as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1) Xiang Yu is the final winner,\\n   2) Liu Bang is the final winner, \\n   3) They end up with a final draw.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAgain, Cody asks us --- active Cody players --- to foresee the outcome of this unseen match using Monte Carlo simulations. Our task is to write the following function\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[                         [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ea: the probability that Xiang Yu wins one individual game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eb: the probability that Liu Bang wins one individual game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNa: # of consecutive wins required for Xiang Yu to become the final winner\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNb: # of consecutive wins required for Liu Bang to become the final winner\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNc: # of consecutive ties required to result in a final draw\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePa: the probability that Xiang Yu wins the match\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePb: the probability that Liu Bang wins the match\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePc: the probability of a final draw\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe main focus of this problem is on\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eMonte Carlo simulations\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, rather than analytical approaches. Your provided solution Xiangqi2.m will be checked by a P-file EvaluateSolution.p, which mainly does 3 things as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1) Call your function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc) and then Check if the result P = [Pa, Pb, Pc] is within tolerance of its expected value Q. That is, If norm(P - Q) \u0026lt; tol holds, it means that your solution is accurate enough. If this does not hold, your solution will be rejected.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2) Check if your solution is based on\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epure Monte Carlo simulations\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e or\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eanalytical approaches\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. If it is based on analytical approaches (i.e., using analytical expressions to directly compute the probabilities), then your solution will be rejected. EvaluateSolution.p accomplishes this goal by exploiting a combination of distinct features possessed by analytical solutions, but are generally not shared by Monte Carlo simulations.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3) If your solution passes the above two checks, then the score of your solution will be determined based on the speed of your code. The faster your solution is, the smaller score you get.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf you have any concerns or suggestions on this problem, please feel free to leave me a comment. Thanks.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":61269,"title":"Precise Almost Pythagorean Triples ","description":"This  is essentially the same as:  Problem 52834. Easy Sequences 32: Almost Pythagorean Triples; it even presents the same set of test problems.  The difference is that the \"correct\" solutions for larger cases of 52834 were the result of roundoff errors due to values being larger than flintmax('double').  This problem requires care to avoid such roundoff.\r\nRepeating the original problem description:\t\t\t\t\r\nAn Almost Pythagorean Triple (abbreviated as \"APT'), is a set of 3 integers in which square of the largest element, which we will call as its 'hypotenuse', is 1 less than the sum of square of the smaller elements (shorter sides). This means that if c is the hypotenuse and a and b are the shorter sides, , satisfies the following equation: \r\n        \r\n        where:  \r\nThe smallest  is the triple , with  and perimeter (the sum of the 3 elements)  of . Some researchers consider  as the smallest , but here, we will only look at 's where the hypotenuse is \"strictly\" greater than the other shorter sides. Other examples of 's are , and . \r\nUnfortunately, unlike Pythagorean Triples, a 'closed formula' for generating all possible 's, has not yet been discovered, at the time of this writing. For this exercise, we will be dealing with 's with a known ratio between the hypotenuse and the shortest side: . \r\nGiven the value of r, find the perimeter of the  with the r-th smallest perimeter. For example for , that is , the smallest perimeter is  for  , while the second (r-th) smallest perimeter is , for the  with dimensions . For , the third smallest perimeter is  for  . \r\nThe output can be very large, so please present only the last 12 digits if the number of digits of the perimeter exceeds 12.\r\nFinally, as with the original, the use of java, BigInteger, persistent, and global are not allowed.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 669.833px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 334px 334.917px; transform-origin: 334px 334.917px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 42px; text-align: left; transform-origin: 310px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 102.675px 7.91667px; transform-origin: 102.675px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis  is essentially the same as:  \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52834\"\u003e\u003cspan style=\"border-block-end-color: rgb(0, 91, 130); border-block-start-color: rgb(0, 91, 130); border-bottom-color: rgb(0, 91, 130); border-inline-end-color: rgb(0, 91, 130); border-inline-start-color: rgb(0, 91, 130); border-left-color: rgb(0, 91, 130); border-right-color: rgb(0, 91, 130); border-top-color: rgb(0, 91, 130); caret-color: rgb(0, 91, 130); color: rgb(0, 91, 130); column-rule-color: rgb(0, 91, 130); outline-color: rgb(0, 91, 130); text-decoration-color: rgb(0, 91, 130); text-emphasis-color: rgb(0, 91, 130); \"\u003e\u003cspan style=\"\"\u003eProblem 52834. Easy Sequences 32: Almost Pythagorean Triples\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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e; it even presents the same set of test problems.  The difference is that the \"correct\" solutions for larger cases of 52834 were the result of roundoff errors due to values being larger than flintmax('double').  This problem requires care to avoid such roundoff.\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 10.5px; text-align: left; transform-origin: 310px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 201.933px 7.91667px; transform-origin: 201.933px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRepeating the original problem description:\t\t\t\t\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 86.9167px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 43.4583px; text-align: left; transform-origin: 310px 43.4583px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 303.05px 7.91667px; transform-origin: 303.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAn Almost Pythagorean Triple (abbreviated as \"APT'), is a set of 3 integers in which square of the largest element, which we will call as its 'hypotenuse', is \u003c/span\u003e\u003c/span\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: 3.89167px 7.91667px; transform-origin: 3.89167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 12.45px 7.91667px; transform-origin: 12.45px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"text-decoration-line: underline; \"\u003eless\u003c/span\u003e\u003c/span\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: 94.8917px 7.91667px; transform-origin: 94.8917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e than the sum of square of the smaller elements (shorter sides). This means that if \u003c/span\u003e\u003c/span\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: 3.5px 7.91667px; transform-origin: 3.5px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ec\u003c/span\u003e\u003c/span\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: 72.35px 7.91667px; transform-origin: 72.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is the hypotenuse and \u003c/span\u003e\u003c/span\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: 3.89167px 7.91667px; transform-origin: 3.89167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ea\u003c/span\u003e\u003c/span\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: 15.5583px 7.91667px; transform-origin: 15.5583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\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: 3.89167px 7.91667px; transform-origin: 3.89167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eb\u003c/span\u003e\u003c/span\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: 49.3917px 7.91667px; transform-origin: 49.3917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e are the shorter sides, \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 102.692px 7.91667px; transform-origin: 102.692px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, satisfies the following equation: \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 24.9167px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 12.4583px; text-align: left; transform-origin: 310px 12.4583px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 15.5333px 7.91667px; transform-origin: 15.5333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"99\" height=\"19\" style=\"vertical-align: baseline;width: 99px;height: 19px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAAAmCAYAAABwHY/hAAAEBElEQVR4nO2b7ZGCMBCG3x7ogAZogAqowA7sgA5swRoowR5swRpswfux7LAiASG7RHL7zGRu7vA0m+x3IuA4juM4juM4juM4zqGpAHQAngBeAB4AmqQz2ocCwBUk7wskf5t0Rnb8J1nVqEALdgZQA7iAFu+FvBevAHAHyVuD5GfncEs4Lwv+k6yqdPiMEmcM3iVXziBlkVQYHEO1+4zs+E+yqnIDeRZJgWHhxs9yoQNQTvz9DpL7CGllBZrnUoTPQVamwLQsu8K1R67GEeKG3/emsnaISY2OICtTgJzAExQJk1GCFq1LOYlEPHAMp1AjvjY8iqxsFCxvUuM49ZM5gkfRhJ3CKfVEvqDBoCz1hv8/gqwlqFY6gaLlTxjHA3l3qkJcQdFSy5O2sIvArCxbmybaslojI2Uy42hBC3eURdOiBhWomsWepXFwzbHlvS1ktSa5cTSY7l7lTglSNm1lsTIO2YZdqyhWslpjahxF/wGh/LQCGcbRFi0EyyvrphKf8hcgubfk7UtYGQefQ73wvl8VPmWWWMpqjbpxcPvrAUqVWlA4feB9gfiUfMow1qRYvDmxI4YapAB8PeLS/85tS6mofHI81edvEd+QsDKODkOrHaD5y9Yut3flflrLao2qcTQgBRkrPRdydwwHKk/QYrajccPnyeocrIAxI+ZUnq++jJVRXomRC8uOYiz3FTrppZVxsCzcyXn2P2sMhjP+XGtZrVEzjhPCh3jy4hl7kzllXeNRpJfeOrYqEhv91P+zkso0RLYGp4ZG6LYwDtnCveC7Pd5DVmtUjEO+yVSKwtcNfj2MroE3/xF4fll4vhVZx00Nntdt4XVr6jwZBVn5x8gIrhkRUqbMKsYR0+I7ItKThu4IcXRckyJ+g9ywmLFms2VtETrAY3m1L46mTJmjjYPTqVDUyBFWlnvgOZ8EzxnPVrjDFxoyvZl73bfzkrKE5JWXRrUdZKqUGVAwDlmMpSiw9u5WSWcQ8qIy3957TbRrDtnCDcmbq4OMNg6+nBXyKtbs3a1acgbS06b4Uo+2cbC8c2vE0Sq3LzFFG8dSyLVm727VkjOQxqpdb3yDtnGwvNeFzwsV6kcm2jhk/h1anDPyOQWfcwZ8sU7WGwX2vWynaRxSOaZSKvk8p04kE20cMr8eLxD3u0Ne54jIrgwbPMvZ4T3/LvvX79nT1zQO2cIdF/A1aA1y/ppBtHEUeE81mv5NT6Co8st397cglZ87Qk8MDqAdPd/7sMvKOHgfS/H3nG9Sc8SXXbhNshYgJZB5fE6p1JgGtFh81UXKWfbPrkjTudGuOSq813Ud8t5bYLjGNFWbtsjXIWRPDdrA3CK24ziO4ziO4ziO4ziO4ziO4ziOY8QfaJ4ygEB93kYAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 23.9167px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 11.9583px; text-align: left; transform-origin: 310px 11.9583px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 40.425px 7.91667px; transform-origin: 40.425px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e        where:  \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"62\" height=\"18\" style=\"vertical-align: baseline;width: 62px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAAkCAYAAABLw14kAAAC50lEQVR4nO2a7ZGDIBCG3x7swAZswAqsIB3YQTqwhdSQEuwhLViDLeR+wA4rB56woLnMPjPMmPOyfLzLskAARVEURVEURVGUT6AHcLNF+VJaAE8AK4C3LfdLW6QcYgDQCL5/hxO8L9IipQo3AAuMUJ3AzgQnuPKBcKHfMGG5FdgjW09504rQQNafryEktDQEt8zeKLQlpYFZXtYPaMul1BCaGJldybIggQtNbRkuasufdDCDz5OmHvKQRINQS2jiaW0v3t97lOnHHiGhpwp1kkbZdnlDn/Z5xjb5yZ0toUGoITRB9TzsZ79uEkGyC/BpA/WUFrqHGbfF1kXaJPelQzgzbuAav2Y08GyhYW3zEPoA8LLPg30uub63tg7fmUoK3cBFLX6mwHOVw4dLHZwgoRlMBh+Bd3uM2Ao945z9MI9IE35n6XyQZkE9ZwgNGLHJSX0HvSHRebnYIQ/hMzz1ePKsAfGhwVntcwhqT+z9Hmf3a0bcOSmCHo5UNDixjg9wncpd785KYoDt7H1H6uBOnLJHv8KB+QwW7za4sdh2gTqYMxN8zhCe92mK/A934pQ1fMB2d7Gg/jaL6pMsPb+M+VsXgs+W2ODlEBO+xH6ZEpvY7Aa2szQH//yglvAdCo7/EWN8YGokW6E9+QyZ8OREsVDNnVh6g1ZbeH54JLb7lzG+tZGs30fxBy9HeO7EsQRzLwHKpZbw/LZPbG/PGGXuFB5p/b6h/lmwP3gpovM+hcI5vV9Qx4F7OIcqITzPR2IO3O2828ATFx7Sexix+UHMBCdE7ZlOUH0pgvMDFb+dFNFegXelKSU8X35CSxRpdTjp5TPpZQuJDfZuxblic1IyeC44fa+DG/yzb6pCwqcuUzxq3eHuAuj0MEmTBmb2zjAe5IeG0b4bUw1fCB2lzrY8YPp1ZftJoFyno+/zPn3krRvd5kjKf3G0I7T48p9a8XCWW666y1YyoOVCUvQnQYqiKIqiKIqifAk/IsB4nRPGszsAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 96.6667px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 48.3333px; text-align: left; transform-origin: 310px 48.3333px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 41.6167px 7.91667px; transform-origin: 41.6167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe smallest \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 37.725px 7.91667px; transform-origin: 37.725px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is the triple \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"48\" height=\"18\" style=\"vertical-align: baseline;width: 48px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACsklEQVRoge2a0ZGDIBRFTw92YAM2kApSQTqwAztIC9awJdhDWrCGtJD9wDcSFQTDI+4OZ4afDAJ5Fy48FAqFQuH0dI5y+eag/gAX3LGL5gU8gGFRbilG+o+5sY7ZAxPPaF6UWZ+KC5lEqKb6W+UK3I8MwkPj6a8H6g/b9/2frVJ52somQjc94yopV1UFPD19DQn6uHnaX5YnftGziJAjKDY5BBcfDyl7/y+LCB0w4l+SqRDBW8U+JGh7h5B7YL0sIjxJ7/kuWvaX/6f0hIk8Bo5FXQTxzhazWWozYqxibzP8hJBjeEO41aqLMLLepHp0BNnaLB/T7zms0EasKCQJUxVh7wTRkzY4S8GX4ufMa2QsIbaovhLqqV4L/LB9ckgphJ13bIlyTdiXC7GiR2D9bHmCULMW49C9SSA33o/HT/StKcaK4AsiCLZVaQem4v1cryk6xFkRfFEEmGdMjnuomnlFpE4ObWKtCL4sQs0sgmZyJfTMK0+LWCuCL4sAs03kEOGKvgixVgQnEGEgLLVPgfzZUbn9GCuyn4sm9UrQvGYQZCX0Su2L3cVu/KfYE2JnzlEkSFq5gmz8sRNKVYRmp44EZatOhdknOsKuOOQliysAIrjrZCTvfo9eccgqO2J1aiK0zCefkXUgJU9wLV0RSMqeEHZC1vEeSMkTHo527FPaC5NMxiLjPXJbrCaCNLy8K+ows3HEbwvLrHrPxwfe649TX3fmS0PXDG9YjzXWUmQSHLFoVTuqMUGwvyyQJb9HgxFiYA7iHjfrmYFZ9JCAyuQ4clBopmePrCA4wekohJyf0lzQO8L6+jy1CA35Xo2Cmc05EkebU4vQ4N5MNejJ9xrW5iMRWtbf16RKuipMQHIkcWDsLoflyfsVu8hJMhrXGyzta+K/ju9znEKhUCgUCmfnFzTbYsvcMy9LAAAAAElFTkSuQmCC\" 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: 18.275px 7.91667px; transform-origin: 18.275px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, with \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"100\" height=\"19\" style=\"vertical-align: baseline;width: 100px;height: 19px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMkAAAAmCAYAAABu1L9SAAAD6ElEQVR4nO2c7ZGjMAyG3x7SAQ3QABWkAjpIB3SQFqghJdBDWqCGtLD3w7yDz3zYAdlgomdGczO7XGJblixLYgFFURRFURRFURRFUX6KO4AOwN8gHYDy0BGloQTwAvCBmXcPsxZX5Fd1LEIN4D38e4fZNFzI6sBxxaaEMYoHzDyfGOfdHDiuGPyqjsXoARTOz7iIr/TDScYL01PjATPvT/rhROVXdTyhhPEKIcJjlh7U5Q6zgO+4QxanwPKcHzCelHQAbs7/v2H0sO7vzsaavluMRnFFHW/WTY9RwT6ZWzSbCnl6GTvmduWDsMXl3eTMRnLDeI+aky7gM3LTcQFj/H/YeJeiVwgVXxxaD889tgzmIKj0JQm5ZxTIY+M02KdfIB8d3zAaB2WTkXSDuHGn+2X0kj5amGP4zN7UpcP+zV3DeOgzZ314iuzd3Dno+A7jEO4wY91sJAXCwgN6Dl+oRW+aU9ajhBnz3vRtD9nM1i7Pt8ADxkjWHKKPHHVsn56bjCRkssxm+J7tcP4j2IXHcYXtm6cZPkfSs8Ywkh7Gq1bYPtYcdbzLSEJgqOW7vD7hP2nOBr2iLTwRQg2GhTbp0ENaqYwGbGH9I3TsOeoYSGAkXNzW84y0J02Be6lzxecxS/jvc1uRVupaBvODsIRMjjoGEhgJQ62lmL3Gct1gzbDcZ0PrNGuyZbOyZtDg/wueL+XNqvvcd0psphhKrWD0+MS80cTU8ZFENRJfqMX0cTsMxJZvepl8KdhQkYiVK0yNxfWyBcyadJjOu4NMSBLV8w0wI7dWD5LS8ZFENZK1UKvEelHqm6Iaw5a9IqkwOxSzC2w3zJ84u3PxDimMBJjOx87QSer4SKIaiS/UujrcPKEV92/wtQJRqbXnOQl4MroOQQqJcHrP5o5mJKFZrStjZ4SkPdBaG0yoSDZT8uSM0aApEU7vKfZGM5KQrNbVsZsWpY3kifXQkd/7XnlGsgWGd48YRiIRTu8p1EYzEioqRah1ZHbLBxc3xmeHfG+qNhd6+5DWo9yIYiQssqUKtc6U3bL5pmdNmtRGYmexrkYUI+ELRKkW7IzZLSC8Zy0GqY2Ed5IrJmmiGAmzOrXvwczxZU16LBcMYyOpVIazS/Ng5BAjs3UGxI3EDrWO2BypsN/VfmE61xZmDY7yrJJKtWsdDf4PoVkneQt91xkRNxKGWlf1KsR9+egDE1axknz0XwSRVKqbbmYT5xNm3rn2ZIXA10HmiqWbYWryirGpC9/ptlOqDc7xroR0DF3DzI9zZZvJVaOFAstp9hb5tfsrM7A/6qqbWFEURVEURVEURVEURVEURVEURTkZ/wCi5zysuW8z8wAAAABJRU5ErkJggg==\" 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: 101.508px 7.91667px; transform-origin: 101.508px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and perimeter (the sum of the 3 elements)\u003c/span\u003e\u003c/span\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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e  \u003c/span\u003e\u003c/span\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: 7.775px 7.91667px; transform-origin: 7.775px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eof \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"18\" height=\"18\" style=\"vertical-align: baseline;width: 18px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6UlEQVRYhe2WQQ3DMAxFP4cwCIESGIIiKIMxKINSKIZBKIdRKIZR6A6ztWiHxkm+qkjzl6xenOQpL5UMeDyevhIBhEzPAOBmrKEFZAVwGDbZpc9SSylISEC0zoDGApgDn1syZwQwy/dpBNqk4klPkH32EpjfzAagKIfk3tiESl01QBYFD1ToqgGyRHW9kL/JS4BU19oCwwRSXWMPQDRdLCCaLhYQTRcDiKqLAUTVxQDaQNTVChRB1tUKdAdZVyuQTgpTD0CprrORpCg6VijQXLBWdW0skAXfoSutVQ7LRdfT/i6Px+P5u7wB3c96XQFb71kAAAAASUVORK5CYII=\" 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: 91.4083px 7.91667px; transform-origin: 91.4083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Some researchers consider \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"48\" height=\"18\" style=\"vertical-align: baseline;width: 48px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACcklEQVRoge2aXZWDMBBGrwcc1AAGUFAFOKgDHNRCNSABD1hYDbWw+zCdQ0qbPxpSFvKdM08tnXRuMhkmgaKioqLNq7NY881B/QM12GMXrV9gBIaZtSlGumO1vMZsROIZrV/KrE+lhi9BqD94NlTNw3L4Ohn+qshns0NogR+gX+I0QBVwQ8Zn2h24rODvjPyfub8BAROibBDmg10DwgkJ9jwgpl0T+rt6fN0JA5EFwhWZhRfWhTAgoM3ioOZ1ZZwT+NLA3ZgCXTGtdPU1RvxWtJamo7UgnJGZZ8v/XWLfIwLgnSqeV6RvT9oNhB53zq94ThOfqEZmu2sDNlOVby/aDQQzLdg0kAbCmfDAHgpCiBTCkMGXCcEXp0NB0A1zjVJ1rvbhy5e24EAQTkxBCa3fP5FWZCE9ocNA0OooxyrQ6ihkFcBBIGhQcuwFMAEPjc8hIPRIXR/b01miGvl/Md3k3UO4IGkhRxOveviKbY3sGoK2EHIBGFnWm9othP8CAHYKQTu2LgA16UrVEACupuFmIVRIPu+Im801Ugm5xqYz14SgZ78tcRv4DX/V1WJv9qnvTUKYt59DQCiAEftheoesEjNw+iIXu0p1jFeHL/2OK1ZZIZjtZN+ba89zYFwzCSYArkMW25lC/eZzX6p6d3pnM9+ZQhYILRLU+S2DAXu6qY1n7vgh2H7/nfW8ppyO55sPLgjnCF8hN1C+dtAfo5xXaRpklebU5iGEHKCklO9waA1tGkKNpIcctT5Iykt5ESBUH0G4MN21UUtVe1dIQHK0nUHSXY6UZ95PUtMLENGyVQKL7lQeSGaFOLeioqKioqKiresPwN5Zrqu1TD0AAAAASUVORK5CYII=\" 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: 50.5583px 7.91667px; transform-origin: 50.5583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e as the smallest \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 70.7917px 7.91667px; transform-origin: 70.7917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, but here, we will only look at \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 243.942px 7.91667px; transform-origin: 243.942px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's where the hypotenuse is \"strictly\" greater than the other shorter sides. Other examples of \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 18.8333px 7.91667px; transform-origin: 18.8333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's are \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"56\" height=\"18\" style=\"vertical-align: baseline;width: 56px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAlCAYAAACao20PAAADbklEQVR4nO2a3bGDIBCFTw92kAZswAqswA7SQTpIC9ZgCfaQFlKDLXgfcIcNEViE1cwdvhke7o3KyuHnLAhUKpVKRYGHp3RXBvXP6eBv92RWAC8As1OGEpFWdhnw3d4vGC2SWVFH2y/Q4UQBb9s9HYDmSKWJtCfXx+tNIaddThGwgxnqE8x8PW73TzDBl+S2PX+BXR/o71mhPs4A4A3zXhL67frVKSlxqgt43669O/9vYQPujwSwQwsrlNuT6bcF5UV0hZAI+MS3cLxI41QVsGfB7E0Nj8jvqVAj+joEdaaxQF3Ec3suPVsiIDX6CCtSAzuC6TkvQf2qAlIwvhe6wQb7PBIEg49o3xpEL7tk1uVDKuAL/k7UwMQXexdCTUDeoO70ySGRc0chvUhoBNI174x6QkgEbLf6Q+/Kp9dQ2wGKAvIpJRTEDHlvC9Hgc+rZayBqmNzR7kMiYA+5KJcKSOtbLIhReJ0E/izXyJCJeUPPiaaYmBBcwNgydYqAoR4vFVpCA7szQdNyB9PrFxiBNfPBUgIOsFN9LF41AXkvCrmpkgIC3yKSkKVSlRClBKSZRLLHqepCJW6q5BRK+ETMWWMllBCQXKhk9AHKAnIjE0quSyf0NKqfzvNL1rFHCQEp9pRdLtWdGG6Jl+3vB+xOOk9cS5gLGtEk1A2fTjelcVLJFZBSr5QTnVP2QltY0WYYEQd8W/9cqPfuNSCfqq/MA300MHGlpjinnka4lDYwNF36pskJuqPwqIC0Zh/JTy8TkG8Z+RLvFLjr9ZkV6e7QUY4ImCMecKGAfDSUcIcSAYHfE1AiXsh4XSIgd6e+4JrtugfkAtOI9pkAvua6hom+N6G1+QipAo4wniDEgPDpyekCkiuNJdfcdEhHKa2pvimZOo7bwPxUJMdFptxP70eufK/QNZINk0PBpgjYwtr5CXFB+BS7Qn6GRx3k5dRxh+k0E/bz0dUpqSkNN2Sx/Va3c4ZKzJ2rCtjCNNwMmwOmpB4TuzflEPaGz7RlRvyTR56bpgg4sDjdsjf9955rfSWWE6oKOGwB55qUMz9X7KCXJ2pwaR4oQXIAWpIJOg5Vi58WsMX3WqbJCL3DXi2yBLzDfs9IpdRhaQPTmJqfAXIG/P5X5fz7USrkrJPxuaZD3+lXRHCn65ZKpVKpVCqV/8Mf0OnMkPT9w/AAAAAASUVORK5CYII=\" 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: 17.5px 7.91667px; transform-origin: 17.5px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"71\" height=\"18\" style=\"vertical-align: baseline;width: 71px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEK0lEQVR4nO1bW5HrMAw9HMKgBEKgCIogDMqgDEIhGAohHEqhGEph74dzJkpqx7KV1+71mfHH7liJIh3rYbtAQUFBQUHBr8UjMK5HKlWwCa4I+zsZPwBeAPrZaNbQtOBUaPDt5xccB5LxgxJd/mdcsSNxqkEmh3AWWStquLDcDeOWIEu9q5V0kXbQjKX3XpTzfNiFODeMoU2OFnGFLbIWVHBkeQ/ve8AZOhXUvV5JrwbftgiND/w63zB+lxx9YL4PmxOHH9rDGb/FVOl+I1kLavGeFGPO8cCo61rE8S2i0PDZp43IhMg2x6bEucI5wBfaO4zK+p5jkbVArmhLVKNh1yQOnxlrQNrAPMp3GMlRDfPkgnwl6JIMjdN6hA12wajofWXZXEhn98gnTQW3cp9YlzgddN/7hj9yvIZn+ECdtfpuRhwyOfaMH3xHFYtsLqThtOE6hCcc8SQR1yCOZqujhj9NMf0uLQaZxmIE3bWrkmDUiH3M2rIhyPTXGp5zh9OLHcvaNU4MdP58c+4GPRlOTRwWjjkRwyLrQ4VpPcJoU8N9ozb61HDRinY5gjisVXIiptRXU7/uTpwGzsA5jrfIhnDHaLA3HDFlvuf/Y6vwhWm02ps4TFOa4tYHNgaaSL4rcWpMC8YP9MWtRTYG+Vx2HTe475t3HKE01sI5TBp8b+KE0pQWTNca+d2I08IVbL6Np1hNYZHVQO6N+MhYzebMo90VjshzcuxNHEuaYnOgrRsPSVUXfK9yrWEtsiFoNr9uYp7sWGhwH+H2JI41TbFu1Pr0sOIYmLZ/qeHVIjuHJI52Hlflcxg+7EkcS5oi6VJuNhxKHNnNhIy/hewccv9mCT2mRLhjLNR9B4yy6G7E/7c4Y8tNU9Ugm5ryDyUOMDojx/kWWd9zZCRZmkfiyL9TxtrRh05MTVOs3XLqxNMQJ6dDsshKyLS35NQ5wVi0h4YsqOWlN8uutA8p3RBhIQ1wAuKEzlW2lpVgjo/leaYD7creq8Zhqk2xg4Y0S3tlhxKHL7eESp9sBReFHtA7jNEhRApZU2mLSA1xeJ+3QV7tw27vnSDTIX4lpUH4QBTYkDgXjCvBdz2B2/O+U2iLLDA9d9KudulkHzHYrqbcAYoRR57y59Zq/Fbt4pPzQxfQOWfJv5sSRxrlI5TtsLyFb5EF/DvBGvA4g+QhKdkdPZEWFWLEkSmSIzXtUl9N9J8vqKURS8ebX+RiWOzhDP+A7pzJIsvjiR7OsFriAGOaozxvH+akZXZeSwXxA9NCOoU4fL4mUt2wXMin/lrl8OJ4a/yWn+zwxuNvwZ8mjuby0lnwxLq3GbfGnyVODRf+97oHY0GHdQ5r94SJOHd8b7OvvbmVA27OnUGXGBqcP5XK31/Nj1OSEarGrQeOBeeD/JnPfBQUFBQUFBQUFBQULOEfKW5XzxL1fJoAAAAASUVORK5CYII=\" 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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 71.75px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 35.875px; text-align: left; transform-origin: 310px 35.875px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 269.142px 7.91667px; transform-origin: 269.142px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eUnfortunately, unlike Pythagorean Triples, a 'closed formula' for generating all possible \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 21.9417px 7.91667px; transform-origin: 21.9417px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's, has not yet been discovered, at the time of this writing. For this exercise, we will be dealing with \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 6.775px 7.91667px; transform-origin: 6.775px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's with a known ratio between the hypotenuse and the shortest side: \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"50\" height=\"18\" style=\"vertical-align: baseline;width: 50px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAlCAYAAAC05kydAAACWElEQVRoge2abdGDMAzH/x5wMAMYmAIU4AAHc4CFaUACHrCAhlng+ZDmGjh4SICjsOV3x4eVsaYkzVsHOI7jOD9ClVoAJ1IC+KQWwok0AOrUQjhEBmAAkKcWxCEqAH1qIZxIB+CVWgiHeIDc1SO1IA7xAu0Q5yL0oJTXuQA5yF1lqQV5Yuwz8zB2Z57hsrzcN6j+2DMfk1nmrwC0oO05IFpFFsZ5zJJpPA+49ub9Jcj/t0H2BlRta1sgHwCFYb4HSIkDqIjk+MNj5kq/Cw92IGV0GCvJUqkOB1xbrTMXa5FWWorfXsuaCtheILdWeox3QYEd6+FF1Bi3CvizJfVrD7i25P456MXMVdZsqZqquwnf18CKnioDIIPgOU3JAbcHWCF3TPUyRGXMKTMP42tuyNIqWdt1xcr9ReSDvVKYq7HZV08ooWuVPBANYMmd14hhwITczlt9d0q4orYmH3NoWyXynS1lTxyDzZ1iGbyP2B1nZ1mVkN+SGU3RtkqkASzFGunOTDJxAXTk7jg7y2qwbq0atK0SjQFIIzdxlHVJzs6yZL20RyE9dHXKmgG8xH1z/ODF3PmIUvrzJXdT4P+Og6VV8p8BcEE6jR/1yvwAxumuNu++ItJfz1m45pCJ6y0NnD1NvQrPk0/uq9swMt09yl2lQu70EmSNRRjXGBs/p0EG9QGx9cRdDlkQfmCIh9zHarUPXJwStHheUw1dtmZtlSD87htR4VN3xLvC2/cbeOPeLvur4Dh69yOGr0HbKnFOgmONcwH8XyUXo8I9jxq+liOOih3HcX6BP7UvFJF5pfzWAAAAAElFTkSuQmCC\" 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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 95.6667px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 47.8333px; text-align: left; transform-origin: 310px 47.8333px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 62.2083px 7.91667px; transform-origin: 62.2083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eGiven the value of \u003c/span\u003e\u003c/span\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: 2.33333px 7.91667px; transform-origin: 2.33333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003er\u003c/span\u003e\u003c/span\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: 85.925px 7.91667px; transform-origin: 85.925px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e, find the perimeter of the \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 30.3167px 7.91667px; transform-origin: 30.3167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e with the \u003c/span\u003e\u003c/span\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: 41.6167px 7.91667px; transform-origin: 41.6167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; text-decoration-line: underline; \"\u003er-th smallest\u003c/span\u003e\u003c/span\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: 37.3417px 7.91667px; transform-origin: 37.3417px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e perimeter. \u003c/span\u003e\u003c/span\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: 12.4417px 7.91667px; transform-origin: 12.4417px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor example for \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"35\" height=\"18\" style=\"vertical-align: baseline;width: 35px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABdUlEQVRoge2XbXWDQBBFrwccYAADKIiCOsABDrCAhkrAAxaiAQvtj+UV0oTsApsspXPPmR/54sy8zMzbBcMwDMMwjkUBlGMYIzUwAF+/ogGyhHklp+delHl0/FOBapwAFZMAOfed1CTJLiEZrvCPhc9LJnGGdyV1FCrg0/Od+cgVL8/oQNT4XUljt0ucEjerQpb415E4AyuWcoXb4lcmZbMxutl79YpEyggRu/VbXB2+8XuIZrLHCdNzK9iaLf/MTkNjUxFPUC2bpkDiNLjEJIZe5wu/e0QXIdZ0qg+51SbBZYUSp4+X1yHQ2ljzB/9wYRLnyrmsrsIt4c01aVm9YtZTUuBquux5yHzxxuiaI7hVgeuYXcJI3Zhdk9qtoggDbiaV0O6HjaR0qxy/MBmBlq6D3hkuZDqf+YRtWb6k3jxMXdPuTi0tEmbAibMUHYFXiLmFxxqpFEiY0H0WdNrXvaqLn+9bUUeExpnOcYZhGIZhGMZWvgF1o8SVzUIOYgAAAABJRU5ErkJggg==\" 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: 24.4917px 7.91667px; transform-origin: 24.4917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, that is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"43\" height=\"18\" style=\"vertical-align: baseline;width: 43px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAkCAYAAAD8fqYDAAACEUlEQVRoge2YbZHDIBRFjwcc1EANVAEK6mAdxEEtREMlxEMsVEMt7P6AN7xkmwBpd/Mx78ww0w5pApfbmwdgGIZhGIZhJE7AJTa38lgOgwcewPeodQTBjYXc+C2qbk9M4EVcCAK2JAEdcGXo5H6V0e2cniDsKxzBtSLw+b8GdQTOBHfOvbh0ZHz9x6COgicvmMTGJsR1pFLmCGhxS+ckGugYkRKvGgc0hL9YGz/38XvNDc+khXmnfZIrQdhcfBCf3RFyuiFEShfbN3CvfbiPN3swLFda0lu2tBiXQbzTnrUTyCDzaDLXSTaPBVyc2XOrKmVMzWT1Si9t1e6YQaqFnGtlAV49uyGJW1wr57LIxxvvuXwRYeaiRoR9TPTfMv0vEWd+0ilb4kyY33XmGk8ymJ+4po/9t9IHSxzUvEH3hCOYJyeIGGxq93YiL/4v7upHnzw52kK14Ahi5YTVBptyd8sCnWRL+On99trVQqmwkDeYdm1XM4i/OsxYu1ooEVb+3jmDaaMU5y0Ms2bK7l/s65iuJe+wK+mQZ85gLUNne4JOdwriQWfJuNRysX/qpGmLyHxuhPLrVZNrJNOlCtBnvTL3O8NMPsXrizYR+iiuJ6zMhXQGOle+bA1tlFzTLtXiPUnbXjFVM+qv2p25+AOdd3uLAk9dno9N4wku7Qiu13M/xb6WY5arhmEYhmEYhmGswQ/bvA+w30MOtwAAAABJRU5ErkJggg==\" 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: 81.675px 7.91667px; transform-origin: 81.675px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, the smallest perimeter is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"18\" height=\"18\" style=\"vertical-align: baseline;width: 18px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAABLUlEQVRYhe2WUbHDIBBFjwccYKAGoiAK4qAOcBAL0RAJeKiFaoiFvg+WmX2dPEIC5fWDO7Nfu1lOLiwJdHV1fZcsYE4+M0jcaoMswCuzsQFm4Ak4iafEvQTEKJAYR0AWeMji726u0sPv5A41Et5slAVygWKt28kZYEvks+UygaaMOu34aZfOAsUt2RI1GvqyS7lAcTtSQIPqtX4aKNakgGxmXVWgo/PRDMiruvEbgO4cn4+mW2YIF2LKJT32j08DIXkN5eX5meDIqnJLCyAITk2yoBcIR9iumbxzVhUoBRrvqr1vXXMg3Wcq6FMF6MbxBDYD0tN36dejJpCeurUGjOX3GJ/5QjvCId4o/FOMIDPB4vdY/ljAEEY53jle6opduSorAMN/QnR1dXWV6Ae9sZqCc2SAGwAAAABJRU5ErkJggg==\" 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: 12.05px 7.91667px; transform-origin: 12.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e for \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"48\" height=\"18\" style=\"vertical-align: baseline;width: 48px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAAC1UlEQVRoge1aW5HDMAxcDmEQAiFQBEUQBmEQBqUQDIEQDqVwGEqh9+HsxHXjWG5lO3fjndFPH7KitR6WA1RUVFScHqNHLiWN+gO4wO+7aDwB3AEsjvQalv5j9Hj32R3Gn9F4ou56LVxQkIRuFS10MDZJRHNdAGi+0F2MhOuqY/5Ch4ufVadEbkpr9uu6M7bcfgfwADAIdRQhoYExUpMEkioVjVQ6rbquB99JyC5CwoLNGVoksMi1B79p1jV/FNbrsTUnPnCjHdkEFCBhhHECOwINEtpVZxP4HR2nkYpmhO3nZgulpawkdNb/aKAWCRJb6DiNVET7jyKBvwm17dlIaGB2Kw8lmiRI13/CpIhQxEhww5ZS95xsr3eadDTBOJ7ITQJT0aSkr8VroXeLMwuz5CSchYQrTBTY/XNuEpiK9jqZT0FiKRMMOTPM80rXSk5CCxOSbsjmJEE7FdlwieAzxayTnIQF+ykgJwnaqcin3z0MSolISgLb0T1jcpKQIhURHV4HmTYRC2REJCOB7ahvjpKLhJSpqFv12s4esB3SSEQISUhgOzrBP0DjYW2xPtMeqgHpUpE9enHt7vBKRJFzApXGSoqoYMRpp6IBx4c1ZgJJNCQhocP7xYUr3CkP67OPbpcOwF4+RSqSpFPWokdAV7FRdo6awN2aoiuS2D/ij5PQwDhxxOe1gnVHcuXKu98esqghwUcTWY42QpvgtCTw2E+JJcJORaHZjTuCkESnXZh9syNeMoVsPy0JzKf2SCAG3KmSFtEuopQQcfwfHT1gi6AWW92TNATFSLjhuBh3METwYWJJoH5pVzTi9c0HCQlEj21AyQmBTUoIRS/6pcj5Ks0FOjdvsWuemgSGvHaL6cMM+QW9Fk5NAucyKU7Se5ig9xZGDL4iYcD7OCImlx6hgXGIlr4QeuRJebyKtYVNRDR8owftU+9/Aw9we1JRUVFRUVFxdvwCuGJ2Vt22a+kAAAAASUVORK5CYII=\" 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: 57.9583px 7.91667px; transform-origin: 57.9583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, while the second (r-th) smallest perimeter is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"18\" height=\"18\" style=\"vertical-align: baseline;width: 18px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6klEQVRYhe2WUQ2DMBCGfw91UAMYmIIqwMEc4AAL1TAJ9TALaJgF9sBd0i2DXQ9u4+G+5MIDBT74QgBwHOc/dAAuwumE54wAglZoAjALZxSIZForlX8hNcjMWJ7SJ0IlwqMSKjRxY02gC0wr+xOAgbb3PUKRLvKtdQ9ZLpDYLqG1BDU3bOc6TEgC53pA9taYC3GuLFxvLsS50hmEWnOZC7XmMhdqzWUqpMllKqTJZSpU0J7LTChCl8tM6ApdLjMh/mL3ZxCqc239kvxMiHMVxbH8O8NCwxFCI8m0vF2xOu59MpabdBzHcSQ8AUZlel3qgGXQAAAAAElFTkSuQmCC\" 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: 25.6583px 7.91667px; transform-origin: 25.6583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, for the \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 53.6833px 7.91667px; transform-origin: 53.6833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e with dimensions \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"71\" height=\"18\" style=\"vertical-align: baseline;width: 71px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEa0lEQVR4nO1bbZHrMAxcDmFQAiEQBEUQBmVQBqUQDIUQDqVQDKXQ98PRZOvKsp2vJve8M565mUtsWVpLsqICBQUFBQUFh8U1MJpfClWwChqE7Z2NN4AHgN4b7RKSFuwKLb7t/IDjQDbeKN7lf0aDHxGnzni2GtbSxhnAbYYcIcj8OXJqqOFcejeM88z5fLBupkDePU14b1PitACeAO4Z71yH9UJjKc9XwRnXn/8F4JI5zxVun+/h71zDxHDGGC543Ib1LZzg9vnCmKs84UJQ6kHZjDhnjIp8I504FdwGQ6TpM2SwcIqsI0aJoca4zx7LEwZwh0/mvw5ysW4tndRw+3zikyQVzZHiFTchzg3uxF6QTxw5DbFTNBf9sA4n9zW+PZCl1BZ5J38KmkFOTQ6WVbMNk0PzoEKGN+Kybx6qconzwjo5DOM8rBNy0xwqQ3Kz0nusR3QrnJxIBo0Yso8Xwp5QiBWzz66JIyf4gvlJqoU77Bymwme+o/3/hbhR5qJCvNxheUaR8WG8z17LIv+uicNxW4zSYXkSdYgbu0eYOKzstb2jBfE4Wmg/Y5SxM+bgdMIi6W6Jw/mCNjqsn/cwhDh+4sne6I2RgDWmXXPnQEKR5m043FrelUOuRbDdEgdwSm/gNnrHN3nWzCV8hJJKPqFPOAP5t7On8t7SaId1Q8k76y+VOFZI2zVxfJzwTaBJ30smrCsE8D2IL48U+RqMNas1w1jtyRCqOfXIJ44Wlv3nsvEL4gg4jL2wvtcRN68pnItw2v8r75klK8c3jGUE3xv7JGXixHLEP0scwCnGqlksBbkxhYpqrORQPsOJ6VIFSx+aN2aCMHEsfcVukILDEidWs1gKdziPEfJqKUr2n1vTQ/KB4jBeQhVBQsBaxLnguzTvg+s3FnJCxRywx2AdT7lVWTY6NHHEGGv0AEliGzMy13csT7IVcXgt1jHnhanEsZL5QxNHPM7StZJU0gCfocF6PpVgS0DWYoJwaLd0z57JSuQPSxxRhFVrmAL5im+RoMZnoU/2ZHk+ufksLW9oLS1ZF0I9jXfv9MwhPzlI5TUEKfOHvgJf4E5PTliQloPYreOBT6OI5wuRgvMOn1zSz9tiGU8kBtXCDIehkN5SLxy7JI5fjfWNL/E6VPzzWyFSyCOkeSDcmM0NTww2iOZ1xP3773H4SDlM3DOktW3IHqyKuoRWba2QnBo2JQ7HT60K6wvFoxvel4KXFX+1aq4FUbi/Zmhoa7c0B3sPOQR36Ib257byNZ9o0nIirampnzbkYDH5RM7UzzibEKeFU5zfKS8dbJpHOGGsjPKzKTcoKcP3GL+oWwjJpg2NAAIJkTxf7CdDchhSE/1m2A/Lc0V+RbrBp35vmXP8rFl9KxzlJzvS2XcU/GniSP/vlu0XUxFrJtsb/ixxajj3v3axbQl0+G0D2BTMIs4F379z2rJxKYQKzhB7kCWGFvsPpdIXxUOS6WyEbhxb9McUbAvrd20FBQUFBQUFBQUFBRb+AeqNb10z+oPdAAAAAElFTkSuQmCC\" 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: 16.325px 7.91667px; transform-origin: 16.325px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. For \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"35\" height=\"18\" style=\"vertical-align: baseline;width: 35px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABd0lEQVRoge2YX5GDMBCHPw84wAAGogAFdYADHNQCGiohHrBwGmqBewg7hOtw14WUpL39ZvahD8ns/rr/CBiGYRiGURY14IAmtyMl0QNfwBTZHehyOlUCA0GMgSDSQBBGROrzuZaXHvA8llEFjCwZVJ3sV3ZEgK3ALyzZ8+96UENovls4lsypT/HojZDMuR29yLFW969/5R3whAmmLqkuOix1Wc3m2dfpXQJL1RsGQmyHykk6ujS2kbVgV8VdUwI7WgJtFNM0x7K7AuSi6+yYiCG/Ncr7BLZ3J6kJ2eJZ7zhirfbCinWGjDsdKxHHYwapdp32x+FP3AVigVTlJWt3knFXKHECqL6z4sabImtKmlYxanEa0mdNCdPqN7+eFr6LDqk7+QY5p9UWNcuq8jSy6N0TO1MaPcoEiEf48CKnzkCa7dajlnxbaRbZVQdPVVI5iJ8kZB3pZ7sRSkkdn3xX+WRu5uNCEELikdfAT9zZDMMwDMMwjBR8AxS7vP5/0oaBAAAAAElFTkSuQmCC\" 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: 31.1083px 7.91667px; transform-origin: 31.1083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, the third smallest perimeter is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"33\" height=\"18\" style=\"vertical-align: baseline;width: 33px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAkCAYAAAA9+eyvAAACF0lEQVRoge1YUbXDIAy9HnCAgRqogil4DuagDmqhGiYBD7MwDbPw3gfJWcaAJoXuvA/uOfwMkhsukKQDBgYGBgYGzoIH4Iw2E4CZbK2YaUwHbFt4i/AANgC/yqAcrX+SDY8HBbdnu9LahcaDxvVEXpVj6XRPCAfgTsGsiBu5JT5KQXmyfeDz5rGPkJlr5a3iQs4uRKAVIiCKlwY74XVSoWDLPEtmzgn73HwLrxoLdELMiKdQAt+uZ2buR8Ehb6fccAuvCVohLqgnJ/Zzz8zxNa4FK8WSt6KF1wStEHvgk8klPb6+NSFmEUftBlh4TeghBL/xUrJj/zUhvHKdhdeEViE4o98qwcjsXgvYIoSG14SjQjjEdy3rekD+PQex5lLxqRHCwmvCESE4k8sNyk2kQV2x//41T8PKa0KPHJGeULpZh9hI1W6FLJ/aCrDHa0KvquHxXh1yzY8UIxD3Sutlp7h15FWjlxBA3FTNF7/vDVGIG/H7xLaWR47wqtBTCNkLWBMvn2ruW+Qs3jecIYS13ZUx/HyRtxhEqxDcJq8Gm0nwH012R3g/0FOIgHi1tX5kNWnpDq28WWiF4IRU+iOEy5820ckqUusOe/Nm4fFe0nL/BaSEaflb8Gp1tSeyIL7nJ/Y/lnryfoDLVciMrRCco9/l2pV+2+voHOKJcc8QyE7zFFp4/x08YuAzOn0gDQwMDAwMDAx8A39JRSsd5481owAAAABJRU5ErkJggg==\" 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: 12.05px 7.91667px; transform-origin: 12.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e for \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"101\" height=\"18\" style=\"vertical-align: baseline;width: 101px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAAlCAYAAAADd3b/AAAFFElEQVR4nO1cbdXyMAy9HuYAAxhAAQpw8DjAARbQgAQ8YAENWOD9seUQSj+Spt0Gb+45/fHwLF0b7k3TrANwOBwOh8PhcKwAx0TbLTkoh6MBdkjzW40ngBuAa9AOLUbqcCyIAz55fcPIeTWe8NXD8f9ghxmFsplsdgCGinuS7abClmM7tR7Y4jXOsJ3xOfbc9WELx2yxbQlt3xYeWDnEoeHBLELZA7hPNrxdUSb9BiPBHnjliffJtubL30/3vlTYljBgHGc4Tz7fEDG/pNqpoW0LHKYxSH1p4YHFNtWfhgfdhXJC/gt8ID3R7fT/O95FMeDltL1izJzIPYRyRH6uob/2hetz9hZbK0LSSnxp4YHFNoYaHnQVCnXOU44Br0hEE71FbLkY/jJ9PyFfgq/QfbkakPNjY82NpxQRB4zjvTe0teCEcY5/kPvSwgOLbQo1POgqlBvGCcYQpilhGkXRORctyFGSyVLKRtWL1kL5gy6ybabxlER+wGfqZLFtCSnZLDyw2MZQy4NuQtmi/GXyJTWMxOSAXKQ4M/vcfbZsvBRNWguFnC/dZNKmtIQLPn1tsW0JiVAsPLByKDaWWh50E8oe5YHz9Ilfy/PvVDQB3pf/1PMbSuHoYVEPoVDk5u02fW6pzFDq9Kjox2IrhUQoVh7U2oaw8mDW8nDq5mFffFOcmzy3TwnqjPdqUw+h5KpPD9T7iQSYCxY9bKVotd9L8aClrZUHiwqFvsxweaWUQSOUWIpG1Rmeu/ZKvXbT/U6IC0dTnSOQH+a2laKVUFI8aGXbggeLCoX2GOEZGl6VkArlEfxvM30WpmS9hBLigPeNpjYFWnvaBbQTSooHLWxb8WAxoVDFIhYJuFBKlYyUUK6Ipx1zCQUY50XVFS0R1p52AW2EkuNBC9tWPFhMKLQPifXBhZK7x4C4UKgEGHPenEIBXhHtifiT+RTWnnYBbYSS44HVtiUPFhEKlelSlSpL6kV9p1aiuYUCvNKDcNVL4RvSLsAulBIPLLateTC7UKhMl3sIVlP1urC+z0gfDqRU6Mo+63lgEHiVu6VC+Ya0C7AJRcKDWtsePJhVKJSzl5zDn0tIhXIK/ta03qsLjUt6lISiXU3qZLHVotZ/Uh7U2vbgwWxC0ThnA9ng+cqzxxgRwhduwkb7hQf7rOrNNQVoRZFEeZp7Tepksa1BjVB6iwTow4PZhCKZII+CFBlzUfjCrtEejFxijyKJ8nTaoCZ1stjWoEYoWh60sg2xyj1K+FQ0hgPev+DSE1de8dKe2M05aJj6O0K2dxmQf5mMory04kW5c80GV2O7wzhHyzEbrVBqeNDCNobVCYWi6QnpF/bpmrA/OvAWmwylXZqSK1B2ED9omauaEPhDxSPeSUepwk3QD/CeOmlfRtLY8tTWsrpq7C08sNimsCqhhKTLtdQpYe4kIiGlGFfoo2HJQfz4jCSN4aVsSgOP03gfk710jHxeWmhsqXTKm1aYfH94L9hbeNCCQzGsRih7lDdU0l9v2WEkHl17Qn1Vh/pJbdy2GJ1HGz7JUn5gNvQk+Ag9+WhsNXPT2h7x/usi0rGGc+Utlq5aeNCSQyFKPAix6FmvtUPr/G/EDm3fgPxVuFASkLw09Au4QFcM+V/hQolgC/kG/JtxRr/XhH8NJqH84fNogPU3t5bGgJE83z6PEg74/bSyFvy3w6hRsUSNVOWh91Nuh6M3cj875XA4HA6Hw+FwOBwOh+MX8A+XjItEEg0W1AAAAABJRU5ErkJggg==\" 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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 21px; text-align: left; transform-origin: 310px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 305.717px 7.91667px; transform-origin: 305.717px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe output can be very large, so please present only the last 12 digits if the number of digits of the perimeter exceeds 12.\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 21px; text-align: left; transform-origin: 310px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 282.908px 7.91667px; transform-origin: 282.908px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eFinally, as with the original, the use of java, BigInteger, persistent, and global are not allowed.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function function perimeter = rthPerAPTdbl(r)\r\n  perimeter = r^2;\r\nend","test_suite":"%% Test Case 1\r\nr = 2;\r\np_correct = 71;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 2\r\nr = 3;\r\np_correct = 1393;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 3\r\nr = 5;\r\np_correct = 1046629;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 4\r\nr = 10;\r\np_correct = 737287485879;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 5\r\nr = 100;\r\np_correct = 16183149010201;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 6\r\nrs = 101:150;\r\nps = arrayfun(@(r) rthPerAPTdbl(r),rs);\r\nps = mod([sum(ps) ps(5:5:end) floor(std(double(ps)))],1e6);\r\nps_correct = [12636 824229 203679 227761 926641 15749 664839 210241 515881 139269 477199 789840];\r\nassert(isequal(ps,ps_correct))\r\n%% Test Case 7\r\nr = 1000;\r\np_correct = 499499001002001;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 8\r\nr = 10000;\r\np_correct = 100020001;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 9\r\nr = 123456;\r\np_correct = uint64(76696064606196865);\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 10: Forbid java and BigInteger\r\nfiletext = fileread('rthPerAPTdbl.m');\r\nnot_allowed = contains(filetext, 'persistent') || contains(filetext, 'global') || contains(filetext, 'BigInteger') || contains(filetext, 'java'); \r\nassert(~not_allowed)","published":true,"deleted":false,"likes_count":0,"comments_count":4,"created_by":2404920,"edited_by":2404920,"edited_at":"2026-03-04T15:24:47.000Z","deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2026-03-04T14:14:29.000Z","updated_at":"2026-04-20T11:04:36.000Z","published_at":"2026-03-04T15:24: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\u003eThis  is essentially the same as:  \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52834\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 52834. Easy Sequences 32: Almost Pythagorean Triples\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e; it even presents the same set of test problems.  The difference is that the \\\"correct\\\" solutions for larger cases of 52834 were the result of roundoff errors due to values being larger than flintmax('double').  This problem requires care to avoid such roundoff.\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRepeating the original problem description:\\t\\t\\t\\t\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\u003eAn Almost Pythagorean Triple (abbreviated as \\\"APT'), is a set of 3 integers in which square of the largest element, which we will call as its 'hypotenuse', is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eless\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e than the sum of square of the smaller elements (shorter sides). This means that if \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the hypotenuse and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are the shorter sides, \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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, satisfies the following equation: \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\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"19\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"99\\\"/\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\u003e        where:  \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"62\\\"/\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=\\\"rId3\\\"/\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\u003eThe smallest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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 is the triple \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"48\\\"/\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=\\\"rId4\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"19\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"100\\\"/\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=\\\"rId5\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and perimeter (the sum of the 3 elements)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e  \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eof \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"18\\\"/\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=\\\"rId6\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. Some researchers consider \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"48\\\"/\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=\\\"rId7\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e as the smallest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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, but here, we will only look at \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's where the hypotenuse is \\\"strictly\\\" greater than the other shorter sides. Other examples of \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's are \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"56\\\"/\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=\\\"rId8\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"71\\\"/\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=\\\"rId9\\\"/\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\u003eUnfortunately, unlike Pythagorean Triples, a 'closed formula' for generating all possible \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's, has not yet been discovered, at the time of this writing. For this exercise, we will be dealing with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's with a known ratio between the hypotenuse and the shortest side: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"50\\\"/\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=\\\"rId10\\\"/\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGiven the value of \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e, find the perimeter of the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e with the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er-th smallest\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e perimeter. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eFor example for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"35\\\"/\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=\\\"rId11\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, that is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"43\\\"/\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=\\\"rId12\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, the smallest perimeter is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"18\\\"/\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=\\\"rId13\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"48\\\"/\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=\\\"rId14\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, while the second (r-th) smallest perimeter is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"18\\\"/\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=\\\"rId15\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, for the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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 with dimensions \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"71\\\"/\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=\\\"rId16\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. For \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"35\\\"/\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=\\\"rId17\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, the third smallest perimeter is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"33\\\"/\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=\\\"rId18\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"101\\\"/\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=\\\"rId19\\\"/\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\u003eThe output can be very large, so please present only the last 12 digits if the number of digits of the perimeter exceeds 12.\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFinally, as with the original, the use of java, BigInteger, persistent, and global are not allowed.\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\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image3.png\",\"relationshipId\":\"rId3\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image4.png\",\"relationshipId\":\"rId4\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image5.png\",\"relationshipId\":\"rId5\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image6.png\",\"relationshipId\":\"rId6\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image7.png\",\"relationshipId\":\"rId7\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image8.png\",\"relationshipId\":\"rId8\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image9.png\",\"relationshipId\":\"rId9\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image10.png\",\"relationshipId\":\"rId10\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image11.png\",\"relationshipId\":\"rId11\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image12.png\",\"relationshipId\":\"rId12\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image13.png\",\"relationshipId\":\"rId13\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image14.png\",\"relationshipId\":\"rId14\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image15.png\",\"relationshipId\":\"rId15\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image16.png\",\"relationshipId\":\"rId16\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image17.png\",\"relationshipId\":\"rId17\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image18.png\",\"relationshipId\":\"rId18\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image19.png\",\"relationshipId\":\"rId19\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAAAmCAYAAABwHY/hAAAEBElEQVR4nO2b7ZGCMBCG3x7ogAZogAqowA7sgA5swRoowR5swRpswfux7LAiASG7RHL7zGRu7vA0m+x3IuA4juM4juM4juM4zqGpAHQAngBeAB4AmqQz2ocCwBUk7wskf5t0Rnb8J1nVqEALdgZQA7iAFu+FvBevAHAHyVuD5GfncEs4Lwv+k6yqdPiMEmcM3iVXziBlkVQYHEO1+4zs+E+yqnIDeRZJgWHhxs9yoQNQTvz9DpL7CGllBZrnUoTPQVamwLQsu8K1R67GEeKG3/emsnaISY2OICtTgJzAExQJk1GCFq1LOYlEPHAMp1AjvjY8iqxsFCxvUuM49ZM5gkfRhJ3CKfVEvqDBoCz1hv8/gqwlqFY6gaLlTxjHA3l3qkJcQdFSy5O2sIvArCxbmybaslojI2Uy42hBC3eURdOiBhWomsWepXFwzbHlvS1ktSa5cTSY7l7lTglSNm1lsTIO2YZdqyhWslpjahxF/wGh/LQCGcbRFi0EyyvrphKf8hcgubfk7UtYGQefQ73wvl8VPmWWWMpqjbpxcPvrAUqVWlA4feB9gfiUfMow1qRYvDmxI4YapAB8PeLS/85tS6mofHI81edvEd+QsDKODkOrHaD5y9Yut3flflrLao2qcTQgBRkrPRdydwwHKk/QYrajccPnyeocrIAxI+ZUnq++jJVRXomRC8uOYiz3FTrppZVxsCzcyXn2P2sMhjP+XGtZrVEzjhPCh3jy4hl7kzllXeNRpJfeOrYqEhv91P+zkso0RLYGp4ZG6LYwDtnCveC7Pd5DVmtUjEO+yVSKwtcNfj2MroE3/xF4fll4vhVZx00Nntdt4XVr6jwZBVn5x8gIrhkRUqbMKsYR0+I7ItKThu4IcXRckyJ+g9ywmLFms2VtETrAY3m1L46mTJmjjYPTqVDUyBFWlnvgOZ8EzxnPVrjDFxoyvZl73bfzkrKE5JWXRrUdZKqUGVAwDlmMpSiw9u5WSWcQ8qIy3957TbRrDtnCDcmbq4OMNg6+nBXyKtbs3a1acgbS06b4Uo+2cbC8c2vE0Sq3LzFFG8dSyLVm727VkjOQxqpdb3yDtnGwvNeFzwsV6kcm2jhk/h1anDPyOQWfcwZ8sU7WGwX2vWynaRxSOaZSKvk8p04kE20cMr8eLxD3u0Ne54jIrgwbPMvZ4T3/LvvX79nT1zQO2cIdF/A1aA1y/ppBtHEUeE81mv5NT6Co8st397cglZ87Qk8MDqAdPd/7sMvKOHgfS/H3nG9Sc8SXXbhNshYgJZB5fE6p1JgGtFh81UXKWfbPrkjTudGuOSq813Ud8t5bYLjGNFWbtsjXIWRPDdrA3CK24ziO4ziO4ziO4ziO4ziO4ziOY8QfaJ4ygEB93kYAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image3.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAAkCAYAAABLw14kAAAC50lEQVR4nO2a7ZGDIBCG3x7swAZswAqsIB3YQTqwhdSQEuwhLViDLeR+wA4rB56woLnMPjPMmPOyfLzLskAARVEURVEURVGUT6AHcLNF+VJaAE8AK4C3LfdLW6QcYgDQCL5/hxO8L9IipQo3AAuMUJ3AzgQnuPKBcKHfMGG5FdgjW09504rQQNafryEktDQEt8zeKLQlpYFZXtYPaMul1BCaGJldybIggQtNbRkuasufdDCDz5OmHvKQRINQS2jiaW0v3t97lOnHHiGhpwp1kkbZdnlDn/Z5xjb5yZ0toUGoITRB9TzsZ79uEkGyC/BpA/WUFrqHGbfF1kXaJPelQzgzbuAav2Y08GyhYW3zEPoA8LLPg30uub63tg7fmUoK3cBFLX6mwHOVw4dLHZwgoRlMBh+Bd3uM2Ao945z9MI9IE35n6XyQZkE9ZwgNGLHJSX0HvSHRebnYIQ/hMzz1ePKsAfGhwVntcwhqT+z9Hmf3a0bcOSmCHo5UNDixjg9wncpd785KYoDt7H1H6uBOnLJHv8KB+QwW7za4sdh2gTqYMxN8zhCe92mK/A934pQ1fMB2d7Gg/jaL6pMsPb+M+VsXgs+W2ODlEBO+xH6ZEpvY7Aa2szQH//yglvAdCo7/EWN8YGokW6E9+QyZ8OREsVDNnVh6g1ZbeH54JLb7lzG+tZGs30fxBy9HeO7EsQRzLwHKpZbw/LZPbG/PGGXuFB5p/b6h/lmwP3gpovM+hcI5vV9Qx4F7OIcqITzPR2IO3O2828ATFx7Sexix+UHMBCdE7ZlOUH0pgvMDFb+dFNFegXelKSU8X35CSxRpdTjp5TPpZQuJDfZuxblic1IyeC44fa+DG/yzb6pCwqcuUzxq3eHuAuj0MEmTBmb2zjAe5IeG0b4bUw1fCB2lzrY8YPp1ZftJoFyno+/zPn3krRvd5kjKf3G0I7T48p9a8XCWW666y1YyoOVCUvQnQYqiKIqiKIqifAk/IsB4nRPGszsAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image4.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACsklEQVRoge2a0ZGDIBRFTw92YAM2kApSQTqwAztIC9awJdhDWrCGtJD9wDcSFQTDI+4OZ4afDAJ5Fy48FAqFQuH0dI5y+eag/gAX3LGL5gU8gGFRbilG+o+5sY7ZAxPPaF6UWZ+KC5lEqKb6W+UK3I8MwkPj6a8H6g/b9/2frVJ52somQjc94yopV1UFPD19DQn6uHnaX5YnftGziJAjKDY5BBcfDyl7/y+LCB0w4l+SqRDBW8U+JGh7h5B7YL0sIjxJ7/kuWvaX/6f0hIk8Bo5FXQTxzhazWWozYqxibzP8hJBjeEO41aqLMLLepHp0BNnaLB/T7zms0EasKCQJUxVh7wTRkzY4S8GX4ufMa2QsIbaovhLqqV4L/LB9ckgphJ13bIlyTdiXC7GiR2D9bHmCULMW49C9SSA33o/HT/StKcaK4AsiCLZVaQem4v1cryk6xFkRfFEEmGdMjnuomnlFpE4ObWKtCL4sQs0sgmZyJfTMK0+LWCuCL4sAs03kEOGKvgixVgQnEGEgLLVPgfzZUbn9GCuyn4sm9UrQvGYQZCX0Su2L3cVu/KfYE2JnzlEkSFq5gmz8sRNKVYRmp44EZatOhdknOsKuOOQliysAIrjrZCTvfo9eccgqO2J1aiK0zCefkXUgJU9wLV0RSMqeEHZC1vEeSMkTHo527FPaC5NMxiLjPXJbrCaCNLy8K+ows3HEbwvLrHrPxwfe649TX3fmS0PXDG9YjzXWUmQSHLFoVTuqMUGwvyyQJb9HgxFiYA7iHjfrmYFZ9JCAyuQ4clBopmePrCA4wekohJyf0lzQO8L6+jy1CA35Xo2Cmc05EkebU4vQ4N5MNejJ9xrW5iMRWtbf16RKuipMQHIkcWDsLoflyfsVu8hJMhrXGyzta+K/ju9znEKhUCgUCmfnFzTbYsvcMy9LAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image5.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMkAAAAmCAYAAABu1L9SAAAD6ElEQVR4nO2c7ZGjMAyG3x7SAQ3QABWkAjpIB3SQFqghJdBDWqCGtLD3w7yDz3zYAdlgomdGczO7XGJblixLYgFFURRFURRFURRFUX6KO4AOwN8gHYDy0BGloQTwAvCBmXcPsxZX5Fd1LEIN4D38e4fZNFzI6sBxxaaEMYoHzDyfGOfdHDiuGPyqjsXoARTOz7iIr/TDScYL01PjATPvT/rhROVXdTyhhPEKIcJjlh7U5Q6zgO+4QxanwPKcHzCelHQAbs7/v2H0sO7vzsaavluMRnFFHW/WTY9RwT6ZWzSbCnl6GTvmduWDsMXl3eTMRnLDeI+aky7gM3LTcQFj/H/YeJeiVwgVXxxaD889tgzmIKj0JQm5ZxTIY+M02KdfIB8d3zAaB2WTkXSDuHGn+2X0kj5amGP4zN7UpcP+zV3DeOgzZ314iuzd3Dno+A7jEO4wY91sJAXCwgN6Dl+oRW+aU9ajhBnz3vRtD9nM1i7Pt8ADxkjWHKKPHHVsn56bjCRkssxm+J7tcP4j2IXHcYXtm6cZPkfSs8Ywkh7Gq1bYPtYcdbzLSEJgqOW7vD7hP2nOBr2iLTwRQg2GhTbp0ENaqYwGbGH9I3TsOeoYSGAkXNzW84y0J02Be6lzxecxS/jvc1uRVupaBvODsIRMjjoGEhgJQ62lmL3Gct1gzbDcZ0PrNGuyZbOyZtDg/wueL+XNqvvcd0psphhKrWD0+MS80cTU8ZFENRJfqMX0cTsMxJZvepl8KdhQkYiVK0yNxfWyBcyadJjOu4NMSBLV8w0wI7dWD5LS8ZFENZK1UKvEelHqm6Iaw5a9IqkwOxSzC2w3zJ84u3PxDimMBJjOx87QSer4SKIaiS/UujrcPKEV92/wtQJRqbXnOQl4MroOQQqJcHrP5o5mJKFZrStjZ4SkPdBaG0yoSDZT8uSM0aApEU7vKfZGM5KQrNbVsZsWpY3kifXQkd/7XnlGsgWGd48YRiIRTu8p1EYzEioqRah1ZHbLBxc3xmeHfG+qNhd6+5DWo9yIYiQssqUKtc6U3bL5pmdNmtRGYmexrkYUI+ELRKkW7IzZLSC8Zy0GqY2Ed5IrJmmiGAmzOrXvwczxZU16LBcMYyOpVIazS/Ng5BAjs3UGxI3EDrWO2BypsN/VfmE61xZmDY7yrJJKtWsdDf4PoVkneQt91xkRNxKGWlf1KsR9+egDE1axknz0XwSRVKqbbmYT5xNm3rn2ZIXA10HmiqWbYWryirGpC9/ptlOqDc7xroR0DF3DzI9zZZvJVaOFAstp9hb5tfsrM7A/6qqbWFEURVEURVEURVEURVEURVEURTkZ/wCi5zysuW8z8wAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image6.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6UlEQVRYhe2WQQ3DMAxFP4cwCIESGIIiKIMxKINSKIZBKIdRKIZR6A6ztWiHxkm+qkjzl6xenOQpL5UMeDyevhIBhEzPAOBmrKEFZAVwGDbZpc9SSylISEC0zoDGApgDn1syZwQwy/dpBNqk4klPkH32EpjfzAagKIfk3tiESl01QBYFD1ToqgGyRHW9kL/JS4BU19oCwwRSXWMPQDRdLCCaLhYQTRcDiKqLAUTVxQDaQNTVChRB1tUKdAdZVyuQTgpTD0CprrORpCg6VijQXLBWdW0skAXfoSutVQ7LRdfT/i6Px+P5u7wB3c96XQFb71kAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image7.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACcklEQVRoge2aXZWDMBBGrwcc1AAGUFAFOKgDHNRCNSABD1hYDbWw+zCdQ0qbPxpSFvKdM08tnXRuMhkmgaKioqLNq7NY881B/QM12GMXrV9gBIaZtSlGumO1vMZsROIZrV/KrE+lhi9BqD94NlTNw3L4Ohn+qshns0NogR+gX+I0QBVwQ8Zn2h24rODvjPyfub8BAROibBDmg10DwgkJ9jwgpl0T+rt6fN0JA5EFwhWZhRfWhTAgoM3ioOZ1ZZwT+NLA3ZgCXTGtdPU1RvxWtJamo7UgnJGZZ8v/XWLfIwLgnSqeV6RvT9oNhB53zq94ThOfqEZmu2sDNlOVby/aDQQzLdg0kAbCmfDAHgpCiBTCkMGXCcEXp0NB0A1zjVJ1rvbhy5e24EAQTkxBCa3fP5FWZCE9ocNA0OooxyrQ6ihkFcBBIGhQcuwFMAEPjc8hIPRIXR/b01miGvl/Md3k3UO4IGkhRxOveviKbY3sGoK2EHIBGFnWm9othP8CAHYKQTu2LgA16UrVEACupuFmIVRIPu+Im801Ugm5xqYz14SgZ78tcRv4DX/V1WJv9qnvTUKYt59DQCiAEftheoesEjNw+iIXu0p1jFeHL/2OK1ZZIZjtZN+ba89zYFwzCSYArkMW25lC/eZzX6p6d3pnM9+ZQhYILRLU+S2DAXu6qY1n7vgh2H7/nfW8ppyO55sPLgjnCF8hN1C+dtAfo5xXaRpklebU5iGEHKCklO9waA1tGkKNpIcctT5Iykt5ESBUH0G4MN21UUtVe1dIQHK0nUHSXY6UZ95PUtMLENGyVQKL7lQeSGaFOLeioqKioqKiresPwN5Zrqu1TD0AAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image8.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAlCAYAAACao20PAAADbklEQVR4nO2a3bGDIBCFTw92kAZswAqswA7SQTpIC9ZgCfaQFlKDLXgfcIcNEViE1cwdvhke7o3KyuHnLAhUKpVKRYGHp3RXBvXP6eBv92RWAC8As1OGEpFWdhnw3d4vGC2SWVFH2y/Q4UQBb9s9HYDmSKWJtCfXx+tNIaddThGwgxnqE8x8PW73TzDBl+S2PX+BXR/o71mhPs4A4A3zXhL67frVKSlxqgt43669O/9vYQPujwSwQwsrlNuT6bcF5UV0hZAI+MS3cLxI41QVsGfB7E0Nj8jvqVAj+joEdaaxQF3Ec3suPVsiIDX6CCtSAzuC6TkvQf2qAlIwvhe6wQb7PBIEg49o3xpEL7tk1uVDKuAL/k7UwMQXexdCTUDeoO70ySGRc0chvUhoBNI174x6QkgEbLf6Q+/Kp9dQ2wGKAvIpJRTEDHlvC9Hgc+rZayBqmNzR7kMiYA+5KJcKSOtbLIhReJ0E/izXyJCJeUPPiaaYmBBcwNgydYqAoR4vFVpCA7szQdNyB9PrFxiBNfPBUgIOsFN9LF41AXkvCrmpkgIC3yKSkKVSlRClBKSZRLLHqepCJW6q5BRK+ETMWWMllBCQXKhk9AHKAnIjE0quSyf0NKqfzvNL1rFHCQEp9pRdLtWdGG6Jl+3vB+xOOk9cS5gLGtEk1A2fTjelcVLJFZBSr5QTnVP2QltY0WYYEQd8W/9cqPfuNSCfqq/MA300MHGlpjinnka4lDYwNF36pskJuqPwqIC0Zh/JTy8TkG8Z+RLvFLjr9ZkV6e7QUY4ImCMecKGAfDSUcIcSAYHfE1AiXsh4XSIgd6e+4JrtugfkAtOI9pkAvua6hom+N6G1+QipAo4wniDEgPDpyekCkiuNJdfcdEhHKa2pvimZOo7bwPxUJMdFptxP70eufK/QNZINk0PBpgjYwtr5CXFB+BS7Qn6GRx3k5dRxh+k0E/bz0dUpqSkNN2Sx/Va3c4ZKzJ2rCtjCNNwMmwOmpB4TuzflEPaGz7RlRvyTR56bpgg4sDjdsjf9955rfSWWE6oKOGwB55qUMz9X7KCXJ2pwaR4oQXIAWpIJOg5Vi58WsMX3WqbJCL3DXi2yBLzDfs9IpdRhaQPTmJqfAXIG/P5X5fz7USrkrJPxuaZD3+lXRHCn65ZKpVKpVCqV/8Mf0OnMkPT9w/AAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image9.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEK0lEQVR4nO1bW5HrMAw9HMKgBEKgCIogDMqgDEIhGAohHEqhGEph74dzJkpqx7KV1+71mfHH7liJIh3rYbtAQUFBQUHBr8UjMK5HKlWwCa4I+zsZPwBeAPrZaNbQtOBUaPDt5xccB5LxgxJd/mdcsSNxqkEmh3AWWStquLDcDeOWIEu9q5V0kXbQjKX3XpTzfNiFODeMoU2OFnGFLbIWVHBkeQ/ve8AZOhXUvV5JrwbftgiND/w63zB+lxx9YL4PmxOHH9rDGb/FVOl+I1kLavGeFGPO8cCo61rE8S2i0PDZp43IhMg2x6bEucI5wBfaO4zK+p5jkbVArmhLVKNh1yQOnxlrQNrAPMp3GMlRDfPkgnwl6JIMjdN6hA12wajofWXZXEhn98gnTQW3cp9YlzgddN/7hj9yvIZn+ECdtfpuRhwyOfaMH3xHFYtsLqThtOE6hCcc8SQR1yCOZqujhj9NMf0uLQaZxmIE3bWrkmDUiH3M2rIhyPTXGp5zh9OLHcvaNU4MdP58c+4GPRlOTRwWjjkRwyLrQ4VpPcJoU8N9ozb61HDRinY5gjisVXIiptRXU7/uTpwGzsA5jrfIhnDHaLA3HDFlvuf/Y6vwhWm02ps4TFOa4tYHNgaaSL4rcWpMC8YP9MWtRTYG+Vx2HTe475t3HKE01sI5TBp8b+KE0pQWTNca+d2I08IVbL6Np1hNYZHVQO6N+MhYzebMo90VjshzcuxNHEuaYnOgrRsPSVUXfK9yrWEtsiFoNr9uYp7sWGhwH+H2JI41TbFu1Pr0sOIYmLZ/qeHVIjuHJI52Hlflcxg+7EkcS5oi6VJuNhxKHNnNhIy/hewccv9mCT2mRLhjLNR9B4yy6G7E/7c4Y8tNU9Ugm5ryDyUOMDojx/kWWd9zZCRZmkfiyL9TxtrRh05MTVOs3XLqxNMQJ6dDsshKyLS35NQ5wVi0h4YsqOWlN8uutA8p3RBhIQ1wAuKEzlW2lpVgjo/leaYD7creq8Zhqk2xg4Y0S3tlhxKHL7eESp9sBReFHtA7jNEhRApZU2mLSA1xeJ+3QV7tw27vnSDTIX4lpUH4QBTYkDgXjCvBdz2B2/O+U2iLLDA9d9KudulkHzHYrqbcAYoRR57y59Zq/Fbt4pPzQxfQOWfJv5sSRxrlI5TtsLyFb5EF/DvBGvA4g+QhKdkdPZEWFWLEkSmSIzXtUl9N9J8vqKURS8ebX+RiWOzhDP+A7pzJIsvjiR7OsFriAGOaozxvH+akZXZeSwXxA9NCOoU4fL4mUt2wXMin/lrl8OJ4a/yWn+zwxuNvwZ8mjuby0lnwxLq3GbfGnyVODRf+97oHY0GHdQ5r94SJOHd8b7OvvbmVA27OnUGXGBqcP5XK31/Nj1OSEarGrQeOBeeD/JnPfBQUFBQUFBQUFBQULOEfKW5XzxL1fJoAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image10.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAlCAYAAAC05kydAAACWElEQVRoge2abdGDMAzH/x5wMAMYmAIU4AAHc4CFaUACHrCAhlng+ZDmGjh4SICjsOV3x4eVsaYkzVsHOI7jOD9ClVoAJ1IC+KQWwok0AOrUQjhEBmAAkKcWxCEqAH1qIZxIB+CVWgiHeIDc1SO1IA7xAu0Q5yL0oJTXuQA5yF1lqQV5Yuwz8zB2Z57hsrzcN6j+2DMfk1nmrwC0oO05IFpFFsZ5zJJpPA+49ub9Jcj/t0H2BlRta1sgHwCFYb4HSIkDqIjk+MNj5kq/Cw92IGV0GCvJUqkOB1xbrTMXa5FWWorfXsuaCtheILdWeox3QYEd6+FF1Bi3CvizJfVrD7i25P456MXMVdZsqZqquwnf18CKnioDIIPgOU3JAbcHWCF3TPUyRGXMKTMP42tuyNIqWdt1xcr9ReSDvVKYq7HZV08ooWuVPBANYMmd14hhwITczlt9d0q4orYmH3NoWyXynS1lTxyDzZ1iGbyP2B1nZ1mVkN+SGU3RtkqkASzFGunOTDJxAXTk7jg7y2qwbq0atK0SjQFIIzdxlHVJzs6yZL20RyE9dHXKmgG8xH1z/ODF3PmIUvrzJXdT4P+Og6VV8p8BcEE6jR/1yvwAxumuNu++ItJfz1m45pCJ6y0NnD1NvQrPk0/uq9swMt09yl2lQu70EmSNRRjXGBs/p0EG9QGx9cRdDlkQfmCIh9zHarUPXJwStHheUw1dtmZtlSD87htR4VN3xLvC2/cbeOPeLvur4Dh69yOGr0HbKnFOgmONcwH8XyUXo8I9jxq+liOOih3HcX6BP7UvFJF5pfzWAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image11.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABdUlEQVRoge2XbXWDQBBFrwccYAADKIiCOsABDrCAhkrAAxaiAQvtj+UV0oTsApsspXPPmR/54sy8zMzbBcMwDMMwjkUBlGMYIzUwAF+/ogGyhHklp+delHl0/FOBapwAFZMAOfed1CTJLiEZrvCPhc9LJnGGdyV1FCrg0/Od+cgVL8/oQNT4XUljt0ucEjerQpb415E4AyuWcoXb4lcmZbMxutl79YpEyggRu/VbXB2+8XuIZrLHCdNzK9iaLf/MTkNjUxFPUC2bpkDiNLjEJIZe5wu/e0QXIdZ0qg+51SbBZYUSp4+X1yHQ2ljzB/9wYRLnyrmsrsIt4c01aVm9YtZTUuBquux5yHzxxuiaI7hVgeuYXcJI3Zhdk9qtoggDbiaV0O6HjaR0qxy/MBmBlq6D3hkuZDqf+YRtWb6k3jxMXdPuTi0tEmbAibMUHYFXiLmFxxqpFEiY0H0WdNrXvaqLn+9bUUeExpnOcYZhGIZhGMZWvgF1o8SVzUIOYgAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image12.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAkCAYAAAD8fqYDAAACEUlEQVRoge2YbZHDIBRFjwcc1EANVAEK6mAdxEEtREMlxEMsVEMt7P6AN7xkmwBpd/Mx78ww0w5pApfbmwdgGIZhGIZhJE7AJTa38lgOgwcewPeodQTBjYXc+C2qbk9M4EVcCAK2JAEdcGXo5H6V0e2cniDsKxzBtSLw+b8GdQTOBHfOvbh0ZHz9x6COgicvmMTGJsR1pFLmCGhxS+ckGugYkRKvGgc0hL9YGz/38XvNDc+khXmnfZIrQdhcfBCf3RFyuiFEShfbN3CvfbiPN3swLFda0lu2tBiXQbzTnrUTyCDzaDLXSTaPBVyc2XOrKmVMzWT1Si9t1e6YQaqFnGtlAV49uyGJW1wr57LIxxvvuXwRYeaiRoR9TPTfMv0vEWd+0ilb4kyY33XmGk8ymJ+4po/9t9IHSxzUvEH3hCOYJyeIGGxq93YiL/4v7upHnzw52kK14Ahi5YTVBptyd8sCnWRL+On99trVQqmwkDeYdm1XM4i/OsxYu1ooEVb+3jmDaaMU5y0Ms2bK7l/s65iuJe+wK+mQZ85gLUNne4JOdwriQWfJuNRysX/qpGmLyHxuhPLrVZNrJNOlCtBnvTL3O8NMPsXrizYR+iiuJ6zMhXQGOle+bA1tlFzTLtXiPUnbXjFVM+qv2p25+AOdd3uLAk9dno9N4wku7Qiu13M/xb6WY5arhmEYhmEYhmGswQ/bvA+w30MOtwAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image13.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAABLUlEQVRYhe2WUbHDIBBFjwccYKAGoiAK4qAOcBAL0RAJeKiFaoiFvg+WmX2dPEIC5fWDO7Nfu1lOLiwJdHV1fZcsYE4+M0jcaoMswCuzsQFm4Ak4iafEvQTEKJAYR0AWeMji726u0sPv5A41Et5slAVygWKt28kZYEvks+UygaaMOu34aZfOAsUt2RI1GvqyS7lAcTtSQIPqtX4aKNakgGxmXVWgo/PRDMiruvEbgO4cn4+mW2YIF2LKJT32j08DIXkN5eX5meDIqnJLCyAITk2yoBcIR9iumbxzVhUoBRrvqr1vXXMg3Wcq6FMF6MbxBDYD0tN36dejJpCeurUGjOX3GJ/5QjvCId4o/FOMIDPB4vdY/ljAEEY53jle6opduSorAMN/QnR1dXWV6Ae9sZqCc2SAGwAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image14.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAAC1UlEQVRoge1aW5HDMAxcDmEQAiFQBEUQBmEQBqUQDIEQDqVwGEqh9+HsxHXjWG5lO3fjndFPH7KitR6WA1RUVFScHqNHLiWN+gO4wO+7aDwB3AEsjvQalv5j9Hj32R3Gn9F4ou56LVxQkIRuFS10MDZJRHNdAGi+0F2MhOuqY/5Ch4ufVadEbkpr9uu6M7bcfgfwADAIdRQhoYExUpMEkioVjVQ6rbquB99JyC5CwoLNGVoksMi1B79p1jV/FNbrsTUnPnCjHdkEFCBhhHECOwINEtpVZxP4HR2nkYpmhO3nZgulpawkdNb/aKAWCRJb6DiNVET7jyKBvwm17dlIaGB2Kw8lmiRI13/CpIhQxEhww5ZS95xsr3eadDTBOJ7ITQJT0aSkr8VroXeLMwuz5CSchYQrTBTY/XNuEpiK9jqZT0FiKRMMOTPM80rXSk5CCxOSbsjmJEE7FdlwieAzxayTnIQF+ykgJwnaqcin3z0MSolISgLb0T1jcpKQIhURHV4HmTYRC2REJCOB7ahvjpKLhJSpqFv12s4esB3SSEQISUhgOzrBP0DjYW2xPtMeqgHpUpE9enHt7vBKRJFzApXGSoqoYMRpp6IBx4c1ZgJJNCQhocP7xYUr3CkP67OPbpcOwF4+RSqSpFPWokdAV7FRdo6awN2aoiuS2D/ij5PQwDhxxOe1gnVHcuXKu98esqghwUcTWY42QpvgtCTw2E+JJcJORaHZjTuCkESnXZh9syNeMoVsPy0JzKf2SCAG3KmSFtEuopQQcfwfHT1gi6AWW92TNATFSLjhuBh3METwYWJJoH5pVzTi9c0HCQlEj21AyQmBTUoIRS/6pcj5Ks0FOjdvsWuemgSGvHaL6cMM+QW9Fk5NAucyKU7Se5ig9xZGDL4iYcD7OCImlx6hgXGIlr4QeuRJebyKtYVNRDR8owftU+9/Aw9we1JRUVFRUVFxdvwCuGJ2Vt22a+kAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image15.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6klEQVRYhe2WUQ2DMBCGfw91UAMYmIIqwMEc4AAL1TAJ9TALaJgF9sBd0i2DXQ9u4+G+5MIDBT74QgBwHOc/dAAuwumE54wAglZoAjALZxSIZForlX8hNcjMWJ7SJ0IlwqMSKjRxY02gC0wr+xOAgbb3PUKRLvKtdQ9ZLpDYLqG1BDU3bOc6TEgC53pA9taYC3GuLFxvLsS50hmEWnOZC7XmMhdqzWUqpMllKqTJZSpU0J7LTChCl8tM6ApdLjMh/mL3ZxCqc239kvxMiHMVxbH8O8NCwxFCI8m0vF2xOu59MpabdBzHcSQ8AUZlel3qgGXQAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image16.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEa0lEQVR4nO1bbZHrMAxcDmFQAiEQBEUQBmVQBqUQDIUQDqVQDKXQ98PRZOvKsp2vJve8M565mUtsWVpLsqICBQUFBQUFh8U1MJpfClWwChqE7Z2NN4AHgN4b7RKSFuwKLb7t/IDjQDbeKN7lf0aDHxGnzni2GtbSxhnAbYYcIcj8OXJqqOFcejeM88z5fLBupkDePU14b1PitACeAO4Z71yH9UJjKc9XwRnXn/8F4JI5zxVun+/h71zDxHDGGC543Ib1LZzg9vnCmKs84UJQ6kHZjDhnjIp8I504FdwGQ6TpM2SwcIqsI0aJoca4zx7LEwZwh0/mvw5ysW4tndRw+3zikyQVzZHiFTchzg3uxF6QTxw5DbFTNBf9sA4n9zW+PZCl1BZ5J38KmkFOTQ6WVbMNk0PzoEKGN+Kybx6qconzwjo5DOM8rBNy0xwqQ3Kz0nusR3QrnJxIBo0Yso8Xwp5QiBWzz66JIyf4gvlJqoU77Bymwme+o/3/hbhR5qJCvNxheUaR8WG8z17LIv+uicNxW4zSYXkSdYgbu0eYOKzstb2jBfE4Wmg/Y5SxM+bgdMIi6W6Jw/mCNjqsn/cwhDh+4sne6I2RgDWmXXPnQEKR5m043FrelUOuRbDdEgdwSm/gNnrHN3nWzCV8hJJKPqFPOAP5t7On8t7SaId1Q8k76y+VOFZI2zVxfJzwTaBJ30smrCsE8D2IL48U+RqMNas1w1jtyRCqOfXIJ44Wlv3nsvEL4gg4jL2wvtcRN68pnItw2v8r75klK8c3jGUE3xv7JGXixHLEP0scwCnGqlksBbkxhYpqrORQPsOJ6VIFSx+aN2aCMHEsfcVukILDEidWs1gKdziPEfJqKUr2n1vTQ/KB4jBeQhVBQsBaxLnguzTvg+s3FnJCxRywx2AdT7lVWTY6NHHEGGv0AEliGzMy13csT7IVcXgt1jHnhanEsZL5QxNHPM7StZJU0gCfocF6PpVgS0DWYoJwaLd0z57JSuQPSxxRhFVrmAL5im+RoMZnoU/2ZHk+ufksLW9oLS1ZF0I9jXfv9MwhPzlI5TUEKfOHvgJf4E5PTliQloPYreOBT6OI5wuRgvMOn1zSz9tiGU8kBtXCDIehkN5SLxy7JI5fjfWNL/E6VPzzWyFSyCOkeSDcmM0NTww2iOZ1xP3773H4SDlM3DOktW3IHqyKuoRWba2QnBo2JQ7HT60K6wvFoxvel4KXFX+1aq4FUbi/Zmhoa7c0B3sPOQR36Ib257byNZ9o0nIirampnzbkYDH5RM7UzzibEKeFU5zfKS8dbJpHOGGsjPKzKTcoKcP3GL+oWwjJpg2NAAIJkTxf7CdDchhSE/1m2A/Lc0V+RbrBp35vmXP8rFl9KxzlJzvS2XcU/GniSP/vlu0XUxFrJtsb/ixxajj3v3axbQl0+G0D2BTMIs4F379z2rJxKYQKzhB7kCWGFvsPpdIXxUOS6WyEbhxb9McUbAvrd20FBQUFBQUFBQUFBRb+AeqNb10z+oPdAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image17.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABd0lEQVRoge2YX5GDMBCHPw84wAAGogAFdYADHNQCGiohHrBwGmqBewg7hOtw14WUpL39ZvahD8ns/rr/CBiGYRiGURY14IAmtyMl0QNfwBTZHehyOlUCA0GMgSDSQBBGROrzuZaXHvA8llEFjCwZVJ3sV3ZEgK3ALyzZ8+96UENovls4lsypT/HojZDMuR29yLFW969/5R3whAmmLqkuOix1Wc3m2dfpXQJL1RsGQmyHykk6ujS2kbVgV8VdUwI7WgJtFNM0x7K7AuSi6+yYiCG/Ncr7BLZ3J6kJ2eJZ7zhirfbCinWGjDsdKxHHYwapdp32x+FP3AVigVTlJWt3knFXKHECqL6z4sabImtKmlYxanEa0mdNCdPqN7+eFr6LDqk7+QY5p9UWNcuq8jSy6N0TO1MaPcoEiEf48CKnzkCa7dajlnxbaRbZVQdPVVI5iJ8kZB3pZ7sRSkkdn3xX+WRu5uNCEELikdfAT9zZDMMwDMMwjBR8AxS7vP5/0oaBAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image18.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAkCAYAAAA9+eyvAAACF0lEQVRoge1YUbXDIAy9HnCAgRqogil4DuagDmqhGiYBD7MwDbPw3gfJWcaAJoXuvA/uOfwMkhsukKQDBgYGBgYGzoIH4Iw2E4CZbK2YaUwHbFt4i/AANgC/yqAcrX+SDY8HBbdnu9LahcaDxvVEXpVj6XRPCAfgTsGsiBu5JT5KQXmyfeDz5rGPkJlr5a3iQs4uRKAVIiCKlwY74XVSoWDLPEtmzgn73HwLrxoLdELMiKdQAt+uZ2buR8Ehb6fccAuvCVohLqgnJ/Zzz8zxNa4FK8WSt6KF1wStEHvgk8klPb6+NSFmEUftBlh4TeghBL/xUrJj/zUhvHKdhdeEViE4o98qwcjsXgvYIoSG14SjQjjEdy3rekD+PQex5lLxqRHCwmvCESE4k8sNyk2kQV2x//41T8PKa0KPHJGeULpZh9hI1W6FLJ/aCrDHa0KvquHxXh1yzY8UIxD3Sutlp7h15FWjlxBA3FTNF7/vDVGIG/H7xLaWR47wqtBTCNkLWBMvn2ruW+Qs3jecIYS13ZUx/HyRtxhEqxDcJq8Gm0nwH012R3g/0FOIgHi1tX5kNWnpDq28WWiF4IRU+iOEy5820ckqUusOe/Nm4fFe0nL/BaSEaflb8Gp1tSeyIL7nJ/Y/lnryfoDLVciMrRCco9/l2pV+2+voHOKJcc8QyE7zFFp4/x08YuAzOn0gDQwMDAwMDAx8A39JRSsd5481owAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image19.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAAlCAYAAAADd3b/AAAFFElEQVR4nO1cbdXyMAy9HuYAAxhAAQpw8DjAARbQgAQ8YAENWOD9seUQSj+Spt0Gb+45/fHwLF0b7k3TrANwOBwOh8PhcKwAx0TbLTkoh6MBdkjzW40ngBuAa9AOLUbqcCyIAz55fcPIeTWe8NXD8f9ghxmFsplsdgCGinuS7abClmM7tR7Y4jXOsJ3xOfbc9WELx2yxbQlt3xYeWDnEoeHBLELZA7hPNrxdUSb9BiPBHnjliffJtubL30/3vlTYljBgHGc4Tz7fEDG/pNqpoW0LHKYxSH1p4YHFNtWfhgfdhXJC/gt8ID3R7fT/O95FMeDltL1izJzIPYRyRH6uob/2hetz9hZbK0LSSnxp4YHFNoYaHnQVCnXOU44Br0hEE71FbLkY/jJ9PyFfgq/QfbkakPNjY82NpxQRB4zjvTe0teCEcY5/kPvSwgOLbQo1POgqlBvGCcYQpilhGkXRORctyFGSyVLKRtWL1kL5gy6ybabxlER+wGfqZLFtCSnZLDyw2MZQy4NuQtmi/GXyJTWMxOSAXKQ4M/vcfbZsvBRNWguFnC/dZNKmtIQLPn1tsW0JiVAsPLByKDaWWh50E8oe5YHz9Ilfy/PvVDQB3pf/1PMbSuHoYVEPoVDk5u02fW6pzFDq9Kjox2IrhUQoVh7U2oaw8mDW8nDq5mFffFOcmzy3TwnqjPdqUw+h5KpPD9T7iQSYCxY9bKVotd9L8aClrZUHiwqFvsxweaWUQSOUWIpG1Rmeu/ZKvXbT/U6IC0dTnSOQH+a2laKVUFI8aGXbggeLCoX2GOEZGl6VkArlEfxvM30WpmS9hBLigPeNpjYFWnvaBbQTSooHLWxb8WAxoVDFIhYJuFBKlYyUUK6Ipx1zCQUY50XVFS0R1p52AW2EkuNBC9tWPFhMKLQPifXBhZK7x4C4UKgEGHPenEIBXhHtifiT+RTWnnYBbYSS44HVtiUPFhEKlelSlSpL6kV9p1aiuYUCvNKDcNVL4RvSLsAulBIPLLateTC7UKhMl3sIVlP1urC+z0gfDqRU6Mo+63lgEHiVu6VC+Ya0C7AJRcKDWtsePJhVKJSzl5zDn0tIhXIK/ta03qsLjUt6lISiXU3qZLHVotZ/Uh7U2vbgwWxC0ThnA9ng+cqzxxgRwhduwkb7hQf7rOrNNQVoRZFEeZp7Tepksa1BjVB6iwTow4PZhCKZII+CFBlzUfjCrtEejFxijyKJ8nTaoCZ1stjWoEYoWh60sg2xyj1K+FQ0hgPev+DSE1de8dKe2M05aJj6O0K2dxmQf5mMory04kW5c80GV2O7wzhHyzEbrVBqeNDCNobVCYWi6QnpF/bpmrA/OvAWmwylXZqSK1B2ED9omauaEPhDxSPeSUepwk3QD/CeOmlfRtLY8tTWsrpq7C08sNimsCqhhKTLtdQpYe4kIiGlGFfoo2HJQfz4jCSN4aVsSgOP03gfk710jHxeWmhsqXTKm1aYfH94L9hbeNCCQzGsRih7lDdU0l9v2WEkHl17Qn1Vh/pJbdy2GJ1HGz7JUn5gNvQk+Ag9+WhsNXPT2h7x/usi0rGGc+Utlq5aeNCSQyFKPAix6FmvtUPr/G/EDm3fgPxVuFASkLw09Au4QFcM+V/hQolgC/kG/JtxRr/XhH8NJqH84fNogPU3t5bGgJE83z6PEg74/bSyFvy3w6hRsUSNVOWh91Nuh6M3cj875XA4HA6Hw+FwOBwOh+MX8A+XjItEEg0W1AAAAABJRU5ErkJggg==\",\"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":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-08-09T13:28:37.000Z","updated_at":"2026-04-16T16:09:30.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":42355,"title":"Minimum Set (A+A)U(A*A) OEIS A263996","description":"This Challenge is to find an integer vector A that creates the minimum set size for (A+A) U (A*A) for a given vector length, \u003chttps://oeis.org/A263996 OEIS A263996\u003e. The length, best value, Prime_max, and Value_max will be provided. \r\n\r\nThe \u003chttps://oeis.org/A263996 OEIS A263996\u003e gives the minimum set sizes thru length 50. Length 7 has best value 26 with Prime_max 5 and Value_max 8. A=[1 2 3 4 5 6 8] yields [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 24 25 30 32 36 40 48 64].\r\nThe \u003chttp://68.173.157.131/Contest/SumsAndProducts1/FinalReport Al Zimmermann Sums Contest Final Report\u003e extends A263996 for lengths 40:40:1000 with complete vector solutions. The contest winner, Rokicki, noted his method used P-smooth sets, hill climbing, and random swaps. The contest was a little tougher with only L given.\r\n\r\nExample Input/Output:\r\nL=9;Best=36;pmax=5;vmax=12;\r\nv = SP(L,Best,pmax,vmax); Yields v=[1 2 3 4 5 6 8 10 12]\r\n\r\nTheory/Hints: The V superset is found using \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1298-p-smooth-numbers psmooth(pmax,vmax)\u003e . One observation is that for every v element the set v contains prod of all v element factor permutations. The time eater will be score evaluation. Residual evaluation suggested. A history screen, prior to score evaluation, of prior processed vectors is essential. A quick history pre-screen is vector sum. Replace testing of only values that are not factors of other numbers (eg 2,3 no replace) enables a reasonable time rolling score solution without random for the small test case values. ","description_html":"\u003cp\u003eThis Challenge is to find an integer vector A that creates the minimum set size for (A+A) U (A*A) for a given vector length, \u003ca href = \"https://oeis.org/A263996\"\u003eOEIS A263996\u003c/a\u003e. The length, best value, Prime_max, and Value_max will be provided.\u003c/p\u003e\u003cp\u003eThe \u003ca href = \"https://oeis.org/A263996\"\u003eOEIS A263996\u003c/a\u003e gives the minimum set sizes thru length 50. Length 7 has best value 26 with Prime_max 5 and Value_max 8. A=[1 2 3 4 5 6 8] yields [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 24 25 30 32 36 40 48 64].\r\nThe \u003ca href = \"http://68.173.157.131/Contest/SumsAndProducts1/FinalReport\"\u003eAl Zimmermann Sums Contest Final Report\u003c/a\u003e extends A263996 for lengths 40:40:1000 with complete vector solutions. The contest winner, Rokicki, noted his method used P-smooth sets, hill climbing, and random swaps. The contest was a little tougher with only L given.\u003c/p\u003e\u003cp\u003eExample Input/Output:\r\nL=9;Best=36;pmax=5;vmax=12;\r\nv = SP(L,Best,pmax,vmax); Yields v=[1 2 3 4 5 6 8 10 12]\u003c/p\u003e\u003cp\u003eTheory/Hints: The V superset is found using \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1298-p-smooth-numbers\"\u003epsmooth(pmax,vmax)\u003c/a\u003e . One observation is that for every v element the set v contains prod of all v element factor permutations. The time eater will be score evaluation. Residual evaluation suggested. A history screen, prior to score evaluation, of prior processed vectors is essential. A quick history pre-screen is vector sum. Replace testing of only values that are not factors of other numbers (eg 2,3 no replace) enables a reasonable time rolling score solution without random for the small test case values.\u003c/p\u003e","function_template":"function v = SP(L,Best,pmax,vmax)\r\n% Only L and \u003c=Best need to be satisfied\r\n% pmax and vmax are suggestions when using psmooth numbers\r\n  v=[1:L-1 vmax];\r\nend","test_suite":"%%\r\ntic\r\npass=true;\r\nL=8;Best=30;pmax=5;vmax=10;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=39;Best=335;pmax=7;vmax=100;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=50;Best=486;pmax=7;vmax=144;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=40;Best=348;pmax=7;vmax=120;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=80;Best=1001;pmax=11;vmax=300;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=120;Best=1847;pmax=11;vmax=480;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=160;Best=2864;pmax=11;vmax=840;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=200;Best=4000;pmax=13;vmax=900;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n%%\r\ntic\r\npass=true;\r\nL=280;Best=6632;pmax=13;vmax=1800;\r\nv = SP(L,Best,pmax,vmax);\r\nv=unique(floor(v));\r\nv(v\u003c1)=[];\r\nif length(v)~=L,pass=false;end\r\nvm2=zeros(1,v(end)*v(end));\r\nLv=length(v);\r\nvr=repmat(v,Lv,1);vrp=vr';\r\nvp=vr+vrp;\r\n%vp=repmat(v,Lv,1)+repmat(v',1,Lv);\r\nvm2(vp(:))=1;\r\nvm=vr.*vrp;\r\n%vm=repmat(v,Lv,1).*repmat(v',1,Lv);\r\nvm2(vm(:))=1;\r\nscr=nnz(vm2);\r\nif scr\u003eBest,pass=false;end\r\ntoc\r\nassert(pass)\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-06-04T19:18:55.000Z","updated_at":"2016-02-22T02:59:36.000Z","published_at":"2016-02-22T02:59:36.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to find an integer vector A that creates the minimum set size for (A+A) U (A*A) for a given vector length,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://oeis.org/A263996\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eOEIS A263996\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The length, best value, Prime_max, and Value_max will be provided.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://oeis.org/A263996\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eOEIS A263996\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e gives the minimum set sizes thru length 50. Length 7 has best value 26 with Prime_max 5 and Value_max 8. A=[1 2 3 4 5 6 8] yields [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 20 24 25 30 32 36 40 48 64]. The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://68.173.157.131/Contest/SumsAndProducts1/FinalReport\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAl Zimmermann Sums Contest Final Report\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e extends A263996 for lengths 40:40:1000 with complete vector solutions. The contest winner, Rokicki, noted his method used P-smooth sets, hill climbing, and random swaps. The contest was a little tougher with only L given.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample Input/Output: L=9;Best=36;pmax=5;vmax=12; v = SP(L,Best,pmax,vmax); Yields v=[1 2 3 4 5 6 8 10 12]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory/Hints: The V superset is found using\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1298-p-smooth-numbers\\\"\u003e\u003cw:r\u003e\u003cw:t\u003epsmooth(pmax,vmax)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e . One observation is that for every v element the set v contains prod of all v element factor permutations. The time eater will be score evaluation. Residual evaluation suggested. A history screen, prior to score evaluation, of prior processed vectors is essential. A quick history pre-screen is vector sum. Replace testing of only values that are not factors of other numbers (eg 2,3 no replace) enables a reasonable time rolling score solution without random for the small test case values.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42774,"title":"GJam March 2016 IOW: Clock Dance","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/8274486/dashboard#s=p1 GJam March 2016 Annual I/O for Women Dance Around the Clock\u003e. This is a mix of the small and large data sets.\r\n\r\nThe GJam story goes that D even dancers are arranged clockwise 1:D. Who is adjacent to dancer K after N pair swaps. The odd move swaps positions 1/2,3/4,..D-1/D. The even move swaps positions D/1, 2/3,...D-2/D-1. D=8 [1:8] becomes [2 1 4 3 6 5 8 7] after the first swap. After second swap we see [7 4 1 6 3 8 5 2].  \r\n\r\n\u003c\u003chttp://code.google.com/codejam/contest/images/?image=dance_around_the_clock.png\u0026p=5733344260128768\u0026c=8274486\u003e\u003e\r\n\r\n*Input:* [D K N] , 4\u003c=D\u003c=1E8, 1\u003c=K\u003c=D, 1\u003c=N\u003c=1E8\r\n\r\n*Output:* [KCW KCCW] , KCW is dancer to left of Kth dancer after N moves\r\n\r\n*Examples:* [m] [v]\r\n\r\n  [8 3 1] creates v=[6 4]\r\n  [8 4 2] creates v=[1 7]\r\n  [6 6 1] creates v=[5 3]\r\n \r\n\r\n*\u003chttp://code.google.com/codejam Google Code Jam 2016 Open Qualifier: April 8, 2016\u003e*\r\n\r\n*Contest Theory:* The small case was D\u003c10 and N\u003c10. This could be done brute force in the 5 minutes of entry submission allowed. However, this is clearly a case of modulo math so might as well solve the unbounded case of D/N \u003c1E8. The number being assigned as 1:D leads to confusion as mod maps to 0:D-1. Suggest offset the K dancer number by 1 for processing and then correct for the final answer. Mod is fun as mod(-1,8) yields a useful 7. Quick observation is for offsetted K vector [0:D-1] the Evens move CW and the Odds move CCW. One method used 5 mod calls to solve.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/8274486/dashboard#s=p1\"\u003eGJam March 2016 Annual I/O for Women Dance Around the Clock\u003c/a\u003e. This is a mix of the small and large data sets.\u003c/p\u003e\u003cp\u003eThe GJam story goes that D even dancers are arranged clockwise 1:D. Who is adjacent to dancer K after N pair swaps. The odd move swaps positions 1/2,3/4,..D-1/D. The even move swaps positions D/1, 2/3,...D-2/D-1. D=8 [1:8] becomes [2 1 4 3 6 5 8 7] after the first swap. After second swap we see [7 4 1 6 3 8 5 2].\u003c/p\u003e\u003cimg src = \"http://code.google.com/codejam/contest/images/?image=dance_around_the_clock.png\u0026p=5733344260128768\u0026c=8274486\"\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [D K N] , 4\u0026lt;=D\u0026lt;=1E8, 1\u0026lt;=K\u0026lt;=D, 1\u0026lt;=N\u0026lt;=1E8\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [KCW KCCW] , KCW is dancer to left of Kth dancer after N moves\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e [m] [v]\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[8 3 1] creates v=[6 4]\r\n[8 4 2] creates v=[1 7]\r\n[6 6 1] creates v=[5 3]\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003e\u003ca href = \"http://code.google.com/codejam\"\u003eGoogle Code Jam 2016 Open Qualifier: April 8, 2016\u003c/a\u003e\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eContest Theory:\u003c/b\u003e The small case was D\u0026lt;10 and N\u0026lt;10. This could be done brute force in the 5 minutes of entry submission allowed. However, this is clearly a case of modulo math so might as well solve the unbounded case of D/N \u0026lt;1E8. The number being assigned as 1:D leads to confusion as mod maps to 0:D-1. Suggest offset the K dancer number by 1 for processing and then correct for the final answer. Mod is fun as mod(-1,8) yields a useful 7. Quick observation is for offsetted K vector [0:D-1] the Evens move CW and the Odds move CCW. One method used 5 mod calls to solve.\u003c/p\u003e","function_template":"function v=ClockDance(m)\r\n% m [D K N] % Num Dancers, K dancernumber, N swaps\r\n% v=[CW_dancenumber CCW_dancenumber]  [pos+1, pos-1]\r\n v=[0 0];\r\n% This is a mod mod mod type contest question\r\n% Note mod(-1,8)=7\r\n% Note changing dancers from 1:D to 0:D-1 helps mod normalcy and brain function\r\n% At the end add 1 back to the v vector\r\n\r\nend","test_suite":"%%\r\nm=[8 3 1 ];\r\nv=ClockDance(m);\r\nvexp=[6 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 4 2 ];\r\nv=ClockDance(m);\r\nvexp=[1 7 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 8 ];\r\nv=ClockDance(m);\r\nvexp=[2 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[10 9 6 ];\r\nv=ClockDance(m);\r\nvexp=[2 10 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 9 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 2 10 ];\r\nv=ClockDance(m);\r\nvexp=[7 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 8 7 ];\r\nv=ClockDance(m);\r\nvexp=[3 1 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 4 3 ];\r\nv=ClockDance(m);\r\nvexp=[3 1 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 6 1 ];\r\nv=ClockDance(m);\r\nvexp=[5 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 4 6 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 5 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 4 1 ];\r\nv=ClockDance(m);\r\nvexp=[3 1 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 1 ];\r\nv=ClockDance(m);\r\nvexp=[4 2 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 2 2 ];\r\nv=ClockDance(m);\r\nvexp=[5 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 1 10 ];\r\nv=ClockDance(m);\r\nvexp=[4 2 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 3 1 ];\r\nv=ClockDance(m);\r\nvexp=[6 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 4 2 ];\r\nv=ClockDance(m);\r\nvexp=[1 7 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 8 ];\r\nv=ClockDance(m);\r\nvexp=[2 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[72137284 16112525 91351141 ];\r\nv=ClockDance(m);\r\nvexp=[54540240 54540238 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[155546 123001 56937611 ];\r\nv=ClockDance(m);\r\nvexp=[138552 138550 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[78548986 44806245 20024652 ];\r\nv=ClockDance(m);\r\nvexp=[6306564 6306562 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 5 ];\r\nv=ClockDance(m);\r\nvexp=[1 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[61256952 31789482 70629381 ];\r\nv=ClockDance(m);\r\nvexp=[13044625 13044623 ];\r\nassert(isequal(vexp,v))\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":10,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-03-16T04:41:57.000Z","updated_at":"2016-03-16T05:17:21.000Z","published_at":"2016-03-16T05:10:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/8274486/dashboard#s=p1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam March 2016 Annual I/O for Women Dance Around the Clock\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. This is a mix of the small and large data sets.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe GJam story goes that D even dancers are arranged clockwise 1:D. Who is adjacent to dancer K after N pair swaps. The odd move swaps positions 1/2,3/4,..D-1/D. The even move swaps positions D/1, 2/3,...D-2/D-1. D=8 [1:8] becomes [2 1 4 3 6 5 8 7] after the first swap. After second swap we see [7 4 1 6 3 8 5 2].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [D K N] , 4\u0026lt;=D\u0026lt;=1E8, 1\u0026lt;=K\u0026lt;=D, 1\u0026lt;=N\u0026lt;=1E8\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [KCW KCCW] , KCW is dancer to left of Kth dancer after N moves\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [m] [v]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[8 3 1] creates v=[6 4]\\n[8 4 2] creates v=[1 7]\\n[6 6 1] creates v=[5 3]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGoogle Code Jam 2016 Open Qualifier: April 8, 2016\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eContest Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e The small case was D\u0026lt;10 and N\u0026lt;10. This could be done brute force in the 5 minutes of entry submission allowed. However, this is clearly a case of modulo math so might as well solve the unbounded case of D/N \u0026lt;1E8. The number being assigned as 1:D leads to confusion as mod maps to 0:D-1. Suggest offset the K dancer number by 1 for processing and then correct for the final answer. Mod is fun as mod(-1,8) yields a useful 7. Quick observation is for offsetted K vector [0:D-1] the Evens move CW and the Odds move CCW. One method used 5 mod calls to solve.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42765,"title":"Maximize Non-Co-Planar Points in an N-Cube","description":"This Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\r\n\r\n  N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\n  N=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\r\nOutput is a Qx3 matrix of the non-co-planar points.\r\n\r\nReference: The \u003chttp://68.173.157.131/Contest/Tetrahedra March 2016 Al Zimmermann Non-Coplanar contest\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\r\n\r\nTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003chttp://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar Cody Co-Planar Check\u003e may improve speed. ","description_html":"\u003cp\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eN=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\u003c/pre\u003e\u003cp\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/p\u003e\u003cp\u003eReference: The \u003ca href = \"http://68.173.157.131/Contest/Tetrahedra\"\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/a\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/p\u003e\u003cp\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\"\u003eCody Co-Planar Check\u003c/a\u003e may improve speed.\u003c/p\u003e","function_template":"function m=MaxNonCoplanarPts(N,Q);\r\n% Place Q or more points in an 0:N-1 #D grid such that each plane created uses only 3 points from the set provided\r\n% N is Cube size\r\n% Q is expected number of points in solution\r\n% Hint: Point [0,0,0] can be assumed to be in the solution for N=2 and N=3\r\n% N=3 is the 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n  m=[];\r\nend","test_suite":"%%\r\nN=2;\r\nQ=5;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n%%\r\nN=3;\r\nQ=8;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-03-07T00:22:02.000Z","updated_at":"2016-03-07T01:01:33.000Z","published_at":"2016-03-07T01:01:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar. Given the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReference: The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://68.173.157.131/Contest/Tetrahedra\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody Co-Planar Check\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e may improve speed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42341,"title":"LMI Twins : Fuzzy Image matching","description":"The image below from \u003chttp://logicmastersindia.com/2016/04P/ Logic Masters India Marathon 2016\u003e is puzzle \"Twins Co-Ordinates\" with PDF password of \"TCO_cLiEsh\".\r\n\r\nThe challenge is to find the six matching image squares given a [612,1078,3] PNG file screen captured using Snipping Tool. The matching squares may be rotated but are not reflected. The cells will not match perfectly and the PNG file is oversize into the white around the whole black frame. The image grid is 10x18. Return a 6x4 array of [r1,c1,r2,c2;...] where cell [r1,c1] is a match for [r2,c2] with r(1:10) and c(1:18).\r\nA pscript to obfuscate the solution is implemented. The method for creating a Cody pscript is included in the Test Suite.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Twins.PNG\u003e\u003e\r\n\r\nMethod Hints:\r\nMerge into a BW 612x1078 image;Trim outer white space;Locate Top Left corner of each cell;create cell array of 180  squares;grab only 55x55 squares to enable rotation check;Problem size is only  4*180*179/2;Filter positive and negative deltas separately with a + convolution; check residual delta \u003c threshold.","description_html":"\u003cp\u003eThe image below from \u003ca href = \"http://logicmastersindia.com/2016/04P/\"\u003eLogic Masters India Marathon 2016\u003c/a\u003e is puzzle \"Twins Co-Ordinates\" with PDF password of \"TCO_cLiEsh\".\u003c/p\u003e\u003cp\u003eThe challenge is to find the six matching image squares given a [612,1078,3] PNG file screen captured using Snipping Tool. The matching squares may be rotated but are not reflected. The cells will not match perfectly and the PNG file is oversize into the white around the whole black frame. The image grid is 10x18. Return a 6x4 array of [r1,c1,r2,c2;...] where cell [r1,c1] is a match for [r2,c2] with r(1:10) and c(1:18).\r\nA pscript to obfuscate the solution is implemented. The method for creating a Cody pscript is included in the Test Suite.\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/Twins.PNG\"\u003e\u003cp\u003eMethod Hints:\r\nMerge into a BW 612x1078 image;Trim outer white space;Locate Top Left corner of each cell;create cell array of 180  squares;grab only 55x55 squares to enable rotation check;Problem size is only  4*180*179/2;Filter positive and negative deltas separately with a + convolution; check residual delta \u0026lt; threshold.\u003c/p\u003e","function_template":"function m=LMI_Twins(fn)\r\n% Grab png \r\nm=[];\r\npict=imread(fn); % [612,1078,3] size png,  sum(pict,3) may be useful\r\n% useful sub_pict size of 55x55\r\n\r\nend\r\n","test_suite":"%%\r\n% obfuscated check function\r\ntic\r\nfh = fopen('Eval_Twins.p','wb');\r\nfwrite(fh, hex2dec(reshape('7630312E30307630302E30300002901CC14FDFB100000081000000D80000012A48DF9D54B1FA232306002212C284B03C55EA944CADBBEC102FFDF678B732282B51740342451D4E91F086ABE90CD97AEA717741F995FCF6ED6A372B6C44524D61F2179DA76458DBA2B9AA01529272E90AD613EA63642EEECCDE54CD649A84090DE86A418D761593CBABBD4B17018634CA5451EA6A6F4386B000CBE73A136AFE2CE5946FD8FD16225562B3414B8C6268F085E3E3E8F1CFCFBBA469FCC5E0343472A562EAD16FFC1B7D27730414ECC1D42F6EB98289E998DA2EA3F4F820A10F9B23E296CDE97331C46563B702180857770F7A14412389BC1BA2',2,[]).'));\r\nfclose(fh);\r\nrehash path;\r\ntoc\r\n%%\r\ntic\r\nurl='https://sites.google.com/site/razapor/matlab_cody/Twins.PNG?attredirects=0\u0026d=1';\r\nurlwrite(url,'Twins.PNG');\r\nfprintf('url write complete %.1f\\n',toc)\r\n\r\nfn='Twins.PNG';\r\nm=LMI_Twins(fn);\r\nassert(Eval_Twins(m));\r\nfprintf('Process Complete %.1f\\n',toc)\r\n%%\r\n% Creation Process for a Cody p file\r\n% Create function  func_name.m\r\n% pcode func_name\r\n% fn='func_name.p';\r\n% fr=fopen(fn,'r');\r\n% m=fread(fr);\r\n% fclose(fr);\r\n% fw=fopen([fn(1:end-1) 'txt'],'w');\r\n% fprintf(fw,'%s',dec2hex(m)');\r\n% fclose(fw);\r\n% use wordpad to open func_name.txt\r\n% In cody in first block write:\r\n% fh = fopen('func_name.p','wb');\r\n% fwrite(fh, hex2dec(reshape('INSERT WORDPAD TEXT HERE',2,[]).'));\r\n% fclose(fh);\r\n% rehash path;","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-05-28T19:12:46.000Z","updated_at":"2016-05-12T01:56:20.000Z","published_at":"2016-05-12T01:56:20.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe image below from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://logicmastersindia.com/2016/04P/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLogic Masters India Marathon 2016\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is puzzle \\\"Twins Co-Ordinates\\\" with PDF password of \\\"TCO_cLiEsh\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe challenge is to find the six matching image squares given a [612,1078,3] PNG file screen captured using Snipping Tool. The matching squares may be rotated but are not reflected. The cells will not match perfectly and the PNG file is oversize into the white around the whole black frame. The image grid is 10x18. Return a 6x4 array of [r1,c1,r2,c2;...] where cell [r1,c1] is a match for [r2,c2] with r(1:10) and c(1:18). A pscript to obfuscate the solution is implemented. The method for creating a Cody pscript is included in the Test Suite.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethod Hints: Merge into a BW 612x1078 image;Trim outer white space;Locate Top Left corner of each cell;create cell array of 180 squares;grab only 55x55 squares to enable rotation check;Problem size is only 4*180*179/2;Filter positive and negative deltas separately with a + convolution; check residual delta \u0026lt; threshold.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":44784,"title":"Project Euler: Problem 14 Longest Collatz sequence(harder version)","description":"This problem is a harder version of \"Problem 44448. Project Euler: Problem 14 Longest Collatz sequence\", because of time limits. \u003chttps://ww2.mathworks.cn/matlabcentral/cody/problems/44448\u003e \r\n\r\nThe following iterative sequence is defined for the set of positive integers:\r\nn → n/2 (n is even) n → 3n + 1 (n is odd)\r\nUsing the rule above and starting with 13, we generate the following sequence:\r\n13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.\r\nWhich starting number, no more than N, produces the longest chain, and how long? Don't cheat!","description_html":"\u003cp\u003eThis problem is a harder version of \"Problem 44448. Project Euler: Problem 14 Longest Collatz sequence\", because of time limits. \u003ca href = \"https://ww2.mathworks.cn/matlabcentral/cody/problems/44448\"\u003ehttps://ww2.mathworks.cn/matlabcentral/cody/problems/44448\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThe following iterative sequence is defined for the set of positive integers:\r\nn → n/2 (n is even) n → 3n + 1 (n is odd)\r\nUsing the rule above and starting with 13, we generate the following sequence:\r\n13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.\r\nWhich starting number, no more than N, produces the longest chain, and how long? Don't cheat!\u003c/p\u003e","function_template":"function y = euler014_v2(x)\r\n  y = x;\r\nend","test_suite":"1\r\n%%\r\nassessFunctionAbsence({'tic','toc','pause','etime','clock','now','str2num','timer'},'FileName','euler014_v2.m')\r\n\r\n2\r\n%%\r\nN = 2e8;\r\nnum_correct = 169941673;\r\nlen_correct = 954;\r\ntic\r\n[num, len] = euler014_v2(N);\r\nt=toc\r\nassert(t\u003e1);\r\nassert(isequal(num, num_correct));\r\nassert(isequal(len, len_correct));\r\n\r\n3\r\n%%\r\nN = 4e8;\r\nnum_correct = 268549803;\r\nlen_correct = 965;\r\ntic\r\n[num, len] = euler014_v2(N);\r\nt=toc\r\nassert(t\u003e1);\r\nassert(isequal(num, num_correct));\r\nassert(isequal(len, len_correct));\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":4,"created_by":3668,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2018-11-11T06:11:05.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-11-09T16:59:43.000Z","updated_at":"2018-11-11T06:11:05.000Z","published_at":"2018-11-09T16:59:43.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is a harder version of \\\"Problem 44448. Project Euler: Problem 14 Longest Collatz sequence\\\", because of time limits.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://ww2.mathworks.cn/matlabcentral/cody/problems/44448\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://ww2.mathworks.cn/matlabcentral/cody/problems/44448\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe following iterative sequence is defined for the set of positive integers: n → n/2 (n is even) n → 3n + 1 (n is odd) Using the rule above and starting with 13, we generate the following sequence: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1. Which starting number, no more than N, produces the longest chain, and how long? Don't cheat!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44832,"title":"Generate Convolution Matrix of 2D Kernel with Different Convolution Shapes (Full, Same, Valid)","description":"In this problem the challenge is to build the Matrix Form equivalent of the function `conv2()` of MATLAB.\r\n\r\nThe function to be built will generate a sparse matrix `mK` which is the convolution matrix of the 2D Kernel 'mH' (Which is an input to the function).  \r\nThe input to the function is the 2D Kernel and dimensions of the image to apply the convolution upon and the shape of the convolution ('full', 'same', 'valid' as in 'conv2()').\r\n\r\nThe output sparse matrix should match the output of using 'conv2()' on the same image using the same convolution shape.\r\n\r\nFor instance:\r\n\r\n  CONVOLUTION_SHAPE_FULL  = 1;\r\n  CONVOLUTION_SHAPE_SAME  = 2;\r\n  CONVOLUTION_SHAPE_VALID = 3;\r\n  \r\n  numRowsImage = 100;\r\n  numColsImage = 80;\r\n  \r\n  numRowsKernel = 7;\r\n  numColsKernel = 5;\r\n  \r\n  mI = rand(numRowsImage, numColsImage);\r\n  mH = rand(numRowsKernel, numColsKernel);\r\n  \r\n  maxThr = 1e-9;\r\n  \r\n  \r\n  %% Full Convolution\r\n  \r\n  convShape       = CONVOLUTION_SHAPE_FULL;\r\n  \r\n  numRowsOut = numRowsImage + numRowsKernel - 1;\r\n  numColsOut = numColsImage + numColsKernel - 1;\r\n  \r\n  mORef   = conv2(mI, mH, 'full');\r\n  mK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\r\n  mO      = reshape(mK * mI(:), numRowsOut, numColsOut);\r\n  \r\n  mE = mO - mORef;\r\n  assert(max(abs(mE(:))) \u003c maxThr);\r\n\r\nThe test case will examine all 3 modes.\r\nTry to solve it once with very clear code (No vectorization tricks) and then optimize.\r\n\r\nA good way to build the output sparse function is using:\r\n\r\n  mK = sparse(vRows, vCols, vVals, numElementsOutputImage, numElementsInputImage);\r\n\r\nLook for the documentation of `sparse()` function for more details.","description_html":"\u003cp\u003eIn this problem the challenge is to build the Matrix Form equivalent of the function `conv2()` of MATLAB.\u003c/p\u003e\u003cp\u003eThe function to be built will generate a sparse matrix `mK` which is the convolution matrix of the 2D Kernel 'mH' (Which is an input to the function).  \r\nThe input to the function is the 2D Kernel and dimensions of the image to apply the convolution upon and the shape of the convolution ('full', 'same', 'valid' as in 'conv2()').\u003c/p\u003e\u003cp\u003eThe output sparse matrix should match the output of using 'conv2()' on the same image using the same convolution shape.\u003c/p\u003e\u003cp\u003eFor instance:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eCONVOLUTION_SHAPE_FULL  = 1;\r\nCONVOLUTION_SHAPE_SAME  = 2;\r\nCONVOLUTION_SHAPE_VALID = 3;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003enumRowsImage = 100;\r\nnumColsImage = 80;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003enumRowsKernel = 7;\r\nnumColsKernel = 5;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emI = rand(numRowsImage, numColsImage);\r\nmH = rand(numRowsKernel, numColsKernel);\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emaxThr = 1e-9;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003e%% Full Convolution\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003econvShape       = CONVOLUTION_SHAPE_FULL;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003enumRowsOut = numRowsImage + numRowsKernel - 1;\r\nnumColsOut = numColsImage + numColsKernel - 1;\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emORef   = conv2(mI, mH, 'full');\r\nmK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\r\nmO      = reshape(mK * mI(:), numRowsOut, numColsOut);\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003emE = mO - mORef;\r\nassert(max(abs(mE(:))) \u0026lt; maxThr);\r\n\u003c/pre\u003e\u003cp\u003eThe test case will examine all 3 modes.\r\nTry to solve it once with very clear code (No vectorization tricks) and then optimize.\u003c/p\u003e\u003cp\u003eA good way to build the output sparse function is using:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003emK = sparse(vRows, vCols, vVals, numElementsOutputImage, numElementsInputImage);\r\n\u003c/pre\u003e\u003cp\u003eLook for the documentation of `sparse()` function for more details.\u003c/p\u003e","function_template":"function [ mK ] = CreateImageConvMtx( mH, numRows, numCols, convShape )\r\n%Generates a Convolution Matrix for the 2D Kernel (The Matrix mH) with\r\n%support for different convolution shapes (Full / Same / Valid).\r\n% Input:\r\n%   - mH                -   Input 2D Convolution Kernel.\r\n%                           Structure: Matrix.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: (-inf, inf).\r\n%   - numRows           -   Number of Rows.\r\n%                           Number of rows in the output convolution\r\n%                           matrix.\r\n%                           Structure: Scalar.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: {1, 2, 3, ...}.\r\n%   - numCols           -   Number of Columns.\r\n%                           Number of columns in the output convolution\r\n%                           matrix.\r\n%                           Structure: Scalar.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: {1, 2, 3, ...}.\r\n%   - convShape         -   Convolution Shape.\r\n%                           The shape of the convolution which the output\r\n%                           convolution matrix should represent. The\r\n%                           options should match MATLAB's conv2() function\r\n%                           - Full / Same / Valid.\r\n%                           Structure: Scalar.\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: {1, 2, 3}.\r\n% Output:\r\n%   - mK                -   Convolution Matrix.\r\n%                           The output convolution matrix. Multiplying in\r\n%                           the column stack form on an image should be\r\n%                           equivalent to applying convolution on the\r\n%                           image.\r\n%                           Structure: Matrix (Sparse).\r\n%                           Type: 'Single' / 'Double'.\r\n%                           Range: (-inf, inf).\r\n% References:\r\n%   1.  MATLAB's 'convmtx2()' - https://www.mathworks.com/help/images/ref/convmtx2.html.\r\n% Remarks:\r\n%   1.  gf\r\n% TODO:\r\n%   1.  \r\n%   Release Notes:\r\n%   -   1.0.000     dd/mm/yyyy  firstName lastName\r\n%       *   First release version.\r\n% ----------------------------------------------------------------------------------------------- %\r\n\r\nCONVOLUTION_SHAPE_FULL  = 1;\r\nCONVOLUTION_SHAPE_SAME  = 2;\r\nCONVOLUTION_SHAPE_VALID = 3;\r\n\r\nswitch(convShape)\r\n    case(CONVOLUTION_SHAPE_FULL)\r\n        % Code for the 'full' case\r\n    case(CONVOLUTION_SHAPE_SAME)\r\n        % Code for the 'same' case\r\n    case(CONVOLUTION_SHAPE_VALID)\r\n        % Code for the 'valid' case\r\nend\r\n\r\n\r\nend\r\n\r\n","test_suite":"%% Testing\r\n\r\n\r\nCONVOLUTION_SHAPE_FULL  = 1;\r\nCONVOLUTION_SHAPE_SAME  = 2;\r\nCONVOLUTION_SHAPE_VALID = 3;\r\n\r\nmaxThr = 1e-9;\r\n\r\n\r\nfor numRowsImage = 28:32\r\n    for numColsImage = 28:32\r\n        \r\n        mI = rand(numRowsImage, numColsImage);\r\n        \r\n        for numRowsKernel = 3:7\r\n            for numColsKernel = 3:7\r\n                \r\n                mH = rand(numRowsKernel, numColsKernel);\r\n                \r\n                for convShape = 1:3\r\n                    \r\n                    switch(convShape)\r\n                        case(CONVOLUTION_SHAPE_FULL)\r\n                            numRowsOut = numRowsImage + numRowsKernel - 1;\r\n                            numColsOut = numColsImage + numColsKernel - 1;\r\n                            \r\n                            convShapeString = 'full';\r\n                        case(CONVOLUTION_SHAPE_SAME)\r\n                            numRowsOut = numRowsImage;\r\n                            numColsOut = numColsImage;\r\n                            \r\n                            convShapeString = 'same';\r\n                        case(CONVOLUTION_SHAPE_VALID)\r\n                            numRowsOut = numRowsImage - numRowsKernel + 1;\r\n                            numColsOut = numColsImage - numColsKernel + 1;\r\n                            \r\n                            convShapeString = 'valid';\r\n                    end\r\n                    \r\n                    mORef   = conv2(mI, mH, convShapeString);\r\n                    mK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\r\n                    mO      = reshape(mK * mI(:), numRowsOut, numColsOut);\r\n                    \r\n                    disp([' ']);\r\n                    disp(['Validating solution for the following parameters:']);\r\n                    disp(['Image Size - [', num2str(numRowsImage), ' x ', num2str(numColsImage), ']']);\r\n                    disp(['Kernel Size - [', num2str(numRowsKernel), ' x ', num2str(numColsKernel), ']']);\r\n                    disp(['Convolution Shape - ', convShapeString]);\r\n                    \r\n                    mE = mO - mORef;\r\n                    maxAbsDev = max(abs(mE(:)));\r\n                    if(maxAbsDev \u003e= maxThr)\r\n                        disp([' ']);\r\n                        disp(['Validation Failed']);\r\n                        disp([' ']);\r\n                    end\r\n                    assert(maxAbsDev \u003c maxThr);\r\n                    \r\n                end\r\n            end\r\n        end\r\n    end\r\nend\r\n            \r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6204,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2019-01-15T23:13:37.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-01-15T21:20:18.000Z","updated_at":"2019-01-15T23:13:37.000Z","published_at":"2019-01-15T21:20:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem the challenge is to build the Matrix Form equivalent of the function `conv2()` of MATLAB.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function to be built will generate a sparse matrix `mK` which is the convolution matrix of the 2D Kernel 'mH' (Which is an input to the function). The input to the function is the 2D Kernel and dimensions of the image to apply the convolution upon and the shape of the convolution ('full', 'same', 'valid' as in 'conv2()').\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe output sparse matrix should match the output of using 'conv2()' on the same image using the same convolution shape.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor instance:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[CONVOLUTION_SHAPE_FULL  = 1;\\nCONVOLUTION_SHAPE_SAME  = 2;\\nCONVOLUTION_SHAPE_VALID = 3;\\n\\nnumRowsImage = 100;\\nnumColsImage = 80;\\n\\nnumRowsKernel = 7;\\nnumColsKernel = 5;\\n\\nmI = rand(numRowsImage, numColsImage);\\nmH = rand(numRowsKernel, numColsKernel);\\n\\nmaxThr = 1e-9;\\n\\n%%Full Convolution\\n\\nconvShape       = CONVOLUTION_SHAPE_FULL;\\n\\nnumRowsOut = numRowsImage + numRowsKernel - 1;\\nnumColsOut = numColsImage + numColsKernel - 1;\\n\\nmORef   = conv2(mI, mH, 'full');\\nmK      = CreateImageConvMtx(mH, numRowsImage, numColsImage, convShape);\\nmO      = reshape(mK * mI(:), numRowsOut, numColsOut);\\n\\nmE = mO - mORef;\\nassert(max(abs(mE(:))) \u003c maxThr);]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe test case will examine all 3 modes. Try to solve it once with very clear code (No vectorization tricks) and then optimize.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA good way to build the output sparse function is using:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[mK = sparse(vRows, vCols, vVals, numElementsOutputImage, numElementsInputImage);]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLook for the documentation of `sparse()` function for more details.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44545,"title":"\"Percentages may not total 100 due to rounding\"","description":"*Percentages* are commonly *rounded* when presented in tables.  As a result, the sum of the individual numbers does not always add up to 100%.  A warning is therefore sometimes appended to such tables, along the lines: _\"Percentages may not total 100 due to rounding\"_.\r\n\r\nEXAMPLE 1:\r\nA survey of eleven people for their opinion on a new policy found five to be in favour, five opposed, and one undecided/neutral.  Percentage-wise this becomes\r\n\r\n  In favour:          45% (5 of 11)\r\n  Undecided/neutral:   9% (1 of 11)  \r\n  Opposed:            45% (5 of 11)  \r\n\r\nThe total of these is 99%, rather than the expected 100%.  Despite this conflict, in this example *all of the individual numbers have been correctly entered*.  \r\n\r\nEXAMPLE 2:\r\nIn the same report, a survey of a further ten people on a different policy found four to be in favour, four opposed, and two undecided/neutral.  Suppose the data were presented in the following table\r\n\r\n  In favour:          45%\r\n  Undecided/neutral:  20%\r\n  Opposed:            45%\r\n\r\nGiven the background information, we would quickly recognise this as inconsistent, with a spurious total of 110%, rather than the expected 100%.  In fact, we would probably guess that a copy-and-paste mistake had occurred.  However, it is important to realise that even if we looked at this table alone, in isolation, without any background knowledge of the survey size or the true number of responses in any category, just by knowing that there are only three categories we can firmly conclude that in this example *one or more of the individual numbers must have been entered incorrectly*.  \r\n\r\nYOUR JOB:  \r\nGiven a list (vector) of integer percentages, determine whether among the individual values at least one of them _must_ have been incorrectly entered (return |true|), as in Example 2, or whether there might not be any incorrect entries (return |false|), as in Example 1.","description_html":"\u003cp\u003e\u003cb\u003ePercentages\u003c/b\u003e are commonly \u003cb\u003erounded\u003c/b\u003e when presented in tables.  As a result, the sum of the individual numbers does not always add up to 100%.  A warning is therefore sometimes appended to such tables, along the lines: \u003ci\u003e\"Percentages may not total 100 due to rounding\"\u003c/i\u003e.\u003c/p\u003e\u003cp\u003eEXAMPLE 1:\r\nA survey of eleven people for their opinion on a new policy found five to be in favour, five opposed, and one undecided/neutral.  Percentage-wise this becomes\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eIn favour:          45% (5 of 11)\r\nUndecided/neutral:   9% (1 of 11)  \r\nOpposed:            45% (5 of 11)  \r\n\u003c/pre\u003e\u003cp\u003eThe total of these is 99%, rather than the expected 100%.  Despite this conflict, in this example \u003cb\u003eall of the individual numbers have been correctly entered\u003c/b\u003e.\u003c/p\u003e\u003cp\u003eEXAMPLE 2:\r\nIn the same report, a survey of a further ten people on a different policy found four to be in favour, four opposed, and two undecided/neutral.  Suppose the data were presented in the following table\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eIn favour:          45%\r\nUndecided/neutral:  20%\r\nOpposed:            45%\r\n\u003c/pre\u003e\u003cp\u003eGiven the background information, we would quickly recognise this as inconsistent, with a spurious total of 110%, rather than the expected 100%.  In fact, we would probably guess that a copy-and-paste mistake had occurred.  However, it is important to realise that even if we looked at this table alone, in isolation, without any background knowledge of the survey size or the true number of responses in any category, just by knowing that there are only three categories we can firmly conclude that in this example \u003cb\u003eone or more of the individual numbers must have been entered incorrectly\u003c/b\u003e.\u003c/p\u003e\u003cp\u003eYOUR JOB:  \r\nGiven a list (vector) of integer percentages, determine whether among the individual values at least one of them \u003ci\u003emust\u003c/i\u003e have been incorrectly entered (return \u003ctt\u003etrue\u003c/tt\u003e), as in Example 2, or whether there might not be any incorrect entries (return \u003ctt\u003efalse\u003c/tt\u003e), as in Example 1.\u003c/p\u003e","function_template":"% \"May not sum to total due to rounding: the probability of rounding errors\"\r\n% Henry Bottomley, 03 June 2008\r\n% http://www.se16.info/hgb/rounding.pdf\r\n\r\n% \"How to make rounded percentages add up to 100%\"\r\n% https://stackoverflow.com/questions/13483430/how-to-make-rounded-percentages-add-up-to-100\r\n% cf. https://stackoverflow.com/questions/5227215/how-to-deal-with-the-sum-of-rounded-percentage-not-being-100\r\nfunction containsMistake = checkForMistake(z)\r\n    containsMistake = true * + false,\r\nend","test_suite":"%% Basics\r\nassessFunctionAbsence({'regexp', 'regexpi'}, 'FileName','checkForMistake.m')\r\n\r\n%% Example 1 (Row vector)\r\nxVec = round( 100*[5 1 5]/11 );\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) )\r\n\r\n%% Example 1 (Column vector)\r\nxVec = round( 100*[5 1 5]/11 )';\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) )\r\n\r\n%% Example 2 (Row vector)\r\nxVec = [42 20 45];\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) )\r\n\r\n%% One percentage, over and under\r\nxVec = [100];\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test a')\r\nxVec = round([100.5]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test b')\r\nxVec = round([99.49]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test c')\r\n\r\n%% Two percentages, over and under\r\nxVec = [50 50];\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test a')\r\nxVec = round([49.5 50.5]);\r\ncontainsMistake = false;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test b')\r\nxVec = round([50.5 50.5]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test c')\r\nxVec = round([49.49 50.49]);\r\ncontainsMistake = true;\r\nassert( isequal(checkForMistake(xVec), containsMistake) , 'Failed test d')\r\n\r\n%% Equal percentages\r\nfor j = [2:250 1000:1000:10000]\r\n    xVec = round( repelem(100/j, j) );\r\n    containsMistake = false;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Geometric series (from Bottomley, §5)\r\nfor j = 10:30\r\n    xVec = round( 10 * (9/10).^[0:j] );\r\n    containsMistake = j \u003c 21;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Geometric series (from Bottomley, §5), permuted\r\nfor j = 2:40\r\n    xVec = round( 10 * (9/10).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 21;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) I\r\nfor j = 2:100\r\n    xVec = round( (99/100).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 66;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) II\r\nfor j = 2:30\r\n    xVec = round( 20 * (4/5).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 12;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) III\r\nfor j = 2:20\r\n    xVec = round( 25 * (3/4).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 10;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Other geometric series (permuted) IV\r\nfor j = 2:20\r\n    xVec = round( 50 * (1/2).^[0:j] );\r\n    xVec = xVec( randperm(j+1) );\r\n    containsMistake = j \u003c 5;\r\n    assert( isequal(checkForMistake(xVec), containsMistake) )\r\nend;\r\n\r\n%% Systematic overestimation\r\nfor j = 2:100\r\n    num = randi(round(100/j)+1) - 1;\r\n    xRaw = repelem(num+0.5, j);   % cf. https://oletus.github.io/float16-simulator.js/\r\n    sm = sum(xRaw);\r\n    xRaw = [xRaw max(100-sm, 0)];\r\n    if sm \u003e 100.5,                % Not sm\u003e100, because need to account for extra zero added.\r\n        containsMistake = true;\r\n    else\r\n        containsMistake = false;\r\n    end;\r\n    xVec = round( xRaw );\r\n    xVec = xVec( randperm(j+1) );\r\n    assert( isequal(checkForMistake(xVec), containsMistake) , ['Failed with xRaw = ' num2str(xRaw)] )\r\nend;\r\n\r\n%% Systematic underestimation\r\nfor j = 2:100\r\n    num = randi(round(100/j)+1) - 1;\r\n    xRaw = repelem(num+0.499755859375, j);   % cf. https://oletus.github.io/float16-simulator.js/ \u0026 https://au.mathworks.com/help/matlab/matlab_prog/floating-point-numbers.html\r\n    cs = cumsum(xRaw);\r\n    if cs(end) \u003e 100,\r\n        xRaw( cs \u003e 100 ) = [];\r\n        containsMistake = true;\r\n    else\r\n        xRaw = [xRaw (100-cs(end))];\r\n        containsMistake = false;\r\n    end;\r\n    xVec = round( xRaw );\r\n    assert( isequal(checkForMistake(xVec), containsMistake) , ['Failed with xRaw = ' num2str(xRaw)] )\r\nend;","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-03-23T08:02:20.000Z","updated_at":"2018-03-24T13:53:40.000Z","published_at":"2018-03-24T13:53:40.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePercentages\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are commonly\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003erounded\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e when presented in tables. As a result, the sum of the individual numbers does not always add up to 100%. A warning is therefore sometimes appended to such tables, along the lines:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\\\"Percentages may not total 100 due to rounding\\\"\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE 1: A survey of eleven people for their opinion on a new policy found five to be in favour, five opposed, and one undecided/neutral. Percentage-wise this becomes\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[In favour:          45% (5 of 11)\\nUndecided/neutral:   9% (1 of 11)  \\nOpposed:            45% (5 of 11)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe total of these is 99%, rather than the expected 100%. Despite this conflict, in this example\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eall of the individual numbers have been correctly entered\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE 2: In the same report, a survey of a further ten people on a different policy found four to be in favour, four opposed, and two undecided/neutral. Suppose the data were presented in the following table\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[In favour:          45%\\nUndecided/neutral:  20%\\nOpposed:            45%]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the background information, we would quickly recognise this as inconsistent, with a spurious total of 110%, rather than the expected 100%. In fact, we would probably guess that a copy-and-paste mistake had occurred. However, it is important to realise that even if we looked at this table alone, in isolation, without any background knowledge of the survey size or the true number of responses in any category, just by knowing that there are only three categories we can firmly conclude that in this example\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eone or more of the individual numbers must have been entered incorrectly\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYOUR JOB: Given a list (vector) of integer percentages, determine whether among the individual values at least one of them\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emust\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e have been incorrectly entered (return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etrue\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e), as in Example 2, or whether there might not be any incorrect entries (return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efalse\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e), as in Example 1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44655,"title":"Computational power of Cody servers","description":"It has been \u003chttps://en.wikipedia.org/wiki/Moore%27s_law#History predicted\u003e that the performance of integrated circuits would _double_ every 18 months.  That suggests the time to perform a given computation should _halve_ roughly every 18 months.  \r\n\r\nWhat about on Cody?  Observational data is available from the final test case of \u003chttps://www.mathworks.com/matlabcentral/cody/problems/963-we-love-vectorized-solutions-problem-1-remove-the-row-average Problem 963\u003e to help us quantify the improvement in performance!  And thereby even make predictions for future computations.\r\n\r\n Solution    Date\t   Runtime [s]\r\n ...\r\n 144393\t     04-Oct-12\t   4.230\r\n ...\r\n 654812\t     17-Apr-15\t   3.099\r\n ...\r\n 1272817     20-Sep-17\t   2.0402\r\n ...\r\n\r\nThe complete data set will be provided to you as input.  You should assume the general trend can be described by the following law:\r\n\r\n runtime = r0 - δ [1 - exp(-t/k)]\r\n runtime = r∞ + δ exp(-t/k)\r\n\r\nwhere |r0| is the runtime at the start of the period in seconds, |r∞| is the predicted runtime (in seconds) that will be approached far in the future, |δ = r0 - r∞|, and |t| is the time in nominal years since the start of the period, and |k| is a kinetic parameter (in nominal years).  \r\n\r\nThe start of the period is defined by the earliest date in the series.  Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.\r\n\r\nYour task is to \u003chttps://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html fit the curve\u003e and thereby predict the runtime for various future dates.  Your output should be rounded to four decimal places.  \r\n\r\nMETHOD:  You _must_ use \u003chttps://au.mathworks.com/help/matlab/ref/fminsearch.html |fminsearch|\u003e to perform the non-linear regression, and you _must_ set the options using \u003chttps://au.mathworks.com/help/matlab/ref/optimset.html |optimset|\u003e to ensure sufficient accuracy.  The 'best' fit is defined — _for this problem, as in the common convention_ — as that which minimises the sum of the squares of the residuals.  \r\n\r\nEXAMPLE:\r\n\r\n % Input\r\n futureDate = '21-Nov-2023';\r\n data.solutionNumber = [1036949, ..., 1272817];\r\n data.date = ['29-Oct-2016'; ...; '20-Sep-2017'];\r\n data.runtime = [1.2630, ..., 2.0402];\r\n % Output\r\n predictedRuntime = 0.3619;  % seconds\r\n\r\n","description_html":"\u003cp\u003eIt has been \u003ca href = \"https://en.wikipedia.org/wiki/Moore%27s_law#History\"\u003epredicted\u003c/a\u003e that the performance of integrated circuits would \u003ci\u003edouble\u003c/i\u003e every 18 months.  That suggests the time to perform a given computation should \u003ci\u003ehalve\u003c/i\u003e roughly every 18 months.\u003c/p\u003e\u003cp\u003eWhat about on Cody?  Observational data is available from the final test case of \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/963-we-love-vectorized-solutions-problem-1-remove-the-row-average\"\u003eProblem 963\u003c/a\u003e to help us quantify the improvement in performance!  And thereby even make predictions for future computations.\u003c/p\u003e\u003cpre\u003e Solution    Date\t   Runtime [s]\r\n ...\r\n 144393\t     04-Oct-12\t   4.230\r\n ...\r\n 654812\t     17-Apr-15\t   3.099\r\n ...\r\n 1272817     20-Sep-17\t   2.0402\r\n ...\u003c/pre\u003e\u003cp\u003eThe complete data set will be provided to you as input.  You should assume the general trend can be described by the following law:\u003c/p\u003e\u003cpre\u003e runtime = r0 - δ [1 - exp(-t/k)]\r\n runtime = r∞ + δ exp(-t/k)\u003c/pre\u003e\u003cp\u003ewhere \u003ctt\u003er0\u003c/tt\u003e is the runtime at the start of the period in seconds, \u003ctt\u003er∞\u003c/tt\u003e is the predicted runtime (in seconds) that will be approached far in the future, \u003ctt\u003eδ = r0 - r∞\u003c/tt\u003e, and \u003ctt\u003et\u003c/tt\u003e is the time in nominal years since the start of the period, and \u003ctt\u003ek\u003c/tt\u003e is a kinetic parameter (in nominal years).\u003c/p\u003e\u003cp\u003eThe start of the period is defined by the earliest date in the series.  Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.\u003c/p\u003e\u003cp\u003eYour task is to \u003ca href = \"https://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html\"\u003efit the curve\u003c/a\u003e and thereby predict the runtime for various future dates.  Your output should be rounded to four decimal places.\u003c/p\u003e\u003cp\u003eMETHOD:  You \u003ci\u003emust\u003c/i\u003e use \u003ca href = \"https://au.mathworks.com/help/matlab/ref/fminsearch.html\"\u003e\u003ctt\u003efminsearch\u003c/tt\u003e\u003c/a\u003e to perform the non-linear regression, and you \u003ci\u003emust\u003c/i\u003e set the options using \u003ca href = \"https://au.mathworks.com/help/matlab/ref/optimset.html\"\u003e\u003ctt\u003eoptimset\u003c/tt\u003e\u003c/a\u003e to ensure sufficient accuracy.  The 'best' fit is defined — \u003ci\u003efor this problem, as in the common convention\u003c/i\u003e — as that which minimises the sum of the squares of the residuals.\u003c/p\u003e\u003cp\u003eEXAMPLE:\u003c/p\u003e\u003cpre\u003e % Input\r\n futureDate = '21-Nov-2023';\r\n data.solutionNumber = [1036949, ..., 1272817];\r\n data.date = ['29-Oct-2016'; ...; '20-Sep-2017'];\r\n data.runtime = [1.2630, ..., 2.0402];\r\n % Output\r\n predictedRuntime = 0.3619;  % seconds\u003c/pre\u003e","function_template":"function predictedRuntime = predictor(futureDate, data)\r\n    % Preliminaries:\r\n    ...\r\n    \r\n    \r\n    % Use fminsearch to find the parameters that minimize the objective function.\r\n    myObjectiveFun = ...\r\n    myOptions = ...\r\n    ... = fminsearch\r\n\r\n    % Report your prediction of the runtime at the specified future date.\r\n    predictedRuntime = ...\r\nend\r\n\r\n% Function that accepts a trial set of parameters and the observed data, \r\n% and returns the sum of squared errors for the model . \r\n% https://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html\r\nfunction SSE = sseVal(...)\r\n    % runtime = r0 - δ [1 - exp(-t/k)]\r\n    % runtime = r∞ + δ exp(-t/k)\r\n    \r\n    ...\r\n    \r\n    SSE = ...\r\nend\r\n","test_suite":"data.solutionNumber = [1036949\t1048171\t1051202\t1078061\t1078699\t1081561\t886761\t1165117\t1202850\t1211446\t1241478\t1241530\t1329044\t1323931\t1382633\t1345204\t1281524\t1272814\t1272815\t1272823\t1272845\t1287012\t1287386\t1262442\t1262445\t1251993\t1252843\t1407137\t1412687\t1448359\t1448368\t1410187\t1465616\t1472214\t1472225\t1490596\t1490602\t1541085\t1541132\t860114\t143879\t144156\t144393\t202249\t210894\t539555\t182974\t276887\t1133109\t654812\t1272817];\r\ndata.date = ['29-Oct-2016';\t'08-Nov-2016';\t'12-Nov-2016';\t'09-Dec-2016';\t'10-Dec-2016';\t'14-Dec-2016';\t'06-May-2016';\t'18-Apr-2017';\t'02-Jun-2017';\t'13-Jun-2017';\t'28-Jul-2017';\t'28-Jul-2017';\t'06-Nov-2017';\t'01-Nov-2017';\t'16-Dec-2017';\t'15-Nov-2017';\t'05-Oct-2017';\t'20-Sep-2017';\t'20-Sep-2017';\t'20-Sep-2017';\t'20-Sep-2017';\t'15-Oct-2017';\t'15-Oct-2017';\t'05-Sep-2017';\t'05-Sep-2017';\t'16-Aug-2017';\t'17-Aug-2017';\t'06-Jan-2018';\t'10-Jan-2018';\t'24-Feb-2018';\t'24-Feb-2018';\t'08-Jan-2018';\t'18-Mar-2018';\t'27-Mar-2018';\t'27-Mar-2018';\t'13-Apr-2018';\t'13-Apr-2018';\t'26-May-2018';\t'26-May-2018';\t'31-Mar-2016';\t'02-Oct-2012';\t'03-Oct-2012';\t'04-Oct-2012';\t'08-Feb-2013';\t'01-Mar-2013';\t'03-Dec-2014';\t'29-Dec-2012';\t'09-Jul-2013';\t'03-Mar-2017';\t'17-Apr-2015';\t'20-Sep-2017'];\r\ndata.runtime = [1.2630\t0.624\t1.3326\t1.2939\t0.5995\t1.1307\t1.3505\t1.2613\t1.2737\t1.3081\t1.2774\t1.252\t1.2179\t1.4431\t1.2637\t1.1614\t1.2542\t1.9135\t1.2996\t1.2595\t1.2664\t1.1858\t1.1501\t1.2516\t1.2786\t1.9461\t1.2492\t1.3654\t1.3263\t1.1484\t1.1728\t1.6177\t1.0538\t1.0571\t1.0454\t1.3873\t1.0600\t1.1154\t1.0635\t1.4359\t4.498\t4.198\t4.230\t5.264\t4.022\t3.153\t4.740\t4.112\t2.3409\t3.099\t2.0402];\r\n\r\n%% Anti-hacking provision\r\n% ADDED 2019-06-29.  \r\n% Ensure only builtin functions will be called.  \r\n! rm -v fileread.m\r\n! rm -v assert.m\r\n\r\n%% Required methodology\r\nassessFunctionPresence({'fminsearch', 'optimset'}, 'FileName','predictor.m', 'Feedback','You must use the specified methodology')\r\n\r\n%% Anti-hardcoding test\r\n% Adapted from a comment at https://www.mathworks.com/matlabcentral/cody/problems/44343 .\r\nassert(~any(cellfun(@(x)ismember(max([0,str2num(x)]),[2012,2019:2023,3000]),regexp(fileread('predictor.m'),'[\\d\\.\\+\\-\\*\\/\\(\\) \\[\\]\\,\\;]+','match'))), 'Please don''t hard-code your ''solution''.') \r\nassert(~any(cellfun(@(x)ismember(max([0,str2num(x)]),[2012,2019:2023,3000]),regexp(fileread('predictor.m'),'\\d+','match'))), 'Please do not hard-code your ''solution''.') \r\n\r\n%% January 2019\r\nfutureDate = '22-Jan-2019';\r\npredictedRuntime_correct = round(0.935043294718475, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '23-Jan-2019';\r\npredictedRuntime_correct = round(0.934448955935569, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '24-Jan-2019';\r\npredictedRuntime_correct = round(0.933855075296061, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% January 2020\r\nfutureDate = '09-Jan-2020';\r\npredictedRuntime_correct = round(0.751755426901932, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '13-Jan-2020';\r\npredictedRuntime_correct = round(0.749945312632780, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% January 2021\r\nfutureDate = '06-Jan-2021';\r\npredictedRuntime_correct = round(0.608254613313523, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '11-Jan-2021';\r\npredictedRuntime_correct = round(0.606545074994730, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% February 2022\r\nfutureDate = '06-Feb-2022';\r\npredictedRuntime_correct = round(0.491354117473879, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '10-Feb-2022';\r\npredictedRuntime_correct = round(0.490345992043568, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% November 2023\r\nfutureDate = '06-Nov-2023';\r\npredictedRuntime_correct = round(0.364155581026111, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '21-Nov-2023';\r\npredictedRuntime_correct = round(0.361853937995679, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '25-Nov-2023';\r\npredictedRuntime_correct = round(0.361244649648014, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\nfutureDate = '27-Nov-2023';\r\npredictedRuntime_correct = round(0.360940709522436, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% Let's all meet up in the year 3000\r\nfutureDate = '01-Jan-3000';\r\npredictedRuntime_correct = round(0.164021404839, 4);\r\nassert(isequal(predictor(futureDate, data), predictedRuntime_correct))\r\n\r\n%% Enforce antihacking\r\n% Assure no 'workarounds' that avoid appropriate use of optimset.\r\n% (Added 29 May 2018.)\r\nfutureDate = {'19-Dec-2019';\t'04-Oct-2020';\t'06-Nov-2020';\t'20-Nov-2020';\t'07-Dec-2020';\t'09-Dec-2020';\t'11-Dec-2020';\t'25-Feb-2021';\t'04-Mar-2021';\t'18-Apr-2021';\t'19-May-2021';\t'23-Jul-2021'};\r\npRuntime_c_unrounded = {0.761350673860113\t0.641651747331991\t0.629650497697623\t0.624650604424140\t0.618651428148657\t0.617950799242008\t0.617251250072375\t0.591452258418511\t0.589151203003048\t0.574651625923890\t0.564951737257372\t0.545350739105932};\r\nfor j = 1 : length(futureDate)\r\n    assert(isequal(predictor(futureDate{j}, data), round(pRuntime_c_unrounded{j}, 4)))\r\nend;\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2019-06-29T12:58:19.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2018-05-27T08:32:09.000Z","updated_at":"2019-06-29T12:58:19.000Z","published_at":"2018-05-27T12:35:16.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt has been\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Moore%27s_law#History\\\"\u003e\u003cw:r\u003e\u003cw:t\u003epredicted\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e that the performance of integrated circuits would\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edouble\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e every 18 months. That suggests the time to perform a given computation should\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ehalve\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e roughly every 18 months.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat about on Cody? Observational data is available from the final test case of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/963-we-love-vectorized-solutions-problem-1-remove-the-row-average\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 963\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to help us quantify the improvement in performance! And thereby even make predictions for future computations.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ Solution    Date     Runtime [s]\\n ...\\n 144393       04-Oct-12     4.230\\n ...\\n 654812       17-Apr-15     3.099\\n ...\\n 1272817     20-Sep-17     2.0402\\n ...]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe complete data set will be provided to you as input. You should assume the general trend can be described by the following law:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ runtime = r0 - δ [1 - exp(-t/k)]\\n runtime = r∞ + δ exp(-t/k)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er0\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the runtime at the start of the period in seconds,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er∞\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the predicted runtime (in seconds) that will be approached far in the future,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eδ = r0 - r∞\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003et\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the time in nominal years since the start of the period, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ek\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a kinetic parameter (in nominal years).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe start of the period is defined by the earliest date in the series. Compute the number of days exactly, and assume that a nominal year comprises 365.24 days.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour task is to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/help/matlab/math/example-curve-fitting-via-optimization.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003efit the curve\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and thereby predict the runtime for various future dates. Your output should be rounded to four decimal places.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMETHOD: You\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emust\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e use\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/help/matlab/ref/fminsearch.html\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efminsearch\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to perform the non-linear regression, and you\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emust\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e set the options using\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/help/matlab/ref/optimset.html\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eoptimset\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e to ensure sufficient accuracy. The 'best' fit is defined —\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efor this problem, as in the common convention\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e — as that which minimises the sum of the squares of the residuals.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEXAMPLE:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ % Input\\n futureDate = '21-Nov-2023';\\n data.solutionNumber = [1036949, ..., 1272817];\\n data.date = ['29-Oct-2016'; ...; '20-Sep-2017'];\\n data.runtime = [1.2630, ..., 2.0402];\\n % Output\\n predictedRuntime = 0.3619;  % seconds]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":3074,"title":"Compute the cokurtosis of a given portfolio.","description":"As input data, you are given a nObs-by-nAssets matrix _portRet_ of return series for assets in a portfolio along with an nAssets-by-1 vector _portWeights_ of portfolio weights. Example: \r\n\r\n \u003e\u003e nObs = 504; % Number of observations\r\n\r\n \u003e\u003e nAssets = 5; % Number of assets in the portfolio\r\n\r\n \u003e\u003e portRet = randn(nObs, nAssets); % Sample portfolio return series\r\n\r\n \u003e\u003e portWeights = rand(nAssets, 1); \r\n\r\n \u003e\u003e portWeights = portWeights/sum(portWeights); % Portfolio weights are \u003e=0 and sum to 1.\r\n\r\nThe task is to compute the *portfolio cokurtosis* , which is a scalar statistic associated with the portfolio. A full description of this statistic, along with sample MATLAB code for computing it, can be found here:\r\n\r\nhttp://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\r\n\r\nWrite a function that accepts _portRet_ and _portWeights_ as input arguments and returns the scalar statistic _portCokurt_ as its output. You can use the code at the website above as a starting point, but try to simplify and shorten it in the spirit of Cody.\r\n\r\n\r\n\r\n","description_html":"\u003cp\u003eAs input data, you are given a nObs-by-nAssets matrix \u003ci\u003eportRet\u003c/i\u003e of return series for assets in a portfolio along with an nAssets-by-1 vector \u003ci\u003eportWeights\u003c/i\u003e of portfolio weights. Example:\u003c/p\u003e\u003cpre\u003e \u0026gt;\u0026gt; nObs = 504; % Number of observations\u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; nAssets = 5; % Number of assets in the portfolio\u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; portRet = randn(nObs, nAssets); % Sample portfolio return series\u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; portWeights = rand(nAssets, 1); \u003c/pre\u003e\u003cpre\u003e \u0026gt;\u0026gt; portWeights = portWeights/sum(portWeights); % Portfolio weights are \u0026gt;=0 and sum to 1.\u003c/pre\u003e\u003cp\u003eThe task is to compute the \u003cb\u003eportfolio cokurtosis\u003c/b\u003e , which is a scalar statistic associated with the portfolio. A full description of this statistic, along with sample MATLAB code for computing it, can be found here:\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\"\u003ehttp://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\u003c/a\u003e\u003c/p\u003e\u003cp\u003eWrite a function that accepts \u003ci\u003eportRet\u003c/i\u003e and \u003ci\u003eportWeights\u003c/i\u003e as input arguments and returns the scalar statistic \u003ci\u003eportCokurt\u003c/i\u003e as its output. You can use the code at the website above as a starting point, but try to simplify and shorten it in the spirit of Cody.\u003c/p\u003e","function_template":"function portCokurt = computePortCokurt(portRet, portWeights)\r\n\r\n\r\nend","test_suite":"%%\r\nrng('default')\r\nR = randn(504, 5);\r\nw = ones(5, 1)/5;\r\nassert(abs(computePortCokurt(R, w)-0.119749008958925)\u003c1e-3)\r\n\r\n%%\r\nrng('default')\r\nR = randn(252, 15);\r\nw = ones(15, 1)/15;\r\nassert(abs(computePortCokurt(R, w)-0.013012357540290)\u003c1e-3)\r\n\r\n%% \r\nrng('default')\r\nR = randn(100, 1);\r\nw = 1;\r\nassert(abs(computePortCokurt(R, w)-6.280759230562035)\u003c1e-3)\r\n\r\n%%\r\nrng('default')\r\nR = randn(5, 10);\r\nw = [0.1*ones(5, 1); 0.5; zeros(4, 1)];\r\nassert(abs(computePortCokurt(R, w)-0.169198885214440)\u003c1e-3)","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":2328,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-03-10T11:04:22.000Z","updated_at":"2015-03-11T18:00:35.000Z","published_at":"2015-03-10T11:25:35.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs input data, you are given a nObs-by-nAssets matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportRet\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of return series for assets in a portfolio along with an nAssets-by-1 vector\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportWeights\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of portfolio weights. Example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ \u003e\u003e nObs = 504; % Number of observations\\n\\n \u003e\u003e nAssets = 5; % Number of assets in the portfolio\\n\\n \u003e\u003e portRet = randn(nObs, nAssets); % Sample portfolio return series\\n\\n \u003e\u003e portWeights = rand(nAssets, 1); \\n\\n \u003e\u003e portWeights = portWeights/sum(portWeights); % Portfolio weights are \u003e=0 and sum to 1.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe task is to compute the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportfolio cokurtosis\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e , which is a scalar statistic associated with the portfolio. A full description of this statistic, along with sample MATLAB code for computing it, can be found here:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.quantatrisk.com/2013/01/20/coskewness-and-cokurtosis/\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function that accepts\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportRet\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportWeights\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e as input arguments and returns the scalar statistic\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eportCokurt\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e as its output. You can use the code at the website above as a starting point, but try to simplify and shorten it in the spirit of Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2122,"title":"Simple Robotics 2 - End effector attitude","description":"Given a structure as input to your function with the following fields:\r\n* robot.links(L1,L2,L3)\r\n* robot.jointangles(alfa1,alfa2,alfa3)\r\n* robot.attitude(x,y,tht)\r\nReturn the same struct with the correct end effector position and orientation in \"robot.attitude\". In a stretched out posture, the end effector angle is 0.\r\nIn other words calculate the end effector x,y and alfa.\r\n\r\nWhen the robot arm is aligned with the positive x-axis of the robot's base coordinate system, the end-effector angle is defined to be zero.\r\n\r\nYou can easily modify this function to generate xdata and ydata for plotting the robot arm. Check the testcases for the requested accuracy.\r\n\r\nTip: calculate the x,y position of the heart of the orange end-effector as a function of the angles alfa1...3 and link lengths L1...3. L1 is the length of the first link (connected to the base of the robot). good luck.\r\n\r\nTip2: alfa1 in the picture is negative.\r\n\r\nTip3: make a little drawing on a piece of paper to see how the end effector coordinate system relates to the angles of the hinges (joints)/jointspace.\r\n\r\nAs a visual reference, check the picture below.\r\n\r\n\u003c\u003chttp://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\u003e\u003e","description_html":"\u003cp\u003eGiven a structure as input to your function with the following fields:\r\n* robot.links(L1,L2,L3)\r\n* robot.jointangles(alfa1,alfa2,alfa3)\r\n* robot.attitude(x,y,tht)\r\nReturn the same struct with the correct end effector position and orientation in \"robot.attitude\". In a stretched out posture, the end effector angle is 0.\r\nIn other words calculate the end effector x,y and alfa.\u003c/p\u003e\u003cp\u003eWhen the robot arm is aligned with the positive x-axis of the robot's base coordinate system, the end-effector angle is defined to be zero.\u003c/p\u003e\u003cp\u003eYou can easily modify this function to generate xdata and ydata for plotting the robot arm. Check the testcases for the requested accuracy.\u003c/p\u003e\u003cp\u003eTip: calculate the x,y position of the heart of the orange end-effector as a function of the angles alfa1...3 and link lengths L1...3. L1 is the length of the first link (connected to the base of the robot). good luck.\u003c/p\u003e\u003cp\u003eTip2: alfa1 in the picture is negative.\u003c/p\u003e\u003cp\u003eTip3: make a little drawing on a piece of paper to see how the end effector coordinate system relates to the angles of the hinges (joints)/jointspace.\u003c/p\u003e\u003cp\u003eAs a visual reference, check the picture below.\u003c/p\u003e\u003cimg src = \"http://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\"\u003e","function_template":"function newrobot = forwardkinematics(oldrobot)\r\n%   * robot.links(L1,L2,L3)\r\n% * robot.jointangles(alfa1,alfa2,alfa3)\r\n% * robot.attitude(x,y,tht)\r\nend","test_suite":"%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[0 0 0];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude;\r\ncorrect_attitude=[0 sum(robot.links) pi/2];\r\nassert(isequal(yc,correct_attitude))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[pi/4 0  0];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude;\r\ncorrect_attitude=[-0.5*sqrt(2)*sum(robot.links) 0.5*sqrt(2)*sum(robot.links) 3*pi/4];\r\nassert(isequal(yc,correct_attitude))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[pi/4 pi 3*pi/4];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[-0.5*sqrt(2)*(robot.links(1)-robot.links(2)) 0.5*sqrt(2)*(robot.links(1)-robot.links(2))+robot.links(3) pi/2]\r\nassert(all(abs(yc-correct_attitude)\u003c=eps))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-pi/4 pi/4 0];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude;\r\ncorrect_attitude=[0.5*sqrt(2)*robot.links(1) 0.5*sqrt(2)*robot.links(1)+sum(robot.links(2:3)) pi/2];\r\nassert(all(abs(yc-correct_attitude)\u003c=eps))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-2.1513    2.9568    2.8725];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[0.246878929631356  -0.220349832044192   5.248796326794897]\r\nassert(all(abs(yc-correct_attitude)\u003c=1e-8))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-0.0919    1.8867   -2.2501];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[-0.260952279814086   0.667368060676958   1.115496326794896];\r\nassert(all(abs(yc-correct_attitude)\u003c=1e-8))\r\n%%\r\nrobot.links=[0.5 0.45 0.3];\r\nrobot.jointangles=[-0.4916    2.6121    1.8360];\r\nrobot = forwardkinematics(robot);\r\nyc=robot.attitude\r\ncorrect_attitude=[0.070611406176580  -0.000086942065283   5.527296326794897];\r\nassert(all(abs(yc-correct_attitude)\u003c=1e-8))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":20079,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-01-16T04:52:06.000Z","updated_at":"2014-01-25T01:02:46.000Z","published_at":"2014-01-24T01:47:31.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven a structure as input to your function with the following fields: * robot.links(L1,L2,L3) * robot.jointangles(alfa1,alfa2,alfa3) * robot.attitude(x,y,tht) Return the same struct with the correct end effector position and orientation in \\\"robot.attitude\\\". In a stretched out posture, the end effector angle is 0. In other words calculate the end effector x,y and alfa.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen the robot arm is aligned with the positive x-axis of the robot's base coordinate system, the end-effector angle is defined to be zero.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou can easily modify this function to generate xdata and ydata for plotting the robot arm. Check the testcases for the requested accuracy.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTip: calculate the x,y position of the heart of the orange end-effector as a function of the angles alfa1...3 and link lengths L1...3. L1 is the length of the first link (connected to the base of the robot). good luck.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTip2: alfa1 in the picture is negative.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTip3: make a little drawing on a piece of paper to see how the end effector coordinate system relates to the angles of the hinges (joints)/jointspace.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs a visual reference, check the picture below.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2103,"title":"Simple Robotics 1: On track?","description":"As a small extension to problem:\r\n\u003chttp://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\u003e,\r\nimagine that Pe represents the attitude of a robotic end effector with 3 degrees of freedom (x,y and tht).\r\n\r\n\u003c\u003chttp://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\u003e\u003e\r\n\r\nThe end-effector (kind of orange) has to stay parallel to the straight line within a distance indicated by \"errorlevel\". The error levels for the distance are 1 cm (ridiculous accuracy) and .5 degrees for the end effector angle.\r\n\r\nWrite a function which returns true if the end-effector is \"on track\" and false if the position of the origin of the coordinate frame which is considered to be attached to the centre of the end effector, falls outside the area indicated by the dash-dotted line. Also return false if the end effector orientation is too far off from the direction of the straight line.","description_html":"\u003cp\u003eAs a small extension to problem: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\"\u003ehttp://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\u003c/a\u003e,\r\nimagine that Pe represents the attitude of a robotic end effector with 3 degrees of freedom (x,y and tht).\u003c/p\u003e\u003cimg src = \"http://3.bp.blogspot.com/-Quk1HnM9BF4/UtU4GvT5NhI/AAAAAAAAAC4/wSltlKZRlok/s1600/ontrack.jpg\"\u003e\u003cp\u003eThe end-effector (kind of orange) has to stay parallel to the straight line within a distance indicated by \"errorlevel\". The error levels for the distance are 1 cm (ridiculous accuracy) and .5 degrees for the end effector angle.\u003c/p\u003e\u003cp\u003eWrite a function which returns true if the end-effector is \"on track\" and false if the position of the origin of the coordinate frame which is considered to be attached to the centre of the end effector, falls outside the area indicated by the dash-dotted line. Also return false if the end effector orientation is too far off from the direction of the straight line.\u003c/p\u003e","function_template":"function y = isontrack(p1,p2,pe)\r\n  true;\r\nend","test_suite":"%%\r\np1=[0.218246;0.224576];%meters\r\np2=[0.769657;0.602542];%meters\r\ndirection=34.428783;%degrees\r\n\r\npointsx=[   0.350085000000000\r\n   0.375000000000000\r\n   0.770085000000000\r\n   0.753475000000000\r\n   0.609915000000000\r\n   0.290763000000000\r\n   0.301441000000000\r\n   0.301441000000000];\r\n   \r\npointsy=[      0.285805000000000\r\n   0.400212000000000\r\n   0.602331000000000\r\n   0.585551000000000\r\n   0.497839000000000\r\n   0.259873000000000\r\n   0.275127000000000\r\n   0.275127000000000];\r\n\r\norientations=0*pointsx+direction;\r\norientations(end)=direction+0.6;\r\ncorrectanswers= [    0\r\n     0\r\n     1\r\n     1\r\n     1\r\n     0\r\n     1\r\n     0];\r\n\r\nfor j=1:length(pointsx)\r\n    y(j)=isontrack(p1,p2,[pointsx(j); pointsy(j); orientations(j)]);\r\n    assert(y(j)==correctanswers(j))\r\nend","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":20079,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-01-10T14:00:37.000Z","updated_at":"2014-01-15T07:35:45.000Z","published_at":"2014-01-15T07:35:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs a small extension to problem:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.mathworks.com/matlabcentral/cody/problems/2100-distance-to-a-straight-line-2d-given-any-2-distinct-points-on-this-straight-line\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, imagine that Pe represents the attitude of a robotic end effector with 3 degrees of freedom (x,y and tht).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe end-effector (kind of orange) has to stay parallel to the straight line within a distance indicated by \\\"errorlevel\\\". The error levels for the distance are 1 cm (ridiculous accuracy) and .5 degrees for the end effector angle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function which returns true if the end-effector is \\\"on track\\\" and false if the position of the origin of the coordinate frame which is considered to be attached to the centre of the end effector, falls outside the area indicated by the dash-dotted line. Also return false if the end effector orientation is too far off from the direction of the straight line.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAHgAhsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1+iiipKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKUUAFFFFABS0lLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAn4VXkmMbIPKd9zbcgfdyOp6cVXvXuRCyWKRyXG4L8zAKmR95h345wOTxRp+niyRizvNcSndLM/wB526Z9h6DoKdhE8NvsZZXEclwF2NKE2lhkn3x6+mTVvFIAKWkAUlFUb7UYbBY/NLF5W2RRoMu7ewHt/wDroAluJvs1u83lySBRnZGu5j7ADk1US1F79lvr228u5i3FY9+4Rk8ew3Ad/c49akgsmjvprqW4kkdvlRCcJGvBwB0JOOT3q9TEPooopFDahlkSJQzuiLkDLEDJJAHJ/wAnNE0qRJudgi5A3E9yQB/Ss1NOmn1Jru+dJBE5NtCmdiejHPV/rwO3rTsJl5Y5XcO5aPaWXywQQ4JGCfy4HbNW6KKAG0UUUhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFLRRQAUUUCgBaKM0ZoAKKrzzw2lrLczuscMKF3c9AoBJJ9On6VyPhL7V4ln/wCEu1BpUikLLplmW+SGHkbyO7uM8noDgUAdofpQKzk1jTpJbtE1C0ZrTm5UTLmHry4z8vQ9fSqF14qtI7q0trCC41We7jaaJbAoymMHly7MqYzgfeyc9KVwOjxSVyMj2vjzw6LnT7i7sLy2nYQyH5JbW4XgqyjIPU5HIINWPBviGXX9HY3cKwanZzNa30I/hkXOcd8Hg/jTA6ailooASilpKAGkis9r1Zb17CFnMwQl3UZEWem7PAJ7DqQPxqV5DK3lQnKksjyI4zGwHHHPPT6elJYWMGnw+Tbg4JySSSzMerMT1J75poWpPDAsXICtIwAd9uC5xjnFWKSlzSGApM+1FUNQup7a3BtrZp5nbaiDgAnnLHsOue/50biJJ7hY28pTGbhkZo4y4BfH+RTLKGdIUa9aOW5BJyiYCZ/hXPbH596WKyhju5bvygJ5gods5OB0Az0H8/SrmaYDqKKKQxDVDUNQh0+LfLuLs21I0GXkbsoHrx+FTyzrEyAlgZH2KNucnB9vbr0qslmr3Ed9cRR/a1j8ssCWC567c/57c0/UTJbZZXVZ5leOZkAaLzNyoRk8EYHfk/4VbxSiikAuaM0lFAxtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUooAKKKKAG1y/i/xRN4Xt7FrXTf7Rub25W2jg88RZYgkfMQR2H59a6kD5q85+Kf2of8ACN/YPK+1/wBrR+T5+dm/DY3Y5xn0qX0GjS0bxldz+IItE1/w/Po97cRtJbf6SlwkoH3huUAAj0549OM1dU8ca7p63V7F4MvX0m2ZhLcy3KRSBVOGYRHLEcEg55HPAp+meGPEF74ottf8U3WnNLYxMlpbaej+WCwwXJfnPbH0pfGOpz6w0ng7RdsmoXSbbybGUs4T1Zz/AHiOi9T147tu3qJfgV/iDr0V38L2udOYldW8qCFm4wshGcj/AHciuygjt9G0WKHOy2srcKSR0RFAzj6CuB+ImnwaR4R8MafBxaWurWsZyTkoqsPx969OKfLTl5CW2p5Xd3ej/wDCbaVqyxxx+HrmBoBOo2xTyKRKg2Y5GScY+8wIxxz0HiXxTZ6BFZaTYTWVneXifuGumWGK2jHV2DY6dAvUnjsa7Pkdfwpf696m2lir9TmPBkWj2+iG30W9W+ijlbz7kHd5kxwzNuHBySOnA6dqxtOY6V8ZtXsBxDq2nxXoUHo8bbD+eGNeg49/0rzzUx/xfbRduf8AkESF/wDd3Pj9aolHotFFFAxh/Osaa7ubu6a0sCUWIgT3JXO3/YUHq3TnoAfWrjP9rTbC+YHU4nik5DA9BjPoefbFXselPYncQKE6ADJycDqadRRSKE/hpelLWbeTzSJNBp8sJu1Kglzny938RA9snBxnFMQr30KXyWKl5Lhl3kKM+Wo6Mx7DsPX8zTrGz+xxMGmkllkbfLI55djgZAHQDjgcDj61LFEY0XzH3yhQrSMAC2B1OPx+mas4oCwtFFFIY3NUdQuJba33QW0lxKx2pGvcnoSewGM5omvEFwLSKVPtTRl0QgnA6ZOOgyRz+FSww7N7n/WyYZyCcEgAcA54piINPtrm3iLXU7TXEp3ORwi9MKoPQfzPer+PWlHNBFIBaM0lFAxc0ZpKKAEooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClpKWgAoooNADM/41i634ftddm06W5lmQ2NytzEIyBuZem7g8c9sfWtr/8AUKMdMelIOg7HT2rz+H4VWVtLczWniTxNaG5kaWUW18IwzE9ThOfxr0AmlH3aA2R51498Oy2nwvnt4b28vJtOZbxJryTzJH2tuO5sDopb8hXd2N4moabbXsH3J4lmTnqGXI/nUk8UVzbyQTKskcisjqRwynIIP+e9cZ4bln8HNJ4c1NZmsIBJLp1+VLI0IBYxuR91kGcZ6jp0xQwSJIPEmp22sazpurGwje2sBfW80aPtVfmBDhm+baQORtz6DtFDFf6joVhrnifVZNOgjtmmubWzkktkDN90s6vv4XqucZPtVeTTrbxn4wtdWsrgS6PHaeVcSJ9y6y6usYPcAjLf98/3gNnxF4cvtd1Kxnj1K2jtrRt/2O5tGmjkk7M2JEzjsOmefotbDe/kM8A/2m/hxH1N7hw80jW32k5l8gtmPeTyTj156Vl6Wp1f4x61qI5g0mwisFI7u53n8vmHtWvfahq3h/SnacnWdTupvLtILW1MSBiowp+ZtqjBYszevpUnhPQP+EY0Jlu51lvrh3ur+5PR5W5Y5/ujoM/pmqJWx0vWsm6hfVVjWKcJp7ZEuzIeTBxtB7Lwc96fZ3Z1NHlEUkdsHBgk3FTJg5Jx2U4A561p9aewbkMUUUUSwxKqRqNoVQAFxxj8KsUUUrjG5paTNZjXK6i11Z2000bRnY9xGBhWJ5UE/wAQx+GfwosK4+a5uRew28FsXVvmlmY4VF9Ae7e3apbO0gs0ZYIwgZiz9SWY9STznPue3tTrW3SztY4IgQkYwASST+JqzjrzTAdRRRSGNHaqsrsMRJuV3DbZNm5UI9eff8cHmqVxqLve/YrBVknUgzSEHZCpOecYyx7LnvnpWjDDFFv8pVUu5ZsdyepNPYVypp+nrZKx3NJNKd0szj5pGx146D0HQVo0GkJoAdSUUUhhRRSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFLSUooAKKKKAFFFJS0AFLSUtABRRRQAUUUxm2IW5IAzwOaABjgZOcDngVReFNRi/fqklowR0BBye/zA49uMfhVa0S9vLpb24MlvEuRDbA84I+9Jjvz93tn16bA709hbjqMUUGkMxtd17T/D1j9r1CZo1JwiDlnPoo7/AI9K4pfi/Zed8+kXSwH/AJaBxu/Lj+dc/wDEa4lvPHTW0xYw20K+Wp6HIBJ/X9KwCAeD0xg8da7KWGUo3ZzTqtM9vtdSHiC1tbnSL2P7Gz5lkxlxjB2AEYHvnt065raVAn3QAM5wB3NeRfCm5lg8RalYKT9naDzsZ4Vgyj8OG/SvX65qkeV8ptB3Vx1FFFQWMz+FVJ2mfMMW6NiNwlwCq4I4x649se9Vbz7Ve+XBZSrHA4JluVcFgM42p6E889BirdpbRWlrHBAuyNBgLnp9e57/AJ+tOwr6ksUMUW8xRKm5tzYGMk9+OuamNANLSYwpKKKACiikoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKXFFACUuKKKADFGKKKAExRS0UAJRS0UAFFFFABRRRQAtFFFAC0lANQTOY4mcK0hUZCoOWxzwDjk/WgCG7vYLC3M877UBwOMkk8AADknrx1Jpwi3y75trbXJiIGNoK459TyfaoP7OWTUjezuZHXiBCPliyBnA9T6/hWhx+VAle4+iiigYzn0qN5BGhZiqqoyWJwAPr7etNuLiK2hkmndY4kXczscADrzmvPr/UtS8aanJpmju0WlJ8s04GA3rk/ngdx19rhDm1exEp20MXxVGvjHxF53h+1lkuLeIh5QQFkAPHB/H659q50aL4lklMK6BeiXpuMTBfzxj9a9w0bRrXRLEWtkm0DlnP3nPqT/n+lama2+sOKtHYj2V9WcV4C8Hy+HLWe4vir6hckb9pyEXsvpnua7age9MLAKWbAUDJJPSudvmd2apJIcThazobxdTV/srukcUgHnBBtkx1A65Hbdjr06UXUQ1OJ4WLi2IUh45BiUHkj1x0HXnNWo40giVEUIqjAUDAUdP0oDUdFEsSbUUIoJIAA7nJ4+pNTUUUhhSUUUAFJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABS0UUAFFFFABS4oooAMUYrJk1i1GuxaMGaS8eJpzHGufLQdGcjpk9O5/DNa1ABikpay9Y1e10SxN9dmRLdXUSSIpbYCQNzAc7Rxk9hQBp0VDG6yxK6MHVhlWBBDDr9OanxQAlFLikxQAUUYpcUAJRS0UAFFFV5JSijCO7ZUFVIyMkDPOB6+/FAFW/1FNPiX5Wlmc7YoV+/I3oPTHUnoKdZRyukU16kP2xQwJiBwoJB2gnr0A9yKmjgw25yJJQWAkKjKgnoD7cfXFWfpT6CHUUUUhjc/NUFzcQ2lu888ojijGXdjwAKh1DULbSrKW7upVjhTkn19h61wCxX3xD1NZ38210OA4AJ5kbvjHU+/atIQvq9iJSttuLNc6j8Q702tsjWuiwyZeQjlvr6n0HbPNd7pum2ukWkdraQiOJe3cn1PqfXNJFYJaaetpYbbNVACFUztwRnI759/X8asxLKEQOVdlGGIG3Jxycc9frxROd1ZbCjHq9xzssaM7kKijJJPT8aym8R6Ql1DarexyTTSiNBF8+WPbI4GOp9KfrD2iWsaXNsl27P+4tyoYu/PIznpk89qyPsQt9aspr54lkiR7mV/uxRKAFVF9Blyfcrn0qYpdRybvodUzCNSxIAUZJrKtLm61C7W5TMNgudgK/PPkY3EH7q+nc1e2PLKC6tGInJQK/DgjGT0x1P5VZxSKAAJgAAAcAAdKdRRSGFJRRQAUlLSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUCilFABRRRQAg9KXiuc8TeKbXwta2s9zbXl0biYQRRWkYkkZiCehIz0/Wquh+O9P1vVjpcljqel6gU8xLfUbbynkTn5l65x7+/oaFqD0OvrO1bUYdH0m81K4/1NrE8rgHrgZwPfj8zWhmuB+Lk8o8GJYRMVOo3sNmxHYMxP8A7L+tAF7wHYXEeif2zfgNqesH7XcOT0VhmNB7KmOO3Nb0er6bJLdomoWrPaDNyonXMPXlxn5enfsKmZrfTLEsf3dvbxcnH3VA/wABXmt3d6R/wm2lasqJH4euoGgEwGyKeRSJUGzHIyTjH3mBGOOVfWw+h6K+p6eNNGom+tfsON/2kyr5W3sd2cY9/ekt7vT9Ysme1uLa9tJAULQusiN2IJGQe9cJ4omWLxlokEt5p2l6XbWj3FqdQtz9nMwIAG3egDKpyOcjPSuo8Jafb2WlSTQTXM8l3O0889xAYWlkJALBCBtU44GOmDk9aFqhPRmZ4JnbS9T1bwjMWI02QS2RY9baTlV9yp+X8hXcV57rDHTvjN4duV+VdTsZ7OXA+9sy4+vJUZ9K9DxTASiiigAooooAQCigVnPqkSalHYojyzMNziPH7tefmbsM9MdaBD7uWWOJ1tVjlutoIjZwMZOAT6Dg9ucVFpum/Y9800rTXc2DNMR164UDso7DtVuKExooZ2kkAAMhABb64+pOPerAp3AdRRRSGMxWdqmrWWjWrXV7MI4wcAd2PoB3/Co9d1u10LT3urlvZIwfmdvQA/zrjtL0e/8AGeoR6zryeXYr/qLYcBhnP5fzx6VpCF1zS2M5T1stxlnY6l48vxf6kZINGR8wwA43jP8AnLfl7ehwW0NpCkEESxwoMKijgCnRxrGgVVVVUYAAwAPp7VKR8tKc+bRbDjC2rOfv/Ea2fiay0VbZpZbpdxYP9zr1H4E1o3+oJZQr8rSzynbFCv3nb0Gf1PauEtL4XfxG1S/EZmeAfZraKPq78Dv0HDkntXWqsWlxSajqUokvGAUlVJxnpHGOv9T1NVKCViYybJrW0Np5moX8ivdsmXcA7Y0HOxB6cc8ZOPydJpr3l9512wkt4SDBAuduRg72z1bPTsPrzU9oZp4ori4haGcqwMQckKCcjOOM8DJA4JNXTnn9Ki5dh9JRRUlBSUUUAFFJRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUopKKAFooooA84+Kcs8H/AAjUlpb/AGq5TVozHBvCeY2Dhdx4GfU0/T9M8R6/4ysNf1zTI9HttMikWC2W6E8kruMEll4C47deK6DxJ4bPiC40l/tQg+wXqXWNm7zNv8PUYznrz9K6EEcjvjBqVogk9Twn+3dT8RG81GY+OhMZZEthokH+iRqpIQHn5zxyeD2rY8QX2pap4c8AtrkEtvcTa1ALpZYvLbcrFclT0yMnpXRDwJrOnXdyfDfiybSrG4kaY2kllHcKjkknYXIwD6fzrP8AiVZtpHgXRC91Pdf2bqdvLJcTvudsbgWY9+tUtge56aePeuWtfFFzLqeqabd6ZHaXVnardxA3O5ZI23feIX5SCMHG4A5wTiukllRImlZ1WNRuLE8Adc1weraS+v8Aj6M2k6tYSad5OoyRnIMbMrogI7uM59FJPcGp62H0NO28Zz3Ok6Q/9k7dW1VTJBYC54SMcl3kK/KoBBPyk5IABrQ8MeID4jtLm4a3jiaC5eAmGbzopNv8SPtG4c+g5GKyfEPhOW/8S2uqpp2lalBFaG2NnqPyonzAqykI/PUYwPrXTaVbXFpp8VvcG33xgqBbQeVGq5OFVcnAA469u3Smu5L8jjfHxx4+8AsuC/2yYAexCA16JXnfiYi9+L3gyy6i1iubpx6ArgE/ileiUxhRRRQA2lorEvru6ubptP0/MbgDz7kjiIHnC+renYdT6UJCuaDzEuEh2SFXxKA4ygIyCRz14/OmWNhBp6MsKsWdi0kjnLyN6k9/5VZjXYgUlmYAAscZb3OKkNFwHUUUooGNFYXiLxJaeG7ISzkySucRxA8t/wDW5HJqDxJ4ottAtyN3mXrj9zbgck9iR2H61jeHvC9ze3o1vxGzS3TENFA44T0yPb0xx9emsIJLmnsZyk9okOi+HLvxBqA17xCCVY5t7Vjwq54yD256d+9egAAKAAABwAO1LwKDjb24qJzcioxsLz+lZWs6vDo2nyTvlpArFIweWwCT+A7ntU1/frZoqqrS3Ep2xQr952+vYDue36Vj6roj3Oi3v2gyzX9yioWhH3QSPkQHovqfqT0pwSvdik3ayMr4d2qW+jzatcIWmu5yPMCEnG4AYA9Wzn6e2a69bVHmimuI0eeIvsYA/KDxwOecY/UVn+HNFl0bTI4JrhpZQioQD8iY7Afieep/IDcx39sU6krybQQWg8UlFFZlhSUUUAFFFJQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABS0lFAC0UUUALWH4r0NfEfhXUdJbG65iIQkdJBgqfzArcooA5XwZqS654MtftMSmeKP7JeQSDOJE+R1YH1xnHoa0pG0nwvoskuy103ToPnYIgjRc8nAHck9B1Jqvb6E1l4jn1OymWO3vlze2pBw8gHyyKezY4PqAD1rK+IVjfXuk2ktpbSXSWd9Bcy28Q3O6I2WAX+I98d6l6D0NKLxjoU91Fbi6kS4mmWFIJbWWOQsV3DKMoIGATuPGB1rf8AU4rzuRmf4kWXiF9GvTZPZvawTfYpPMEgZTuZNuUBDEAsB0PY5rs9Ys73UNMktLK9FnJKdjThcsiE/Nt/2sZwexPSq6COW8Lxf278QNc8UY3W0C/2ZZNnO7YcyMPbdwD7n3rv6z9L0220fTLbT7GIR20CBUTHT3JPU9ea0KAG5pM4p1ZN7bzaiggguXig3ss7AMHYDjap4x6E/l60ITLHnreKy27o8Lbo3kjlO5GHHGM89ee3HWrSKEQAEkAYyTk/nTLa3htLdIIEWOJBtVFGAMVPTYIWiilzSGRjHHp2rl/FHipNDRba1H2jUpSAkXXHuQP5dzUXibxb/Z0w0zTIjcapKNqqoyIyehI7n2/Ojwv4SGlv/aOpN9o1OX5mZju8snrg9z6n/wDXWsYqPvTMnK+kSHw14Vljum1vWz52pSneFbkRfh6/TpXaCkI/TpmlX61E5c7uy4x5RpxtHFUtQvls0CqjS3Ex2wwKfmdh1+gHc9v0ov8AUBZqiIpluZciKBer/UnoBnk+lQ2Vm1s/2m4zcXsx2ySKPljAydo9FGPqT160ku4NkNqIrK+QXswm1S6ByVUnao5woH3UHHJ6k88mqtzry2Hiay0k2wmvLqIGWWM4CgbsfKc8cMevStWx09LNpZndprqY/vJ2HzN7D0UdhXIaJ/xN/iVq1/8Aejsk8lCOgPC9fwf860ik7shtrQ9BoNFJWRqFJS0lABRRSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABS0lKKAAUtJS0ALRQKKADFFFFACZzUbusalmIVVGSSenuak4qg8Y1CJkmjV7SRcNG6MrEg989sDpj8eaEIr2d4dVaUxRMtjwEn3lWlYHOVx/D79/pWvTFRUUKuFVRgADoKfjC02CQ6g0UE4pDGE1xXiTxTKLj+xtCzPqUh2MyDIi9efX+VRa/wCJ7u9vhonh395ctxLOp4j7HB9vXt9au6fpuk+BtFlvbyZfMC/vpyOXPXao/p1zW0YqCvIycnJ2WxDpulaf4L0ybV9WuBJdsMyzsdxyf4VzySf1rT8OeK9P8UWjy2TFJUOHglxuXPQ47g+teZ319d+M9SW+vlaLTYj/AKNa56+59f61DerLo10utaZMttcw/fB4WQf3SK5J4unKr7N7nbHBVFR9qtj3PHyiqd7NLaWpaGCSeUnaiAdSTxk9h7+gqn4c1j+39BttRNu8BmGSjdiDjg9xwcfWr8rGT91FuBZWAmABEZHAzn3PTnpW2zOYwgZra6aC323WtTjMspB8uBe3HZR2Xq361vRwqjOQqB3IMhVcb2Axn9PXtSxxLHuYAbmwWbHLY45x1qehu4kirf3S2VjcXLY2wxNIc+gGa5L4bWrDQri/lyZLudmJI6gcfz3V0us6eNV0m4sDK0XnjaXA6dCfr0o0jTl0jSrawRt6wpt3YxuPUn86tSSg0Jp8xpmkoorMsSiikoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApRSUooAKWkpaAFFFAooASg4qpdXcNlC1xO4jjXqSe/QcdSfbvTQoudksyhoyVkijdCGRhk5Pvz09qBFGGO91G9E9z5ltawv+6gBw0hB+8+O3oPxPpW3SCnZptgkLQaSoZJFiiZ3YIijJYkAL3+lJajJCccnivPdc8SXGv339g6C4Cu2ya7JwD3IB9ODz37Ck1PWL/xnfHSNEZksFP+kXWCNw9Pp7d8elbzadonhbw1ItxtjtVG6WVvvu46EHruz0x+FbqKh8W5i25bbCWdho/gjQpbiZ1RVUGadh80jegH8lrzm+vb3xnqS318rRabEf8ARrXPX/aPr7nvTbi8v/F91Fc6izjToTi2gPBf/abHf+fbirtxPDZ27SysEjUfl+FeTjMY0/Z09ZM9jA4FW9rV+FBcTw2duZZWCRqOfapvC/he48WXSarqqNHpMbZggPWY+p9qPC/he48WXSarqqNHpMZzBAesxz1PtXpFtdxXjS21l5kcUOFE8YXZuHVV45x0PH61phMJ7Fc8viM8bjvbPkh8Il2txPCltprRxx5MckykfuVHGFX+929B+lWbKzh0+1W3t12IoySTksT1JPcn1qO/1PTdHiV9QvrSyidtqtcSrGGbrwSRz1pYdU064lgihvraSSeLzokSVWMkfTcoBOV9xxzXZc4LI0aKKKQzndQ8RLZ+I7HRVtmllul3Fw33OT2/4CfyrdP3q4TR/wDia/E3VL7rHZJ5KY7Hhev4PXeVpOKjYiDbuOoNFJWZYUlLSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUYoAKKMUuKAEopcUYoASloooABS0UUAJUUjhEJAJbGQB1Jx0HbNVNQ1CHTolZ9zO52xxIPmdv7qj8PpSWaXEsSy38UJnDlkCL/qgeNoPUnHU+9OwrjTp63OoRX1wZDtCmKB8YiY9WwM5btntjitMCl/nS5pMA/hpKP4ap315BYWklxcSiKKIZZien/6/60JXC6RJPPFbW7zTuscaDLOxwFArgLm91Dx5fPYaeWttGjYCacj/AFnP9ew/E0hbUPiBfBVElpoUL4Jz80p/qf0HvXYyS6Z4W0QuxS2s7de3c+nuTWytTXmZazfkREaV4Q0JmJW3tIVyxPVyfXuWPpXl+oX934z1Bb29VodLhP8Ao1sT97/ab1/z+JqGoXfjTUlvb1Wi0yI/6NbE/e/2m9f8/januIbO3MspVI1H5V5WMxjT9nT1kz2cDgU17WrpFBPPDZ25llYIij0rJ0uax1fxFbNrrPHp6tlYR93PbefT1/8A11seGvDNx4tuhqeoiSHSYz+4hBw0x6Z9h7/lWPrmhTaVM0sayPYPIywTuuN+PUdvr3xkV1ZbgIQ96p8RzZjj5VHyU/h/M9neNL21+zw4WyeMASQS44zggY6DA7euKuQQQ28KQwRCOJBtRVGAAK8s8G+NW0xk07UX3WbHEch6xegP+z/KvU0dZEDKwKsAQR3z0+tdVWm4OzOGnJSPOWstP1z4wanba1bQ3S2thEbK3uUDoVbl2CngkHjp/Ks74bWWnnx14lm0+ZXtbDFtZxq2VjV2Z32+28HH867nxB4N0DxQ8T6xpkd1JCMI4d43x1xlSCR14Pr71FB4C8LW2o2l7Bo8MVzaR+VC6FlAXkcqDhjyeSCTmsY6GktSnoV7q8XiZrDVbm7KS2zSRpeRQr5jqwDNF5WcIARkOxbke5rqb25FlY3F0/3YY2kIz6AmqGmeGtN0iZZ7SGXzFj8lDPcSTeWn91N7HavA4GBwPQVPq+nDVdKuLHzWiWYbS6jOOh7/AEP51UWrq5Mupzfw4tiNFub+XmS7nZicdQOP5lq7TjcfaqGk6cukaVbWCsXWFdu7H3u5OO3NXsfMfenOXNJsIKyJKSlpKkoKSloNACUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUuKKKACiijFABRS4ooASilooASilzRmgAxRRRQA0YqvJMY921DJJtJWMEZb8/r9OaZczNEjpBskudhZIi4G7HHJx05HNV9P04wO1zdOJr2UYkkxwo7Ko7L/M9aaQi2kXzs7sZPmJTcB8mRjAPHoeevPWrdFFK4xvG2jPtRWVq+r2miWT3V3KFHRFHVjjOAPX9BQk27ITdibUdTtdKtHuruURwqPxJ7Aep9K4aG11Hx7qAu7vzLbRIm/dRA/wCs/wA+vboPWn6dpmoeNb5NV1gNFpiHNvag/f8Af6ep79sCu/iiiihSKJVRFG0IBgAdMVtpTWm5nrN+RWc2mj6VI4QR2lrEzFUXoqgk4FeQ3upXPjXUPtt1+70yFyLe1DdT/eb3/wAfz9pZQ6kMAykYIPevK/FXhW48NXUms6NEX09jm5tVH+r9x7fy+lc1ZTlTag/eOmg4RqJ1FoVp54LO3aWVgkaijw94efxPMNY1j9xokB3RRMcebjufRffv0p3hvw1P4ruBq2qo8ejw/NFAes2O/wBPp9BXo7aat5cQs7IdPiVTDaohUE9i4PYcYXpXPhMIqPvT+I6sbjXW9yHwlyJFkWMRKqWyhWgMTEZAHQgdvbuPpS31lb6jayW9zCJYpBgqR/n/AB4q4BRiuy7TujgsrWPEvFHhW48P3Rdd0ljIcRykfd/2W9D/ADrR8H+Mm0opYagzPYk4Ryf9V/8AY/yr1C7tYL21e2uEWSKQEMpHBB/z9c15D4r8Jz+H7gyxBpLFz8kh6oT/AAt/j3rtp1I1Y8k9zmnBwfNE9kjdZEDoysjDIIOQR/8AXpZJFjQs7KqrySTgD3OeleQeGPGN3o6Cxdke2Y4VpcnyvfA6jnpXpMOkwXqx3N/Kt87YdM/6pe42rkj8Tkn1rnq0XB67GsanMtB3/CQ6UOt2qqejOjKp9wSMEe+aoyeLbM69ZaZaeXeC5HMsEysE+uM9gT9K6Ufe57e3WuE0f/ia/ErU73rHZJ5KY7Hhev4PUwUWmxybR3vaiiiszQKSloNACUUUUAJRS0lABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUtJS0AFFFLQAUUUUAFFFVL++t9M0+4vrpxHBbxtI5PYAZOKALVLiuL8IW95rLL4r1YyrNdKfsVoX+S1gJ446FmGCWPYjFby69pEllPeJqlk1rA+2WcXK+XGwIGGOcDqOD60rhY1Nv8qQL8v4Vz2u+MdI0KJGuJpJ3YxgR2y+YwDsArEjhQexYjODjJ4qXxFo02q2iTWN1JZ6nakyWk6no+PusOhVsAEHIoA3+KzbjUEiuorRUeW4kOTGmDsTOCzHsPT1rL8K+Jv+El0RLkQpHqEL+Te2xfBhkDYb16YJAPXjnvWxbWNvZ+cYVO+Z/MdycsxPqeenaqQiaOIopzKznJILAZGSTjjAxyPwqziiikMbRRisDxJ4mtfD1rlz5ly/EUCnlu3PoB604xbdkS3bUm17X7Pw/Ym4uTlycRRKfmkPoPT61y+k6Fe+KNQXW/EAIg621oegX3Hp0+v0qTQPDd7qt8Ne8R5kmY5gtm+6gzxke3p+fNd6Pr0NatqCtHchJzd3sIiKiBVUAKMAAdB6VJSUViagao3t5DZQtcXDhI1HcHn0AHc89P0qeSXyInch2CjJCKWY/QDr+VQNarPKstykbtE+6AhT8uRj8+vP6UxMjsfNuIUmuLc220kxRBz8q9BuAwM+3OP1rRNApaACiiikMM1WubWG9tXgnRZInGHVh1FWaShNp3Qml1PGPFnhKbQLgzwb5LBzhXPVD/AHT/AI96k8JeL5dDlFrdFpLBj07xH1Ht7V65cW8VzA8E6LJE4wysMgjp3rxzxr4cHhh/tMTb7OZsRgn5g3933+vp+vdTqxqR5JnNODg+aJ65NfQJpT36uskCxNIGB4IAJ/pXL/Dm3YaPc37/AOsu52Yn1A4/mWryyLU9beyFsb547Qgj7MpwpB6ggdfx5rtvh/4vcXUXh7UYkQEH7LInfqdp/Xms50XCDsUp80kep0UUVynQFFFFACUUtJQAUUUZoASilNJQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAClpBS0AFLSUtAHG+KPFt9oerabpWmaL/al5fLIyR/a1g27AD1YEHqfSn+HvGEuq6rdaRqujzaTq1sgmMDSrMjxnA3K68H34/Pmue8df2r/wsXwv/Yv2P7f5Vx5f23f5X3RnO3npmtrw54Y1aDxFdeIvEV1aS6nPCLZIrNGEMMYOeC3JJIB56epqYvS4SDTvH8Oq+K7XS7XTbj7FdRSPDfynyxLswSUQjJXkfMcd8VW+K9xJ/wAIlDpsLbX1W/gsic9AxLHH/fOPxp+qj/i7vh0f9Od1/JarfErI1jwWXP7n+3Yd/wDvZGP601qkw6nY39xp+kaLJJemOLT4IwrlhlVXgAEenQVwFo+lxfEG6a9tRFpmpW0clhC6ZSdl/dEiPGSSpGBg/Kc8Z49R524o4/xpJah0sedfFfUtPtPDkdlLd28c/wBot5FgMgDlRIpLBeuBg847V1L6uNTSNNEnhuPOUsbyNhJFGuSCcjIZsgjA9Oa0FuVuJSLZo5BFJ5c+GPy8Zx7np9KmjiEcQiBYhQACzFicccknmqj7onrscH4VJ0f4oeJ9FDNJDcQw36Fzk7toVyT0ySeeO1ei153Du/4X3ceV0/sECX/v6uP6fhXohoGN+lBoH1rlfE/ikaRt0+wX7Rqk3CRqM7M9Cf8ADvTjFydkTKViXxP4pg0KEQxAT6hKMRQAZ69z6fTvWf4c8LTvdf25r7GbUXO5I25EXp+P8qk8NeEmspv7V1aQXOpyncS3Ij+nqff8B612NaSkoLliQouTux2BRRRmsjUbn5ar3Mz29vLKsMkzKMiOPG5vQDNRXF7DbSwwsxMsz7UjAyT6nHXA6k+lPihw6zS+W0+CocJt+UnOOfw79s0CKmnWtyJmvL5ybmQYEStmOJeu0epzjLevoK1c0GjpTuCQtFFFIYUUUUALRSUtADcdq80+LtvMdN026AYwwzkOAOBuAwT+RH416X171R1K2tbzT54L1EltmQ+ardCo69Pp/KqhK0rkyV0eBq4fBUghhkEd6taDE95420eK3DF451kcgdFBDH6cA/nWdNbod8VqXjjaQlB1IGTge/X9K9m8I+DrDw1biVQ0l9KgEsznkZ6qAOgz/KvQxFTljZnLSheR1n8NFLRXmnYJRRRQAUGio3dY1LMQqqMkk4wPU0AH8q5SzvtbvfFs8XkfZdMtcq4kTJk9CCO59u3vV/SPEllrd3dwWiyMLY483b8jj2P9Patw4qvh0aI+IfSUopKksKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooABS0CigApaQUtAGHe+HrS/17TtamlmFxYCRYlUjY28YORjP0wRWywypGSM96UGlFK2lg6nnz/Cy2lu0vX8U+KjdRBgkx1AF0U9QpK5Gfr2o+Juny2/gS2uoWmmfRrq3uw0h3O4Q7SWPc/MST3xXoNVry0gv7G4srlA9vOjRyKe6kYP6U0HW4xrgz2P2iy8uUvFvh3sQrEjK5IBwOecDpXDXviTXv7E8R20k1nFqWmzKiPDGwEyuoMahSxIZmOOvfjtTPD2sjw9pr6JrM+/SbOORYNTKybZoQQqruAwGXJU89hj1q7puhpq/jW88RI5k0lhD5Az8txNGGAlB7qoOAehI3dACSzTDdFDxgNa0fwhZyxaiLEq9skkFinlhnaRQ+XJLEZ6YweuS2cV6SvOD7Vy/jHwzf+KLJLGDU4LK2V0kbdaGVyytuGD5gGOBxg/XmpdW1XVdI0eO3ihXUtbui0dsLa3aOLP8AeYFm2qvGSW5PTrQutxW2MTwvGdT+KXivWR/qLVItOjOerABn/IgfnXf9F+lc/wCE/DyeGtBisPOM07M01zOes0rcsx/l9AKyfEHie4uLsaJ4fzNfSHbJMvSId8H19+g+vSoQcmKUkiXxN4qe2uP7I0ZPP1SU7SUGRFx+p/l3qx4Y8Kpo6m9u2+0anNzJKTnbnkgf496n8OeGLbQLcu2Jr2TmWc9TnsPb9TXQ4q5TSXLEmMbu8h9FFGayNDPTU7SXUpdOW4Q3cS7niB+ZQcHP05H51K8uMbUZySoIUjjJxk57evtXBRy3MfxT1YWkPmTvbKi7jhV+WPLN7DFd3BD5aiSXY85RVeUJtL49vz496uceWxnGVyGz05ba4luWd5biU4Msg5C54UAcAD2+vetHNAFGKkuwtFFJSGFFFFABRRRQAtFFFACCud8a3wsPCl44JDyoIU/4EcH9M10Rrzf4pX3/AB46eD13TuM/8BH/ALNWlGPNNIzqO0TkfCtj/aPiawgIyglEjj2X5j/LH417t6V5d8MLHfe3t+w4iQRIT3J5OPwH616eT0rXFSvO3YiirK48UtJS1zG4UUUZFAEZPzelcD4g1a58R6h/wjuiEmIf8fdwPugZ5X6fz6Vf8YalqTvBoulQy+feA5nAwqr3wfUd/T8a1vD2g2/h/TVt4gGkbDTSkcu3+HYD/Gto2iuZ7mUryfKiXRtJttG0+OytlIC9WI++e5PqePwFalL/ACpONtYt3dzRKysOpKWkoGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUALRRRQAoooooAKKUU0theaADiqbj7YrIVxAd8ckckZy3OMg8cdfqD7VSltrrVL3/SN8FjC/yRg/NOw/iJHReOnU9T6VsAY/+vT2FcZHGkUQRFVEUYCqAAo6duOKnooNIZi65r2n+H7H7XqEzRqThEXlnPoo7/j0rjF+L1l5vz6TdLAf+WgcZ/Lj+dc98RbiW78dNbzFjDbQqI1J45AJP6/pWDgHg9CMHI612UcMpxuzmnVaZ6TqXii58SyppnhrzD5ygy3JBXYp7e3Xk/lXR+HfDtp4fstkK+ZOw/ezEcv/AID2FeffCu4lj8R6lYLuNuYPMxnhSGAGP++j+VevDjFZVXy+4jSGvvMdRRRWBqNP3arNL8wWJSx3YYgj5PlJGf07d81XvZLiVPIsHjWUuElkYg+UCM5x3OMYB9RT7OyisIRFCDjO5mPLOx6sT3Pr+XtTtoLU47SVKfFXVVdzIVs1Bc4y2Fi54/pXen+lZcWh2kGuz6wiuLqdPLclvlIwo6dvuitMmnOXM0TBWJKKQH5aKksKKKKACjNJRQAtFAooAUUGgUUAMxla8S8bX32/xXekfchPkrz/AHeD+ufzr2TULtbDT7m6fhYY2kPPoM/rXgEaTX96qfemuJQM+rMf/r12YRWbkc9d9D2D4f2H2LwpA7DD3DNMeOx4H6AV1NQWsCWlpDbJwkSKij2AAFcDqi3/AIr8fXuhprOoaXp2mW8cj/YJfKllkcZGX5+UDtiuSpK8rm8VaJ6LQP0rzDwRLrk/jjU7G91a4u7TRIPsqs0h/fs7FlZx0LhRtJPNdhpuuX1xrUum3+nR2kogW4j8u5835SxGHG0bW4HA3DrgnFSvzD9DewN3XtWPPr+n2+tW+ku5+1TDKqBnb6A46Zql4r8SrodqsNuBJqNxxDGBnHbcR/nNQ+FPDTacj6lqJMuqXPzOzHJQHkgfXvWsYJR5pEOWtkdbgelLRRWZoFJRRQAUlLSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUtFFABS0lLQAUUUx5FTG5gNxwMnqfSgCG5uYbO3ee4dY4kGXJPSq8WL+JJnUm2kVWEE0XzA5zk5/Dj2zTZLFb26guLlZAIRuS2cgqr5+8cZBOOnPFaWPlp6C1HUUUUhiE0x3VELMQABkknp7073NZXljWIriK5tZI7QOAoclWlwcnK8EL0wD1HamJnG+OfCd34guotX0gRPIkI5En+vHJAHbj1zg5HPFcGNF8SPKYV0C8EnTJiYL+eMfrX0AiBECqoCqMAAfpTzj61rCvKCsjOVJM4rwF4Ql8PWs9xfFXv7kjftOQi9l9z3NdrRzRn5TmspScndmiSSDPy5rNF6t5cXFpB5m1EZZJ0IwjdNo9W6n2xzUrt9sRoomDQMHjeRJCGRumB9Oec8Y96da20NpCkMCLHGgwAB0/wA9/wA6ELUtKML6nufWnUUGkUc1aa/LceMr3RDAgit4RKsgOWbhOP8Ax410PG6uH03/AJK1q/8A16L/AOgxV3BI6Vc1ZqxEHcfRQKKgsKSlNJQAUUUUAApaBRQAtFFFAHHfES/+x+GWgU4e6kWMe4+8T+n61594MhD+JbeZoZpUtwZisSbiMcA4+pFbXxOv/N1a1sQflt4i5H+0x7/gB+dafwt0/Frfagw++4iQn0Ayf5j8q7o/u6Gpyv3qh18OsWNxOsHmvDMx4jnjaNj7AMBn8Kwdc8HXd54iGuaHr0mj6g8XkTkWyzrKoxjKsQMj19AK6m4tYbuFopolkRjyGA5/z+YNZ7Nc6OjMS9xp6jJLkmWEDvn+NR+f1riaT2Om7RzegfD++8Oa0b+x8R3DR3ADahDcW6yG7lG75t2coMt0Hp1p7f2j4MtLvUdQv7fU5bk4LJZPHLJJ/CC/mMAijI2hR+ZOep1HWLHSrVLi8uVjidlVWHOc+nrx1qziK4hHCSRthhyGB7g/4U1o7sTs1ocn4X8PTyXDa/rP7zUJjuRGH+qHbjsfT0FdkD+B6/SnGm7RyMfWicnJ3CMbElJRRUlBRRSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRS0AFFFFABRS0UAFFFQSzrEuCQ0jAlI9wBcjnA5oAr3t7Bp9r50xYKDhVAJZ2JwFUdz6VFYLdXAM2opGpZw0UAXPlY4GT3b37frVmNWPzvvBbaRG2CIzjkA9T7/pirQxinpYQ6iiipGJUFzcw2lu887rHCgyzk4wPUmkuZ4reIPNKkaEhQWPGSQByarRQ3Ut1O1yY/s5+WKFRuwAfvMfU8cdh3zVIVyNYv7Ue0u/MuI4FHmCBhs3N2Z+/wBF6c5PpWqKKKQBRRUMkixoWchVUZJPQdzkntQMkLfrWO0l1qF75UO+3tIXxJIRhpWHVVB/h7Fu/QetW4phqCK6MGtHVWR0YhiQc+3B4+uferv8qexO44UUUUigooooA4TTv+Stav8A9eq/yirtyRWLb6BFb+JrrWxM7SXEflmPHA+6M/8Ajv61slaubTsRFWJBRQKKgsDSUtGKAEooxS0AFFFFACcUtNH9Ky/EN+dM8O3t0DhkiIQ+jHgfqRTiruwm7K54z4jvv7R8RX90CSrSsEJ/uj5R+gr1/wAIWH9neF7CErtdk8xx6lvm/rXjOk2R1HVrSyAyJpVU+wyM/pmvoBAqKAAAAMAAdK7MU7RUDnoq8nIefaqOp6ha6XYy3V2yrCg5B53egHqanubmGztZbiZwkca72Y9gK8/ghufHutfaZ1ki0O2fCR/89D/ie/p0965oQvq9jacrbbjfD+izeJb2PU9QV00qAkWds5yCueB/ujp74HYV6MABwOmKjjjjgiWJFCKowoA6CpeO/NKc+Z+QRjyj6KKSoLCiikoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiloAKKKKACloooATNLmkrN1DU1tJYrdImnupj8kCkZIHVif4VHrRZiuizNMsbBQyecwYIhbG4jkgcHj1PaqNhprR3H26+cS3rjGQPkiXj5Ez29+p/LGhHEU3ku77nLYY528DgcdP8asU07ALRRRSGJn9KrzTCKKSXa7hVLERgljjsAKgvtQg0+JGlLF5G2RxINzux6BR9OvakisyNQku3lkd2ULGhPyxrwSAB3JHJ607CuRQW5v1t7q/tFjuISzJGX3bM9DxgbgMZ9DnBrVpaMUmAlJS1Uu7mKzt3nmYRxIMszHp/n2+lCQMtVkXFn/arxNKzfYQNxtyhUyN2357dDjv3p9lJNfr59zbPEgkDQIzEPtxjLjPHfj0960yMrT2FuIqhFAAAA4AA6U+iikUFFFGaACikzRQBhW+vxXHia60TyXWS3j8wyZ4P3Tj/AMe/StomuI07/krWrf8AXqv8oq7cqKuaSsRB3HiigUVBYUUUUAFFFFABRRS0ANH3vwrhPidfeVpNrYqfmnl3H/dX/wCuR+Vd30avH/iHf/a/EzQKcpaxrGAP7x+Y/wAx+Vb4aPNUMqztEk+G9ibjxG90R8trEWBx/E3A/wDZvyr1aWVI0Z5WCKo3FicACuP+G1j9n8Py3p4NxLkEjqq8D9d1U9X1G58Yav8A2FpMmywjObm4A4b/AOt/M+wq6y9pUfZEwfJE7azurTUbRZrZ0nhcYDA5z7H/AOvU1vbw2lusMESRxqMKiDAH4VX0zTbbSLGO0tUCRJ+Z9z71d43VzPey2Nl5j6KKSkMKKKKACkoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAopcUYoASlxRRQAUUUtACUtFFABRRWVqV3dI8dtYwFriXJEjg+XEvQsx79R8vc/nRqJswfEEOoJ4giewup1ZrZmNvHLjeVYZwDld2GB5HQfjWpoMGWlv1uo7tbjBMjRbZQw42sc44/u7Rg1di05USz86eSWa1csJmPzMSCDn/vo8ew9Kq3lnPZXT6lpybmbm4thwJh0yPRx+vQ9jWnMmrEcrTublLVKyvIdQtUuLd9yN68YI6gjsR6e1Xazs0WmFVJblEdId8fnSA7Iy2C2Offj37ZqO+uZre3JtrZ7idjsRAcAH1YnoPf8AxpYbREma6aJftToqvICTwOdoz0H5Uw1G2EVyluPtzxyXBbcdi4WPIxtXjnHqfU/Sr5pRRSYWCiiq8rmNGIBkOM7R1OPyH6igYSyCOJ2wWCgnCjJOB0A7moPJW52vOiSIHWSJWjw0bY6nryM/UZ/GqljZ3M92NQ1AlZgCIrdWykKnrkjq3HJ6dh77GKewtxaKKKQwpKKKACiiigAoNFFAHC6b/wAlY1b/AK9F/wDQYq7cgVz1poMtv4yvdaMyGK4hEaxgfMvCc/8AjproeN1XN3tYiCaH0uKM0VBYYoxRRmgBMUuKKKACiimMwRSzEBQMkk4xQBHJKkcTOxAVRuJPYDmvAb+6e/1K4umyXnlZsfUkgf59K9K8V+NtFTRb61tNShlupE8oCM56nBwRx0zXCeFbEan4lsIMBo/MEjEHgqvzH+WPxruwy5YubOWq7ySOsuby5uLe08IaL/rEiVLucHhP7wyPfOfyrs9D0a10PTVtbZeeryEfM7ep/wAKsW+n2lpcTzwW8ccsxDSsowW9M/rVzPtXNOpzaLY2hC24+iiisjQSiiigApKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFopaKADFFFFABRS0UAMox6UAdTntWOt7FrMV7babdvHJby+RNKIj8jA/Mq7uCQO/I5FJMTLQuluJpILV43lhdRMDn5Qe2fXGcenFWYI1iQKu4DJIyxYnJJPJ59f8iorKzh0+1W3tkCIvXuST1JPcn196udKoEh2KMVQn1C1tr6zsZptk92X8hNpO/Yu5ueQOPXrV/NIZhXdnPZXT6jpqFmbm4th0mA4yPRx+vQ9jUy6zaGa0hXzGkuVDhSuCqnPzNu6dMetS3Vw8qT29jPCbxApIcnCAngkD2BOO/FJLpsVzp62t2zTHaA0pwHLDowI6HPPFX01J66D7CxFkshMsk00r7pZJDy3px0A9h0q9WJY3c1tdLp2ouXlP8Ax7XBGBOB2Pow7jv1HetupkhoWkIpc1Wnm8vIRTJIBkRqRkjIBPPpnvSsMr3uoQ2CxmUszzOFjjQZd2PYD+fapUhO8vNskkVmMZ2DKKRjA79uT39Kgi06KLUJb1meW4b5VaTH7tePlX0H6mtE0xai0UUUhhSUUUAFFFFABRRRQAUUUCgDJi1u0m12fSELm6gTzHBX5QMKevf7wrTNcRpv/JWNX/69F/lFXcZz+VVONrEQdzn/ABZ4hHhrQXvxbm4nZ1ht4gceZIxwATXHav4y8beF7dF1nTtJkuL0Klg1n5hVZtwBSQMcnIJIwcZXvXTeO9AvfEGgpFpzRrf2s8d1bCQ/IzocgE+4z+P51yWuWnjzxJNpuoyeHLWzGkXEdwli16kj3cm4AkMPlUAZ6n86zje5o7Hoc+tWNldWlje3EaXl1gJEASWOPQZwuQcE8Z4zmtQKNox6VyGsTaxe2+iS/wDCPXbTxTpc3EUM8DCLAYFNzOu48jkDGO9dZGS6jIZCRkg44+uMj8jTRJPRRS4pjIwa8y+KetXCPZ6JbStGlyDJOQeWXOAvHbg/XFehX95Bp1pJdXMvlxRjJJP6fjXiPinVpvEOtpf4WOOEbUUjouc8+p/xrooU3KV+hjVmkrGV9itkTb5QJxjJ6n8a6n4eXwtvGqWjxxkTwMsbY5UgE8fgD+VcoNRthklzuzjGOv0rs/hrod1ea6dfnieK2hQrAWX77EY49gCenrXXXlFQsjGmm3c9gooorzDsCkoooAKSg0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAD8UUUUARMfl64J9q881DW/Et3r2s2+lQ32/T2jSCG3Fr5UhKbv3xlYPhs4+TAABwSa9DOegNcjqug3Op3pmu9I0a+aLKxG5t1dpFJJHJB24z0Gc89M1LdmaQjzaXMy+1bXXbxZdrqclqmkwhoLZIYmAc24ch2KkkBuRjHuSMCp4rvWH1PRtKm1y4RtQtpLx7lYIQxZQn7mIFCAvzFjuDNhever76bq6JcKbXTJVlG2cGLaLsEbcv1xtGBg7sgY4pl5pWqahCtpe2Gl3lvauAkNxBlJflwGAIITbnHfPPSkpPsX7Fd0YOmeItd13VdM0ldSkhiY3kc9/BBHm6ETKEZMqygkYyQCvzHA6YrwalfaJaXdpponDXXiOS1MkQjMqqEU4XzCE3HAHzcc9M4rrI9N1i0a3MFrpbGyQxwFYvLyrYztxnywMDgZzjtxhkmkaq9rcWz2OlXEDvumjeEBbpjg73GCARx65x24pc2oexVt0Zrar4m0u3hvdR+0xWNvqCxytdJb+bLbyALufyiVUo56rjI6iqQ8R+ILy40tUa8EOrSXNzCLJLfzVhTaI0UzYTkHec5bnjFbcGg31lYzWNvpuii0Y4lt47YRx3WRgllAwMcDHOcdqfc6PqV3aR2N1YaRd2lrgJBNB+7k4wCFIITaOwznB6U+bUPY+aM2KXVpfEHhD+2oHjvElvlJcpvkQRkKxCEqGK4yAcZziuzuLi5F1BBb2+9WOZZXOFRRjI9ye1cnbWN8jfYdPtNMjGnBljkt7cRqrP97YQD5bYPIAOec4zXW6fa/YrKG34bYmCQDyepPJPUnPXvVpmU4cvW5Jb20Fsr+TEE3uXcjqzE5JJPX8at0ZozRqQUNRtra7sniudvlj5txbbsIPDA9iOxrAvNSurCCKK6nPmwypKk6nC3UIPzA9twUkkd8ZHt1EkayoUdVdWGCCMg/XNc9qPhjSLyJ7eK3KFmXfHbS+XsBP3ioOPXtk1cGupMvI0NR1I2zJBbxedfTZ8qEHA/3mPZR696sWsEscUTXLpLdBdrShAucnOB7dPyp9tb/ZreOIyySFBgPIRuI9yP8APFWqm5Sv1FooopDCkoooAKKKSgAzS0lFAC0UUUAFLSUpoA4XTf8AkrWrf9eq/wAoq7cfeNctZaPdQePdQ1d1T7JNbhEIbknCdv8AgJrqhV1HexENLjsUtJS1BYUlLRQAwnpx1qtd3MNnbvcXDrHEgyzk8DH+fxp000dvA08rqkaDc7E4x7815D4t8Vy67dGCAtHYRn5VH/LQj+I/0HataVF1H5GdSagiPxV4om8QXu1N0dlEf3UZP3uvzH3/AJVqeDPCJv3TUtQQi0U5ijI/1h7E+386h8GeETq8q398pFih+VD/AMtT/hXqyIsSBVAVVAAAHA7cCumtWUFyQMacHL3pFF9A0eSb7Q+k2TzDnzGtkLfmR7nvWgkaxoFUAKAAAB0x04qSkz9a4rt7nSkkOpKKKQwoopKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAfRRRQA0CmuyohZmChRkknoPWopZ4reF5pXWOOMZdmOAB171XhkXUYUm2uLZ0ZTHLEBvyQA2D2xkge/TjFAiteWl1ql61vOGh05D8wDDdcHg4yOifqcfnsAYXA4GKXilzQ2CQtFFFAxvRay5JJdTWM6feRpbiVhNIgy3ynlVzxyeCfansZ7m7mtng2WQTazufmkYjomOigHr3Jx71biiighSKFFjjUYVQOFFPYROBilNGaDSGJSZozWX/aYn1JrG2V5Co/fzA/LFxwPdvbtnnsKEhXH3kk8kUkFhLF9qXaD5hJ8tWJ+bA6nGeCecUafp0VhCVQtJI53yzSctI3ck/h+FWoovLiRNzPtGMsck44yfXPepjTuA6koopDCkoooAKKKSgAooooAKKKKAFFFAooAKWkpaAMK41vZqrafawrdzxRh5Y1lCuvTs2B3Xv36VastUtr9Sqkxzj78EuFkTtyuf16Vy+mj/i7Wr55zaD+UVdbd2FrfrturaOTbypYcr9D2/OtJJKxnFtlzP40orFGn3Nl82n3UjqvP2e4cujewY5Zf1HtVqwv2vPPSWB4Z4XCyRlgcZGQQe45/OosVc0ageQRoWZlRVGSScAAe/tT3ZUUsSAoGSSeleUeNPGB1F307T3Is1OJJAf9afTP93+dXSpObsiZzUUReM/Fx1mY2VkxWwQ8sM/vT6/7tQeEPCcuu3AuLgMlhGfmb/nof7o/qai8KeFpvEF1vl3R2MZAeQdW/wBkf54r2O2toLO1S3t41jhjG1FA4Arqq1FSjyQ3MYQc3zSFhhigiSGFFREG1VAwBxjFTkUAigmuFtvVnVsLSUUUAFFFJQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAvpUMsqQJud1QAgZJxjpj88/rUV9dxWVrJcTEqijJIBzzjAA7np+dVrA3dyslxeqI43IMVsQCUwcgsf7xOOOgx+NOwr6jriwTUXie6WQJDIx8gsCjkH5WIHXpkAnjPqK0ulLmikAoFGKM1XmnitoXmndY44xl2JGAOv4UDJGZY13EgKoyST0rJ/d+IbIE/aI7PzM4xt+0KBx77T+Gceh5nVLi5vY7lbkJZBAUjUcyEjq2R056f4Vo09hbigBFAA4HQCnGiikMjI9v1o5/wqOaURxM7dFGT+ArxqXxT4x1Pw7qPiqPVYbHSkDGCzaFQrgMFC+Z94sec4I5IAPUBLVg9rnsO8yuUhKkKxSUknK/LkYx35Hf9abaWcNlbrb28QjjU/dz1z3JPU+9M0u4mu9KtrmeIwyyxK7xk/cYqCR+H9Kuk/wAqpslaq4+koopFBSUUUAFFFIaACiiigAooooAKKKKAFFFAooAKWkFLQBwum/8AJWtX/wCvUfyiruM9q5Cw066j+JGpXz27ray2yqkh6McR8fofyrrx6VdR7GcOoH3rOudKtbybz5VkSYLtEkMrRtgHuVIJxmtHjB/WvNvG3jHHmaTpkpyPlnnB6dtq/wBadOEpuyHOSitSh4s8WXBSXRrS7M0CHa9yPvOP7pI4PfJHWsPw34dufEN95KZjt0OZpcfdB7D3NVtE0S613UFtbYcdZJCPlRfU/wCFe16Tpdvo2nx2dqmI1GST1du7GuupNUY8sdznhB1Hd7E1lZQadaRWlumyGIBQB296uUtHtXA227s6kklZC0lLSUDCiiigBKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAK0IlLLNLuRmQAw7gVQgkk5457GrlGKKYgpKWqd3dxWVq9zNnYgycAknsABzknI+tICyeMcfrXNHUjKzDXtNa1gEgaLchkTjuWGQOexArTjtVvZba+uUmRlXclvIwxGx7kDq2OB6Vp7fy9Ka0FZshililiWWJ1dGGQ4OQe+c9OanFYq/wDEnu1i62V1LhB3hkbnH+6xGR6E+/GyDmhjTDOFpGcIpZsBQMkk9KdWTe2R1fy1llkjtAzCWAoVMuDgAn+6cE4xyCO3UQMS5uE1DSpXt3WS0eGQFhkE44G0+nB5+mK8v8M+G9E1P4W2Os3pkgvrGCYRX0Vy8bW+JHORhgMgnuO9et3MP+gyQwqBlCqqABjjAArznwj8KdFXw/YS+IdBQ6tGSZd07EHDnbkK2w8Y9c96i12x9Dp/h7qN7qvgXSr3UWL3LxfM7DlwGIDH6gD866g8rVeGJLeFIoUWONAFRUGAoGAAAOg+nHFWOrA1TElYfRRSUDCiiigApKWigBKKXFJQAUUUUAFFLiigAooooAUUUUUAVhPCZjCJYzMoyUDfMPfGen+NT4Az71w+nf8AJWtWP/Tqv8oqTxn4wGmI2nWDA3rDDyA/6kf/ABX8q1VJtqKM/aJK7IfG/jAWaPpWnP8A6QciaUf8swf4R7nv6fXpweh6Jda/qC21sDjrJIRwi+p/wpmk6Td67qS2tsCzscvI3RR3Lfn+te06JolroWnpbWw56vIR80jep/w9K6pSjQjyrcwSdV3ewzQ9DtdAsVtrZSSxy8h+87epxWzRSEjbXC227s6kraIdRRRSGJRRRQAUGiigBKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAJKQ0E1VuZnihdkiMsqqSkakAtjsM/55oQhtxcwW3l+fKEMjhEHdyTwB3/Lp+Gaitbe5S4nmubjzN5xHGvCIoPH1J7mktbd5EguL6GE3qBhmMcJkg4BPXtz3I9DWhnOcU9gQ+g0UGkMzdXtWvNKuIYjibG6I+jqQyn/AL6Aot9Qgl0pNQZxFCYvMYufuDHIP0/nV/Fc7YIP7SvLGeP/AEWVUuooJUHykklvycbsdi1UtUS3qXbGebU1eWa38u0YqYQ+RI2DkOR26DAxnjn0rV6UmMf0oNS2NDqKKKBhRSUUAFFFFABRRRQAUUZozQAUUUUAFFFFABRRQKACloooAQ4rnfFPiyx8L2iy3IaS4kOIoEPzP6n2HPWuixXiPxAZ5fiA6z/cjgQRA9xjPTtyT+VaUo88rEVJWRA/jPUI9WvNchtFS5uovKKA/wCqGFG7nqfkH51naXBc+IL1YbYNLPK2WLH7vqzHtTB98/Suo+FW5PFupRIP3Bttx9m3Lj+bflXoVP3Sujlj77sei+HtBtvD+nrbwDdK3MsmOWb/AA9PatyikrzJNt3Z2JWVkOooopDCkoooAKKKKACiijNABSUUUAGKKWigBKKWigBKXFFFABRRilxQAlFFFABRiiigAxRiiigBMUUtFACUUtBoASjFLRQAYoxRRQAYoxRmjNAGDceKLW3QbbXUJpW+5GLKUFunTKjp+dMi1GxivZbpbfVJppOCzWUo2LxhV3KABwT6+9adhbS21uEnuHnmYlnkbpk9gOw9B2xV3HpVXSISbMr/AISGL/nw1L/wEf8Awo/4SCH/AJ8NS/8AAR/8K16KV0VZmQfEEX/PhqX/AICP/hUZ8QwDANjqIycAG0fnvgce36Vdvr2DT4fNmLFmO1I1GXkbsqjuf5CnLEZG3y4cZDIrKP3XGCM/n3709BanOW+oPcXovr+x1AFDmC3S1crF23Hjl8fgO3rUkmrq/iK0lSwv8LaTqR9nZSfmix1x05/Ouoz834dKP4v6U+YXKzL/ALd/6huo/wDfj/69H9u/9Q3Uf+/H/wBetTFJipuh6mZ/bv8A1DdR/wC/H/16P7d/6huo/wDfj/69aeKMUXQamX/bv/UO1H/vx/8AXpv9uNu40rUWPceSB+pP9a1sUYo0DUyTrc3/AEBdS/74T/4qk/tub/oDal/37T/4qtf8KPwouOzMj+25v+gNqX/ftP8A4ql/tub/AKA2pf8AftP/AIqtb8KPwougsZH9szf9AbUf+/a//FULrFwWAXRtRY+hVBn8S4x+JrYz/nNGf85o0FYy/wC077/oBX//AH8g/wDjlJ/ad9/0A7//AL+Qf/HK1s+9JketAWMr+077/oBX/wD39g/+OUf2nff9AK//AO/sH/xytXI9aMj1oHYy/wC077/oBX//AH9g/wDjlN/tK+/6AV76jMkOP/Rh/lWtketLn3oFYyf7U1L/AKAkv/f+P/Gj+1NS/wCgJL/3/j/xrV49aOPWnfyC3mZX9p6j/wBASb/v/H/jXJeMvDl74o8q5g0yS1v4RtSQyxkOOyn5vfr2ya9BAp38R9aanZ3QON0eF/8ACEeMz+6/s2Nf+mnnx/8AxVdz4P0G68LWUinSZbi7mO6WbzYx06KPm6D+dS6dNIfihqsRdzGtsCEz8vSLt2rtCa1qVZbMzhBdDN+36qf+YP8A+TK0fb9W/wCgP/5MrWpn3oz71jfyNLGV9v1X/oDj/wACVo+36t/0B/8AyZWtXPvRn3ov5DsZX2/Vv+gP/wCTK0fbtW/6A/8A5MpWpketGR60X8gsZH2zWv8AoEQ4/wCvz/7Gj7brX/QHh/8AAwf/ABNa+R60ZHrRfyCxk/bda/6A8P8A4Fj/AOJpPtmtf9AiH/wLH/xNbGfejPvRfyFYyPtet/8AQIh/8Cx/8TSfatb/AOgRD/4Fj/4mtjPvRu96L+QW8zHE+tn/AJh1kB0wb58/pGad5+t/9A6w/wDA1v8A41WtketJketK4W8zK8/W/wDoHWH/AIGt/wDGqPP1v/oHWH/ga3/xqtXI9aMj1ouFjK8/W/8AoHWH/ga//wAao8/W/wDoHWH/AIGv/wDGq1cj1oyPWi47GQbjX/8An105R6ee5/XaM/lR53iH/n307/v6/wD8TWxijFFxWZkeZ4h/599N/wC/r/8AxNJv8Q/8++m/9/X/APia1sn1oyfWi4WMnf4h/wCffTf+/r//ABNG/wAQ/wDPvpv/AH+f/wCJrWyfWjJ9aLhYyd2v9SunL7Zc/rgfypc696af+T1rYFGBRcLGT/xPv+of/wCP0uNe/wCof/4/Wpkf3R+dGR/k0XHYysa9/wBQ/wD8foxr/wD1D/8Ax+tXI/yaM07isZG3xAcnzdPT2KO2fxyP5Uu3xD/z8ab/AN+pP/iq2MUlK4cpj7fEP/PfTf8Av1J/8VS7PEP/AD8ab/36f/4qtiii4cpj7PEP/Pxpv/fp/wD4qjZ4h/576b/36f8A+KrX/wA9KWi4co+iiikUJVWWby1IXDylWZI8gFiPT/PGar6jqP2NURInmuZjiKEH7xA5yewHc+lOs4p0hBu3WW4ySWVAAuf4V9hxjPXFOwr6iJp0P9oNfPvaYoFQSHIiHGQvYZ7mtGkpaVwCkNLSUDCg0UUAJRRRQAUUUUAFFFFABS5pKKAFopKKAFzRmkooAXNGaSigBaKSloAKKKKAAUtJRQBw+nf8lY1b/r1X+UVdv/hXD6d/yVjVv+vZf5RV2/8AhWlTdGdPqOooorM0CiikoAXNJRRQAUUUUAFGaKKAFzRmkooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=\"}]}"},{"id":2226,"title":"Wayfinding 4 - Crossing, level 2","description":"This is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing [1]\u003e\r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing [2]\u003e \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas [3]\u003e. \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i62.tinypic.com/358qa1w.png\u003e\u003e\r\n\r\nFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas assignment 3\u003e.\r\n\r\nHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in |F| is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if |AB| crosses first for example area |F2|, then |F3|, and then |F2| again, the output vector should contain |[ ... 2 3 2 ... ]|. That would also be the case when |F3| is contained in |F2|. But when |F2| is contained in |F3|, then |F2| is never crossed, as it has a lower index in F than |F3|. Consider the areas non-transparent and stacked on top of each other.\r\n\r\nThe inputs of the function |WayfindingPassed(AB,F)| are a matrix |AB| of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array |F| of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F. \r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\r\n\r\n\r\nYour output |f| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 1 4 1 4 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.","description_html":"\u003cp\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\"\u003e[1]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\"\u003e[2]\u003c/a\u003e \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003e[3]\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i62.tinypic.com/358qa1w.png\"\u003e\u003cp\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\"\u003eassignment 3\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in \u003ctt\u003eF\u003c/tt\u003e is the one listed.\r\nIf an area is crossed twice, it is listed twice in the returned vector. And if \u003ctt\u003eAB\u003c/tt\u003e crosses first for example area \u003ctt\u003eF2\u003c/tt\u003e, then \u003ctt\u003eF3\u003c/tt\u003e, and then \u003ctt\u003eF2\u003c/tt\u003e again, the output vector should contain \u003ctt\u003e[ ... 2 3 2 ... ]\u003c/tt\u003e. That would also be the case when \u003ctt\u003eF3\u003c/tt\u003e is contained in \u003ctt\u003eF2\u003c/tt\u003e. But when \u003ctt\u003eF2\u003c/tt\u003e is contained in \u003ctt\u003eF3\u003c/tt\u003e, then \u003ctt\u003eF2\u003c/tt\u003e is never crossed, as it has a lower index in F than \u003ctt\u003eF3\u003c/tt\u003e. Consider the areas non-transparent and stacked on top of each other.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingPassed(AB,F)\u003c/tt\u003e are a matrix \u003ctt\u003eAB\u003c/tt\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array \u003ctt\u003eF\u003c/tt\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = {\r\n  [ x11 x12 ... x1n ;\r\n    y11 y12 ... y1n ]\r\n  [ x21 x22 ... x2n ;\r\n    y21 y22 ... y2n ]\r\n }\u003c/pre\u003e\u003cp\u003eYour output \u003ctt\u003ef\u003c/tt\u003e will contain the indices in \u003ctt\u003eF\u003c/tt\u003e of the crossed areas, in the correct order. In the example above, the correct answer is \u003ctt\u003e[ 3 1 4 1 4 1]\u003c/tt\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    5   -8    0\r\n    -6    2    7    1\r\n    ];\r\nF{2} = [\r\n    4   -2    4    6\r\n    6   -7   -3   -2\r\n    ];\r\nF{3} = [\r\n    -5    6    3   -1\r\n    -6   -8    4   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 3 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 21 ; 0 0 ];\r\nf_correct = randperm(20);\r\nF = arrayfun(@(n)[n+[0 1 1 0];-1 -1 1 1],f_correct,'uni',0);\r\nf = WayfindingPassed(AB,F);\r\nassert(isequal(f(f_correct),f_correct(f)));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    -5    9    0   -4    5\r\n    2    8   -1   -9   -8\r\n    ];\r\nF{2} = [\r\n    -2  -10   -4    0\r\n    8    7   -5    5\r\n    ];\r\nF{3} = [\r\n    -6    2   10\r\n    10   -4    8\r\n    ];\r\nF{4} = [\r\n    -10    8  -10\r\n    4   -8    2\r\n    ];\r\nF{5} = [\r\n    0    4    8   -3    1\r\n    -10    9   -8   -5    2\r\n    ];\r\nF{6} = [\r\n    6    6   -9   10\r\n    6   -3    4   -7\r\n    ];\r\nF{7} = [\r\n    9    7   -7\r\n    0    7   -5\r\n    ];\r\nF{8} = [\r\n    2    0   10\r\n    6  -10    0\r\n    ];\r\nF{9} = [\r\n    -7    2   -7   -7\r\n    3    5   -3    7\r\n    ];\r\nF{10} = [\r\n    -5    6    1    5\r\n    -10    0    8    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 7 8 10 7 3 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\nAB = [ -10 10 ; -10 10 ];\r\nF{1} = [\r\n    2    5    8    5\r\n    2   -2    9   -5\r\n    ];\r\nF{2} = [\r\n    -8    2   -2    8   -8   -2\r\n    0    4    5   -9    8   -2\r\n    ];\r\nF{3} = [\r\n    5   -6   -2    1    0   10\r\n    10   -8    0   10   -2   -5\r\n    ];\r\nF{4} = [\r\n    10   -4  -10   -2    9\r\n    4    1    8   -4   -1\r\n    ];\r\nF{5} = [\r\n    -9   -7    2   -3\r\n    2   -9   -4    5\r\n    ];\r\nF{6} = [\r\n    -3   10    6    9    4   -2\r\n    10   -6    2    2    5   -5\r\n    ];\r\nF{7} = [\r\n    -1   -5   -5\r\n    3    0   -4\r\n    ];\r\nF{8} = [\r\n    8   -6    8   10   -7\r\n    8   -2   -5    3    7\r\n    ];\r\nF{9} = [\r\n    1  -10   -3   10    5\r\n    -5   -6    3   -6    8\r\n    ];\r\nF{10} = [\r\n    -7    0    8   -8\r\n    7   -8    3    9\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 9 10 9 3 1 8 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 4 -6 ; 0 0 ];\r\nF{1} = [\r\n    -4   -4    2    2   -2   -3   -3   -2    2    2   -4\r\n    2   -4   -4   -2    2    2   -2   -2    2    4    4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; 15 -8 ];\r\nF{1} = [\r\n    -4    4    4   -4\r\n    6    2    6    2\r\n    ];\r\nF{2} = [\r\n    -2   -2    6    6   -2\r\n    -0   -4   -0   -4   -0\r\n    ];\r\nF{3} = [\r\n    -1   -1    2    2\r\n    -6   -4   -6   -4\r\n    ];\r\nF{4} = [\r\n    -1    1   -1    1\r\n    -7   -7   -9   -9\r\n    ];\r\nF{5} = [\r\n    -2     2    -1     2    -1     1\r\n    14    10     6     6    10    14\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 5 5 1 2 3 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 0 ; -6 6 ];\r\nF{1} = [\r\n    -5    7    7   -5\r\n    -9   -9    9    9\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    -7   -7   -5   -5\r\n    ];\r\nF{3} = [\r\n    -2   -2    2    2\r\n    4    2    2    4\r\n    ];\r\nF{4} = [\r\n    2    2   -2   -2\r\n    4    2    2    4\r\n    ];\r\nF{5} = [\r\n    -1    1    1   -1\r\n    2    2   -2   -2\r\n    ];\r\nF{6} = [\r\n    -2    0   -2\r\n    -2   -3   -4\r\n    ];\r\nF{7} = [\r\n    0    2    2\r\n    -3   -4   -2\r\n    ];\r\nF{8} = [\r\n    -1    0    1\r\n    -8   -6   -8\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [8 2 1 7 1 5 4 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 2 -2 ; 8 -6 ];\r\nF{1} = [\r\n    -4   -4    4    4\r\n    -4   -0   -0   -4\r\n    ];\r\nF{2} = [\r\n    -4   -4    4    4\r\n    2    6    6    2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [2 1];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 8 -4 ; 8 -8 ];\r\nF{1} = [\r\n    -6    2    2   -4   -4    8    8   -6\r\n    -6   -6   -4   -4    2    2    4    4\r\n    ];\r\nF{2} = [\r\n    -2   -2    4    4\r\n    -0   -2   -2   -0\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -8 8 ; 8 -8 ];\r\nF{1} = [\r\n    -2   -2    0    0\r\n    -0    2    2   -0\r\n    ];\r\nF{2} = [\r\n    2    4    4   -6   -6   -4    2    4    4    2    2   -4   -4    2\r\n    -0   -0   -6   -6    4    6    6    4    2    2    4    4   -4   -4\r\n    ];\r\nF{3} = [\r\n    -3   -3    1    0\r\n    -1   -3   -3   -1\r\n    ];\r\nF{4} = [\r\n    5    9    9    5\r\n    -3   -3   -9   -9\r\n    ];\r\nF{5} = [\r\n    -9  -10  -10   -9\r\n    9    9   10   10\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 2 4 ];\r\nassert(isequal(f,f_correct));\r\n\r\nAB = [ 0 0 ; -8 8 ];\r\nF{1} = [\r\n    -4   -2   -2   -4\r\n    8    8    4    4\r\n    ];\r\nF{2} = [\r\n    2    4    4    2\r\n    -0   -0   -6   -6\r\n    ];\r\nF{3} = [\r\n    -4   -2   -2   -6   -6\r\n    -4   -4   -6   -6   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nassert(isempty(f));\r\n\r\n%%\r\n\r\nAB = [ 7 -8 ; 0 0 ];\r\nF{1} = [\r\n    8    9    9    8\r\n    3    3   -2   -2\r\n    ];\r\nF{2} = [\r\n    -9   -7   -7   -4   -4   -3   -3    0    0    1    1    4    4    5    5   -2   -8   -9\r\n    -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    3    4    3    2\r\n    ];\r\nF{3} = [\r\n    -2   -1   -1   -2\r\n    1    1   -4   -4\r\n    ];\r\nF{4} = [\r\n    -6   -5   -5   -3    1    2    2    3    3    1   -4   -6\r\n    1    1   -3   -5   -5   -4    1    1   -5   -8   -7   -4\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 4 2 3 2 4 2 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ 0 -2 ; 0 -4 ];\r\nF{1} = [\r\n    -3    3    3    2    2   -2   -2    2    2   -3\r\n    -5   -5    3    3   -3   -3    2    2    3    3\r\n    ];\r\nF{2} = [\r\n    -1    1    1   -1\r\n    1    1   -1   -1\r\n    ];\r\nF{3} = [\r\n    -4    4    4    5    5   -5   -5   -4\r\n    4    4   -7   -7    5    5   -1   -1\r\n    ];\r\nF{4} = [\r\n    -5   -4   -4    4    4   -5\r\n    -1   -1   -6   -6   -7   -7\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 2 1 ];\r\nassert(isequal(f,f_correct));\r\n\r\n%%\r\n\r\nAB = [ -2 0 ; 6 -6 ];\r\nF{1} = [\r\n    2   -4   -4    2    2   -2    0   -2    2\r\n    -4   -4    4    4    2    2   -0   -2   -2\r\n    ];\r\nf = WayfindingPassed(AB,F);\r\nf_correct = [ 1 1 1 ];\r\nassert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-01T22:33:13.000Z","updated_at":"2014-03-06T07:49:23.000Z","published_at":"2014-03-06T07:49:23.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the fourth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2218-wayfinding-1-crossing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[1]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2219-wayfinding-2-traversing\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[2]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e[3]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eWhich areas are traversed?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this fourth assignment in this series you have to calculate which areas are traversed and in which order, while going from A to B. Our path from A to B is a straight line. And the area boundaries are closed polygons consisting of a finite number of straight segments. Quite similar to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2220-wayfinding-3-passed-areas\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eassignment 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHowever, now the areas may overlap. If case of traversing overlapping areas, the area with the highest index in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the one listed. If an area is crossed twice, it is listed twice in the returned vector. And if\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e crosses first for example area\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and then\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e again, the output vector should contain\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[ ... 2 3 2 ... ]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. That would also be the case when\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. But when\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is contained in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, then\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is never crossed, as it has a lower index in F than\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Consider the areas non-transparent and stacked on top of each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe inputs of the function\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eWayfindingPassed(AB,F)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are a matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of two columns, each with x-y coordinates, of our straight path from A (1st column) to B (2nd column), and a cell array\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of 2-D matrices with columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is implicitly connected to the first. The index of each area, to be referred to in the output vector, is equal to its position in the cell array F.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ AB = [\\n   xA xB\\n   yA yB\\n ]\\n\\n F = {\\n  [ x11 x12 ... x1n ;\\n    y11 y12 ... y1n ]\\n  [ x21 x22 ... x2n ;\\n    y21 y22 ... y2n ]\\n }]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour output\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ef\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e will contain the indices in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the crossed areas, in the correct order. In the example above, the correct answer is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e[ 3 1 4 1 4 1]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2242,"title":"Wayfinding 5 - Travel contour","description":"This is the fifth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \r\n\u003chttp://www.mathworks.nl/matlabcentral/cody/?term=tag%3Awayfinding search:tag=wayfinding\u003e for the other assignments.\r\n\r\nThis time, you will travel around a polygon, over its contour. You get the nodes of the polygon, in the correct order, as a |2xn| array |F|. The last node of |F| is connected to the first node.\r\n\r\n|a| is the index in |F| of the starting node, and |b| is the goal. \r\n\r\n\u003c\u003chttp://i61.tinypic.com/iq8p69.png\u003e\u003e\r\n\r\nCalculate the shortest distance from |a| to |b| over the contour of the polygon. \r\n\r\nThe distance is measured as the Euclidean distance between points. You can not enter the internal area of the polygon. The contour of the polygon does not self-intersect.","description_html":"\u003cp\u003eThis is the fifth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See  \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/?term=tag%3Awayfinding\"\u003esearch:tag=wayfinding\u003c/a\u003e for the other assignments.\u003c/p\u003e\u003cp\u003eThis time, you will travel around a polygon, over its contour. You get the nodes of the polygon, in the correct order, as a \u003ctt\u003e2xn\u003c/tt\u003e array \u003ctt\u003eF\u003c/tt\u003e. The last node of \u003ctt\u003eF\u003c/tt\u003e is connected to the first node.\u003c/p\u003e\u003cp\u003e\u003ctt\u003ea\u003c/tt\u003e is the index in \u003ctt\u003eF\u003c/tt\u003e of the starting node, and \u003ctt\u003eb\u003c/tt\u003e is the goal.\u003c/p\u003e\u003cimg src = \"http://i61.tinypic.com/iq8p69.png\"\u003e\u003cp\u003eCalculate the shortest distance from \u003ctt\u003ea\u003c/tt\u003e to \u003ctt\u003eb\u003c/tt\u003e over the contour of the polygon.\u003c/p\u003e\u003cp\u003eThe distance is measured as the Euclidean distance between points. You can not enter the internal area of the polygon. The contour of the polygon does not self-intersect.\u003c/p\u003e","function_template":"function d = polygon_distance(F,a,b)\r\n  d = 0;\r\nend","test_suite":"%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 1;\r\nb = 3;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 2;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 1;\r\nb = 2;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 1;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 4;\r\nb = 1;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 1;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [0 0 1 1;0 1 1 0];\r\na = 3;\r\nb = 3;\r\nd = polygon_distance(F,a,b);\r\nd_correct = 0;\r\nassert(isequal(d,d_correct))\r\n\r\n%%\r\nF = [zeros(1,101) ones(1,101);0:100 100:-1:0];\r\na = 1;\r\nfor b = randi(size(F,2)/2,1,100)\r\n  d = polygon_distance(F,a,b);\r\n  d_correct = b-1;\r\n  assert(isequal(d,d_correct));\r\nend\r\n\r\n%%\r\nF = [zeros(1,101) ones(1,101);0:100 100:-1:0];\r\na = 1;\r\nfor b = randi(size(F,2)/2,1,100)+size(F,2)/2\r\n  s = rand(1)+1;\r\n  d = polygon_distance(F*s,a,b);\r\n  d_correct = (size(F,2)-b+1)*s;\r\n  assert(abs(d-d_correct)\u003c1e-10);\r\nend\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2014-03-10T14:22:52.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-03-10T09:32:11.000Z","updated_at":"2014-03-10T14:22:52.000Z","published_at":"2014-03-10T13:43:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the fifth part of a series of assignments about wayfinding. The final goal of this series is to be able to calculate the fastest route through a terrain of areas with different properties. The assignments will build on top of each other, gradually increasing the complexity, but guiding you stepwise towards the final goal. You can re-use code from preceding assignments to save some work. See \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/?term=tag%3Awayfinding\\\"\u003e\u003cw:r\u003e\u003cw:t\u003esearch:tag=wayfinding\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e for the other assignments.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis time, you will travel around a polygon, over its contour. You get the nodes of the polygon, in the correct order, as a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e2xn\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e array\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. The last node of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is connected to the first node.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the index in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eF\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of the starting node, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the goal.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCalculate the shortest distance from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e over the contour of the polygon.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe distance is measured as the Euclidean distance between points. You can not enter the internal area of the polygon. The contour of the polygon does not self-intersect.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":2291,"title":"GJam 2014 Qualifier: Deceitful War (Small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2974486/dashboard#s=p3 GJam 2014 Qualifier Deceitful War\u003e.\r\n\r\nMy condensed summary of the problem statement.\r\n\r\nGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\r\n\r\nUnsurprisingly when A truthfully states masses player B consistently wins.\r\n\r\nPlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\r\n\r\nPart one is determine the best possible score for A when playing deceitfully.\r\n\r\nPart two is determine the best possible score if player A did not look and is honest.\r\n\r\n*Examples:*\r\n\r\n  A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n  \r\n  A 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n  B 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n  Deceitful A Wins 8\r\n  Optimal Honest A Wins 4\r\n\r\n*Input:* A,B vectors of length N (Small has N\u003c=10, Large(future challenge N\u003c=1000)\r\n\r\n*Output:* Deceitful Wins, Optimal Honest Wins\r\n\r\n\r\n\r\n\r\n\r\n*Note:*\r\n\r\nIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003chttp://www.go-hero.net/jam/14/solutions/0/4/MATLAB GJam Deceitful Solutions\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2974486/dashboard#s=p3\"\u003eGJam 2014 Qualifier Deceitful War\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eMy condensed summary of the problem statement.\u003c/p\u003e\u003cp\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/p\u003e\u003cp\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/p\u003e\u003cp\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/p\u003e\u003cp\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/p\u003e\u003cp\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\nDeceitful A Wins 8\r\nOptimal Honest A Wins 4\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Deceitful Wins, Optimal Honest Wins\u003c/p\u003e\u003cp\u003e\u003cb\u003eNote:\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error. \u003ca href = \"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\"\u003eGJam Deceitful Solutions\u003c/a\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\u003c/p\u003e","function_template":"function W = War(m)\r\n% W=[Deceitful Wins, Optimal Honest Wins]\r\n  W=[0 0];\r\nend","test_suite":"%%\r\nm=[0.270000 0.550000 0.910000 0.330000 0.520000 0.300000 ;0.850000 0.450000 0.060000 0.240000 0.120000 0.880000 ];\r\nWexp=[5 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.164000 0.255000 0.009000 0.445000 0.209000 0.100000 0.391000 0.536000 0.027000 0.118000 ;0.673000 0.782000 0.582000 0.882000 0.591000 0.855000 0.745000 0.955000 0.991000 0.600000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 0.480000 0.760000 0.680000 0.160000 0.640000 0.360000 ;0.200000 0.440000 0.960000 0.280000 0.880000 0.520000 0.120000 ];\r\nWexp=[5 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.170000 0.100000 0.120000 0.200000 0.540000 0.150000 ;0.490000 0.070000 0.240000 0.680000 0.610000 0.340000 ];\r\nWexp=[2 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.780000 0.770000 0.900000 0.810000 0.880000 0.840000 0.600000 0.730000 0.930000 0.990000 ;0.270000 0.150000 0.260000 0.510000 0.570000 0.310000 0.170000 0.140000 0.400000 0.040000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.320000 0.820000 0.350000 0.770000 0.020000 0.550000 0.040000 0.990000 0.610000 0.190000 ;0.730000 0.530000 0.750000 0.800000 0.670000 0.870000 0.330000 0.250000 0.080000 0.680000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.100000 0.380000 0.050000 0.210000 0.130000 0.440000 0.180000 ;0.560000 0.920000 0.540000 0.900000 0.670000 0.790000 0.820000 0.970000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.420000 ;0.080000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.690000 0.310000 0.540000 0.230000 0.710000 0.030000 0.490000 0.600000 0.510000 0.860000 ;0.830000 0.340000 0.370000 0.740000 0.430000 0.200000 0.090000 0.170000 0.910000 0.400000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 0.920000 0.710000 0.130000 0.230000 0.620000 0.140000 0.260000 0.360000 0.310000 ;0.440000 0.010000 0.640000 0.350000 0.820000 0.550000 0.780000 0.790000 0.060000 0.570000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.504000 0.218000 0.479000 0.101000 0.050000 0.445000 0.471000 0.084000 0.034000 0.008000 ;0.992000 0.546000 0.647000 0.849000 0.891000 0.739000 0.765000 0.555000 0.613000 0.748000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.570000 0.470000 0.640000 0.550000 0.060000 0.430000 0.040000 0.280000 0.130000 0.510000 ;0.700000 0.740000 0.770000 0.810000 0.870000 0.790000 0.940000 0.910000 0.850000 0.660000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.020000 0.510000 0.120000 0.220000 0.250000 0.100000 0.490000 0.530000 0.350000 ;0.800000 0.960000 0.760000 0.820000 0.710000 0.570000 0.940000 0.690000 0.900000 0.550000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.030000 0.360000 0.410000 0.330000 0.430000 0.540000 0.300000 0.280000 0.100000 ;0.770000 0.910000 0.700000 0.550000 0.590000 0.780000 0.650000 0.860000 0.750000 0.990000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.920000 0.370000 0.900000 0.200000 0.150000 0.020000 0.530000 0.860000 0.250000 0.190000 ;0.170000 0.980000 0.140000 0.680000 0.830000 0.470000 0.950000 0.340000 0.880000 0.540000 ];\r\nWexp=[7 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.510000 0.020000 0.490000 0.280000 0.080000 0.830000 0.170000 0.140000 0.850000 ;0.420000 0.650000 0.950000 0.890000 0.030000 0.580000 0.380000 0.060000 0.370000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.670000 0.050000 0.590000 0.330000 0.820000 0.030000 0.740000 0.560000 0.950000 0.620000 ;0.210000 0.380000 0.770000 0.080000 0.260000 0.640000 0.460000 0.790000 0.310000 0.410000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.840000 0.800000 0.420000 0.580000 0.670000 0.070000 0.360000 ;0.690000 0.870000 0.310000 0.600000 0.760000 0.200000 0.380000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.450000 0.380000 0.280000 0.590000 0.620000 0.230000 0.810000 ;0.320000 0.190000 0.680000 0.140000 0.090000 0.940000 0.170000 ];\r\nWexp=[6 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.207000 0.288000 0.180000 0.595000 0.748000 0.459000 0.802000 0.387000 0.027000 0.090000 ;0.450000 0.982000 0.694000 0.613000 0.486000 0.423000 0.685000 0.847000 0.432000 0.604000 ];\r\nWexp=[4 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.750000 0.970000 0.820000 0.840000 0.680000 0.780000 0.730000 0.270000 0.220000 0.150000 ;0.130000 0.920000 0.390000 0.320000 0.230000 0.080000 0.800000 0.330000 0.720000 0.590000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.260000 0.140000 0.600000 0.950000 0.160000 0.650000 0.580000 0.910000 0.230000 0.020000 ;0.120000 0.510000 0.530000 0.280000 0.350000 0.070000 0.400000 0.930000 0.490000 0.090000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.545000 0.527000 0.500000 0.727000 0.018000 0.400000 0.191000 0.982000 0.409000 0.591000 ;0.945000 0.745000 0.355000 0.673000 0.045000 0.118000 0.682000 0.827000 0.645000 0.482000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.930000 0.980000 0.470000 0.810000 0.830000 0.460000 0.510000 0.540000 ;0.490000 0.640000 0.170000 0.290000 0.140000 0.440000 0.590000 0.760000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.580000 ;0.330000 ];\r\nWexp=[1 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.640000 0.820000 0.700000 0.480000 0.520000 0.610000 0.060000 0.240000 0.300000 ;0.550000 0.450000 0.090000 0.030000 0.850000 0.670000 0.760000 0.360000 0.790000 ];\r\nWexp=[7 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.800000 ;0.900000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.100000 0.040000 0.110000 0.650000 0.250000 0.570000 0.480000 0.150000 0.800000 ;0.550000 0.020000 0.920000 0.080000 0.700000 0.360000 0.910000 0.710000 0.820000 0.850000 ];\r\nWexp=[5 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.340000 0.890000 0.060000 0.090000 0.750000 0.730000 0.810000 0.950000 0.660000 0.390000 ;0.530000 0.970000 0.610000 0.670000 0.690000 0.380000 0.590000 0.300000 0.720000 0.110000 ];\r\nWexp=[8 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.870000 0.600000 0.860000 0.830000 0.680000 0.810000 0.700000 0.920000 0.760000 ;0.170000 0.510000 0.330000 0.050000 0.240000 0.030000 0.410000 0.480000 0.520000 ];\r\nWexp=[9 9];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.940000 0.720000 0.810000 0.220000 0.280000 0.530000 0.440000 0.160000 0.880000 0.970000 ;0.120000 0.030000 0.470000 0.560000 0.380000 0.340000 0.690000 0.090000 0.250000 0.750000 ];\r\nWexp=[10 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.410000 0.360000 0.230000 0.140000 0.180000 0.050000 0.500000 0.270000 0.090000 0.450000 ;0.680000 0.950000 0.910000 0.860000 0.730000 0.550000 0.590000 0.820000 0.640000 0.770000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.278000 0.852000 0.370000 0.824000 0.389000 0.704000 0.546000 0.204000 0.296000 0.056000 ;0.833000 0.315000 0.991000 0.028000 0.907000 0.630000 0.361000 0.037000 0.065000 0.954000 ];\r\nWexp=[7 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.713000 0.657000 0.778000 0.435000 0.565000 0.870000 0.963000 0.343000 0.481000 0.593000 ;0.287000 0.333000 0.454000 0.130000 0.370000 0.759000 0.176000 0.611000 0.231000 0.398000 ];\r\nWexp=[10 6];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.590000 0.750000 0.650000 0.900000 0.740000 0.880000 0.850000 ;0.400000 0.070000 0.540000 0.380000 0.570000 0.150000 0.490000 ];\r\nWexp=[7 7];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.110000 0.920000 0.540000 0.840000 0.380000 0.770000 0.900000 0.490000 0.870000 0.750000 ;0.620000 0.480000 0.330000 0.440000 0.890000 0.130000 0.430000 0.080000 0.340000 0.560000 ];\r\nWexp=[10 5];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.480000 0.650000 0.770000 0.690000 0.720000 0.560000 0.660000 0.550000 0.510000 0.730000 ;0.310000 0.440000 0.300000 0.060000 0.200000 0.420000 0.030000 0.070000 0.110000 0.140000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.900000 0.680000 0.600000 0.800000 ;0.350000 0.050000 0.170000 0.880000 ];\r\nWexp=[4 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.730000 0.910000 0.450000 0.640000 0.090000 ;0.550000 0.360000 0.270000 0.820000 0.180000 ];\r\nWexp=[4 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.530000 0.740000 0.410000 0.320000 0.820000 0.970000 0.620000 0.500000 0.710000 0.090000 ;0.180000 0.760000 0.380000 0.150000 0.470000 0.210000 0.560000 0.120000 0.590000 0.440000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.487000 0.092000 0.714000 0.160000 0.504000 0.277000 0.479000 0.605000 0.462000 0.832000 ;0.210000 0.824000 0.118000 0.387000 0.664000 0.874000 0.445000 0.739000 0.546000 0.017000 ];\r\nWexp=[8 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.100000 ;0.400000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.688000 0.872000 0.615000 0.477000 0.734000 0.624000 0.394000 0.532000 0.954000 0.817000 ;0.193000 0.119000 0.349000 0.073000 0.037000 0.009000 0.128000 0.303000 0.046000 0.064000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.910000 0.550000 0.300000 0.570000 0.920000 0.400000 0.450000 0.150000 0.110000 0.190000 ;0.090000 0.790000 0.890000 0.740000 0.850000 0.940000 0.340000 0.380000 0.720000 0.260000 ];\r\nWexp=[6 1];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.723000 0.639000 0.824000 0.697000 0.840000 0.882000 0.437000 0.782000 0.588000 0.218000 ;0.345000 0.151000 0.067000 0.849000 0.815000 0.235000 0.521000 0.765000 0.950000 0.681000 ];\r\nWexp=[9 3];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.200000 0.150000 0.350000 0.090000 0.110000 0.330000 0.220000 ;0.390000 0.460000 0.850000 0.700000 0.570000 0.610000 0.500000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.850000 0.790000 0.550000 0.380000 0.300000 0.400000 0.770000 0.740000 0.320000 0.570000 ;0.260000 0.210000 0.110000 0.130000 0.020000 0.040000 0.230000 0.190000 0.090000 0.060000 ];\r\nWexp=[10 10];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.961000 0.330000 0.010000 0.816000 0.583000 0.913000 0.893000 0.951000 0.126000 0.398000 ;0.767000 0.029000 0.262000 0.641000 0.175000 0.544000 0.359000 0.932000 0.680000 0.476000 ];\r\nWexp=[9 4];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.300000 ;0.700000 ];\r\nWexp=[0 0];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\nm=[0.240000 0.050000 0.190000 0.110000 0.920000 0.590000 0.730000 0.380000 0.780000 0.950000 ;0.860000 0.700000 0.430000 0.620000 0.220000 0.540000 0.410000 0.890000 0.680000 0.490000 ];\r\nWexp=[6 2];\r\nW=War(m);\r\nassert(isequal(Wexp,W))\r\n%%\r\n% function GJam_Qual_2014d\r\n% % \r\n% %War\r\n% fn='D-small-attempt0.in';\r\n% %fn='D-large.in';\r\n% [data] = read_file(fn); % \r\n% \r\n% fidG = fopen('D-small-output.out', 'w');\r\n% %fidG = fopen('D-large-output001.out', 'w');\r\n% tic\r\n% \r\n% for i=1:size(data,2) % Cell array has N rows of cases\r\n% % m=sort(data{i},2);\r\n%  m=data{i};\r\n%  dw = dWar(m) ;% \r\n%  w = War(m) ;%  \r\n%  \r\n%    fprintf('Case #%i: %i %i\\n',i,dw,w);\r\n%    fprintf(fidG,'Case #%i: %i %i\\n',i,dw,w);\r\n%     \r\n% end\r\n% toc\r\n% \r\n% fclose(fidG);\r\n% \r\n% end\r\n% \r\n% function dw=dWar(m)\r\n% % Post contest\r\n% % Lie to burn opponent best pieces\r\n%  N=sort(m(1,:));\r\n%  K=sort(m(2,:));\r\n%  \r\n%  dw=0;\r\n%  for i=1:length(N)\r\n%   if N(i)\u003eK(1) % Lie to above to beat lowest\r\n%    dw=dw+1;\r\n%    K=K(2:end);\r\n%   else % Lie to just below best\r\n%    K=K(1:end-1);\r\n%   end\r\n%  end\r\n%  \r\n% end\r\n% \r\n% function w=War(m)\r\n% % Optimal truthful strategy\r\n% % Best lucky sequence\r\n%  w=0;\r\n% \r\n%  Nm=sort(m(1,:));\r\n%  Km=sort(m(2,:));\r\n%  \r\n%  Nmz=[Nm' ones(size(Nm,2),1)];\r\n%  Kmz=[Km' zeros(size(Km,2),1)];\r\n%  z=[Nmz;Kmz]; \r\n%  z=sortrows(z,-1);\r\n%  \r\n%  while ~isempty(z)\r\n%   ptr1=find(z(:,2)==1,1,'last');\r\n%   ptr0=find(z(1:ptr1,2)==0,1,'last');\r\n%   if isempty(ptr0)\r\n%    % score\r\n%    w=w+1;\r\n%    z(ptr1,:)=[];\r\n%    ptr0=find(z(:,2)==0,1,'last');\r\n%    z(ptr0,:)=[];  \r\n%   else\r\n%    z(ptr1,:)=[];\r\n%    z(ptr0,:)=[];  \r\n%   end\r\n%  end \r\n%  % Create worst Ken/B Scenario\r\n%  \r\n% end\r\n% \r\n% \r\n% function [d] = read_file(fn)\r\n% % Read whole array then parse\r\n% % dlmread valid for numeric arrays\r\n%  m=dlmread(fn);\r\n%  m(1,:)=[];\r\n%  for i=1:size(m,1)/3\r\n%   d{i}=m(3*i-1:3*i,1:m(3*i-2,1));\r\n%  end\r\n%  \r\n% end % read_file\r\n% Data Set file\r\n%4\r\n%1\r\n%0.5\r\n%0.6\r\n%2\r\n%0.7 0.2\r\n%0.8 0.3\r\n%3\r\n%0.5 0.1 0.9\r\n%0.6 0.4 0.3\r\n%9\r\n%0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\r\n%0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\r\n\r\n\r\n\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":8,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-04-19T14:08:56.000Z","updated_at":"2014-04-19T15:00:47.000Z","published_at":"2014-04-19T15:00:47.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/2974486/dashboard#s=p3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2014 Qualifier Deceitful War\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMy condensed summary of the problem statement.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven two players, A and B, they are each given N masses. All masses are unique. Player A plays first on each comparison and states a Mass. Player B then plays a Mass. The player with the higher mass wins a point after they are compared on a scale. These masses then disappear. This repeats for all N masses. There are no constraints on the order of pieces played.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eUnsurprisingly when A truthfully states masses player B consistently wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer A, discouraged, decides to cheat. After the masses are provided player A asks B get A a drink and while B is away A looks at B's masses. Player A now plays pieces but does not necessarily honestly state the mass values. All scale comparisons must be valid based on B's strategy and A's stated mass. Player A now achieves more wins.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart one is determine the best possible score for A when playing deceitfully.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePart two is determine the best possible score if player A did not look and is honest.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[A: 0.5 0.1 0.9  B 0.6 0.4 0.3  Deceitful Wins 2, Optimal Honest 1\\n\\nA 0.186 0.389 0.907 0.832 0.959 0.557 0.300 0.992 0.899\\nB 0.916 0.728 0.271 0.520 0.700 0.521 0.215 0.341 0.458\\nDeceitful A Wins 8\\nOptimal Honest A Wins 4]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e A,B vectors of length N (Small has N\u0026lt;=10, Large(future challenge N\u0026lt;=1000)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Deceitful Wins, Optimal Honest Wins\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the contest period there were 30 Matlab solutions, of which I was not one as I glitched on the easy Deceitful algorithm thinking my Honest algorithm was in error.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.go-hero.net/jam/14/solutions/0/4/MATLAB\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Deceitful Solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. My post contest full GJam is in the test suite. About 11000 out of 28000 entrants solved this puzzle.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},null,null,null,{"id":2646,"title":"Determine the number of maximal cliques in an undirected graph","description":"In an undirected graph, a clique is a subset of vertices that are fully connected, i.e. there is an edge between all pairs of vertices in the subset. A _maximal_ clique is one in which the subset of vertices is not part of a larger clique. So, for instance, a fully connected graph has many cliques, but only one maximal clique.\r\n\r\nGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return the number (num) of maximal cliques.\r\n\r\n*Example*\r\n\r\nConsider the graph shown below,\r\n\r\n\u003c\u003chttps://dl.dropboxusercontent.com/u/13345152/examplegraph.png\u003e\u003e\r\n\r\nwhich has the following adjacency matrix:\r\n\r\n  A = [ 0 1 0 0 0\r\n        1 0 1 1 0\r\n        0 1 0 1 0\r\n        0 1 1 0 1\r\n        0 0 0 1 0 ]\r\n\r\nThe number of maximal cliques is 3. The maximal cliques are {1,2}, {2,3,4}, and {4,5}.\r\n\r\nNOTE: You may assume the data type of the adjacency matrix is double.","description_html":"\u003cp\u003eIn an undirected graph, a clique is a subset of vertices that are fully connected, i.e. there is an edge between all pairs of vertices in the subset. A \u003ci\u003emaximal\u003c/i\u003e clique is one in which the subset of vertices is not part of a larger clique. So, for instance, a fully connected graph has many cliques, but only one maximal clique.\u003c/p\u003e\u003cp\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return the number (num) of maximal cliques.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eConsider the graph shown below,\u003c/p\u003e\u003cimg src = \"https://dl.dropboxusercontent.com/u/13345152/examplegraph.png\"\u003e\u003cp\u003ewhich has the following adjacency matrix:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ]\r\n\u003c/pre\u003e\u003cp\u003eThe number of maximal cliques is 3. The maximal cliques are {1,2}, {2,3,4}, and {4,5}.\u003c/p\u003e\u003cp\u003eNOTE: You may assume the data type of the adjacency matrix is double.\u003c/p\u003e","function_template":"function num = maximalcliques(A)\r\n  num = 0;\r\nend","test_suite":"%%\r\nA = 0;\r\nassert(isequal(maximalcliques(A),1))\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = ones(N)-eye(N);\r\n  assert(isequal(maximalcliques(A),1))\r\nend\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = zeros(N);\r\n  assert(isequal(maximalcliques(A),N))\r\nend\r\n\r\n%%\r\nA = [ 0 0 0 0\r\n      0 0 0 1\r\n      0 0 0 0\r\n      0 1 0 0 ];\r\nassert(isequal(maximalcliques(A),3))\r\n\r\n%%\r\nA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ];\r\nassert(isequal(maximalcliques(A),3))\r\n\r\n%%\r\nA = [ 0 1 1 0 0 0\r\n      1 0 1 1 0 0\r\n      1 1 0 0 1 0\r\n      0 1 0 0 1 0\r\n      0 0 1 1 0 1\r\n      0 0 0 0 1 0 ];\r\nassert(isequal(maximalcliques(A),5))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2014-10-28T21:35:49.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-10-28T21:07:46.000Z","updated_at":"2014-10-28T22:05:37.000Z","published_at":"2014-10-28T21:35:49.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn an undirected graph, a clique is a subset of vertices that are fully connected, i.e. there is an edge between all pairs of vertices in the subset. A\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emaximal\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e clique is one in which the subset of vertices is not part of a larger clique. So, for instance, a fully connected graph has many cliques, but only one maximal clique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return the number (num) of maximal cliques.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider the graph shown below,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich has the following adjacency matrix:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[A = [ 0 1 0 0 0\\n      1 0 1 1 0\\n      0 1 0 1 0\\n      0 1 1 0 1\\n      0 0 0 1 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe number of maximal cliques is 3. The maximal cliques are {1,2}, {2,3,4}, and {4,5}.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNOTE: You may assume the data type of the adjacency matrix is double.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAADAFBMVEV4eHiTk5P29vaBgYGcnJzAwMC3t7eKiorS0tLt7e3b29vk5OTJycn///9vb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD61b95AAAAyklEQVR42q2SSQ6FIAxAWzQxkcj976lEE5R+hojQOmw+Cxa8RwcoGnhf6oNDD0AvGL8j/E2wC+JiXwSaAKbbatGkLjBrX13szynmtPXnKc2eCRiMGQtXxrq2hmZRuuXx6SVdPlPpopeC387sFMMIwdsyAMFAEcHuptW5oIaKYgjHBBoZ512snMeJ8g7o0DmA5jwKXRdqy9W6gfMzhd7iMOySlxq0qn/z4leR43HNQ8WrLtYi1Dz+pnjsmt/8ZsulwLgQOOeC4EyQHH5z1GUZiLNTtwAAAABJRU5ErkJggg==\"}]}"},{"id":2647,"title":"Find the maximal cliques in an undirected graph","description":"This is a variant of a \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2646-determine-the-number-of-maximal-cliques-in-an-undirected-graph previous problem\u003e on maximal cliques. Instead of simply computing the number of maximal cliques in an undirected graph, now you must return the cliques themselves.\r\n\r\nGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return an array (C) in which each column encodes one of the maximal cliques in the graph. If C(i,j) = 1, then the ith vertex in the graph is included in the jth clique. The order of columns does not matter, but all maximal cliques must be given - that is, size(C,2) should equal the number of maximal cliques.\r\n\r\n*Example*\r\n\r\nConsider the graph shown below,\r\n\r\n\u003c\u003chttps://dl.dropboxusercontent.com/u/13345152/examplegraph.png\u003e\u003e\r\n\r\nwhich has the following adjacency matrix:\r\n\r\n  A = [ 0 1 0 0 0\r\n        1 0 1 1 0\r\n        0 1 0 1 0\r\n        0 1 1 0 1\r\n        0 0 0 1 0 ]\r\n\r\nThe maximal cliques are {1,2}, {2,3,4}, and {4,5}. Therefore, one (of three) valid outputs is:\r\n\r\n  C = [ 1 0 0\r\n        1 1 0\r\n        0 1 0\r\n        0 1 1\r\n        0 0 1 ]\r\n\r\nNOTE: You may assume the data type of the adjacency matrix (A) is double.","description_html":"\u003cp\u003eThis is a variant of a \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2646-determine-the-number-of-maximal-cliques-in-an-undirected-graph\"\u003eprevious problem\u003c/a\u003e on maximal cliques. Instead of simply computing the number of maximal cliques in an undirected graph, now you must return the cliques themselves.\u003c/p\u003e\u003cp\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return an array (C) in which each column encodes one of the maximal cliques in the graph. If C(i,j) = 1, then the ith vertex in the graph is included in the jth clique. The order of columns does not matter, but all maximal cliques must be given - that is, size(C,2) should equal the number of maximal cliques.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eConsider the graph shown below,\u003c/p\u003e\u003cimg src = \"https://dl.dropboxusercontent.com/u/13345152/examplegraph.png\"\u003e\u003cp\u003ewhich has the following adjacency matrix:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ]\r\n\u003c/pre\u003e\u003cp\u003eThe maximal cliques are {1,2}, {2,3,4}, and {4,5}. Therefore, one (of three) valid outputs is:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eC = [ 1 0 0\r\n      1 1 0\r\n      0 1 0\r\n      0 1 1\r\n      0 0 1 ]\r\n\u003c/pre\u003e\u003cp\u003eNOTE: You may assume the data type of the adjacency matrix (A) is double.\u003c/p\u003e","function_template":"function C = maximalcliques(A)\r\n  C = [];\r\nend","test_suite":"%%\r\nA = 0;\r\nassert(isequal(maximalcliques(A),1))\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = ones(N)-eye(N);\r\n  assert(isequal(maximalcliques(A),ones(N,1)))\r\nend\r\n\r\n%%\r\nfor ii=1:10\r\n  N = randi(100);\r\n  A = zeros(N);\r\n  C = maximalcliques(A);\r\n  assert(isequal(fliplr(sortrows(C')'),eye(N)))\r\nend\r\n\r\n%%\r\nA = [ 0 0 0 0\r\n      0 0 0 1\r\n      0 0 0 0\r\n      0 1 0 0 ];\r\nC = maximalcliques(A);\r\nC = fliplr(sortrows(C')');\r\nC_correct = [ 1 0 0\r\n              0 1 0\r\n              0 0 1\r\n              0 1 0 ];\r\nassert(isequal(C,C_correct))\r\n\r\n%%\r\nA = [ 0 1 0 0 0\r\n      1 0 1 1 0\r\n      0 1 0 1 0\r\n      0 1 1 0 1\r\n      0 0 0 1 0 ];\r\nC = maximalcliques(A);\r\nC = fliplr(sortrows(C')');\r\nC_correct = [ 1 0 0\r\n              1 1 0\r\n              0 1 0\r\n              0 1 1\r\n              0 0 1 ];\r\nassert(isequal(C,C_correct))\r\n\r\n%%\r\nA = [ 0 1 1 0 0 0\r\n      1 0 1 1 0 0\r\n      1 1 0 0 1 0\r\n      0 1 0 0 1 0\r\n      0 0 1 1 0 1\r\n      0 0 0 0 1 0 ];\r\nC = maximalcliques(A);\r\nC = fliplr(sortrows(C')');\r\nC_correct = [ 1 0 0 0 0\r\n              1 1 0 0 0\r\n              1 0 1 0 0\r\n              0 1 0 1 0\r\n              0 0 1 1 1\r\n              0 0 0 0 1 ];\r\nassert(isequal(C,C_correct))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2014-10-28T22:05:02.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-10-28T21:53:54.000Z","updated_at":"2014-10-28T22:05:02.000Z","published_at":"2014-10-28T22:05:02.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is a variant of a\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/2646-determine-the-number-of-maximal-cliques-in-an-undirected-graph\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eprevious problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e on maximal cliques. Instead of simply computing the number of maximal cliques in an undirected graph, now you must return the cliques themselves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven an NxN adjacency matrix (A) for an undirected graph with N vertices, return an array (C) in which each column encodes one of the maximal cliques in the graph. If C(i,j) = 1, then the ith vertex in the graph is included in the jth clique. The order of columns does not matter, but all maximal cliques must be given - that is, size(C,2) should equal the number of maximal cliques.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eConsider the graph shown below,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich has the following adjacency matrix:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[A = [ 0 1 0 0 0\\n      1 0 1 1 0\\n      0 1 0 1 0\\n      0 1 1 0 1\\n      0 0 0 1 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe maximal cliques are {1,2}, {2,3,4}, and {4,5}. Therefore, one (of three) valid outputs is:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[C = [ 1 0 0\\n      1 1 0\\n      0 1 0\\n      0 1 1\\n      0 0 1 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNOTE: You may assume the data type of the adjacency matrix (A) is double.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAADAFBMVEV4eHiTk5P29vaBgYGcnJzAwMC3t7eKiorS0tLt7e3b29vk5OTJycn///9vb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD61b95AAAAyklEQVR42q2SSQ6FIAxAWzQxkcj976lEE5R+hojQOmw+Cxa8RwcoGnhf6oNDD0AvGL8j/E2wC+JiXwSaAKbbatGkLjBrX13szynmtPXnKc2eCRiMGQtXxrq2hmZRuuXx6SVdPlPpopeC387sFMMIwdsyAMFAEcHuptW5oIaKYgjHBBoZ512snMeJ8g7o0DmA5jwKXRdqy9W6gfMzhd7iMOySlxq0qn/z4leR43HNQ8WrLtYi1Dz+pnjsmt/8ZsulwLgQOOeC4EyQHH5z1GUZiLNTtwAAAABJRU5ErkJggg==\"}]}"},{"id":2697,"title":"Probability of winning single-elimination tournament","description":"Find the probability that the p^{th} player will win a single-elimination tournament with 2^n players where M(i,j)=probability that player i will beat player j in a head-to-head matchup.  In the first round player 1 plays player 2, player 3 plays player 4 and so on.  (In each round each surviving competitor plays his surviving \"next door neighbor\" in the bracket.)\r\n\r\nSee also problem \u003c2254\u003e.\r\n\r\nTrivial example :\r\n\r\nif \r\n\r\n   \r\n\r\n  M = [ NaN 0.7 ; 0.3 NaN ]\r\n\r\nthen \r\n\r\n  winprob(M,1)=0.7 \r\n\r\nand \r\n\r\n  winprob(M,2)=0.3","description_html":"\u003cp\u003eFind the probability that the p^{th} player will win a single-elimination tournament with 2^n players where M(i,j)=probability that player i will beat player j in a head-to-head matchup.  In the first round player 1 plays player 2, player 3 plays player 4 and so on.  (In each round each surviving competitor plays his surviving \"next door neighbor\" in the bracket.)\u003c/p\u003e\u003cp\u003eSee also problem \u003ca href = \"2254\"\u003e2254\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eTrivial example :\u003c/p\u003e\u003cp\u003eif\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eM = [ NaN 0.7 ; 0.3 NaN ]\r\n\u003c/pre\u003e\u003cp\u003ethen\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ewinprob(M,1)=0.7 \r\n\u003c/pre\u003e\u003cp\u003eand\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ewinprob(M,2)=0.3\r\n\u003c/pre\u003e","function_template":"function prob = winprob(M,p)\r\n  prob = 1;\r\nend","test_suite":"1\r\n%%\r\nM = [ NaN 1 ; 0 NaN ];\r\nassert(isequal(winprob(M,1),1));\r\nassert(isequal(winprob(M,2),0));\r\n\r\n2\r\n%%\r\nM = [ NaN 0.7 ; 0.3 NaN ];\r\nassert(isequal(winprob(M,1),0.7));\r\nassert(isequal(winprob(M,2),0.3));\r\n\r\n3\r\n%%\r\nM = zeros(8)+NaN;\r\nfor i=1:7\r\n    for j=i+1:8\r\n        r=rand();\r\n        M(i,j)=r;\r\n        M(j,i)=1-r;\r\n    end\r\nend\r\n\r\nepsilon=1e-8;\r\ntotprob=0;\r\nfor i=1:8\r\n    totprob=totprob+winprob(M,i);\r\nend\r\nassert(abs(totprob-1)\u003cepsilon);\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":4567,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2014-12-02T02:09:00.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-11-30T16:23:41.000Z","updated_at":"2014-12-02T02:09:00.000Z","published_at":"2014-11-30T16:23:41.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFind the probability that the p^{th} player will win a single-elimination tournament with 2^n players where M(i,j)=probability that player i will beat player j in a head-to-head matchup. In the first round player 1 plays player 2, player 3 plays player 4 and so on. (In each round each surviving competitor plays his surviving \\\"next door neighbor\\\" in the bracket.)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSee also problem\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"2254\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e2254\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTrivial example :\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eif\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[M = [ NaN 0.7 ; 0.3 NaN ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[winprob(M,1)=0.7]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eand\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[winprob(M,2)=0.3]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2737,"title":"Prouhet–Tarry–Escott (basic)","description":"Inspired by \u003chttp://www.mathworks.com/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves problem 660.\u003e\r\n\r\nGiven n return two disjoint sets of integers _A_ and _B_ with same cardinality having following property:\r\n\r\n\u003c\u003chttps://i.imgur.com/gSW7nWy.png\u003e\u003e\r\n\r\nfor i = 1:n\r\n\r\nTry to minimize sets cardinality. ","description_html":"\u003cp\u003eInspired by \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves\"\u003eproblem 660.\u003c/a\u003e\u003c/p\u003e\u003cp\u003eGiven n return two disjoint sets of integers \u003ci\u003eA\u003c/i\u003e and \u003ci\u003eB\u003c/i\u003e with same cardinality having following property:\u003c/p\u003e\u003cimg src = \"https://i.imgur.com/gSW7nWy.png\"\u003e\u003cp\u003efor i = 1:n\u003c/p\u003e\u003cp\u003eTry to minimize sets cardinality.\u003c/p\u003e","function_template":"function [A, B] = prouhet(n)\r\n  A = 1:n;\r\n  B = -A;\r\nend","test_suite":"%%\r\nn = 1;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\nn = 2;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\nn = 5;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\nn = 7;\r\n[A, B] = prouhet(n);\r\nassert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\nassert(isempty(intersect(A, B)));\r\nassert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\nassert(isequal(sum(A(:).^(1:n),1), sum(B(:).^(1:n),1)));\r\ndisp(sprintf('Each set has %i elements.', numel(A)))\r\n%%\r\n%n = 9;\r\n%[A, B] = prouhet(n);\r\n%assert(isequal(A, round(A)) \u0026\u0026 isequal(B, round(B)))\r\n%assert(isempty(intersect(A, B)));\r\n%assert(isequal(numel(A), numel(B), numel(unique(A)), numel(unique(B))));\r\n%assert(isequal(sum(uint64(A(:)).^uint64(1:n)), sum(uint64(A(:)).^uint64(1:n))));\r\n%disp(sprintf('Each set has %i elements.', numel(A)))\r\n%if numel(A) \u003c=20\r\n%    disp('A:')\r\n%    disp(A)\r\n%    disp('B:')\r\n%    disp(B)\r\n%end\r\n%%\r\n% test info\r\n%\r\n% larger n will be added later\r\n%\r\n% scoring function will be added later as well\r\n% scoring will be entirely based on size of output: smaller output == better score\r\n% something like this:\r\n%\r\n% score = 0;\r\n% for n = 1:25\r\n%   [A, B] = prouhet(n)\r\n%   assert(...);\r\n%   score = score + numel(A);\r\n% end\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":14358,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":"2016-10-08T00:11:00.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-12-08T09:56:20.000Z","updated_at":"2020-07-22T23:41:27.000Z","published_at":"2016-10-07T08:07:12.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInspired by\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/660-find-a-subset-that-divides-the-vector-into-equal-halves\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eproblem 660.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven n return two disjoint sets of integers\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e with same cardinality having following property:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003efor i = 1:n\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTry to minimize sets cardinality.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAiAFYBAREA/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEBAAA/AOyutU1rQfiN/ZWu63eDRdXOdKuo1iURS55gc7Pf5T9OuTjsp9CvJYisfiPVoWPR0EBI/OIipdAt9Vs9Pa11e8F9PFKwS72KhmjPKllXgEZ2nHXbnvVjV9RXSdIur90kZYIy5Eabm/AZGfpkVbTPlruIZsDJAwCafWX4htNSvtBu7fR9QNhqLJm3uNisFccgEMCMHoeOhrkfAerXfifS5odQ1bUrXXNOk+z6jafuhskH8QGz7rYyPxHOM1tajoevRtHd6X4lvmkhdXazuY4WiuFByUJCBlJGRuzx6Vsahq0Gm3FhDMkpa+uBbxFFBAfaW554GFY/gaLPURd6nfWyhwtrsRgyY+Ygk4OeeCvGBjryCMZPjzSdK1vwld2Oqh/LkwIDEuZRP/AYx3bPbvk54zWh4attVtPDWnW+t3KXOpxwqtxKg4Zv6nGMnucnjNS69PfWvh7UrjTIfOv47aR7aPGd8gUlRjvzjiuZ0OCW58QXlndrqlzp/wBhgVXvFlEcswZmkk+fG058sAKBjaSABXYyIVtXSAbWCFYwuFwccY4IH5Vg+Rr/APeuf/AqH/4zXRLnaM9cVw2qaAZfihpusaHcfZ76OPZrAC5jltyPkDf9NCQNvsMngAHu647xfbzTa1pUxtrya3tbe6mjFrvDNclUSNdycrlXl5JA65OK2/D+nS2GlWxvdkmqPbwi+uFHM0qoFLE9+lYN4ni7/hI5b5ND0y8ghJSxEmptF5SkYZyvlMN7c854HA6sWln1Px60ZFv4a0WN+xk1Z3A/AQj+dafha31iHSTLr1xBLqlxM8k4tyTFHztVEzzgKo/HJrcoorP1qa/g0e6l0xLZr1UPk/apCkQb1YgHgdffpx1rmNMbxjplp5MXhnS5WYmSWZ9aYvM56ux8jkn8gMAYAAqC/uvHepXMGnvBomk2s0ircyR37S3AiJ+YR/IoDEZAPbPHrXfUVycd/wCIZr26Q28yIEl2r5QCribam1iOW8td3cEuMDAIq8Lu5h011trec3Usgji3+e4Un+Ji65Cjr0xxUPgyCez0a4tLiCWFor66ZRIG+ZXmZwQzAFh8/XFdJRRWR4mtZr7w5e2UKs32lBDJtGWEbMFcgdyELED2rNt/7YJibUWlAIYxqiyZAMj7Q/lYG4J5YORjIOO9ZetaZd6xq2rhbKdhcfZrFVeHakkCsWlbeeV/1jjIO75AQDxXe0UUUUUUUUUUUV//2Q==\"}]}"},{"id":2191,"title":"Order of things - 3","description":"This problem is closely related to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1 Problem 2189, Order of things - 1\u003e and \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2 Problem 2190, Order of things - 2\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other. \r\n\r\n* However, this time the tasks are grouped, and groups of tasks should be executed at once.\r\n* It may (still) be impossible to find a solution, since dependencies may be cyclic. But this may now also be due to the grouping of tasks. In any case, return an empty vector if no order is found.\r\n* There are still multiple orders possible, return them as multiple rows of the output vector.\r\n* The tasks within a group should of course be specified in the right order, when interdependent.\r\n\r\nThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency. \r\n\r\n   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  0  0  0\r\nC  0  1  0  0  0\r\nD  0  1  1  0  0\r\nE  1  0  0  0  0\r\n\r\nThe |1| on row |C|, column |B|, indicates that task |C| depends on task |B|. \r\n\r\nThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u003e 0, e.g.\r\n\r\n [ 1 1 2 3 3 ] \r\n\r\nReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\r\n\r\n [ \r\n   1 2 3 4 5\r\n   1 2 3 5 4\r\n   2 1 3 4 5\r\n   2 1 3 5 4\r\n ]\r\n\r\nIf no order fulfilling the dependencies exists, return an empty vector.","description_html":"\u003cp\u003eThis problem is closely related to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\"\u003eProblem 2189, Order of things - 1\u003c/a\u003e and \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\"\u003eProblem 2190, Order of things - 2\u003c/a\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/p\u003e\u003cul\u003e\u003cli\u003eHowever, this time the tasks are grouped, and groups of tasks should be executed at once.\u003c/li\u003e\u003cli\u003eIt may (still) be impossible to find a solution, since dependencies may be cyclic. But this may now also be due to the grouping of tasks. In any case, return an empty vector if no order is found.\u003c/li\u003e\u003cli\u003eThere are still multiple orders possible, return them as multiple rows of the output vector.\u003c/li\u003e\u003cli\u003eThe tasks within a group should of course be specified in the right order, when interdependent.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/p\u003e\u003cpre\u003e   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  0  0  0\r\nC  0  1  0  0  0\r\nD  0  1  1  0  0\r\nE  1  0  0  0  0\u003c/pre\u003e\u003cp\u003eThe \u003ctt\u003e1\u003c/tt\u003e on row \u003ctt\u003eC\u003c/tt\u003e, column \u003ctt\u003eB\u003c/tt\u003e, indicates that task \u003ctt\u003eC\u003c/tt\u003e depends on task \u003ctt\u003eB\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, e.g.\u003c/p\u003e\u003cpre\u003e [ 1 1 2 3 3 ] \u003c/pre\u003e\u003cp\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/p\u003e\u003cpre\u003e [ \r\n   1 2 3 4 5\r\n   1 2 3 5 4\r\n   2 1 3 4 5\r\n   2 1 3 5 4\r\n ]\u003c/pre\u003e\u003cp\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/p\u003e","function_template":"function order = calculation_order(dependencies,groups)\r\n  order  = 1:size(dependencies,1);\r\nend","test_suite":"%%\r\ndependencies = [\r\n0  0  0  0  1\r\n0  0  1  1  0\r\n0  0  0  0  0\r\n0  0  1  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 3  3  1  2  1 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n5  3  4  2  1\r\n5  3  4  1  2\r\n4  3  5  2  1\r\n4  3  5  1  2\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  1  0  0  0\r\n0  0  1  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  1  0\r\n];\r\ngroups = [ 2  2  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n4  3  2  1  5\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  0  1\r\n0  0  1  0  0\r\n];\r\ngroups = [ 1  1  2  3  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n2  1  3  5  4\r\n4  3  1  5  2\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  0\r\n0  0  1  0  0\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 5  1  2  3  4 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  0\r\n1  0  0  0  0\r\n0  0  0  1  0\r\n0  1  0  0  0\r\n0  0  1  0  0\r\n];\r\ngroups = [ 1  1  2  3  2 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  1\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  0  0\r\n];\r\ngroups = [ 2  2  3  1  1 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies_ = ones(10+randi(10));\r\ndependencies_ = dependencies_-triu(dependencies_);\r\norder_ = randperm(size(dependencies_,1));\r\ndependencies = dependencies_(order_,order_);\r\norder_ = 0;\r\norder = calculation_order(dependencies,1:size(dependencies_,1));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\norder = calculation_order(dependencies,ones(1,size(dependencies_,1)));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2014-02-21T15:59:05.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-02-18T08:50:55.000Z","updated_at":"2014-02-21T15:59:05.000Z","published_at":"2014-02-21T09:38:58.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is closely related to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2189, Order of things - 1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2190, Order of things - 2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHowever, this time the tasks are grouped, and groups of tasks should be executed at once.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt may (still) be impossible to find a solution, since dependencies may be cyclic. But this may now also be due to the grouping of tasks. In any case, return an empty vector if no order is found.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are still multiple orders possible, return them as multiple rows of the output vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe tasks within a group should of course be specified in the right order, when interdependent.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   A  B  C  D  E\\nA  0  0  0  0  0\\nB  0  0  0  0  0\\nC  0  1  0  0  0\\nD  0  1  1  0  0\\nE  1  0  0  0  0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e on row\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, column\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, indicates that task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e depends on task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, e.g.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ 1 1 2 3 3 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ \\n   1 2 3 4 5\\n   1 2 3 5 4\\n   2 1 3 4 5\\n   2 1 3 5 4\\n ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2192,"title":"Order of things - 4","description":"*This is the last assignment in the _Order of Things_-series. If that past incompleteness kept you from solving it, you may start now.* Open that bottle of wine, and spend an entertaining evening coding.\r\n\r\nThis problem is closely related to \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1 Problem 2189, Order of things - 1\u003e, \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2 Problem 2190, Order of things - 2\u003e, and \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/2191-order-of-things-3 Problem 2191, Order of things - 3\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other. \r\n\r\nHowever, this is the most complex case, as \r\n* Calculations are preferably grouped, but may, due to their dependencies, not all be clustered. So groups of events may be split over different clusters. The number of clusters per group should be kept to a minimum. \r\n\r\nThe same complications as in problem 3 may apply:\r\n* It may (still) be impossible to find a solution, since dependencies may be cyclic. But this is now no longer due to the grouping of tasks, as you may, if necessary, break the rule of grouping. In any case, return an empty vector if no order is found.\r\n* There are still multiple orders possible, return them as multiple rows of the output vector.\r\n* The tasks within a group should of course be specified in the right order, when interdependent.\r\n\r\nThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency. \r\n\r\n   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  1  0  0\r\nC  1  0  0  0  0\r\nD  0  0  1  0  0\r\nE  1  0  0  0  0\r\n\r\nThe |1| on row |C|, column |B|, indicates that task |C| depends on task |B|. \r\n\r\nThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u003e 0, for every task, e.g. \r\n\r\n [ 1 1 2 2 3 ] \r\n\r\nReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\r\n\r\n [ \r\n   1 3 4 2 5\r\n   1 3 4 5 2\r\n   1 5 3 4 2\r\n ]\r\n\r\nIf no order fulfilling the dependencies exists, return an empty vector.","description_html":"\u003cp\u003e\u003cb\u003eThis is the last assignment in the \u003ci\u003eOrder of Things\u003c/i\u003e-series. If that past incompleteness kept you from solving it, you may start now.\u003c/b\u003e Open that bottle of wine, and spend an entertaining evening coding.\u003c/p\u003e\u003cp\u003eThis problem is closely related to \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\"\u003eProblem 2189, Order of things - 1\u003c/a\u003e, \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\"\u003eProblem 2190, Order of things - 2\u003c/a\u003e, and \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/2191-order-of-things-3\"\u003eProblem 2191, Order of things - 3\u003c/a\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/p\u003e\u003cp\u003eHowever, this is the most complex case, as \r\n* Calculations are preferably grouped, but may, due to their dependencies, not all be clustered. So groups of events may be split over different clusters. The number of clusters per group should be kept to a minimum.\u003c/p\u003e\u003cp\u003eThe same complications as in problem 3 may apply:\r\n* It may (still) be impossible to find a solution, since dependencies may be cyclic. But this is now no longer due to the grouping of tasks, as you may, if necessary, break the rule of grouping. In any case, return an empty vector if no order is found.\r\n* There are still multiple orders possible, return them as multiple rows of the output vector.\r\n* The tasks within a group should of course be specified in the right order, when interdependent.\u003c/p\u003e\u003cp\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/p\u003e\u003cpre\u003e   A  B  C  D  E\r\nA  0  0  0  0  0\r\nB  0  0  1  0  0\r\nC  1  0  0  0  0\r\nD  0  0  1  0  0\r\nE  1  0  0  0  0\u003c/pre\u003e\u003cp\u003eThe \u003ctt\u003e1\u003c/tt\u003e on row \u003ctt\u003eC\u003c/tt\u003e, column \u003ctt\u003eB\u003c/tt\u003e, indicates that task \u003ctt\u003eC\u003c/tt\u003e depends on task \u003ctt\u003eB\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, for every task, e.g.\u003c/p\u003e\u003cpre\u003e [ 1 1 2 2 3 ] \u003c/pre\u003e\u003cp\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/p\u003e\u003cpre\u003e [ \r\n   1 3 4 2 5\r\n   1 3 4 5 2\r\n   1 5 3 4 2\r\n ]\u003c/pre\u003e\u003cp\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/p\u003e","function_template":"function order = calculation_order(dependencies,groups)\r\n  order  = 1:size(dependencies,1);\r\nend","test_suite":"dependencies = [\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  0  1\r\n0  0  0  0  1\r\n0  1  0  0  0\r\n];\r\ngroups = [ 3  1  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n3  2  5  4  1\r\n3  5  2  4  1\r\n5  4  2  3  1\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  1  0  0  0\r\n0  0  0  0  0\r\n0  0  0  1  0\r\n0  1  0  0  0\r\n0  0  0  1  0\r\n];\r\ngroups = [ 3  1  1  2  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n3  4  2  5  1\r\n3  4  5  2  1\r\n5  3  4  2  1\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  0  1  0  0\r\n0  0  0  1  0\r\n0  0  0  1  0\r\n0  0  0  0  0\r\n0  0  1  0  0\r\n];\r\ngroups = [ 1  3  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n2  1  4  5  3\r\n5  1  4  2  3\r\n4  1  3  2  5\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n    0 0 0 0 0\r\n    0 0 0 0 0\r\n    0 1 0 0 0\r\n    0 0 1 0 0\r\n    1 0 0 1 0\r\n    ];\r\ngroups = [1 2 2 2 2];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n    1 2 3 4 5\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  1  0\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n1  0  0  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 1  3  4  2  5 ];\r\norder = calculation_order(dependencies,groups);\r\nassert(isempty(order));\r\n\r\n%%\r\ndependencies = [\r\n0  0  0  0  0\r\n0  0  0  0  0\r\n0  0  0  1  0\r\n0  0  1  0  0\r\n0  0  0  0  0\r\n];\r\ngroups = [ 1  3  2  1  2 ];\r\norder = calculation_order(dependencies,groups);\r\norder_correct = [\r\n1  2  4  5  3\r\n1  2  3  5  4\r\n1  5  4  2  3\r\n1  5  3  2  4\r\n1  4  3  2  5\r\n1  3  4  2  5\r\n5  4  3  2  1\r\n5  3  4  2  1\r\n];\r\nassert(isequal(sortrows(order_correct),sortrows(order)));\r\n\r\n%%\r\ndependencies_ = ones(randi(10));\r\ndependencies_ = dependencies_-triu(dependencies_);\r\norder_ = randperm(size(dependencies_,1));\r\ndependencies = dependencies_(order_,order_);\r\norder_ = 0;\r\norder = calculation_order(dependencies,1:size(dependencies_,1));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\norder = calculation_order(dependencies,ones(1,size(dependencies_,1)));\r\nordered = dependencies(order,order);\r\nassert(~nnz(triu(ordered-diag(diag(ordered)))));\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-02-18T08:57:21.000Z","updated_at":"2014-03-04T07:49:56.000Z","published_at":"2014-03-04T07:49:56.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThis is the last assignment in the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOrder of Things\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e-series. If that past incompleteness kept you from solving it, you may start now.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Open that bottle of wine, and spend an entertaining evening coding.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis problem is closely related to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2189-order-of-things-1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2189, Order of things - 1\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2190-order-of-things-2\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2190, Order of things - 2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.nl/matlabcentral/cody/problems/2191-order-of-things-3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2191, Order of things - 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. For the details, see the description for those problems. Basically, we have to find the order in which to execute tasks of which the results and prerequisites depend on each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHowever, this is the most complex case, as * Calculations are preferably grouped, but may, due to their dependencies, not all be clustered. So groups of events may be split over different clusters. The number of clusters per group should be kept to a minimum.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe same complications as in problem 3 may apply: * It may (still) be impossible to find a solution, since dependencies may be cyclic. But this is now no longer due to the grouping of tasks, as you may, if necessary, break the rule of grouping. In any case, return an empty vector if no order is found. * There are still multiple orders possible, return them as multiple rows of the output vector. * The tasks within a group should of course be specified in the right order, when interdependent.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe dependencies of the tasks on each other is expressed in a matrix, where each row corresponds to the execution of a task, and each column to the dependency.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   A  B  C  D  E\\nA  0  0  0  0  0\\nB  0  0  1  0  0\\nC  1  0  0  0  0\\nD  0  0  1  0  0\\nE  1  0  0  0  0]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e on row\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, column\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, indicates that task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eC\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e depends on task\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eB\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe grouping of tasks is expressed as an input vector with groups assigned an integer value \u0026gt; 0, for every task, e.g.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ 1 1 2 2 3 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReturn the new row/column order as a numeric row-vector, referring to the rows/columns of the input matrix. If multiple orders exist, return them all as rows of a matrix. In this example:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ [ \\n   1 3 4 2 5\\n   1 3 4 5 2\\n   1 5 3 4 2\\n ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf no order fulfilling the dependencies exists, return an empty vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":43648,"title":"Arc length of points interpolation","description":"Given a n by m matrix representing m vectors in n dimensions. Calculate the \u003chttps://en.wikipedia.org/wiki/Arc_length arc length\u003e of the closed loop curve going though these points in the order that they are given. The parametric curve, |c(t)| , between points |p(k)| and |p(k+1)| is defined as,\r\n\r\n|c(t) = p(k-1) * (-t/2+t^2-t^3/2) + p(k) * (1-5/2*t^2+3/2*t^3) + p(k+1) * (t/2+2*t^2-3/2*t^3) + p(k+2) * (-t^2/2+t^3/2)|,\r\n\r\nwhere |t| goes from 0 to 1. These interpolation polynomials can also be found using the constraints |c(0)=p(k)|, |c(1)=p(k+1)|, |c'(0)=(p(k+1)-p(k-1))/2| and |c'(1)=(p(k+2)-p(k))/2|.\r\n\r\nFor example for the points\r\n\r\n  points = [[1; 0] [0; 1] [-1; 0] [0; -1]];\r\n\r\nwould yield to following curve: \r\n\r\n\u003c\u003chttp://i.imgur.com/CIb8jFU.png\u003e\u003e","description_html":"\u003cp\u003eGiven a n by m matrix representing m vectors in n dimensions. Calculate the \u003ca href = \"https://en.wikipedia.org/wiki/Arc_length\"\u003earc length\u003c/a\u003e of the closed loop curve going though these points in the order that they are given. The parametric curve, \u003ctt\u003ec(t)\u003c/tt\u003e , between points \u003ctt\u003ep(k)\u003c/tt\u003e and \u003ctt\u003ep(k+1)\u003c/tt\u003e is defined as,\u003c/p\u003e\u003cp\u003e\u003ctt\u003ec(t) = p(k-1) * (-t/2+t^2-t^3/2) + p(k) * (1-5/2*t^2+3/2*t^3) + p(k+1) * (t/2+2*t^2-3/2*t^3) + p(k+2) * (-t^2/2+t^3/2)\u003c/tt\u003e,\u003c/p\u003e\u003cp\u003ewhere \u003ctt\u003et\u003c/tt\u003e goes from 0 to 1. These interpolation polynomials can also be found using the constraints \u003ctt\u003ec(0)=p(k)\u003c/tt\u003e, \u003ctt\u003ec(1)=p(k+1)\u003c/tt\u003e, \u003ctt\u003ec'(0)=(p(k+1)-p(k-1))/2\u003c/tt\u003e and \u003ctt\u003ec'(1)=(p(k+2)-p(k))/2\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eFor example for the points\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003epoints = [[1; 0] [0; 1] [-1; 0] [0; -1]];\r\n\u003c/pre\u003e\u003cp\u003ewould yield to following curve:\u003c/p\u003e\u003cimg src = \"http://i.imgur.com/CIb8jFU.png\"\u003e","function_template":"function dist = arcLength(points)\r\n    dist = 1;\r\nend","test_suite":"%%\r\npoints = [[1; 0] [0; 1] [-1; 0] [0; -1]];\r\ndist_correct = 5.945066529883204;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = eye(2);\r\ndist_correct = 2 * sqrt(2);\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = [cos(2*pi/500*(1:500)); sin(2*pi/500*(1:500))];\r\ndist_correct = 6.283185305221142;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = [[0 0 0]' [1 0 0]' [1 0 1]' [0 0 1]' [0 1 1]' [1 1 1]' [1 1 0]' [0 1 0]'];\r\ndist_correct = 8.367321074314315;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\npoints = [6 -8 -7 -7 3 5;8 -4 9 -1 -9 5;-7 1 9 8 7 -2;8 9 0 6 8 3;3 9 6 9 3 -6];\r\ndist_correct = 101.32625280165301;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)\r\n\r\n%%\r\nw = 0.887321243287836;\r\npoints = [-w  0  w  1 1 1 w 0 -w -1 -1 -1; -1 -1 -1 -w 0 w 1 1  1  w  0 -w];\r\ndist_correct = 8;\r\nassert(abs(arcLength(points) - dist_correct) \u003c 1e-6)","published":true,"deleted":false,"likes_count":0,"comments_count":3,"created_by":40782,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2016-12-14T19:45:19.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2016-10-30T02:02:55.000Z","updated_at":"2016-12-14T19:45:19.000Z","published_at":"2016-10-30T02:03:39.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven a n by m matrix representing m vectors in n dimensions. Calculate the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Arc_length\\\"\u003e\u003cw:r\u003e\u003cw:t\u003earc length\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e of the closed loop curve going though these points in the order that they are given. The parametric curve,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(t)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e , between points\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(k)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ep(k+1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is defined as,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(t) = p(k-1) * (-t/2+t^2-t^3/2) + p(k) * (1-5/2*t^2+3/2*t^3) + p(k+1) * (t/2+2*t^2-3/2*t^3) + p(k+2) * (-t^2/2+t^3/2)\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003et\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e goes from 0 to 1. These interpolation polynomials can also be found using the constraints\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(0)=p(k)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec(1)=p(k+1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec'(0)=(p(k+1)-p(k-1))/2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec'(1)=(p(k+2)-p(k))/2\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor example for the points\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[points = [[1; 0] [0; 1] [-1; 0] [0; -1]];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewould yield to following curve:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":43676,"title":"Count the Digits in the Box","description":"In this problem you must provide an accurate census of all the digits inside a given box. The problem is complicated by the fact that your census report also appears inside the box, thereby influencing the result. Here is the simplest form of the problem.\r\n\r\n ----------------------------------------------\r\n |  The number of 0's inside the box is: ___  |\r\n |  The number of 1's inside the box is: ___  |\r\n |  The number of 2's inside the box is: ___  |\r\n |  The number of 3's inside the box is: ___  |\r\n |  The number of 4's inside the box is: ___  |\r\n |  The number of 5's inside the box is: ___  |\r\n |  The number of 6's inside the box is: ___  |\r\n |  The number of 7's inside the box is: ___  |\r\n |  The number of 8's inside the box is: ___  |\r\n |  The number of 9's inside the box is: ___  |\r\n ----------------------------------------------\r\n\r\nSuppose you start to fill it in like this: there's only one 2, so you put a 1 next to the 2. But there are now two 1's, so you put a 2 next to the 1. But now there are three 2's... and so on. This problem eventually converges and can be answered as follows.\r\n\r\n --------------------------------------------\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   3 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   2 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\r\n\r\nCount the numbers and you'll see the sums all work out. We will complicate this problem by adding some extra numbers to the top of the box. \r\n\r\n*Example*\r\n\r\nIf\r\n\r\n extras = 22222\r\n\r\nthen we can see by inspection that one solution is\r\n\r\n census = [1 7 7 2 1 1 1 3 1 1]\r\n\r\nas shown below\r\n\r\n --------------------------------------------\r\n | Here are some extra numbers:       22222 |\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   7 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   3 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\r\n\r\nIn general, your answer might not be unique. We'll just test whether you meet the criteria.","description_html":"\u003cp\u003eIn this problem you must provide an accurate census of all the digits inside a given box. The problem is complicated by the fact that your census report also appears inside the box, thereby influencing the result. Here is the simplest form of the problem.\u003c/p\u003e\u003cpre\u003e ----------------------------------------------\r\n |  The number of 0's inside the box is: ___  |\r\n |  The number of 1's inside the box is: ___  |\r\n |  The number of 2's inside the box is: ___  |\r\n |  The number of 3's inside the box is: ___  |\r\n |  The number of 4's inside the box is: ___  |\r\n |  The number of 5's inside the box is: ___  |\r\n |  The number of 6's inside the box is: ___  |\r\n |  The number of 7's inside the box is: ___  |\r\n |  The number of 8's inside the box is: ___  |\r\n |  The number of 9's inside the box is: ___  |\r\n ----------------------------------------------\u003c/pre\u003e\u003cp\u003eSuppose you start to fill it in like this: there's only one 2, so you put a 1 next to the 2. But there are now two 1's, so you put a 2 next to the 1. But now there are three 2's... and so on. This problem eventually converges and can be answered as follows.\u003c/p\u003e\u003cpre\u003e --------------------------------------------\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   3 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   2 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\u003c/pre\u003e\u003cp\u003eCount the numbers and you'll see the sums all work out. We will complicate this problem by adding some extra numbers to the top of the box.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf\u003c/p\u003e\u003cpre\u003e extras = 22222\u003c/pre\u003e\u003cp\u003ethen we can see by inspection that one solution is\u003c/p\u003e\u003cpre\u003e census = [1 7 7 2 1 1 1 3 1 1]\u003c/pre\u003e\u003cp\u003eas shown below\u003c/p\u003e\u003cpre\u003e --------------------------------------------\r\n | Here are some extra numbers:       22222 |\r\n | The number of 0's inside the box is:   1 |\r\n | The number of 1's inside the box is:   7 |\r\n | The number of 2's inside the box is:   7 |\r\n | The number of 3's inside the box is:   2 |\r\n | The number of 4's inside the box is:   1 |\r\n | The number of 5's inside the box is:   1 |\r\n | The number of 6's inside the box is:   1 |\r\n | The number of 7's inside the box is:   3 |\r\n | The number of 8's inside the box is:   1 |\r\n | The number of 9's inside the box is:   1 |\r\n --------------------------------------------\u003c/pre\u003e\u003cp\u003eIn general, your answer might not be unique. We'll just test whether you meet the criteria.\u003c/p\u003e","function_template":"function census = getDigitCensus(extras)\r\n  census = [0 0 0 0 0 0 0 0 0 0];\r\nend","test_suite":"%%\r\nextras = 22222;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 6380059;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 99999432;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 347879;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 83870955;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))\r\n\r\n%%\r\nextras = 1111111111;\r\ncensusIn = getDigitCensus(extras)\r\nstr = string(censusIn);\r\ncensusOut = histc(char([str{:}]+string(extras))-48,0:9)+1;\r\nassert(isequal(censusIn,censusOut))","published":true,"deleted":false,"likes_count":3,"comments_count":4,"created_by":7,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-11-21T20:00:30.000Z","updated_at":"2016-12-14T15:19:55.000Z","published_at":"2016-12-13T23:01:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this problem you must provide an accurate census of all the digits inside a given box. The problem is complicated by the fact that your census report also appears inside the box, thereby influencing the result. Here is the simplest form of the problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ ----------------------------------------------\\n |  The number of 0's inside the box is: ___  |\\n |  The number of 1's inside the box is: ___  |\\n |  The number of 2's inside the box is: ___  |\\n |  The number of 3's inside the box is: ___  |\\n |  The number of 4's inside the box is: ___  |\\n |  The number of 5's inside the box is: ___  |\\n |  The number of 6's inside the box is: ___  |\\n |  The number of 7's inside the box is: ___  |\\n |  The number of 8's inside the box is: ___  |\\n |  The number of 9's inside the box is: ___  |\\n ----------------------------------------------]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose you start to fill it in like this: there's only one 2, so you put a 1 next to the 2. But there are now two 1's, so you put a 2 next to the 1. But now there are three 2's... and so on. This problem eventually converges and can be answered as follows.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ --------------------------------------------\\n | The number of 0's inside the box is:   1 |\\n | The number of 1's inside the box is:   7 |\\n | The number of 2's inside the box is:   3 |\\n | The number of 3's inside the box is:   2 |\\n | The number of 4's inside the box is:   1 |\\n | The number of 5's inside the box is:   1 |\\n | The number of 6's inside the box is:   1 |\\n | The number of 7's inside the box is:   2 |\\n | The number of 8's inside the box is:   1 |\\n | The number of 9's inside the box is:   1 |\\n --------------------------------------------]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCount the numbers and you'll see the sums all work out. We will complicate this problem by adding some extra numbers to the top of the box.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ extras = 22222]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen we can see by inspection that one solution is\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ census = [1 7 7 2 1 1 1 3 1 1]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eas shown below\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ --------------------------------------------\\n | Here are some extra numbers:       22222 |\\n | The number of 0's inside the box is:   1 |\\n | The number of 1's inside the box is:   7 |\\n | The number of 2's inside the box is:   7 |\\n | The number of 3's inside the box is:   2 |\\n | The number of 4's inside the box is:   1 |\\n | The number of 5's inside the box is:   1 |\\n | The number of 6's inside the box is:   1 |\\n | The number of 7's inside the box is:   3 |\\n | The number of 8's inside the box is:   1 |\\n | The number of 9's inside the box is:   1 |\\n --------------------------------------------]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn general, your answer might not be unique. We'll just test whether you meet the criteria.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44692,"title":"Is input the global variable z?","description":"When the input is certainly not the global variable |z|, your function must return |false|.  Otherwise return |true|.  All inputs \u0026 variable values will be scalar.  ","description_html":"\u003cp\u003eWhen the input is certainly not the global variable \u003ctt\u003ez\u003c/tt\u003e, your function must return \u003ctt\u003efalse\u003c/tt\u003e.  Otherwise return \u003ctt\u003etrue\u003c/tt\u003e.  All inputs \u0026 variable values will be scalar.\u003c/p\u003e","function_template":"function isGlobal = checkInput(z)\r\n    \r\n    inName = inputname(1)\r\n    \r\n    if inName == 'z', \r\n        isGlobal = true;\r\n    else\r\n        isGlobal = false;\r\n    end;\r\n    \r\nend","test_suite":"%% No silly stuff\r\n% This Test Suite can be updated if inappropriate 'hacks' are discovered \r\n% in any submitted solutions, so your submission's status may therefore change over time.  \r\nassessFunctionAbsence({'regexp', 'regexpi'}, 'FileName','checkInput.m')\r\n\r\nRE = regexp(fileread('checkInput.m'), '\\w+', 'match');\r\ntabooWords = {'ans'};\r\ntestResult = cellfun( @(z) ismember(z, tabooWords), RE );\r\nmsg = ['Please do not do that in your code!' char([10 13]) ...\r\n    'Found: ' strjoin(RE(testResult)) '.' char([10 13]) ...\r\n    'Banned word.' char([10 13])];\r\nassert(~any( testResult ), msg)\r\n\r\n\r\n%% Contrast with local variables (1)\r\nglobal z\r\nx = 3;\r\ny = 2;\r\nz = 1;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Contrast with local variables (2)\r\nglobal z\r\nx = 1;\r\ny = 2;\r\nz = 3;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Contrast with local variables (3)\r\nglobal z\r\nx = 3;\r\ny = 1;\r\nz = 2;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n\r\n%% Contrast with unnamed variables (1)\r\nglobal z\r\nz = 2;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(1) )\r\nassert( ~checkInput(3) )\r\n\r\n%% Contrast with unnamed variables (2)\r\nglobal z\r\nz = 1;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(2) )\r\nassert( ~checkInput(3) )\r\n\r\n%% Contrast with unnamed variables (3)\r\nglobal z\r\nz = 3;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(1) )\r\nassert( ~checkInput(2) )\r\n\r\n\r\n%% Contrast with other global variables (1)\r\nglobal x y z\r\nx = 3;\r\ny = 1;\r\nz = 2;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Contrast with other global variables (2)\r\nglobal x y z\r\nx = 2;\r\ny = 1;\r\nz = 3;\r\nassert( checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n\r\n%% Contrast with variables named in anonymous function (1)\r\nglobal x y z\r\nx = 2;\r\nz = 3;\r\ntestX = @(x)  checkInput(x);\r\ntestZ = @(z)  checkInput(z);\r\nassert( ~testX(x) )\r\nassert( ~testZ(x) )\r\nassert( testX(z) )\r\nassert( testZ(z) )\r\n\r\n%% Contrast with variables named in anonymous function (2)\r\nglobal x y z\r\nx = 3;\r\nz = 2;\r\ntestX = @(x)  checkInput(x);\r\ntestZ = @(z)  checkInput(z);\r\nassert( ~testX(x) )\r\nassert( ~testZ(x) )\r\nassert( testX(z) )\r\nassert( testZ(z) )\r\n\r\n\r\n%% Local variables only (1)\r\nclear global\r\nx = 1;\r\ny = 2;\r\nz = 3;\r\nassert( ~checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )\r\n\r\n%% Local variables only (2)\r\nclear global \r\nx = 3;\r\ny = 2;\r\nz = 1;\r\nassert( ~checkInput(z) )\r\nassert( ~checkInput(x) )\r\nassert( ~checkInput(y) )","published":true,"deleted":false,"likes_count":0,"comments_count":5,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-06-27T13:53:36.000Z","updated_at":"2018-06-27T14:26:51.000Z","published_at":"2018-06-27T14:26:51.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhen the input is certainly not the global variable\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ez\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, your function must return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efalse\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Otherwise return\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etrue\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. All inputs \u0026amp; variable values will be scalar.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44734,"title":"Solve the 2-norm Regularization Problem","description":"In data fitting, regularization is a technique to stabilize an ill-posed problem. \u003chttps://en.wikipedia.org/wiki/Tikhonov_regularization Ridge Regression (aka Tikhonov regularizaton)\u003e adds the 2-norm of the coefficient vector to the least squares problem. The cost function looks like this:\r\n\r\nJ=1/2*norm(A*x-b,2)^2+norm(alpha*x,2)^2   (MATLAB equation if image doesn't display)\r\n\r\n\u003c\u003chttps://image.ibb.co/n0G5xp/Equation1.png\u003e\u003e\r\n\r\nwhere |x| is the coefficient vector, |b| corresponds to observations, |A| comes from evaluating terms of an equation, alpha corresponds to a chosen scalar weight value, and |J| is the cost. The minimization of this cost function is ridge regression. When alpha is zero and the least squares problem is ill-conditioned, this problem is unstable meaning that small changes in |b| cause large changes in |x|. Choosing alpha appropriately for a given problem stabilizes the problem causing small changes in |b| causes a small change in |x|.\r\n\r\nThis Cody problem is about solving the Ridge Regression problem. Implement the solution to the ridge regression problem. This is best done by solving a dual problem. Minimizes a different cost function yields the solution that solves the Ridge Regression problem:\r\n\r\nJ = 1/2*norm([A;alpha*eye(n)]*x-[b;zeros(1,n)],2)^2  (MATLAB equation if image doesn't display)\r\n\r\n\u003c\u003chttps://image.ibb.co/hkAZOU/equation2.png\u003e\u003e\r\n\r\nTherefore, write a function that minimum of the dual problem for a given A, alpha, and b.","description_html":"\u003cp\u003eIn data fitting, regularization is a technique to stabilize an ill-posed problem. \u003ca href = \"https://en.wikipedia.org/wiki/Tikhonov_regularization\"\u003eRidge Regression (aka Tikhonov regularizaton)\u003c/a\u003e adds the 2-norm of the coefficient vector to the least squares problem. The cost function looks like this:\u003c/p\u003e\u003cp\u003eJ=1/2*norm(A*x-b,2)^2+norm(alpha*x,2)^2   (MATLAB equation if image doesn't display)\u003c/p\u003e\u003cimg src = \"https://image.ibb.co/n0G5xp/Equation1.png\"\u003e\u003cp\u003ewhere \u003ctt\u003ex\u003c/tt\u003e is the coefficient vector, \u003ctt\u003eb\u003c/tt\u003e corresponds to observations, \u003ctt\u003eA\u003c/tt\u003e comes from evaluating terms of an equation, alpha corresponds to a chosen scalar weight value, and \u003ctt\u003eJ\u003c/tt\u003e is the cost. The minimization of this cost function is ridge regression. When alpha is zero and the least squares problem is ill-conditioned, this problem is unstable meaning that small changes in \u003ctt\u003eb\u003c/tt\u003e cause large changes in \u003ctt\u003ex\u003c/tt\u003e. Choosing alpha appropriately for a given problem stabilizes the problem causing small changes in \u003ctt\u003eb\u003c/tt\u003e causes a small change in \u003ctt\u003ex\u003c/tt\u003e.\u003c/p\u003e\u003cp\u003eThis Cody problem is about solving the Ridge Regression problem. Implement the solution to the ridge regression problem. This is best done by solving a dual problem. Minimizes a different cost function yields the solution that solves the Ridge Regression problem:\u003c/p\u003e\u003cp\u003eJ = 1/2*norm([A;alpha*eye(n)]*x-[b;zeros(1,n)],2)^2  (MATLAB equation if image doesn't display)\u003c/p\u003e\u003cimg src = \"https://image.ibb.co/hkAZOU/equation2.png\"\u003e\u003cp\u003eTherefore, write a function that minimum of the dual problem for a given A, alpha, and b.\u003c/p\u003e","function_template":"function x = ridgeRegression(A,alpha,b)\r\n  x = A\\b;\r\nend","test_suite":"clc; clear; close all;\r\n%% Test 1\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 0;\r\nc = [50.5072813195826;14.809837633449];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 2\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 1;\r\nc = [46.3633165923753;14.8348826094771];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 3\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 10;\r\nc = [5.15542113869052;15.0827828176993];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 4\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = [x.^0 x];\r\nalpha = 100;\r\nc = [0.146854633219172;14.986428814777];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 5\r\n% This one is rank deficient without regularization.\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = x.^(0:6);\r\nc = A\\y;\r\nalpha = 0;\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 6\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = x.^(0:6);\r\nalpha = 10;\r\nc = [-1.48348345971319;-21.370159200147;1.50455732468686;-0.0214851248485215;0.000148821639521563;-5.20003346155603e-07;7.26127822714741e-10];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);\r\n%% Test 7\r\nx = [36.8730230456394;39.5842747401717;43.380027112517;45.5490284681428;47.7180298237686;51.2426570266606;54.4961590600994;54.4961590600994;46.0912788070492;42.295526434704;46.0912788070493;57.2074107546317;87.3023045639404;93.2670582919114;97.3339358337099;97.0628106642567;107.907817442386;117.668323542702;126.615454134659;122.277451423407;115.77044735653;120.379575237235;114.008133755084;126.073203795752;128.513330320831;108.043380027112;144.509715318572;147.220967013104;145.051965657479;141.79846362404;144.509715318572;154.134658834162;145.594215996385;142.20515137822;165.250790781744;188.025305015816;174.875734297334;178.535924084953;182.196113872571;197.650248531405;197.107998192499;196.972435607772;193.44780840488;196.972435607772;230.998644374153;230.998644374153;257.026660641663;265.16041572526;60.4609127880705;57.478535924085;56.394035246272;249.977406235879;251.875282422052;260.009037505648];\r\ny = [356.149242377445;298.33521343792;53.36679594417;153.87816272061;369.497443166114;469.878773890057;714.171003910829;944.386831248959;830.085141105366;1039.08233557753;1470.37291088954;1505.27783828066;2164.26154151238;2113.32967065118;2710.06186465197;1055.41161286966;155.09074891013;765.66528069907;361.929344910872;1606.94977682562;1578.79697146034;2132.31168341422;2284.0019895516;2124.57128738942;2779.01348148774;4003.99860861424;3094.02581865822;3748.44200554603;4014.83711358974;2029.53768932436;2158.77402009707;2402.45508067111;1568.74193370111;813.671340379116;4077.64777784641;4665.39122971844;2062.33603266505;320.97774107871;716.310096974383;736.410419788883;1535.02358528902;1916.33155292304;2506.59770421349;3088.99342342664;3409.47052570325;2682.85182066728;3054.45584788382;5787.48858120914;2555.32546398489;339.784205170881;109.672406674747;3673.83707132802;3759.98595610633;6766.39998439567];\r\nA = x.^(0:6);\r\nalpha = 10000;\r\nc = [3.07150764626882e-05;0.0011811811626465;0.0297325806037763;0.00644572962571577;-7.30850526187996e-05;2.69506809802866e-07;-3.12356553672693e-10];\r\nc2 = ridgeRegression(A,alpha,y);\r\ndc = c - c2;\r\nassert(norm(dc) \u003c eps(norm(c))*1000);","published":true,"deleted":false,"likes_count":0,"comments_count":2,"created_by":9579,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-27T03:50:10.000Z","updated_at":"2018-09-20T12:02:32.000Z","published_at":"2018-08-27T03:55:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image2.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn data fitting, regularization is a technique to stabilize an ill-posed problem.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Tikhonov_regularization\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRidge Regression (aka Tikhonov regularizaton)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e adds the 2-norm of the coefficient vector to the least squares problem. The cost function looks like this:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eJ=1/2*norm(A*x-b,2)^2+norm(alpha*x,2)^2 (MATLAB equation if image doesn't display)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the coefficient vector,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e corresponds to observations,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eA\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e comes from evaluating terms of an equation, alpha corresponds to a chosen scalar weight value, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eJ\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the cost. The minimization of this cost function is ridge regression. When alpha is zero and the least squares problem is ill-conditioned, this problem is unstable meaning that small changes in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e cause large changes in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Choosing alpha appropriately for a given problem stabilizes the problem causing small changes in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e causes a small change in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ex\u003c/w:t\u003e\u003c/w:r\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Cody problem is about solving the Ridge Regression problem. Implement the solution to the ridge regression problem. This is best done by solving a dual problem. Minimizes a different cost function yields the solution that solves the Ridge Regression problem:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eJ = 1/2*norm([A;alpha*eye(n)]*x-[b;zeros(1,n)],2)^2 (MATLAB equation if image doesn't display)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTherefore, write a function that minimum of the dual problem for a given A, alpha, and b.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":44718,"title":"Optimize the Tollbooths","description":"Your company has recently built its own highway from which they hope to generate some revenue. The highway has no branches or intersections, it is a simple line segment. Your company also has access to simple data from some potential customers that describe their start and endpoint locations and their budget.\r\n\r\nTollbooths are also located on various locations on the highway. The total toll a customer pays is the sum of all tolls on the tollbooths that lie between their start and end locations. If a customer cannot afford the total toll they must pay, then they simply don't make the trip and end up paying nothing.\r\n\r\nThe customer wants to start or end their destination at the precise location of a tollbooth, so we can represent the problem as follows. We have a graph that is a simple path with N nodes. Each node represents a potential start or end location of a customer and there is a single tollbooth located on each node. So the total toll a customer pays is the sum of the tolls on the nodes they cross to reach their endpoint. Both the start point and end point are also toll booths.\r\n\r\nYour task is to set the tolls on each of the tollbooths to generate the *maximum revenue* for your company. The answer is the pricing of each toll booth.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20px; 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: normal; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"display: block; min-width: 0px; padding-top: 0px; transform-origin: 332px 171px; vertical-align: baseline; perspective-origin: 332px 171px; \"\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 42px; white-space: pre-wrap; perspective-origin: 309px 42px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour company has recently built its own highway from which they hope to generate some revenue. The highway has no branches or intersections, it is a simple line segment. Your company also has access to simple data from some potential customers that describe their start and endpoint locations and their budget.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 42px; white-space: pre-wrap; perspective-origin: 309px 42px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eTollbooths are also located on various locations on the highway. The total toll a customer pays is the sum of all tolls on the tollbooths that lie between their start and end locations. If a customer cannot afford the total toll they must pay, then they simply don't make the trip and end up paying nothing.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 52.5px; white-space: pre-wrap; perspective-origin: 309px 52.5px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe customer wants to start or end their destination at the precise location of a tollbooth, so we can represent the problem as follows. We have a graph that is a simple path with N nodes. Each node represents a potential start or end location of a customer and there is a single tollbooth located on each node. So the total toll a customer pays is the sum of the tolls on the nodes they cross to reach their endpoint. Both the start point and end point are also toll booths.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; transform-origin: 309px 21px; white-space: pre-wrap; perspective-origin: 309px 21px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour task is to set the tolls on each of the tollbooths to generate the\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: bold; \"\u003emaximum revenue\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; transform-origin: 0px 0px; perspective-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e for your company. The answer is the pricing of each toll booth.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = toll_pricing_strategy(option,budget)\r\n   y=zeros(1,size(option,2));\r\n  % Optimize much !\r\nend","test_suite":"%% \r\noption=[1 0; 0 1; 1 1];\r\nbudget=[10;10;10];\r\ny_correct=[10,10];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption = [1 0 0; 0 1 0; 1 1 1];\r\nbudget=[10;10;15];\r\ny_correct=[10,5,0];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption=[0 1 1 0;1 1 1 0;1 0 0 0; 0 0 1 1];\r\nbudget=[15 ;25 ;15; 20];\r\ny_correct=[10,0,15,5];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption=[0   0   0   1   1   1\r\n   0   0   1   1   1   1\r\n   1   1   0   0   0   0\r\n   0   1   1   1   0   0\r\n   1   1   1   1   1   1\r\n   0   1   1   1   1   1];\r\nbudget=[ 42 ;31 ;12 ;63 ;105 ;87];\r\ny_correct=[18,12,20,31,11,13];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))\r\n\r\n%%\r\noption=[1   1   1   1   1   0   0   0\r\n   0   0   0   1   1   1   1  0\r\n   1   1   1   0   0   0   0   0\r\n   0   1   1   1   1   1   0   0\r\n   0   0   1   1   1   1   1   0\r\n   0   1   1   1   1   1   0   0\r\n   1   1   1   0   0   0   0   0\r\n   0   0   0   1   1   1   1   1];\r\nbudget=[25;50;60;120;40;80;20;60];\r\ny_correct=[30,10,20,5,15,30,10,0];\r\ny=toll_pricing_strategy(option,budget);\r\nrevenue=@(x)sum((option*x(:)).*((option*x(:))\u003c=budget));\r\nassert(revenue(y)\u003e=revenue(y_correct))","published":true,"deleted":false,"likes_count":0,"comments_count":6,"created_by":195572,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2020-10-03T13:41:47.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-04T21:46:46.000Z","updated_at":"2020-10-03T13:41:47.000Z","published_at":"2018-08-04T21:50:10.000Z","restored_at":null,"restored_by":null,"spam":false,"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\u003eYour company has recently built its own highway from which they hope to generate some revenue. The highway has no branches or intersections, it is a simple line segment. Your company also has access to simple data from some potential customers that describe their start and endpoint locations and their budget.\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\u003eTollbooths are also located on various locations on the highway. The total toll a customer pays is the sum of all tolls on the tollbooths that lie between their start and end locations. If a customer cannot afford the total toll they must pay, then they simply don't make the trip and end up paying nothing.\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 customer wants to start or end their destination at the precise location of a tollbooth, so we can represent the problem as follows. We have a graph that is a simple path with N nodes. Each node represents a potential start or end location of a customer and there is a single tollbooth located on each node. So the total toll a customer pays is the sum of the tolls on the nodes they cross to reach their endpoint. Both the start point and end point are also toll booths.\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\u003eYour task is to set the tolls on each of the tollbooths to generate the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emaximum revenue\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e for your company. The answer is the pricing of each toll booth.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":44720,"title":" God of War: The Chains Of Olympus","description":"The Spartan warrior, Kratos, is held by a chain of _n \u003e 1_ links in the underworld. His only chance of survival is to break the chain by removing the minimum number of single link, so that it would be possible to create a chain of any integer length between 1 and _n_ links, inclusive, from the resulting pieces. He only has enough stamina to remove the minimum number of single links. Anything more, and he forever remains doomed in the underworld.\r\n\r\nAt what points should he break chain to free himself and continue his vengeance journey to Olympus? \r\n\r\n*ILLUSTRATION:* \r\n\r\nn = 3 link chain can be broken, such that the resulting pieces can combine to give a chain of any integer length between 1 and _n_ links, inclusive, by removing a minimum of a single link in any of the following way:\r\n\r\n      Segments                 Breakpoints\r\n    O-  O-O                        [1]      \r\n    O -O- O                        [2]\r\n    O-O  -O                        [3]\r\n\r\nYou are to return only one of these possible breakpoints i.e. either 1, 2, or 3 will be accepted as a correct solution for n = 3.\r\n\r\nSimilarly, n = 8 link chain can only be broken by removing a minimum of two single link as shown:\r\n\r\n\r\n      Segments                Breakpoints\r\n\r\n   O- O-O -O- O-O-O-O            [1,4]\r\n\r\n   O- O-O-O-O -O- O-O-O          [1,5]\r\n\r\n   O- O-O-O-O -O- O-O            [1,6]\r\n\r\n   O -O- O -O- O-O-O-O           [2,4]\r\n\r\n   O -O- O-O- -O- O-O-O          [2,5] \r\n\r\n   O -O- O-O-O -O- O-O           [2,6]   \r\n\r\n   O -O- O-O-O-O -O- O           [2,7]\r\n\r\n   O-O -O- -O- O-O-O-O           [3,4] \r\n\r\n   O-O -O- O -O- O-O-O           [3,5]\r\n\r\n   O-O -O- O-O -O- O-O           [3,6]\r\n\r\n   O-O -O- O-O-O -O- O           [3,7]\r\n\r\n   O-O -O- O-O-O-O -O            [3,8]\r\n\r\n   O-O-O -O- -O- O-O-O           [4,5]\r\n\r\n   O-O-O -O- O -O- O-O           [4,6]\r\n\r\n   O-O-O -O- O-O -O- O           [4,7]\r\n\r\n   O-O-O -O- O-O-O -O            [4,8]\r\n\r\n   O-O-O-O -O- -O- O-O           [5,6]\r\n\r\n   O-O-O-O -O- O -O- O           [5,7]\r\n\r\n   O-O-O-O -O- O-O -O            [5,8]","description_html":"\u003cp\u003eThe Spartan warrior, Kratos, is held by a chain of \u003ci\u003en \u0026gt; 1\u003c/i\u003e links in the underworld. His only chance of survival is to break the chain by removing the minimum number of single link, so that it would be possible to create a chain of any integer length between 1 and \u003ci\u003en\u003c/i\u003e links, inclusive, from the resulting pieces. He only has enough stamina to remove the minimum number of single links. Anything more, and he forever remains doomed in the underworld.\u003c/p\u003e\u003cp\u003eAt what points should he break chain to free himself and continue his vengeance journey to Olympus?\u003c/p\u003e\u003cp\u003e\u003cb\u003eILLUSTRATION:\u003c/b\u003e\u003c/p\u003e\u003cp\u003en = 3 link chain can be broken, such that the resulting pieces can combine to give a chain of any integer length between 1 and \u003ci\u003en\u003c/i\u003e links, inclusive, by removing a minimum of a single link in any of the following way:\u003c/p\u003e\u003cpre\u003e      Segments                 Breakpoints\r\n    O-  O-O                        [1]      \r\n    O -O- O                        [2]\r\n    O-O  -O                        [3]\u003c/pre\u003e\u003cp\u003eYou are to return only one of these possible breakpoints i.e. either 1, 2, or 3 will be accepted as a correct solution for n = 3.\u003c/p\u003e\u003cp\u003eSimilarly, n = 8 link chain can only be broken by removing a minimum of two single link as shown:\u003c/p\u003e\u003cpre\u003e      Segments                Breakpoints\u003c/pre\u003e\u003cpre\u003e   O- O-O -O- O-O-O-O            [1,4]\u003c/pre\u003e\u003cpre\u003e   O- O-O-O-O -O- O-O-O          [1,5]\u003c/pre\u003e\u003cpre\u003e   O- O-O-O-O -O- O-O            [1,6]\u003c/pre\u003e\u003cpre\u003e   O -O- O -O- O-O-O-O           [2,4]\u003c/pre\u003e\u003cpre\u003e   O -O- O-O- -O- O-O-O          [2,5] \u003c/pre\u003e\u003cpre\u003e   O -O- O-O-O -O- O-O           [2,6]   \u003c/pre\u003e\u003cpre\u003e   O -O- O-O-O-O -O- O           [2,7]\u003c/pre\u003e\u003cpre\u003e   O-O -O- -O- O-O-O-O           [3,4] \u003c/pre\u003e\u003cpre\u003e   O-O -O- O -O- O-O-O           [3,5]\u003c/pre\u003e\u003cpre\u003e   O-O -O- O-O -O- O-O           [3,6]\u003c/pre\u003e\u003cpre\u003e   O-O -O- O-O-O -O- O           [3,7]\u003c/pre\u003e\u003cpre\u003e   O-O -O- O-O-O-O -O            [3,8]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- -O- O-O-O           [4,5]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- O -O- O-O           [4,6]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- O-O -O- O           [4,7]\u003c/pre\u003e\u003cpre\u003e   O-O-O -O- O-O-O -O            [4,8]\u003c/pre\u003e\u003cpre\u003e   O-O-O-O -O- -O- O-O           [5,6]\u003c/pre\u003e\u003cpre\u003e   O-O-O-O -O- O -O- O           [5,7]\u003c/pre\u003e\u003cpre\u003e   O-O-O-O -O- O-O -O            [5,8]\u003c/pre\u003e","function_template":"function breakpoints = Chains(n)\r\n  \r\nend","test_suite":"%%\r\nn = 2;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n, 'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 3;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 5;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 7;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=1,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 8;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=2,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 23;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=2,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 50;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=3,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 100;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=4,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 150;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=4,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 200;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=5,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 500;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=6,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 1000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=7,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 2500;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints) \u003c= 8,'Argghh...You failed to release Kratos. Too much breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 5000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=9,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 10000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=9,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n\r\n%%\r\nn = 20000;\r\nbreakpoints = unique(Chains(n));\r\n% Check minimum length condition is satisfied\r\nassert(length(breakpoints)\u003c=10,'Argghh...You failed to release Kratos. Too many breakpoints')\r\n% Get broken chain segements\r\nsegments = abs(nonzeros([repelem(1,length(breakpoints)) [breakpoints-1 n]-[0 breakpoints]]));\r\n% Check that chain of any integer length between 1 and n links, inclusive,\r\n% can be obtained from the resulting segments\r\nassert(length(unique((dec2bin(1:2^length(segments)-1)-'0')*segments)')==n,'Argghh...You failed to release Kratos. Incorrect breakpoints')\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2018-09-18T17:56:51.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-05T20:04:25.000Z","updated_at":"2024-11-25T15:31:13.000Z","published_at":"2018-08-05T20:33:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Spartan warrior, Kratos, is held by a chain of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en \u0026gt; 1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e links in the underworld. His only chance of survival is to break the chain by removing the minimum number of single link, so that it would be possible to create a chain of any integer length between 1 and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e links, inclusive, from the resulting pieces. He only has enough stamina to remove the minimum number of single links. Anything more, and he forever remains doomed in the underworld.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAt what points should he break chain to free himself and continue his vengeance journey to Olympus?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eILLUSTRATION:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003en = 3 link chain can be broken, such that the resulting pieces can combine to give a chain of any integer length between 1 and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e links, inclusive, by removing a minimum of a single link in any of the following way:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[      Segments                 Breakpoints\\n    O-  O-O                        [1]      \\n    O -O- O                        [2]\\n    O-O  -O                        [3]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are to return only one of these possible breakpoints i.e. either 1, 2, or 3 will be accepted as a correct solution for n = 3.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSimilarly, n = 8 link chain can only be broken by removing a minimum of two single link as shown:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[      Segments                Breakpoints\\n\\n   O- O-O -O- O-O-O-O            [1,4]\\n\\n   O- O-O-O-O -O- O-O-O          [1,5]\\n\\n   O- O-O-O-O -O- O-O            [1,6]\\n\\n   O -O- O -O- O-O-O-O           [2,4]\\n\\n   O -O- O-O- -O- O-O-O          [2,5] \\n\\n   O -O- O-O-O -O- O-O           [2,6]   \\n\\n   O -O- O-O-O-O -O- O           [2,7]\\n\\n   O-O -O- -O- O-O-O-O           [3,4] \\n\\n   O-O -O- O -O- O-O-O           [3,5]\\n\\n   O-O -O- O-O -O- O-O           [3,6]\\n\\n   O-O -O- O-O-O -O- O           [3,7]\\n\\n   O-O -O- O-O-O-O -O            [3,8]\\n\\n   O-O-O -O- -O- O-O-O           [4,5]\\n\\n   O-O-O -O- O -O- O-O           [4,6]\\n\\n   O-O-O -O- O-O -O- O           [4,7]\\n\\n   O-O-O -O- O-O-O -O            [4,8]\\n\\n   O-O-O-O -O- -O- O-O           [5,6]\\n\\n   O-O-O-O -O- O -O- O           [5,7]\\n\\n   O-O-O-O -O- O-O -O            [5,8]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44724,"title":"Let's Make A Deal: The Player's Dilemma 2","description":"Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, either immediately opens your door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers you the choice, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\r\n\r\nWe will now play the game using the assumptions:\r\n\r\n# The host can open any of the doors including that picked by the player.\r\n# The host can open a door to reveal either a goat or the car.\r\n# The host doesn't always offer the chance to switch between the originally chosen \r\n  door and the closed doors.\r\n\r\nIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\r\n\r\n   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\r\n\r\nIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\r\n\r\nInterpreting the matrix in terms of the assumptions implies that all elements p_ij of the conditional probability matrix can be nonzero with the constraint that\r\n\r\n  p_i1 + p_i2 + p_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \r\n\r\nOn the game show, you have initially chosen door D and the host, Monty Hall, opened door H, using the conditional probability Ph.\r\n\r\nWhat is the probability *Pws* that you will win the car by switching your choice to the door remaining?\r\n\r\n*If switching option is not available (i.e. host opens a door with the car behind it) return NaN.*\r\n","description_html":"\u003cp\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, either immediately opens your door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers you the choice, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\u003c/p\u003e\u003cp\u003eWe will now play the game using the assumptions:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe host can open any of the doors including that picked by the player.\u003c/li\u003e\u003cli\u003eThe host can open a door to reveal either a goat or the car.\u003c/li\u003e\u003cli\u003eThe host doesn't always offer the chance to switch between the originally chosen \r\n  door and the closed doors.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/p\u003e\u003cpre\u003e   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\u003c/pre\u003e\u003cp\u003eIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/p\u003e\u003cp\u003eInterpreting the matrix in terms of the assumptions implies that all elements p_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ep_i1 + p_i2 + p_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \r\n\u003c/pre\u003e\u003cp\u003eOn the game show, you have initially chosen door D and the host, Monty Hall, opened door H, using the conditional probability Ph.\u003c/p\u003e\u003cp\u003eWhat is the probability \u003cb\u003ePws\u003c/b\u003e that you will win the car by switching your choice to the door remaining?\u003c/p\u003e\u003cp\u003e\u003cb\u003eIf switching option is not available (i.e. host opens a door with the car behind it) return NaN.\u003c/b\u003e\u003c/p\u003e","function_template":"function Pws = MontyHall2(D,H,Ph)\r\n  Pws = ;\r\nend","test_suite":"\r\n%% CASE 1: Host always opens the door containing the car.\r\n%      Ph = [1   0   0\r\n%            0   1   0\r\n%            0   0   1]\r\n% In this case, the host does not offer the player the choice of switching\r\n% doors. Hence, return Pws = NaN.\r\n%__________________________________________________________________________\r\nD = 1;\r\nH = 2;\r\nPh = diag([1 1 1]);\r\nPws_correct = NaN;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 3;\r\nPh = diag([1 1 1]);\r\nPws_correct = NaN;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = diag([1 1 1]);\r\nPws_correct = NaN;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\n%% CASE 2: Host (uniformly) randomly opens any door.\r\n%      Ph = [1/3  1/3  1/3\r\n%            1/3  1/3  1/3\r\n%            1/3  1/3  1/3]\r\n% In this case, the game is fair because the host does not make any effort\r\n% to open any particular door. Hence, the chance of winning or losing by\r\n% switching is equal i.e. Psw = 0.5.\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 3: Host opens door 2 if the car is not behind it. Otherwise,\r\n% the host opens door 3.\r\n%      Ph = [0   1   0\r\n%            0   0   1\r\n%            0   1   0]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 3;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 1;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 2;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 0;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0 1 0;\r\n      0 0 1;\r\n      0 1 0];\r\nPws_correct = 0.5;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 4: Host opens the door based on the standard assumptions of \r\n%  Marilyn vos Savant.\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPws_correct = 0.3333;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 5: Host opens the door based on a completely random approach.\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0.5045;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0.4955;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0.4745;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.5000    0.1000    0.4000\r\n      0.0500    0.5000    0.4500\r\n      0.3333    0.0667    0.6000];\r\nPws_correct = 0.8696;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.5000    0.1000    0.4000\r\n      0.0500    0.5000    0.4500\r\n      0.3333    0.0667    0.6000];\r\nPws_correct = 0.4706;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.5000    0.1000    0.4000\r\n      0.0500    0.5000    0.4500\r\n      0.3333    0.0667    0.6000];\r\nPws_correct = 0.1304;\r\nPws = MontyHall2(D,H,Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2018-08-10T08:50:31.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2018-08-08T10:20:24.000Z","updated_at":"2018-08-10T08:50:31.000Z","published_at":"2018-08-08T12:55:34.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, either immediately opens your door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers you the choice, \\\"Do you want to pick door No. 2?\\\" Is it to your advantage to switch your choice?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe will now play the game using the assumptions:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open any of the doors including that picked by the player.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open a door to reveal either a goat or the car.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   Ph = [ p_11   p_12   p_13\\n          p_21   p_22   p_23\\n          p_31   p_32   p_33 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInterpreting the matrix in terms of the assumptions implies that all elements p_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[p_i1 + p_i2 + p_i3 = 1    i.e. the host must always open a door to reveal the car or a goat.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn the game show, you have initially chosen door D and the host, Monty Hall, opened door H, using the conditional probability Ph.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the probability\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePws\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that you will win the car by switching your choice to the door remaining?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eIf switching option is not available (i.e. host opens a door with the car behind it) return NaN.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44727,"title":"Let's Make A Deal: Criminal Minds","description":"The game of Let's Make A Deal proceeds as follows;\r\n\r\nThe player is given the choice of three doors: Behind one door is a car; behind the others, goats. The player picks a door, say No. 1, and the host, either immediately opens that door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers the player the choice, \"Do you want to pick door No. 2?\"\r\n\r\nThe game play is guided by the following set of rules:\r\n\r\n# The host can open any of the doors including that picked by the player.\r\n# The host can open a door to reveal either a goat or the car.\r\n# The host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\r\n\r\nIn order to manipulate the game play, the host does not always (uniformly) randomly hide the car behind the doors. Instead, based on previous games statistics, the host determines the probability Pc. \r\n\r\n Pc = [pc_1  pc_2  pc_3]   pc_i is the probability of the host placing car behind door i. \r\n\r\nIf the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\r\n\r\n   Ph = [ ph_11   ph_12   ph_13\r\n          ph_21   ph_22   ph_23\r\n          ph_31   ph_32   ph_33 ]\r\n\r\nIn the above matrix, ph_ij represents the probability that the host opens door j given that the car is behind door i.\r\n\r\nInterpreting the matrix in terms of the assumptions implies that all elements ph_ij of the conditional probability matrix can be nonzero with the constraint that\r\n\r\n ph_i1 + ph_i2 + ph_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \r\n\r\nOn the game show, the host places the car behind a door with probability Pc in order to manipulate the outcome. The player then choose door D and the host, Monty Hall, opens door H using the conditional probability Ph.\r\n\r\nIf the door H opened by the host has a goat behind it, what is the probability *Pws* that the player will win the car by switching the initial door choice to the door remaining?\r\n\r\n*If switching option is not available (i.e. host always opens a door with the car behind it) return NaN.*\r\n","description_html":"\u003cp\u003eThe game of Let's Make A Deal proceeds as follows;\u003c/p\u003e\u003cp\u003eThe player is given the choice of three doors: Behind one door is a car; behind the others, goats. The player picks a door, say No. 1, and the host, either immediately opens that door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers the player the choice, \"Do you want to pick door No. 2?\"\u003c/p\u003e\u003cp\u003eThe game play is guided by the following set of rules:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe host can open any of the doors including that picked by the player.\u003c/li\u003e\u003cli\u003eThe host can open a door to reveal either a goat or the car.\u003c/li\u003e\u003cli\u003eThe host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIn order to manipulate the game play, the host does not always (uniformly) randomly hide the car behind the doors. Instead, based on previous games statistics, the host determines the probability Pc.\u003c/p\u003e\u003cpre\u003e Pc = [pc_1  pc_2  pc_3]   pc_i is the probability of the host placing car behind door i. \u003c/pre\u003e\u003cp\u003eIf the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/p\u003e\u003cpre\u003e   Ph = [ ph_11   ph_12   ph_13\r\n          ph_21   ph_22   ph_23\r\n          ph_31   ph_32   ph_33 ]\u003c/pre\u003e\u003cp\u003eIn the above matrix, ph_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/p\u003e\u003cp\u003eInterpreting the matrix in terms of the assumptions implies that all elements ph_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/p\u003e\u003cpre\u003e ph_i1 + ph_i2 + ph_i3 = 1    i.e. the host must always open a door to reveal the car or a goat. \u003c/pre\u003e\u003cp\u003eOn the game show, the host places the car behind a door with probability Pc in order to manipulate the outcome. The player then choose door D and the host, Monty Hall, opens door H using the conditional probability Ph.\u003c/p\u003e\u003cp\u003eIf the door H opened by the host has a goat behind it, what is the probability \u003cb\u003ePws\u003c/b\u003e that the player will win the car by switching the initial door choice to the door remaining?\u003c/p\u003e\u003cp\u003e\u003cb\u003eIf switching option is not available (i.e. host always opens a door with the car behind it) return NaN.\u003c/b\u003e\u003c/p\u003e","function_template":"function Pws = MontyHall3(D,H,Ph,Pc)\r\n  \r\nend","test_suite":"%% CASE 1: Monty Hall (uniformly) randomly opens any door.\r\n%      Ph = [1/3  1/3  1/3\r\n%            1/3  1/3  1/3\r\n%            1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1A: Host always hides the car behind one particular door.\r\n%   Pc = [1  0  0] or [0  1  0]  or  [0  0  1]\r\n%__________________________________________________________________________\r\n% 1. Pc = [1 0 0], D = 1,  H = 3. \r\n% The host always hides the car behind door 1.\r\n% Consequently, a player with an initial door choice of D = 1 cannot win\r\n% by switching doors after the host opens door H = 3 i.e. Psw = 0.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [1  0  0];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 2. Pc = [1 0 0], D = 1, H = 2.\r\n% The host always hides the car behind door 1.\r\n% Consequently, a player with an initial door choice of D = 1 cannot win\r\n% by switching doors after the host opens door H = 2 i.e. Psw = 0.\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [1  0  0];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 3. Pc = [0 1 0], D = 1, H = 2. \r\n% The host always hides the car behind door 2.\r\n% Consequently, a player with an initial door choice of D = 1 does not\r\n% have the option to switch doors after the host opens door H = 2.\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0  1  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 4. Pc = [0 1 0], D = 1, H = 3. \r\n% The host always hides the car behind door 2.\r\n% Consequently, a player with an initial door choice of D = 1 can only win\r\n% by switching to door 2 after the host opens door H = 3. i.e. Psw = 1.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0  1  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 5. Pc = [0 0 1], D = 1, H = 2\r\n% The host always hides the car behind door 3.\r\n% Consequently, a player with an initial door choice of D = 1 does not\r\n% have the option to switch doors after the host opens door H = 2.\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0  0  1];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\n% 6. Pc = [0 0 1], D = 1, H = 3\r\n% The host always hides the car behind door 3.\r\n% Consequently, a player with an initial door choice of D = 1 does not\r\n% have the option to switch doors after the host opens door H = 3.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0  0  1];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1B: Host hides the car behind two particular doors with equal probability.\r\n% Pc = [0  0.5  0.5]  or [0.5  0.5  0]  or  [0.5  0  0.5]\r\n%__________________________________________________________________________\r\n% 1. Pc = [0  0.5  0.5], D = 3, H = 1.\r\n% The car is either behind door 2 or 3. If the host opens door H = 1, the\r\n% player's chance of winning by switching from door D = 3 to door 2 is\r\n% equal i.e. Psw = 0.5.\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0.5;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n% 2. Pc = [0  0.5  0.5], D = 3, H = 2.\r\n% The host never hides the car behind door 1. Hence, the player can never\r\n% wi by switching to door 1.\r\nD = 3;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n% 3. Pc = [0.5  0.5  0], D = 3, H = 1.\r\n% The host never hides the car behind door 3. Hence, the player can only \r\n% win by switching to door 2.\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 4. Pc = [0.5  0.5  0], D = 3, H = 2.\r\n% The host never hides the car behind door 3. Hence, the player can only \r\n% win by switching to door 1.\r\nD = 3;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n% 5. Pc = [0.5  0  0.5], D = 3, H = 1.  \r\n% The host never hides the car behind door 2. Hence, the player can\r\n% never win by switching to door 2.\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1C: Hosts hides the car behind any of the three doors with equal probability.\r\n%   Pc = [1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n% The host does not manipulate the game. Hence, it is a fair game.\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.5;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 1D: Host hides the car with a pre-determined probability.\r\n%   Pc = [0.26  0.43  0.31]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6232;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.5439;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.4189;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3768;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.5811;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = ones(3)/3;\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.4561;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%% CASE 2: Monty Hall opens the door based on the standard assumptions of \r\n%  Marilyn vos Savant.\r\n%      Ph = [ 0    1   0\r\n%             1    0   0\r\n%            0.5  0.5  0]\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2A: Host always hides the car behind one particular door.\r\n%   Pc = [1  0  0] or [0  1  0]  or  [0  0  1]\r\n%__________________________________________________________________________\r\n \r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  0  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  0  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  1  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  1  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0  1];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0  1];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2B: Host hides the car behind two particular doors with equal \r\n% probability.\r\n% Pc = [0  0.5  0.5]  or [0.5  0.5  0]  or  [0.5  0  0.5]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2C: Hosts hides the car behind any of the three doors with equal \r\n% probability.\r\n%   Pc = [1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.6667;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 2D: Host hides the car with a pre-determined probability.\r\n%   Pc = [0.26  0.43  0.31]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3735;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.2650;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.7350;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [  0    1   0;\r\n        1    0   0;\r\n       0.5  0.5  0];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6265;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\n%% CASE 3: Host opens the door based on a completely randomized approach.\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3A: Host always hides the car behind one particular door.\r\n%   Pc = [1  0  0] or [0  1  0]  or  [0  0  1]\r\n%__________________________________________________________________________\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  0  0];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  0  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  1  0];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0  1];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0  1];\r\nPws_correct = NaN;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3B: Host hides the car behind two particular doors with equal probability.\r\n% Pc = [0  0.5  0.5]  or [0.5  0.5  0]  or  [0.5  0  0.5]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0.6136;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0  0.5  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.5  0.5  0];\r\nPws_correct = 1;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.5  0  0.5];\r\nPws_correct = 0;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3C: Hosts hides the car behind any of the three doors with equal \r\n% probability.\r\n%   Pc = [1/3  1/3  1/3]\r\n%__________________________________________________________________________\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.6136;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [1  1  1]/3;\r\nPws_correct = 0.4745;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n%__________________________________________________________________________\r\n%\r\n% CASE 3D: Host hides the car with a pre-determined probability.\r\n%   Pc = [0.26  0.43  0.31]\r\n%__________________________________________________________________________\r\n\r\nD = 1;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.5690;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 1;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6274;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3123;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 2;\r\nH = 3;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.3726;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 1;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.6877;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\nD = 3;\r\nH = 2;\r\nPh = [0.3333    0.3651   0.3016\r\n      0.4646    0.2283   0.3071\r\n      0.2926    0.4043   0.3032];\r\nPc = [0.26  0.43  0.31];\r\nPws_correct = 0.4310;\r\nPws = MontyHall3(D,H,Ph,Pc);\r\nassert(isequaln(round(Pws,4),Pws_correct))\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2018-08-10T13:05:15.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-09T10:04:50.000Z","updated_at":"2018-08-10T13:05:15.000Z","published_at":"2018-08-10T13:00:57.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game of Let's Make A Deal proceeds as follows;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe player is given the choice of three doors: Behind one door is a car; behind the others, goats. The player picks a door, say No. 1, and the host, either immediately opens that door or opens another door, say No. 3, which might have the car or a goat. If the host opens door No. 3 and it has a goat behind it, he then offers the player the choice, \\\"Do you want to pick door No. 2?\\\"\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe game play is guided by the following set of rules:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open any of the doors including that picked by the player.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host can open a door to reveal either a goat or the car.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host doesn't always offer the chance to switch between the originally chosen door and the closed doors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn order to manipulate the game play, the host does not always (uniformly) randomly hide the car behind the doors. Instead, based on previous games statistics, the host determines the probability Pc.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ Pc = [pc_1  pc_2  pc_3]   pc_i is the probability of the host placing car behind door i.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the player initially picks door D, then the host's choice of which door to open is represented by a conditional probability matrix Ph\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   Ph = [ ph_11   ph_12   ph_13\\n          ph_21   ph_22   ph_23\\n          ph_31   ph_32   ph_33 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the above matrix, ph_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInterpreting the matrix in terms of the assumptions implies that all elements ph_ij of the conditional probability matrix can be nonzero with the constraint that\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ ph_i1 + ph_i2 + ph_i3 = 1    i.e. the host must always open a door to reveal the car or a goat.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn the game show, the host places the car behind a door with probability Pc in order to manipulate the outcome. The player then choose door D and the host, Monty Hall, opens door H using the conditional probability Ph.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the door H opened by the host has a goat behind it, what is the probability\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePws\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that the player will win the car by switching the initial door choice to the door remaining?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eIf switching option is not available (i.e. host always opens a door with the car behind it) return NaN.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":44723,"title":"Let's Make A Deal: The Player's Dilemma ","description":"Suppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\r\n\r\nWe will now play the game using the standard assumptions:\r\n\r\n# The host must always open a door that was not picked by the contestant.\r\n# The host must always open a door to reveal a goat and never the car.\r\n# The host must always offer the chance to switch between the originally chosen door and the remaining closed door.\r\n\r\nIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door 1, then the host's choice of which goat-hiding door to open is represented by a conditional probability matrix Ph \r\n     \r\n   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\r\n\r\nIn the above matrix, p_ij represents the probability that the host opens door j\r\ngiven that the car is behind door i. \r\n\r\nInterpreting the matrix in terms of the standard assumptions implies \r\n\r\n p_i1 = 0            i.e.  the host cannot open door 1, the player's initial choice.  \r\n  \r\n p_i2 + pi3 = 1      i.e. the host must always open a door, 2 or 3, not initially picked by the player.\r\n\r\n p_ii = 0            i.e. the host must always open a door to reveal a goat and never the car.\r\n\r\nOn the game show, you have initially chosen door 1 and the host, Monty Hall, opened door H (2 or 3), using the conditional probability Ph. \r\n\r\nWhat is the probability *Pws* that you will win the car by switching your choice to the door remaining? ","description_html":"\u003cp\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, \"Do you want to pick door No. 2?\" Is it to your advantage to switch your choice?\u003c/p\u003e\u003cp\u003eWe will now play the game using the standard assumptions:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe host must always open a door that was not picked by the contestant.\u003c/li\u003e\u003cli\u003eThe host must always open a door to reveal a goat and never the car.\u003c/li\u003e\u003cli\u003eThe host must always offer the chance to switch between the originally chosen door and the remaining closed door.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door 1, then the host's choice of which goat-hiding door to open is represented by a conditional probability matrix Ph\u003c/p\u003e\u003cpre\u003e   Ph = [ p_11   p_12   p_13\r\n          p_21   p_22   p_23\r\n          p_31   p_32   p_33 ]\u003c/pre\u003e\u003cp\u003eIn the above matrix, p_ij represents the probability that the host opens door j\r\ngiven that the car is behind door i.\u003c/p\u003e\u003cp\u003eInterpreting the matrix in terms of the standard assumptions implies\u003c/p\u003e\u003cpre\u003e p_i1 = 0            i.e.  the host cannot open door 1, the player's initial choice.  \u003c/pre\u003e\u003cpre\u003e p_i2 + pi3 = 1      i.e. the host must always open a door, 2 or 3, not initially picked by the player.\u003c/pre\u003e\u003cpre\u003e p_ii = 0            i.e. the host must always open a door to reveal a goat and never the car.\u003c/pre\u003e\u003cp\u003eOn the game show, you have initially chosen door 1 and the host, Monty Hall, opened door H (2 or 3), using the conditional probability Ph.\u003c/p\u003e\u003cp\u003eWhat is the probability \u003cb\u003ePws\u003c/b\u003e that you will win the car by switching your choice to the door remaining?\u003c/p\u003e","function_template":"function Psw = MontyHall(H, Ph)\r\n  \r\nend","test_suite":"%%\r\nH = 2;\r\nPh = [0 0.55 0.45;0 0 1;0 1 0];\r\nPws_correct = 0.6452;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.55 0.45;0 0 1;0 1 0];\r\nPws_correct = 0.6897;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.25 0.75;0 0 1;0 1 0];\r\nPws_correct = 0.8;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.25 0.75;0 0 1;0 1 0];\r\nPws_correct = 0.5714;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.5 0.5;0 0 1;0 1 0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.5 0.5;0 0 1;0 1 0];\r\nPws_correct = 0.6667;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.80 0.20;0 0 1;0 1 0];\r\nPws_correct = 0.5556;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.80 0.20;0 0 1;0 1 0];\r\nPws_correct = 0.8333;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.60 0.40;0 0 1;0 1 0];\r\nPws_correct = 0.6250;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.60 0.40;0 0 1;0 1 0];\r\nPws_correct = 0.7143;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.23 0.77;0 0 1;0 1 0];\r\nPws_correct = 0.8130;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.23 0.77;0 0 1;0 1 0];\r\nPws_correct = 0.5650;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.27 0.73;0 0 1;0 1 0];\r\nPws_correct = 0.7874;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.27 0.73;0 0 1;0 1 0];\r\nPws_correct = 0.5780;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.90 0.10;0 0 1;0 1 0];\r\nPws_correct = 0.5263;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.90 0.10;0 0 1;0 1 0];\r\nPws_correct = 0.9091;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 1 0;0 0 1;0 1 0];\r\nPws_correct = 0.5;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 1 0;0 0 1;0 1 0];\r\nPws_correct = 1;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.37 0.63;0 0 1;0 1 0];\r\nPws_correct = 0.7299;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.37 0.63;0 0 1;0 1 0];\r\nPws_correct = 0.6135;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 2;\r\nPh = [0 0.01 0.99;0 0 1;0 1 0];\r\nPws_correct = 0.9901;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n\r\n%%\r\nH = 3;\r\nPh = [0 0.01 0.99;0 0 1;0 1 0];\r\nPws_correct = 0.5025;\r\nPws = MontyHall(H, Ph);\r\nassert(isequal(round(Pws,4),Pws_correct))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":"2018-09-18T18:38:37.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-08T07:42:36.000Z","updated_at":"2018-09-18T18:38:37.000Z","published_at":"2018-08-08T08:37:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSuppose you're on a game show, and you're given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what's behind the doors, opens another door, say No. 3, which has a goat. He then says to you, \\\"Do you want to pick door No. 2?\\\" Is it to your advantage to switch your choice?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe will now play the game using the standard assumptions:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host must always open a door that was not picked by the contestant.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host must always open a door to reveal a goat and never the car.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe host must always offer the chance to switch between the originally chosen door and the remaining closed door.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt is also typically presumed that the car is initially hidden randomly behind the doors and that, if the player initially picks door 1, then the host's choice of which goat-hiding door to open is represented by a conditional probability matrix Ph\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   Ph = [ p_11   p_12   p_13\\n          p_21   p_22   p_23\\n          p_31   p_32   p_33 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn the above matrix, p_ij represents the probability that the host opens door j given that the car is behind door i.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInterpreting the matrix in terms of the standard assumptions implies\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ p_i1 = 0            i.e.  the host cannot open door 1, the player's initial choice.  \\n\\n p_i2 + pi3 = 1      i.e. the host must always open a door, 2 or 3, not initially picked by the player.\\n\\n p_ii = 0            i.e. the host must always open a door to reveal a goat and never the car.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn the game show, you have initially chosen door 1 and the host, Monty Hall, opened door H (2 or 3), using the conditional probability Ph.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the probability\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePws\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e that you will win the car by switching your choice to the door remaining?\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":46053,"title":"Construct finite difference approximations of derivatives","description":"In solving a differential equation with a finite-difference method, one computes derivatives with various combinations of the function's values at chosen grid points. For example, the forward difference formula for the first derivative is\r\n\r\n f' = (f_{j+1} - f_j)/h\r\n\r\nwhere j is the grid index and h is the spacing between points. The systematic approach for deriving such formulas is to \u003chttp://www2.math.umd.edu/~dlevy/classes/amsc466/lecture-notes/differentiation-chap.pdf use Taylor series\u003e. In the example above, one can write\r\n\r\n f_{j+1} = f_j + h f' + h^2 f''/2 + h^3 f'''/6 + ...\r\n\r\nThen solving for f' and neglecting terms of order h^2 and higher gives\r\n\r\n f' = (f_{j+1} - f_j)/h - h f''/2\r\n\r\nBecause the exponent on h in the last term is 1, the method is called a first order method.\r\n\r\nWrite a function that takes the order |n| of the derivative and a vector |terms| indicating the terms to use (based on the number of grid cells away from the point in question) and produces a vector of coefficients, the order of the error term, and the numerical coefficient of the error term. In the above example, |n = 1| and |terms = [1 0]|, and \r\n\r\n coeffs   = [1 -1]\r\n errOrder = 1\r\n errCoeff = -0.5; \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: 435.55px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 217.775px; transform-origin: 407px 217.775px; vertical-align: baseline; \"\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: 380.183px 7.91667px; transform-origin: 380.183px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn solving a differential equation with a finite-difference method, one computes derivatives with various combinations of the function's values at chosen grid points. For example, the forward difference formula for the first derivative is\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 37.5833px; 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 18.7917px; text-align: left; transform-origin: 384px 18.7917px; 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: 13.5917px 7.91667px; transform-origin: 13.5917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e       \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-15px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKkAAABLCAYAAAALWaemAAAEa0lEQVR4nO2d3ZHiMBCEOwdnQAJOYCNwBGRABtQlsO/3RAzUReAcuBCIgRS4B9GnwYvBsq0f2/1VqbZg+RHtsTQzHsmAEEIIIYQQQggRiQrA1+OvGI50S0AFoAVwBXAEcAdwytqjZSDdElEBuMEJXQGo4cS+w40O4jXSLSEtnLDN4/EOXvxdrk4tAOmWiC84oW+5O7IwpFtCzpAfNQbplogdvA+1z9yXJSHdEnKAF1s+1HCkW2QauFTJEcAFXuyjaRL+J9ItIXt4USn0Bc9ii59ItwwwOuVoIIYh3RJi/Solnocj3RLCFMoNy77efJyhhbAW3RbBFd6vyk0Fl28c05f7xBaajC9Jt1VTwR+k74HvaeAO6NDXD+3HAT5aHnPgp46ih8D+lqDbJmjgxW4+vLb7nvOH14WUrFVwaRsGI6WPTjF1Ex1sGmVuv4oGN/Qg2veUbqQxdRMdWL1zjfDZazbSmLqJDjcML474ghtBTnAH6dMIsmYjjambMNjC3KHFEQwYWNz7jrUaaWzdRmHTIhc4x7cvebt7dGQJzvEe4cURNKIhv2+tRhpbt2BodDwD2MG+M4JXIdoYnZmZb4QbBAOGbrrGBhJDWl8aZglGOqdus8C8Xf14TCPsS/zy9SGjRy7Y1xDhGDDUneeZPrKNWh1e/K/7frIEI51Tt8lw1OyOin25PxbAliwwYV9vCCsrC/Gr1jjdp9AtCF72GnrG0KhLHEWPcNMUReIoF3K9OtSvWoOR5tAt+INDhugzyhHXYn9LAyc4/ewQQv2qMUbKqzIl6JhLt8GcEF50EMXnmIEK3o/aw7kvF4RPPaF+VYiRMijtVrrn1DOXbm+p4R17W+FiHf6+DjYoO+1EIxh74JnnCxnhdhO+rxRy6PaWFv5s4dl8Nc+/q15hdDsWFmNMbbHW1nAajpJCWTHRdLMV16mCIOv/TGlzikEdGoyf6rZIEt3oj6ascKnhR+wpbc6TqobzyVs4TZY8backiW6quBZFM6biWoikWN9Q26aIIrGFEil3oUgd3f8C8EctW5u0BDpXxXXq6P7vTN+nNq79/nyI+mHFderEfInRvSgQu42fktaiSGzFtXKCokhYca1tpUWxMGgquVBE+Kr/Tc52nOq1Q1p57OE3CNusS8ZqFU31ZcMKtU0cpz2eR0wWlegqU9mEbMqwaOyKzwr+bmYqKCmbMZsyLBZO7bxbGe8HqVrJstncJmFc7nHGBs7KlcDsi2Y8USwcRbvLibl0R7elEVmxm9Yy4K3wnJa6YYNpKVEOvBp4fzzmEo1vPBuwCtVFNpgfPcMbKEdNG/WrMEhkwS7p4a0SbUmijfp1tVBkwVannfFzSm/x7AoIkRy7xPxV+skasBBZ4BLzV0UldtmN/FGRBRsUvRopcy2cFOI/n24yS390Cdu/i5VibzL7iu5Uf4IWI4rEvCvNs/7oDs5QV1/CJ8ri024y1h/lrYuESAp3V+7zN2s4w2yhSjYhhBBCCCGEEEIIIYQQQsTkHzIr3fuGMmo5AAAAAElFTkSuQmCC\" alt=\"f' = (f_{j+1} - f_j})/h\" style=\"width: 84.5px; height: 37.5px;\" width=\"84.5\" height=\"37.5\"\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: 365.642px 7.91667px; transform-origin: 365.642px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ewhere j is the grid index and h is the spacing between points. The systematic approach for deriving such formulas is to\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://www2.math.umd.edu/~dlevy/classes/amsc466/lecture-notes/differentiation-chap.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003euse Taylor series\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: 116.3px 7.91667px; transform-origin: 116.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. In the example above, one can write\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 36.0833px; 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 18.0417px; text-align: left; transform-origin: 384px 18.0417px; 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: 13.5917px 7.91667px; transform-origin: 13.5917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e       \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-15px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcUAAABICAYAAACHmO42AAALhklEQVR4nO2dvZHryA6Fj/tsec9UAkpAESgCZTDm85SB/LXkr6faCJSDUlAMYz73rkGdIkQ1yf4lm+T5qlh174iaIdFNoIEGQEAIIYQQQgghhBBCCCGEEEIIIYQQtbMHcAZwAfADYDfv5Yg3BzRjcgFwmvlahBBiE5wB/AHwAPD7/vcvpITn5oZmHOy43Ge9IiGEWDlHAC98eoY3tIZRHuM8nNEYQMp/h2ac/qDxHoUQQhTgBrdHSM9E3uI83Bw/u0BjIoQQSRxHPu9TsA9IAZdi/z5CuaJZrAghhPDkgsbLeCItBEqjqPBpOkc042L3Bi+Bv4Ph07FFjhBCiA5HNIqXyTMxKKkjLzs08uS4hBg37vu+0Ow1CiGECGCPVvn+RHz/jMajiQnxiX6YwNRNbBrihMarZJJNqEEVQojNwxKLmExFhunkkeSHhi3WA6dRdSXhCCGE6IFhuifC9wRviPMuxTAHtAuVlAXHC824CiGE8ITJHKEexQ+0j1iKH7RGMSUs/UD8PrEQQmyOWI+ExeKu36di8XRSvHfLE+GZq0IIsVmsR2K7obDGzeVBnuFO/tij8UpUlpEOZX81Pzvis3TGLj7O+E6oOUIJUEIIEQTrC7nvdEBj8G5wlwRYz9J1KKkjHVsiw2YIVzTjckFrMG1YlOff3985vz+X1y6EEAFQmV7QGkQqYpuVSqP4g/YtDK5DXkk6bM/GRgq390HZMivVGsU92jH4gYyhEEIE0/VIuh1QrKeokOh00Ht/oE1movytp351fluIHrjCer6PO1TEGsMJzcNJOV6wTAW5Q9s+K/b6Q2RxQrPSr7lc4Yq2OPyB74QMhunmTOkPkTk9rCEv6YGwYvip2eEzFP3Cp/dt94Dn6jMbolv3aO5hKEvZ51nxGVsxAAeCk59hoJofhhrhRORkfXX+vwQuaJMTGJKK/T0hsqCXVXPmn5WL9UaAT49krnsIlTmNeJ+C5j3V/IqrEz73aLv3wnk11z2E6lYa8aGyEJ9nZWxsxQh82Lmq4MCoY7w/fDjtCo8Tc0lGEfhcfcfU1YXKgn+v5sw/KxPXdVqPZA5FFCpznj/k1dIzrjnsyGvsu05Xks2UhOpWnt/n1fo8Kz5jKwawbwW3HFHv6rBGuCq3CnGPZYYvUruDhMqCc7Bm5WuTaFzXydX7XNGVUJmzpdlQSPGFuhcqQHvfruu083iOhWmobmVP3SFj5vOs+IytGGCJIb7a4ESd0rNmqKxEh5SU7iAxsrghv/LNLR8qmj6ZxHa5yUGMzMfamVFB516oUIY5Fou2MbtL7rm63MQSqls5jkPGzOdZKdGqjslMq7cTNptuiR5NLXDCTNnCq6RR7NbixXw35Lp+kV/55paPK62fWI+EntoV03mMoTLn9Q4p3x+U8RJz6htXCYyF3jvH7IDplHqMbr1j/Jkbe1Z8xjaGzRhFrn61dxhP6muEYilpFGNT2GNkwXfZ5TYgOeUzdl/0SHgfF0wXCo6R+QXjcmF5Q25yGsWxV0XZPVW+nWQqjzFGt47JxedZ8RnbGFZtFA9ohEsB0yM4mkN7icOwXIElC1Yp8eelPe9SRtGucLurb84dOz9SZXFFmQctp3xsGM51L7Y+8YpGIZZ8hlJl/hz5nAakxD3kNIo0en09Zfm32OS7dAJUim49YXyu+jwrY2Mby6qNIieITS9/mZ/XnOzQxzHDETKR2BLqgfbBtA/fFO2iShlFm81HDvicL7bpcqosjiizes8pn7Fm07ajyhR1qakyH0ue2qFckkYuoziWDMZSCMpliozgFN26x/g1+jwrpd7TuWqjSGooas3FnwxHrPKcq2C7lFHkA819GO7bnPHplbjmTA3F66RkeLkmapK5D1vIYViTbiWbMIo2m27p4dJHhiOm4Nru50ztYZdQ+rYW7wffb3cYCiPOKQsXWzCKtcnchy0YxTXpVrIJo2hj3iIOm/2We0Vo941cBx+8x8h5IaFJ2x3kjO8uIA/zeZeSsnAxh3xqY2qZ+2D31VyHnV9D5y2ZJepWhm/7DkaQriPnLXYRYD2CGlaYzNhb2irE7r/lngxWgaQcITK12XxPfCtau3fVpaQsXMwhn9qYWuY+2IVT7LHkbPjadKsvdmsk5VhsBKC7YvOBjYZz3zRDdEubRECrAF6e57MxsM99HjAc7qXMfkfOC/Eg+DtdY2HnjMuQhMoilTnkUxtTy9yHK4blzTn0HDhnySHvGN1aAzZ5y3Vw7/o1ct5iIy92VeB7E8zAy2m4mPWZ2mNx6uxTQhn6djGxDZZTJ0/uPTO7P+Vaqds545JVqCxKs4U9xdpk7sPiPYoRYnTrElj9nmLMCpN7OGNwpRSyAudEijWKOdz+UOUZuyI8IM/Dklvp2ySaUE+wxtXx2o1ijTL3Ye1GsUbvPQerN4pDRa+pzGEU58g+HSvoLk1upW8L0F3wM5ec5paFi1zyOQL4p/Dx34jrqlHmPuS65tJj8nfkdZXUrXOyaqMY2haK2WQ/nufPYRTnIKSNE73sE5p7zaHEchvFoYfZeiUHNPdjC9lrbBeYSz5/IU8kYuj4X8R11ShzH3IYxf+g/Jj8P+K65mr5OAWljOIZbRu+Kc/7+lLIxDygVTCurMMuWzGKTOTwUbo0ivxOjpTznEZxrDsI/xZDQvfOeSGymIq1h09rlLkPS/RufQnVrUuihFG08hqyLbnP+4JJLSErTIZqfEKMWzCK3SJ3X36R7w3gOZX+WHJAN2vQ3nOsLEqzZqNYq8x9WKvRAOJ061IoYRTtFsBQTWfu877gzYUoC+43dT0cVxovizxdKdd9Al2aUeyGE32gNxa0ghkgp9JnGn2f/FmOc8f3HIiRxRSs2SjWKnMflnrdPsTo1qVQKnx6QbMVMDYfcp/3ASdlSAivz8M5vi/CHtzruDk+6/Mel2YUQ8LJJMTb9oGynzvzMEYWU1CLfEpQq8x9oC5YU7kCidGtS+GMZtxWd29s4xXi3od6OFsIn9IbDlk19XnbSydGFmvFtsoq2WFGMo+HORK395GreUOMbhUzYZUwvbiQ1XOoh7M2o7hHI6+9+b9NOvEl537iXOSSxdo44bMbkN3sT/WIJPN02EaSY5TDUz0jXbeKmaAi3r3/HdqkNtTDWZtRZKkCFwW81pD7y72fOBc5ZLE2bP9R15HavUgyT+OAz/cq5gjb0lFI1a1iJl5oJgL7QYZ6KqEeTqhRtJP2ifr2Gmyo6mT+HULu/cS5yCGLNcG5fkM7b3f47OcbnAnXQTKPx6boX5EvSsNxSNWtYibu+K4r84UeTkg2FRs1+3iWfa8rqckw7vCZnRlzbfS2l55xl0MWa+KJ/r6j9B5Ssy0l8zhshu4D+Q3WCWm6VSwUhWrykOotiPpghGNI2drQqry76bALkhzN98XGuaBdWfE1ISIMhlT49vo1Zp1unRPGDd3Y67ZEGZj0UmueglgY9jVONe7xLYE9mhXqHY0Ml76XKOKwRlGLommw3X5shyb2cJY+E1HEvl9QtHC/VJvv24VRAiVhTIdt9fVCsyC1e7v8uTx3IYSYGIbxFCmYDvsKNGYGn9AsULtZwQqtCiHERDDZQ17itLCEpW8fd9c5R0mEQggxAczc1l7itPg0TTiZ85RIKIQQhWF9r+rXpscaRd/z5MkLIUQhWMqk/ap5sPWJQ9h3hCqpUAghCsD9KhnE+aCxG/MAZRSFEKIgMoh1YLsIDRk7X+MphBAiAh+DqEzH8nA/d2xP176EQAghREZuGM9iPKO/ebjIC0su+gye7XqjZCghhMgIC/SvaMowXAfPUXnGNNj2ei6jx3IZlWMIIURGbOPpsUNhumk5o81EPaPdN2QbuDu0lyiEENk4ofE0fA+F6aZnh8YI3tGOwwXy2IUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCHi+Rc2DzR72nvjXAAAAABJRU5ErkJggg==\" alt=\"f_{j+1} = f_j + hf' + h^2 f''/2 + h^3 f'''/6 + ...\" style=\"width: 226.5px; height: 36px;\" width=\"226.5\" height=\"36\"\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: 51.7333px 7.91667px; transform-origin: 51.7333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThen solving for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAkCAYAAAAD3IPhAAABNklEQVRYhe2XXbGEMAxGj4c6wAAGVsEqwEEdrINrAQ1IwAMWqgEL3IcmU3Zm2W2ZBnjgPPET2kyS5gtwc3MDQAM8Mu0aKydaIAAj0AMz4L/YLsBk4chDFh/k3sv9DLgP9n/yvq/tiJNNZ1LYn7LZuPFNkPdtbWdevEflF5qiXPsiZlm8y7TXFFaPSicLL+SfjAmjqAziSMi0d2L/qah34Yl18iKlKKye+S+bdcSTVA3dtCelaFg9/1U7Jo1OT9FCXsc1Retlq7EditbLVmM7jIaUoqoFuQdt94tcn4oKXdWesZcRwxGgFI1K9RGgFFXdEnE0Q1W3RBzNUBnIFUdTJi7SX3QEMBmOStFh6vAj7Yj1sf7dUHE8XKXXI4IjHelTektLVOZATE84yxGlIabJc4GecnMp/gGjCl04ApTc8QAAAABJRU5ErkJggg==\" alt=\"f'\" style=\"width: 17.5px; height: 18px;\" width=\"17.5\" height=\"18\"\u003e\u003c/span\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: 94.9083px 7.91667px; transform-origin: 94.9083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and neglecting terms of order \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAnCAYAAAD3h5P5AAABYklEQVRYhe2WYc2DMBCGHw84wAAGUICCOagDHGABDZ8EPMzCNGCB/ehdOFgZa8uWfEmfpFlGcz16974tUChcQwv0MtpfJa2AO/CQ30XGn8x9lQlw5n8DzPIC/TcT1/jd7nGSPDQXtXh9Mt8EnrcpyVU0E3ml0+RDbGCFF4sKJ0W5vcSGqnLKKMEP0hT7IGHXNljtEouT+CQa1pLfEmLvZPhbbbLwXul79LDJOt1UbDE7qPAOCSWOqp5azAqmZT06Z7Yq1h3bU05xRFhV/bkAnTwb8ALqzYtNJsbaMjQ+bp36c8bvaJShC6gLNHnDepOFRlTJJ7O4Y3szWRcke/iIyiw+4ndpS2Zd0L1EZ9Kx7dVeudpbbcmlDLwva0hsl6FimnlVqO13yFJZ1Gz7vSf11PuIG8e9hrXf1mKXVeDsCtV+O5nfOyELXTx0hdp+Txyf4UmcXaE125PtZ9/khUKh8L94Ap3giAaNUZJzAAAAAElFTkSuQmCC\" alt=\"h^2\" style=\"width: 15.5px; height: 19.5px;\" width=\"15.5\" height=\"19.5\"\u003e\u003c/span\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: 53.3px 7.91667px; transform-origin: 53.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and higher gives\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 38.5833px; 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 19.2917px; text-align: left; transform-origin: 384px 19.2917px; 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: 13.5917px 7.91667px; transform-origin: 13.5917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e       \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-15px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAABNCAYAAABAKBoaAAAHIklEQVR4nO2dzXHjOBCFXw687VEJKAFHoAiUgY97U20Cus9JMag2AuWgDUExKAXvAX5Gi+YfKIL44fuqUFMzI1tgE2g0uhsNQAghhBBCCCGEEEIIIcQqNAA+vv8U05HcRFU0AG4AHgBOAL4AXJL2qAwkN1EdDYAn3KBuAOzhBvYX3KonupHcRJXc4Abx4fvvO/iBvkvVqQKQ3ER1fMAN6mfqjhSG5Caq5Arte+cguYnq2MHveY+J+1ISkpuokk/4ga0973QkN1ENB7jw2AnAHX5gn0zTIP/NluSmCMmGOMIPYA7qO14HtvhNzXI7wflCqOieUILV5qCXnKucmEatcrPPdUvcF5EAuw+WiTidWuVmHaWfifsiEsCwWenm4WmBFkItcmtzhFcI+8R9EQl4wO+DU9PA72FD+XqzhSYW5SS3JaGiu6MuRScm0MBPiPPEnznATZ6pn5/aj094Z9acSfaudRBiHucitxg8oUSrzXKAH9iHkc+2f+Y68rmQY8AN3N6VDq3cV92YckuJPZSlRKsNYkNnS5uHnNxTJ4z9mdwVQky5pcQ6SvlcDZxVI8thA/CU3iPC765ZIcSUW0r4XJT/Hu4ZL/C+hdqiKsIQovU/4BNXbhhfGWtWCDHllhKbV0FlwPdnow9SCBUyZ79IZxoLgQxRq0KILbdU2ISkA1xf7cS3FkKuz7AKNhR2hxNMn4bcwQkyZ8cRsRp/au49B82U56tVIcSWWyrO8Errht95GbSKYrybw/d3co6d0K906L8ZypFgKbvFFRcnOH85B0Pfl9EpU0LKJwdAyAvmy2iH6KyTbUrrC72VoBCWlFtO2INaV7yOb2sVLZ2m3ZbNA8OyomLqW5TZ1ygJYxQStREnfF8SCz8fsiqmgn0NGaR0OrW1M0OGtlFWnx3/16fdS1AIS8otF2xexRO/LZ9YadpdoVhO+C758vND44MKe/F8D1oD7dW+L7bOHPCcBzNhX7te/hAh++AatwxryC0FdhvUNZHoP1j6GWgNWCWzQ7/ivGB8TD0Q/n4mMWa6tKFQc7QOTnAvmi+TGj/E/AvdB9egEFLILQWcaH1+kRg5CJwvISnjDwyPDSrsxa0D63GdauZdkc9AtrS9xw28XySE0H3wHIUwxSRci1RySwEXvy7fV1dJeask58Jt1FRFyX4MjadPRLIOqDFDtFeue8QGft97hPfmhr7Q0H1wiEKgw7ZdgSilPFPJbW3GjjvTKuJ2gVZTzO/s4oRx5XEL+H2j7OGdXvYkm3WG9Q2GA/I2CTnh5k4yOp1CVu7dG9+XCynktjbWYdj1jDb/4Ay3WM6xDni2hYlaViGMOZsBJ8Oh/6cFt5iP4wa/CrCzD/PvQ1qRXva5WGG902LV8qMpn7PZmyMlyG3suDMn7xPD+QFj0Mq6wfskvsy/3TA84ceSwBpE8t9ZjbmWg9DuV99pSw48ysEmjeTqJc8JyW2cmElOi2M9rmu9yD1eNeXctqQC28O9uBucTEo2/ddEchvG+g9yrw0BoN5KOKIsrE9rbsvRMrE5DzmG6F+YUwlHiBgwOvFOy9E6YSbhmhb4bOxeXhVjRErOeH8LmeOFMUXVkrDhkDWFuXaU4R8A/6ola1uuJ8D5VUTlpVTaa+0ow38LfZ/avPZn/BVVSXEWOMMhaycZ5RhlEPXzgflWzl8zvm8sCSordGON2Bp/MN/K+XvG9805EpAM3VgjRFwY0s85zf8HhkOK0F5CFIYN6RdhgYcexxRpYDUmWXFlMaekQFLY2S2HhHLliNdTd8UMKvEDQ/ol1Bv9OZWm7ULe8CSq3lNcbI3MpbIJ59SiXI0jXi0Bej+LiI1uGF0nFpcDvOPPttCsxx3cXNqZv38h0+xEWzm5+W5P6DBT7ugi0rjYMwZdLaQ0GRU3a09yu5Blngy3Bw+4B4x2qYNYlFovWM0BOvwu8JOe1aKsxTB10bTbgxKKxPyUPLtCq00ptC8iFctxR/82jBZ0iDOXN0az0liOh6xE4XBAtkug0wGmQTcPXuo6ZHXZ7UTWK73YBjQ7bVi4wWso8gmFIudwwPgktzkEUggiOXaFAnyZsjNelYWK2sTBKgTl6Yjk0El1hVcGtAZs9EGrVxzGLjkWYjVsDvwJTjnY8JWNPmj1igPzdJa++VmIYOwp1Ct+bwts7UGxPIwyyDoQWWDL4neFHK2yEMtDC0zWl8gCmxjTjiLI+x0X+meUqyOywDoMuyyAVEVxtwDvSlTkRmSDrcHXZbLSf1DEkdqC4M3XUgYiK5h41Hfcub1duCDTAzQFIWUgsmXouLP1H+zglIKORb/PFGUgpStWZ6yGv/Uf3KEowxJcML79OkKKVyTgCH/fRBd7OCVwg7zgS8Dw7hlO2XY1fkYhSCEqxuZ6jDUdPxeiYg4Iux1M1pgQQgghhBBCCCGEEEIIIYQQQgghhBBCWP4HvMwy/Pk8LhMAAAAASUVORK5CYII=\" alt=\"f' = (f_{j+1} - f_j)/h - hf''/2\" style=\"width: 130px; height: 38.5px;\" width=\"130\" height=\"38.5\"\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: 81.3px 7.91667px; transform-origin: 81.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBecause the exponent on \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: \u0026quot;STIXGeneral\u0026quot;, \u0026quot;STIXGeneral-webfont\u0026quot;, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);\"\u003eh\u003c/span\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: 191.35px 7.91667px; transform-origin: 191.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e in the last term is 1, the method is called a first order method.\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: 110.717px 7.91667px; transform-origin: 110.717px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function that takes the order\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: \u0026quot;STIXGeneral\u0026quot;, \u0026quot;STIXGeneral-webfont\u0026quot;, serif; font-style: italic; font-weight: 400; color: rgb(0, 0, 0);\"\u003en\u003c/span\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: 91.7917px 7.91667px; transform-origin: 91.7917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e of the derivative and a vector\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 19.25px 7.91667px; transform-origin: 19.25px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eterms\u003c/span\u003e\u003c/span\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: 130.3px 7.91667px; transform-origin: 130.3px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e indicating the terms to use (based on the number of grid cells away from the point in question) and produces a vector of coefficients, the order of the error term, and the numerical coefficient of the error term. In the above example,\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 19.25px 7.91667px; transform-origin: 19.25px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003en = 1\u003c/span\u003e\u003c/span\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: 13.6167px 7.91667px; transform-origin: 13.6167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eterms = [1 0]\u003c/span\u003e\u003c/span\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: 15.5583px 7.91667px; transform-origin: 15.5583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 61.3px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 404px 30.65px; transform-origin: 404px 30.65px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; 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; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 69.3px 7.91667px; transform-origin: 69.3px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e coeffs   = [1 -1]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; 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; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 50.05px 7.91667px; transform-origin: 50.05px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e errOrder = 1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.833333px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.833333px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.833333px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.833333px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; 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; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 404px 10.2167px; transform-origin: 404px 10.2167px; white-space: nowrap; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 65.45px 7.91667px; transform-origin: 65.45px 7.91667px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e errCoeff = -0.5;\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function [coeff,errOrder,errCoeff] = FDderiv(n,terms)\r\n%  n        = order of the derivative sought\r\n%  terms    = grid indices of terms to include\r\n%  coeff    = coefficients of the terms in the formula \r\n%  errOrder = exponent of h in the first non-zero higher-order term\r\n%  errCoeff = coefficient of the first non-zero higher-order term\r\n\r\n  coeff    = ...\r\n  errOrder = ...\r\n  errCoeff = ...\r\nend","test_suite":"%%\r\n%  First-order forward difference for the first derivative\r\nn = 1;\r\nterms = [1 0];\r\ncoeff_correct = [1 -1];\r\nerrOrder_correct = 1;\r\nerrCoeff_correct = -1/2;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  First-order backward difference for the first derivative\r\nn = 1;\r\nterms = [0 -1];\r\ncoeff_correct = [1 -1];\r\nerrOrder_correct = 1;\r\nerrCoeff_correct = 1/2;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the first derivative\r\nn = 1;\r\nterms = [1 -1];\r\ncoeff_correct = [1/2 -1/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/6;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order forward difference for the first derivative\r\nn = 1;\r\nterms = [2 1 0];\r\ncoeff_correct = [-1/2 2 -3/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = 1/3;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order backward difference for the first derivative\r\nn = 1;\r\nterms = [0 -1 -2];\r\ncoeff_correct = [3/2 -2 1/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = 1/3;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Fourth-order centered difference for the first derivative\r\nn = 1;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [-1 8 0 -8 1]/12\r\nerrOrder_correct = 4;\r\nerrCoeff_correct = 1/30;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the second derivative\r\nn = 2;\r\nterms = [1 0 -1];\r\ncoeff_correct = [1 -2 1];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/12;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Fourth-order centered difference for the second derivative\r\nn = 2;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [-1 16 -30 16 -1]/12;\r\nerrOrder_correct = 4;\r\nerrCoeff_correct = 1/90;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the third derivative\r\nn = 3;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [1/2 -1 0 1 -1/2];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/4;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)\r\n\r\n%%\r\n%  Second-order centered difference for the fourth derivative\r\nn = 4;\r\nterms = [2 1 0 -1 -2];\r\ncoeff_correct = [1 -4 6 -4 1];\r\nerrOrder_correct = 2;\r\nerrCoeff_correct = -1/6;\r\n[coeff,errOrder,errCoeff] = FDderiv(n,terms);\r\nassert(all(abs(coeff-coeff_correct) \u003c 1e-6))\r\nassert(isequal(errOrder,errOrder_correct))\r\nassert(abs((errCoeff-errCoeff_correct)/errCoeff_correct) \u003c 1e-4)","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":46909,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-07-22T03:37:57.000Z","updated_at":"2020-11-15T13:41:30.000Z","published_at":"2020-07-22T05:20:57.000Z","restored_at":null,"restored_by":null,"spam":false,"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\u003eIn solving a differential equation with a finite-difference method, one computes derivatives with various combinations of the function's values at chosen grid points. For example, the forward difference formula for the first derivative is\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f' = (f_{j+1} - f_j})/h\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ef\\\\prime=\\\\frac{f_{j+1}-f_j}{h}\u003c/w:t\u003e\u003c/w:r\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\u003ewhere j is the grid index and h is the spacing between points. The systematic approach for deriving such formulas is to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www2.math.umd.edu/~dlevy/classes/amsc466/lecture-notes/differentiation-chap.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003euse Taylor series\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. In the example above, one can write\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f_{j+1} = f_j + hf' + h^2 f''/2 + h^3 f'''/6 + ...\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e f_{j+1} = f_j + h f\\\\prime +  \\\\frac{h^2}{2}f\\\\prime\\\\prime +  \\\\frac{h^3}{6}f\\\\prime\\\\prime\\\\prime + \\\\ldots\u003c/w:t\u003e\u003c/w:r\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\u003eThen solving for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f'\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$f\\\\prime$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and neglecting terms of order \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"h^2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$h^2$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and higher gives\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\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"f' = (f_{j+1} - f_j)/h - hf''/2\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003ef\\\\prime = \\\\frac{f_{j+1} - f_j}{h} - \\\\frac{h}{2}f\\\\prime\\\\prime\u003c/w:t\u003e\u003c/w:r\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\u003eBecause the exponent on \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"h\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003eh\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e in the last term is 1, the method is called a first order method.\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\u003eWrite a function that takes the order\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003cw:attr w:name=\\\"altTextString\\\" w:val=\\\"n\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003en\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e of the derivative and a vector\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eterms\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e indicating the terms to use (based on the number of grid cells away from the point in question) and produces a vector of coefficients, the order of the error term, and the numerical coefficient of the error term. In the above example,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003en = 1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eterms = [1 0]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ coeffs   = [1 -1]\\n errOrder = 1\\n errCoeff = -0.5;]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":42685,"title":"Cody meets Xiangqi: foresee the unseen (Part 2)","description":"This is the second part of the Xiangqi series. The first part in this series is: \u003chttp://www.mathworks.com/matlabcentral/cody/problems/42674-cody-meets-xiangqi-foresee-the-unseen Cody meets Xiangqi: foresee the unseen (Part 1)\u003e\r\n\r\nBeing increasingly interested in \u003chttps://en.wikipedia.org/wiki/Xiangqi Xiangqi\u003e (a.k.a., *Chinese Chess*), Mr. Cody has designed a new Xiangqi match for \u003chttps://en.wikipedia.org/wiki/Xiang_Yu Xiang Yu\u003e and \u003chttps://de.wikipedia.org/wiki/Han_Gaozu Liu Bang\u003e by taking into account the likelihood of tie games. The new rule is described as follows:\r\n\r\nOnce\r\n\r\n   1) Xiang Yu wins Na games consecutively,\r\n   2) Liu Bang wins Nb games consecutively, \r\n   3) No ties occur consecutively, \r\n\r\n*whichever comes first*, Mr. Cody announces the outcome accordingly as follows:\r\n\r\n   1) Xiang Yu is the final winner,\r\n   2) Liu Bang is the final winner, \r\n   3) They end up with a final draw.\r\n\r\nAgain, Cody asks us --- active Cody players --- to foresee the outcome of this unseen match using Monte Carlo simulations. Our task is to write the following function\r\n\r\n                         [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)\r\n\r\nwhere \r\n\r\n* a: the probability that Xiang Yu wins one individual game\r\n* b: the probability that Liu Bang wins one individual game\r\n* Na: # of consecutive wins required for Xiang Yu to become the final winner\r\n* Nb: # of consecutive wins required for Liu Bang to become the final winner\r\n* Nc: # of consecutive ties required to result in a final draw\r\n* Pa: the probability that Xiang Yu wins the match\r\n* Pb: the probability that Liu Bang wins the match\r\n* Pc: the probability of a final draw\r\n\r\nThe main focus of this problem is on *Monte Carlo simulations*, rather than analytical approaches. Your provided solution Xiangqi2.m will be checked by a P-file EvaluateSolution.p, which mainly does 3 things as follows:\r\n\r\n1) Call your function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc) and then Check if the result P = [Pa, Pb, Pc] is within tolerance of its expected value Q. That is, If norm(P - Q) \u003c tol holds, it means that your solution is accurate enough. If this does not hold, your solution will be rejected. \r\n\r\n2) Check if your solution is based on *pure Monte Carlo simulations* or *analytical approaches*. If it is based on analytical approaches (i.e., using analytical expressions to directly compute the probabilities), then your solution will be rejected. EvaluateSolution.p accomplishes this goal by exploiting a combination of distinct features possessed by analytical solutions, but are generally not shared by Monte Carlo simulations. \r\n\r\n3) If your solution passes the above two checks, then the score of your solution will be determined based on the speed of your code. The faster your solution is, the smaller score you get. \r\n\r\nIf you have any concerns or suggestions on this problem, please feel free to leave me a comment. Thanks. \r\n\r\n ","description_html":"\u003cp\u003eThis is the second part of the Xiangqi series. The first part in this series is: \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/42674-cody-meets-xiangqi-foresee-the-unseen\"\u003eCody meets Xiangqi: foresee the unseen (Part 1)\u003c/a\u003e\u003c/p\u003e\u003cp\u003eBeing increasingly interested in \u003ca href = \"https://en.wikipedia.org/wiki/Xiangqi\"\u003eXiangqi\u003c/a\u003e (a.k.a., \u003cb\u003eChinese Chess\u003c/b\u003e), Mr. Cody has designed a new Xiangqi match for \u003ca href = \"https://en.wikipedia.org/wiki/Xiang_Yu\"\u003eXiang Yu\u003c/a\u003e and \u003ca href = \"https://de.wikipedia.org/wiki/Han_Gaozu\"\u003eLiu Bang\u003c/a\u003e by taking into account the likelihood of tie games. The new rule is described as follows:\u003c/p\u003e\u003cp\u003eOnce\u003c/p\u003e\u003cpre\u003e   1) Xiang Yu wins Na games consecutively,\r\n   2) Liu Bang wins Nb games consecutively, \r\n   3) No ties occur consecutively, \u003c/pre\u003e\u003cp\u003e\u003cb\u003ewhichever comes first\u003c/b\u003e, Mr. Cody announces the outcome accordingly as follows:\u003c/p\u003e\u003cpre\u003e   1) Xiang Yu is the final winner,\r\n   2) Liu Bang is the final winner, \r\n   3) They end up with a final draw.\u003c/pre\u003e\u003cp\u003eAgain, Cody asks us --- active Cody players --- to foresee the outcome of this unseen match using Monte Carlo simulations. Our task is to write the following function\u003c/p\u003e\u003cpre\u003e                         [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)\u003c/pre\u003e\u003cp\u003ewhere\u003c/p\u003e\u003cul\u003e\u003cli\u003ea: the probability that Xiang Yu wins one individual game\u003c/li\u003e\u003cli\u003eb: the probability that Liu Bang wins one individual game\u003c/li\u003e\u003cli\u003eNa: # of consecutive wins required for Xiang Yu to become the final winner\u003c/li\u003e\u003cli\u003eNb: # of consecutive wins required for Liu Bang to become the final winner\u003c/li\u003e\u003cli\u003eNc: # of consecutive ties required to result in a final draw\u003c/li\u003e\u003cli\u003ePa: the probability that Xiang Yu wins the match\u003c/li\u003e\u003cli\u003ePb: the probability that Liu Bang wins the match\u003c/li\u003e\u003cli\u003ePc: the probability of a final draw\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe main focus of this problem is on \u003cb\u003eMonte Carlo simulations\u003c/b\u003e, rather than analytical approaches. Your provided solution Xiangqi2.m will be checked by a P-file EvaluateSolution.p, which mainly does 3 things as follows:\u003c/p\u003e\u003cp\u003e1) Call your function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc) and then Check if the result P = [Pa, Pb, Pc] is within tolerance of its expected value Q. That is, If norm(P - Q) \u0026lt; tol holds, it means that your solution is accurate enough. If this does not hold, your solution will be rejected.\u003c/p\u003e\u003cp\u003e2) Check if your solution is based on \u003cb\u003epure Monte Carlo simulations\u003c/b\u003e or \u003cb\u003eanalytical approaches\u003c/b\u003e. If it is based on analytical approaches (i.e., using analytical expressions to directly compute the probabilities), then your solution will be rejected. EvaluateSolution.p accomplishes this goal by exploiting a combination of distinct features possessed by analytical solutions, but are generally not shared by Monte Carlo simulations.\u003c/p\u003e\u003cp\u003e3) If your solution passes the above two checks, then the score of your solution will be determined based on the speed of your code. The faster your solution is, the smaller score you get.\u003c/p\u003e\u003cp\u003eIf you have any concerns or suggestions on this problem, please feel free to leave me a comment. Thanks.\u003c/p\u003e","function_template":"function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)\r\n% a: the probability that Xiang Yu wins one individual game\r\n% b: the probability that Liu Bang wins one individual game\r\n% Na: # of consecutive wins required for Xiang Yu to become the final winner\r\n% Nb: # of consecutive wins required for Liu Bang to become the final winner\r\n% Nc: # of consecutive ties required to result in a final draw\r\n% Pa: the probability that Xiang Yu wins the match\r\n% Pb: the probability that Liu Bang wins the match\r\n% Pc: the probability of a final draw\r\n    Pa = ;\r\n    Pb = ;\r\n    Pc = ;\r\nend","test_suite":"%%\r\n% Thanks to Alfonso Nieto-Castanon\r\nurlwrite('https://sites.google.com/a/alfnie.com/alfnie/software/SetSolutionScore.p?attredirects=0\u0026amp;d=1','SetSolutionScore.p');\r\nrehash path;\r\n\r\n%%\r\nfh = fopen('EvaluateSolution.p','wb');\r\nfwrite(fh, hex2dec(reshape('7630312E30307630302E3030000C701C97F61FB1000002D5000001CF000004E73DD68930A391F7C60A534B45A03EAF72EB08941F39EE01BF25BAE04DF43CF342FC1A763DF6B8F26BBED0BD4F2ABBB5927B1EEBAE8795E487F6E4EF2737CBB6646BC4DF145E14664B3A4DACCD7CB01C4EC2328AD76F196231D2CA02CDC2B15466FBA5BDDF9E6C0E5DE12CF07B2AAA50BD2F04FFB92E9BECBE232E01031340A8EDCA5C10DAC01BBE43685ED0AB79D9C6F2A090FB4E0E75CAA236D3D73AD659E0705C42792BC77D85951B2FC49DE856FB97AFD74C1DB66C874EDF5517BCFA14C6706CA5E61DE60F2771B64F6D634B858A1A30AD7C49778534CCCE7551C637DC53846B02140046F729C5EB2DC9C65F16C2FC4F34EA9F03A2056B8218ACAB9A9A8BC5DC8F2F3312740F86626ABA38E00903CE76846DEE175BEE04DC0815E050E4CD95BA8E5BD27A0B57F2413B71A0E4837FB0F86328AA82732C584F1F55C6CCD79CBC69D052011BA93357AAE3568E0086F159C083D665645A38584955283925F900254A6562F0C755323C40805328D04F27FD863E8B774B52E27FC3AA30CE689AC57DEFEE274DBBC2A4D9D320CF19AD873AA0AE806721EE78496F7ADA99EA48060F26FDEE7ED5E9F85B27F79AE176A6E8EAC4DD5127299122FF88139BC4B56A2ED3C5338A72676C4C99AD6DEBCD8BB5EB09',2,[]).')); rehash path; fclose(fh);\r\n\r\n%%\r\nfid = fopen('Xiangqi2.m');\r\ndelim = {' ', '\\n', ',', '.', ';', '''', '@', '+', '-', '*', '/', '\\', '^', '\u003e', '\u003c', '=', '\u0026', '|', '~', '{', '}', '[', ']', '(', ')'};\r\nfile = textscan(fid, '%s', 'CommentStyle', '%', 'MultipleDelimsAsOne', 1, 'Delimiter', delim); fclose(fid); \r\nassert(~any(ismember({'rng','RandStream','seed','state','twister','shufle','default'},file{1})));\r\n\r\n%%\r\na = 0; b = 0; Na = 2; Nb = 3; Nc = 2; tol = 1e-6;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol); \r\n\r\n%%\r\na = 0; b = 1; Na = 1; Nb = 2; Nc = 1; tol = 1e-6;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol); \r\n\r\n%%\r\na = 1; b = 0; Na = 3; Nb = 2; Nc = 1; tol = 1e-6;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol); \r\n\r\n%%\r\na = 0.15; b = 0.85; Na = 4; Nb = 2; Nc = 1; tol = 1e-4;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol);\r\n\r\n%%\r\na = 0.9; b = 0; Na = 3; Nb = 1; Nc = 2; tol = 1e-3;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol);\r\n\r\n%%\r\na = 0.65; b = 0.3; Na = 3; Nb = 2; Nc = 2; tol = 1e-3;\r\nEvaluateSolution(a, b, Na, Nb, Nc, tol);\r\n\r\n%%\r\nNa = 3; Nb = 2; Nc = 1; tol = 2e-3; \r\np = sort(rand(2,30)); \r\np = sort([p(1,:);diff(p);1-p(2,:)]);\r\nfor k = size(p,2):-1:1\r\n    a = p(3,k); b = p(2,k);\r\n    score(k) = EvaluateSolution(a, b, Na, Nb, Nc, tol);    \r\nend\r\nSetSolutionScore(round(mean(score)));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":12569,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2015-11-12T00:41:35.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2015-11-08T20:51:55.000Z","updated_at":"2015-11-12T03:39:15.000Z","published_at":"2015-11-10T00:22:37.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is the second part of the Xiangqi series. The first part in this series is:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/42674-cody-meets-xiangqi-foresee-the-unseen\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody meets Xiangqi: foresee the unseen (Part 1)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBeing increasingly interested in\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Xiangqi\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eXiangqi\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (a.k.a.,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eChinese Chess\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e), Mr. Cody has designed a new Xiangqi match for\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Xiang_Yu\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eXiang Yu\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://de.wikipedia.org/wiki/Han_Gaozu\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eLiu Bang\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e by taking into account the likelihood of tie games. The new rule is described as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOnce\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1) Xiang Yu wins Na games consecutively,\\n   2) Liu Bang wins Nb games consecutively, \\n   3) No ties occur consecutively,]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ewhichever comes first\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, Mr. Cody announces the outcome accordingly as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1) Xiang Yu is the final winner,\\n   2) Liu Bang is the final winner, \\n   3) They end up with a final draw.]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAgain, Cody asks us --- active Cody players --- to foresee the outcome of this unseen match using Monte Carlo simulations. Our task is to write the following function\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[                         [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ea: the probability that Xiang Yu wins one individual game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eb: the probability that Liu Bang wins one individual game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNa: # of consecutive wins required for Xiang Yu to become the final winner\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNb: # of consecutive wins required for Liu Bang to become the final winner\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNc: # of consecutive ties required to result in a final draw\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePa: the probability that Xiang Yu wins the match\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePb: the probability that Liu Bang wins the match\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePc: the probability of a final draw\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe main focus of this problem is on\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eMonte Carlo simulations\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, rather than analytical approaches. Your provided solution Xiangqi2.m will be checked by a P-file EvaluateSolution.p, which mainly does 3 things as follows:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1) Call your function [Pa, Pb, Pc] = Xiangqi2(a, b, Na, Nb, Nc) and then Check if the result P = [Pa, Pb, Pc] is within tolerance of its expected value Q. That is, If norm(P - Q) \u0026lt; tol holds, it means that your solution is accurate enough. If this does not hold, your solution will be rejected.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2) Check if your solution is based on\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003epure Monte Carlo simulations\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e or\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eanalytical approaches\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. If it is based on analytical approaches (i.e., using analytical expressions to directly compute the probabilities), then your solution will be rejected. EvaluateSolution.p accomplishes this goal by exploiting a combination of distinct features possessed by analytical solutions, but are generally not shared by Monte Carlo simulations.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3) If your solution passes the above two checks, then the score of your solution will be determined based on the speed of your code. The faster your solution is, the smaller score you get.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf you have any concerns or suggestions on this problem, please feel free to leave me a comment. Thanks.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":61269,"title":"Precise Almost Pythagorean Triples ","description":"This  is essentially the same as:  Problem 52834. Easy Sequences 32: Almost Pythagorean Triples; it even presents the same set of test problems.  The difference is that the \"correct\" solutions for larger cases of 52834 were the result of roundoff errors due to values being larger than flintmax('double').  This problem requires care to avoid such roundoff.\r\nRepeating the original problem description:\t\t\t\t\r\nAn Almost Pythagorean Triple (abbreviated as \"APT'), is a set of 3 integers in which square of the largest element, which we will call as its 'hypotenuse', is 1 less than the sum of square of the smaller elements (shorter sides). This means that if c is the hypotenuse and a and b are the shorter sides, , satisfies the following equation: \r\n        \r\n        where:  \r\nThe smallest  is the triple , with  and perimeter (the sum of the 3 elements)  of . Some researchers consider  as the smallest , but here, we will only look at 's where the hypotenuse is \"strictly\" greater than the other shorter sides. Other examples of 's are , and . \r\nUnfortunately, unlike Pythagorean Triples, a 'closed formula' for generating all possible 's, has not yet been discovered, at the time of this writing. For this exercise, we will be dealing with 's with a known ratio between the hypotenuse and the shortest side: . \r\nGiven the value of r, find the perimeter of the  with the r-th smallest perimeter. For example for , that is , the smallest perimeter is  for  , while the second (r-th) smallest perimeter is , for the  with dimensions . For , the third smallest perimeter is  for  . \r\nThe output can be very large, so please present only the last 12 digits if the number of digits of the perimeter exceeds 12.\r\nFinally, as with the original, the use of java, BigInteger, persistent, and global are not allowed.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.4333px; min-height: 0px; white-space: normal; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 669.833px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 334px 334.917px; transform-origin: 334px 334.917px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 42px; text-align: left; transform-origin: 310px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 102.675px 7.91667px; transform-origin: 102.675px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis  is essentially the same as:  \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52834\"\u003e\u003cspan style=\"border-block-end-color: rgb(0, 91, 130); border-block-start-color: rgb(0, 91, 130); border-bottom-color: rgb(0, 91, 130); border-inline-end-color: rgb(0, 91, 130); border-inline-start-color: rgb(0, 91, 130); border-left-color: rgb(0, 91, 130); border-right-color: rgb(0, 91, 130); border-top-color: rgb(0, 91, 130); caret-color: rgb(0, 91, 130); color: rgb(0, 91, 130); column-rule-color: rgb(0, 91, 130); outline-color: rgb(0, 91, 130); text-decoration-color: rgb(0, 91, 130); text-emphasis-color: rgb(0, 91, 130); \"\u003e\u003cspan style=\"\"\u003eProblem 52834. Easy Sequences 32: Almost Pythagorean Triples\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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e; it even presents the same set of test problems.  The difference is that the \"correct\" solutions for larger cases of 52834 were the result of roundoff errors due to values being larger than flintmax('double').  This problem requires care to avoid such roundoff.\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 10.5px; text-align: left; transform-origin: 310px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 201.933px 7.91667px; transform-origin: 201.933px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eRepeating the original problem description:\t\t\t\t\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 86.9167px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 43.4583px; text-align: left; transform-origin: 310px 43.4583px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 303.05px 7.91667px; transform-origin: 303.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAn Almost Pythagorean Triple (abbreviated as \"APT'), is a set of 3 integers in which square of the largest element, which we will call as its 'hypotenuse', is \u003c/span\u003e\u003c/span\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: 3.89167px 7.91667px; transform-origin: 3.89167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1\u003c/span\u003e\u003c/span\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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\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: 12.45px 7.91667px; transform-origin: 12.45px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"text-decoration-line: underline; \"\u003eless\u003c/span\u003e\u003c/span\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: 94.8917px 7.91667px; transform-origin: 94.8917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e than the sum of square of the smaller elements (shorter sides). This means that if \u003c/span\u003e\u003c/span\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: 3.5px 7.91667px; transform-origin: 3.5px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ec\u003c/span\u003e\u003c/span\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: 72.35px 7.91667px; transform-origin: 72.35px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is the hypotenuse and \u003c/span\u003e\u003c/span\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: 3.89167px 7.91667px; transform-origin: 3.89167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ea\u003c/span\u003e\u003c/span\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: 15.5583px 7.91667px; transform-origin: 15.5583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and \u003c/span\u003e\u003c/span\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: 3.89167px 7.91667px; transform-origin: 3.89167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eb\u003c/span\u003e\u003c/span\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: 49.3917px 7.91667px; transform-origin: 49.3917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e are the shorter sides, \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 102.692px 7.91667px; transform-origin: 102.692px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, satisfies the following equation: \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 24.9167px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 12.4583px; text-align: left; transform-origin: 310px 12.4583px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 15.5333px 7.91667px; transform-origin: 15.5333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e        \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"99\" height=\"19\" style=\"vertical-align: baseline;width: 99px;height: 19px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAAAmCAYAAABwHY/hAAAEBElEQVR4nO2b7ZGCMBCG3x7ogAZogAqowA7sgA5swRoowR5swRpswfux7LAiASG7RHL7zGRu7vA0m+x3IuA4juM4juM4juM4zqGpAHQAngBeAB4AmqQz2ocCwBUk7wskf5t0Rnb8J1nVqEALdgZQA7iAFu+FvBevAHAHyVuD5GfncEs4Lwv+k6yqdPiMEmcM3iVXziBlkVQYHEO1+4zs+E+yqnIDeRZJgWHhxs9yoQNQTvz9DpL7CGllBZrnUoTPQVamwLQsu8K1R67GEeKG3/emsnaISY2OICtTgJzAExQJk1GCFq1LOYlEPHAMp1AjvjY8iqxsFCxvUuM49ZM5gkfRhJ3CKfVEvqDBoCz1hv8/gqwlqFY6gaLlTxjHA3l3qkJcQdFSy5O2sIvArCxbmybaslojI2Uy42hBC3eURdOiBhWomsWepXFwzbHlvS1ktSa5cTSY7l7lTglSNm1lsTIO2YZdqyhWslpjahxF/wGh/LQCGcbRFi0EyyvrphKf8hcgubfk7UtYGQefQ73wvl8VPmWWWMpqjbpxcPvrAUqVWlA4feB9gfiUfMow1qRYvDmxI4YapAB8PeLS/85tS6mofHI81edvEd+QsDKODkOrHaD5y9Yut3flflrLao2qcTQgBRkrPRdydwwHKk/QYrajccPnyeocrIAxI+ZUnq++jJVRXomRC8uOYiz3FTrppZVxsCzcyXn2P2sMhjP+XGtZrVEzjhPCh3jy4hl7kzllXeNRpJfeOrYqEhv91P+zkso0RLYGp4ZG6LYwDtnCveC7Pd5DVmtUjEO+yVSKwtcNfj2MroE3/xF4fll4vhVZx00Nntdt4XVr6jwZBVn5x8gIrhkRUqbMKsYR0+I7ItKThu4IcXRckyJ+g9ywmLFms2VtETrAY3m1L46mTJmjjYPTqVDUyBFWlnvgOZ8EzxnPVrjDFxoyvZl73bfzkrKE5JWXRrUdZKqUGVAwDlmMpSiw9u5WSWcQ8qIy3957TbRrDtnCDcmbq4OMNg6+nBXyKtbs3a1acgbS06b4Uo+2cbC8c2vE0Sq3LzFFG8dSyLVm727VkjOQxqpdb3yDtnGwvNeFzwsV6kcm2jhk/h1anDPyOQWfcwZ8sU7WGwX2vWynaRxSOaZSKvk8p04kE20cMr8eLxD3u0Ne54jIrgwbPMvZ4T3/LvvX79nT1zQO2cIdF/A1aA1y/ppBtHEUeE81mv5NT6Co8st397cglZ87Qk8MDqAdPd/7sMvKOHgfS/H3nG9Sc8SXXbhNshYgJZB5fE6p1JgGtFh81UXKWfbPrkjTudGuOSq813Ud8t5bYLjGNFWbtsjXIWRPDdrA3CK24ziO4ziO4ziO4ziO4ziO4ziOY8QfaJ4ygEB93kYAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 23.9167px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 11.9583px; text-align: left; transform-origin: 310px 11.9583px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 40.425px 7.91667px; transform-origin: 40.425px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e        where:  \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"62\" height=\"18\" style=\"vertical-align: baseline;width: 62px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAAkCAYAAABLw14kAAAC50lEQVR4nO2a7ZGDIBCG3x7swAZswAqsIB3YQTqwhdSQEuwhLViDLeR+wA4rB56woLnMPjPMmPOyfLzLskAARVEURVEURVGUT6AHcLNF+VJaAE8AK4C3LfdLW6QcYgDQCL5/hxO8L9IipQo3AAuMUJ3AzgQnuPKBcKHfMGG5FdgjW09504rQQNafryEktDQEt8zeKLQlpYFZXtYPaMul1BCaGJldybIggQtNbRkuasufdDCDz5OmHvKQRINQS2jiaW0v3t97lOnHHiGhpwp1kkbZdnlDn/Z5xjb5yZ0toUGoITRB9TzsZ79uEkGyC/BpA/WUFrqHGbfF1kXaJPelQzgzbuAav2Y08GyhYW3zEPoA8LLPg30uub63tg7fmUoK3cBFLX6mwHOVw4dLHZwgoRlMBh+Bd3uM2Ao945z9MI9IE35n6XyQZkE9ZwgNGLHJSX0HvSHRebnYIQ/hMzz1ePKsAfGhwVntcwhqT+z9Hmf3a0bcOSmCHo5UNDixjg9wncpd785KYoDt7H1H6uBOnLJHv8KB+QwW7za4sdh2gTqYMxN8zhCe92mK/A934pQ1fMB2d7Gg/jaL6pMsPb+M+VsXgs+W2ODlEBO+xH6ZEpvY7Aa2szQH//yglvAdCo7/EWN8YGokW6E9+QyZ8OREsVDNnVh6g1ZbeH54JLb7lzG+tZGs30fxBy9HeO7EsQRzLwHKpZbw/LZPbG/PGGXuFB5p/b6h/lmwP3gpovM+hcI5vV9Qx4F7OIcqITzPR2IO3O2828ATFx7Sexix+UHMBCdE7ZlOUH0pgvMDFb+dFNFegXelKSU8X35CSxRpdTjp5TPpZQuJDfZuxblic1IyeC44fa+DG/yzb6pCwqcuUzxq3eHuAuj0MEmTBmb2zjAe5IeG0b4bUw1fCB2lzrY8YPp1ZftJoFyno+/zPn3krRvd5kjKf3G0I7T48p9a8XCWW666y1YyoOVCUvQnQYqiKIqiKIqifAk/IsB4nRPGszsAAAAASUVORK5CYII=\" data-image-state=\"image-loaded\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 96.6667px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 48.3333px; text-align: left; transform-origin: 310px 48.3333px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 41.6167px 7.91667px; transform-origin: 41.6167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe smallest \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 37.725px 7.91667px; transform-origin: 37.725px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is the triple \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"48\" height=\"18\" style=\"vertical-align: baseline;width: 48px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACsklEQVRoge2a0ZGDIBRFTw92YAM2kApSQTqwAztIC9awJdhDWrCGtJD9wDcSFQTDI+4OZ4afDAJ5Fy48FAqFQuH0dI5y+eag/gAX3LGL5gU8gGFRbilG+o+5sY7ZAxPPaF6UWZ+KC5lEqKb6W+UK3I8MwkPj6a8H6g/b9/2frVJ52somQjc94yopV1UFPD19DQn6uHnaX5YnftGziJAjKDY5BBcfDyl7/y+LCB0w4l+SqRDBW8U+JGh7h5B7YL0sIjxJ7/kuWvaX/6f0hIk8Bo5FXQTxzhazWWozYqxibzP8hJBjeEO41aqLMLLepHp0BNnaLB/T7zms0EasKCQJUxVh7wTRkzY4S8GX4ufMa2QsIbaovhLqqV4L/LB9ckgphJ13bIlyTdiXC7GiR2D9bHmCULMW49C9SSA33o/HT/StKcaK4AsiCLZVaQem4v1cryk6xFkRfFEEmGdMjnuomnlFpE4ObWKtCL4sQs0sgmZyJfTMK0+LWCuCL4sAs03kEOGKvgixVgQnEGEgLLVPgfzZUbn9GCuyn4sm9UrQvGYQZCX0Su2L3cVu/KfYE2JnzlEkSFq5gmz8sRNKVYRmp44EZatOhdknOsKuOOQliysAIrjrZCTvfo9eccgqO2J1aiK0zCefkXUgJU9wLV0RSMqeEHZC1vEeSMkTHo527FPaC5NMxiLjPXJbrCaCNLy8K+ows3HEbwvLrHrPxwfe649TX3fmS0PXDG9YjzXWUmQSHLFoVTuqMUGwvyyQJb9HgxFiYA7iHjfrmYFZ9JCAyuQ4clBopmePrCA4wekohJyf0lzQO8L6+jy1CA35Xo2Cmc05EkebU4vQ4N5MNejJ9xrW5iMRWtbf16RKuipMQHIkcWDsLoflyfsVu8hJMhrXGyzta+K/ju9znEKhUCgUCmfnFzTbYsvcMy9LAAAAAElFTkSuQmCC\" 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: 18.275px 7.91667px; transform-origin: 18.275px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, with \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"100\" height=\"19\" style=\"vertical-align: baseline;width: 100px;height: 19px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMkAAAAmCAYAAABu1L9SAAAD6ElEQVR4nO2c7ZGjMAyG3x7SAQ3QABWkAjpIB3SQFqghJdBDWqCGtLD3w7yDz3zYAdlgomdGczO7XGJblixLYgFFURRFURRFURRFUX6KO4AOwN8gHYDy0BGloQTwAvCBmXcPsxZX5Fd1LEIN4D38e4fZNFzI6sBxxaaEMYoHzDyfGOfdHDiuGPyqjsXoARTOz7iIr/TDScYL01PjATPvT/rhROVXdTyhhPEKIcJjlh7U5Q6zgO+4QxanwPKcHzCelHQAbs7/v2H0sO7vzsaavluMRnFFHW/WTY9RwT6ZWzSbCnl6GTvmduWDsMXl3eTMRnLDeI+aky7gM3LTcQFj/H/YeJeiVwgVXxxaD889tgzmIKj0JQm5ZxTIY+M02KdfIB8d3zAaB2WTkXSDuHGn+2X0kj5amGP4zN7UpcP+zV3DeOgzZ314iuzd3Dno+A7jEO4wY91sJAXCwgN6Dl+oRW+aU9ajhBnz3vRtD9nM1i7Pt8ADxkjWHKKPHHVsn56bjCRkssxm+J7tcP4j2IXHcYXtm6cZPkfSs8Ywkh7Gq1bYPtYcdbzLSEJgqOW7vD7hP2nOBr2iLTwRQg2GhTbp0ENaqYwGbGH9I3TsOeoYSGAkXNzW84y0J02Be6lzxecxS/jvc1uRVupaBvODsIRMjjoGEhgJQ62lmL3Gct1gzbDcZ0PrNGuyZbOyZtDg/wueL+XNqvvcd0psphhKrWD0+MS80cTU8ZFENRJfqMX0cTsMxJZvepl8KdhQkYiVK0yNxfWyBcyadJjOu4NMSBLV8w0wI7dWD5LS8ZFENZK1UKvEelHqm6Iaw5a9IqkwOxSzC2w3zJ84u3PxDimMBJjOx87QSer4SKIaiS/UujrcPKEV92/wtQJRqbXnOQl4MroOQQqJcHrP5o5mJKFZrStjZ4SkPdBaG0yoSDZT8uSM0aApEU7vKfZGM5KQrNbVsZsWpY3kifXQkd/7XnlGsgWGd48YRiIRTu8p1EYzEioqRah1ZHbLBxc3xmeHfG+qNhd6+5DWo9yIYiQssqUKtc6U3bL5pmdNmtRGYmexrkYUI+ELRKkW7IzZLSC8Zy0GqY2Ed5IrJmmiGAmzOrXvwczxZU16LBcMYyOpVIazS/Ng5BAjs3UGxI3EDrWO2BypsN/VfmE61xZmDY7yrJJKtWsdDf4PoVkneQt91xkRNxKGWlf1KsR9+egDE1axknz0XwSRVKqbbmYT5xNm3rn2ZIXA10HmiqWbYWryirGpC9/ptlOqDc7xroR0DF3DzI9zZZvJVaOFAstp9hb5tfsrM7A/6qqbWFEURVEURVEURVEURVEURVEURTkZ/wCi5zysuW8z8wAAAABJRU5ErkJggg==\" 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: 101.508px 7.91667px; transform-origin: 101.508px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and perimeter (the sum of the 3 elements)\u003c/span\u003e\u003c/span\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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e  \u003c/span\u003e\u003c/span\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: 7.775px 7.91667px; transform-origin: 7.775px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eof \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"18\" height=\"18\" style=\"vertical-align: baseline;width: 18px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6UlEQVRYhe2WQQ3DMAxFP4cwCIESGIIiKIMxKINSKIZBKIdRKIZR6A6ztWiHxkm+qkjzl6xenOQpL5UMeDyevhIBhEzPAOBmrKEFZAVwGDbZpc9SSylISEC0zoDGApgDn1syZwQwy/dpBNqk4klPkH32EpjfzAagKIfk3tiESl01QBYFD1ToqgGyRHW9kL/JS4BU19oCwwRSXWMPQDRdLCCaLhYQTRcDiKqLAUTVxQDaQNTVChRB1tUKdAdZVyuQTgpTD0CprrORpCg6VijQXLBWdW0skAXfoSutVQ7LRdfT/i6Px+P5u7wB3c96XQFb71kAAAAASUVORK5CYII=\" 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: 91.4083px 7.91667px; transform-origin: 91.4083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Some researchers consider \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"48\" height=\"18\" style=\"vertical-align: baseline;width: 48px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACcklEQVRoge2aXZWDMBBGrwcc1AAGUFAFOKgDHNRCNSABD1hYDbWw+zCdQ0qbPxpSFvKdM08tnXRuMhkmgaKioqLNq7NY881B/QM12GMXrV9gBIaZtSlGumO1vMZsROIZrV/KrE+lhi9BqD94NlTNw3L4Ohn+qshns0NogR+gX+I0QBVwQ8Zn2h24rODvjPyfub8BAROibBDmg10DwgkJ9jwgpl0T+rt6fN0JA5EFwhWZhRfWhTAgoM3ioOZ1ZZwT+NLA3ZgCXTGtdPU1RvxWtJamo7UgnJGZZ8v/XWLfIwLgnSqeV6RvT9oNhB53zq94ThOfqEZmu2sDNlOVby/aDQQzLdg0kAbCmfDAHgpCiBTCkMGXCcEXp0NB0A1zjVJ1rvbhy5e24EAQTkxBCa3fP5FWZCE9ocNA0OooxyrQ6ihkFcBBIGhQcuwFMAEPjc8hIPRIXR/b01miGvl/Md3k3UO4IGkhRxOveviKbY3sGoK2EHIBGFnWm9othP8CAHYKQTu2LgA16UrVEACupuFmIVRIPu+Im801Ugm5xqYz14SgZ78tcRv4DX/V1WJv9qnvTUKYt59DQCiAEftheoesEjNw+iIXu0p1jFeHL/2OK1ZZIZjtZN+ba89zYFwzCSYArkMW25lC/eZzX6p6d3pnM9+ZQhYILRLU+S2DAXu6qY1n7vgh2H7/nfW8ppyO55sPLgjnCF8hN1C+dtAfo5xXaRpklebU5iGEHKCklO9waA1tGkKNpIcctT5Iykt5ESBUH0G4MN21UUtVe1dIQHK0nUHSXY6UZ95PUtMLENGyVQKL7lQeSGaFOLeioqKioqKiresPwN5Zrqu1TD0AAAAASUVORK5CYII=\" 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: 50.5583px 7.91667px; transform-origin: 50.5583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e as the smallest \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 70.7917px 7.91667px; transform-origin: 70.7917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, but here, we will only look at \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 243.942px 7.91667px; transform-origin: 243.942px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's where the hypotenuse is \"strictly\" greater than the other shorter sides. Other examples of \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 18.8333px 7.91667px; transform-origin: 18.8333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's are \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"56\" height=\"18\" style=\"vertical-align: baseline;width: 56px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAlCAYAAACao20PAAADbklEQVR4nO2a3bGDIBCFTw92kAZswAqswA7SQTpIC9ZgCfaQFlKDLXgfcIcNEViE1cwdvhke7o3KyuHnLAhUKpVKRYGHp3RXBvXP6eBv92RWAC8As1OGEpFWdhnw3d4vGC2SWVFH2y/Q4UQBb9s9HYDmSKWJtCfXx+tNIaddThGwgxnqE8x8PW73TzDBl+S2PX+BXR/o71mhPs4A4A3zXhL67frVKSlxqgt43669O/9vYQPujwSwQwsrlNuT6bcF5UV0hZAI+MS3cLxI41QVsGfB7E0Nj8jvqVAj+joEdaaxQF3Ec3suPVsiIDX6CCtSAzuC6TkvQf2qAlIwvhe6wQb7PBIEg49o3xpEL7tk1uVDKuAL/k7UwMQXexdCTUDeoO70ySGRc0chvUhoBNI174x6QkgEbLf6Q+/Kp9dQ2wGKAvIpJRTEDHlvC9Hgc+rZayBqmNzR7kMiYA+5KJcKSOtbLIhReJ0E/izXyJCJeUPPiaaYmBBcwNgydYqAoR4vFVpCA7szQdNyB9PrFxiBNfPBUgIOsFN9LF41AXkvCrmpkgIC3yKSkKVSlRClBKSZRLLHqepCJW6q5BRK+ETMWWMllBCQXKhk9AHKAnIjE0quSyf0NKqfzvNL1rFHCQEp9pRdLtWdGG6Jl+3vB+xOOk9cS5gLGtEk1A2fTjelcVLJFZBSr5QTnVP2QltY0WYYEQd8W/9cqPfuNSCfqq/MA300MHGlpjinnka4lDYwNF36pskJuqPwqIC0Zh/JTy8TkG8Z+RLvFLjr9ZkV6e7QUY4ImCMecKGAfDSUcIcSAYHfE1AiXsh4XSIgd6e+4JrtugfkAtOI9pkAvua6hom+N6G1+QipAo4wniDEgPDpyekCkiuNJdfcdEhHKa2pvimZOo7bwPxUJMdFptxP70eufK/QNZINk0PBpgjYwtr5CXFB+BS7Qn6GRx3k5dRxh+k0E/bz0dUpqSkNN2Sx/Va3c4ZKzJ2rCtjCNNwMmwOmpB4TuzflEPaGz7RlRvyTR56bpgg4sDjdsjf9955rfSWWE6oKOGwB55qUMz9X7KCXJ2pwaR4oQXIAWpIJOg5Vi58WsMX3WqbJCL3DXi2yBLzDfs9IpdRhaQPTmJqfAXIG/P5X5fz7USrkrJPxuaZD3+lXRHCn65ZKpVKpVCqV/8Mf0OnMkPT9w/AAAAAASUVORK5CYII=\" 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: 17.5px 7.91667px; transform-origin: 17.5px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"71\" height=\"18\" style=\"vertical-align: baseline;width: 71px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEK0lEQVR4nO1bW5HrMAw9HMKgBEKgCIogDMqgDEIhGAohHEqhGEph74dzJkpqx7KV1+71mfHH7liJIh3rYbtAQUFBQUHBr8UjMK5HKlWwCa4I+zsZPwBeAPrZaNbQtOBUaPDt5xccB5LxgxJd/mdcsSNxqkEmh3AWWStquLDcDeOWIEu9q5V0kXbQjKX3XpTzfNiFODeMoU2OFnGFLbIWVHBkeQ/ve8AZOhXUvV5JrwbftgiND/w63zB+lxx9YL4PmxOHH9rDGb/FVOl+I1kLavGeFGPO8cCo61rE8S2i0PDZp43IhMg2x6bEucI5wBfaO4zK+p5jkbVArmhLVKNh1yQOnxlrQNrAPMp3GMlRDfPkgnwl6JIMjdN6hA12wajofWXZXEhn98gnTQW3cp9YlzgddN/7hj9yvIZn+ECdtfpuRhwyOfaMH3xHFYtsLqThtOE6hCcc8SQR1yCOZqujhj9NMf0uLQaZxmIE3bWrkmDUiH3M2rIhyPTXGp5zh9OLHcvaNU4MdP58c+4GPRlOTRwWjjkRwyLrQ4VpPcJoU8N9ozb61HDRinY5gjisVXIiptRXU7/uTpwGzsA5jrfIhnDHaLA3HDFlvuf/Y6vwhWm02ps4TFOa4tYHNgaaSL4rcWpMC8YP9MWtRTYG+Vx2HTe475t3HKE01sI5TBp8b+KE0pQWTNca+d2I08IVbL6Np1hNYZHVQO6N+MhYzebMo90VjshzcuxNHEuaYnOgrRsPSVUXfK9yrWEtsiFoNr9uYp7sWGhwH+H2JI41TbFu1Pr0sOIYmLZ/qeHVIjuHJI52Hlflcxg+7EkcS5oi6VJuNhxKHNnNhIy/hewccv9mCT2mRLhjLNR9B4yy6G7E/7c4Y8tNU9Ugm5ryDyUOMDojx/kWWd9zZCRZmkfiyL9TxtrRh05MTVOs3XLqxNMQJ6dDsshKyLS35NQ5wVi0h4YsqOWlN8uutA8p3RBhIQ1wAuKEzlW2lpVgjo/leaYD7creq8Zhqk2xg4Y0S3tlhxKHL7eESp9sBReFHtA7jNEhRApZU2mLSA1xeJ+3QV7tw27vnSDTIX4lpUH4QBTYkDgXjCvBdz2B2/O+U2iLLDA9d9KudulkHzHYrqbcAYoRR57y59Zq/Fbt4pPzQxfQOWfJv5sSRxrlI5TtsLyFb5EF/DvBGvA4g+QhKdkdPZEWFWLEkSmSIzXtUl9N9J8vqKURS8ebX+RiWOzhDP+A7pzJIsvjiR7OsFriAGOaozxvH+akZXZeSwXxA9NCOoU4fL4mUt2wXMin/lrl8OJ4a/yWn+zwxuNvwZ8mjuby0lnwxLq3GbfGnyVODRf+97oHY0GHdQ5r94SJOHd8b7OvvbmVA27OnUGXGBqcP5XK31/Nj1OSEarGrQeOBeeD/JnPfBQUFBQUFBQUFBQULOEfKW5XzxL1fJoAAAAASUVORK5CYII=\" 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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 71.75px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 35.875px; text-align: left; transform-origin: 310px 35.875px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 269.142px 7.91667px; transform-origin: 269.142px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eUnfortunately, unlike Pythagorean Triples, a 'closed formula' for generating all possible \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 21.9417px 7.91667px; transform-origin: 21.9417px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's, has not yet been discovered, at the time of this writing. For this exercise, we will be dealing with \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 6.775px 7.91667px; transform-origin: 6.775px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e's with a known ratio between the hypotenuse and the shortest side: \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"50\" height=\"18\" style=\"vertical-align: baseline;width: 50px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAlCAYAAAC05kydAAACWElEQVRoge2abdGDMAzH/x5wMAMYmAIU4AAHc4CFaUACHrCAhlng+ZDmGjh4SICjsOV3x4eVsaYkzVsHOI7jOD9ClVoAJ1IC+KQWwok0AOrUQjhEBmAAkKcWxCEqAH1qIZxIB+CVWgiHeIDc1SO1IA7xAu0Q5yL0oJTXuQA5yF1lqQV5Yuwz8zB2Z57hsrzcN6j+2DMfk1nmrwC0oO05IFpFFsZ5zJJpPA+49ub9Jcj/t0H2BlRta1sgHwCFYb4HSIkDqIjk+MNj5kq/Cw92IGV0GCvJUqkOB1xbrTMXa5FWWorfXsuaCtheILdWeox3QYEd6+FF1Bi3CvizJfVrD7i25P456MXMVdZsqZqquwnf18CKnioDIIPgOU3JAbcHWCF3TPUyRGXMKTMP42tuyNIqWdt1xcr9ReSDvVKYq7HZV08ooWuVPBANYMmd14hhwITczlt9d0q4orYmH3NoWyXynS1lTxyDzZ1iGbyP2B1nZ1mVkN+SGU3RtkqkASzFGunOTDJxAXTk7jg7y2qwbq0atK0SjQFIIzdxlHVJzs6yZL20RyE9dHXKmgG8xH1z/ODF3PmIUvrzJXdT4P+Og6VV8p8BcEE6jR/1yvwAxumuNu++ItJfz1m45pCJ6y0NnD1NvQrPk0/uq9swMt09yl2lQu70EmSNRRjXGBs/p0EG9QGx9cRdDlkQfmCIh9zHarUPXJwStHheUw1dtmZtlSD87htR4VN3xLvC2/cbeOPeLvur4Dh69yOGr0HbKnFOgmONcwH8XyUXo8I9jxq+liOOih3HcX6BP7UvFJF5pfzWAAAAAElFTkSuQmCC\" 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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 95.6667px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 47.8333px; text-align: left; transform-origin: 310px 47.8333px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 62.2083px 7.91667px; transform-origin: 62.2083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eGiven the value of \u003c/span\u003e\u003c/span\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: 2.33333px 7.91667px; transform-origin: 2.33333px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003er\u003c/span\u003e\u003c/span\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: 85.925px 7.91667px; transform-origin: 85.925px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e, find the perimeter of the \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 30.3167px 7.91667px; transform-origin: 30.3167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e with the \u003c/span\u003e\u003c/span\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: 41.6167px 7.91667px; transform-origin: 41.6167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; text-decoration-line: underline; \"\u003er-th smallest\u003c/span\u003e\u003c/span\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: 37.3417px 7.91667px; transform-origin: 37.3417px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e perimeter. \u003c/span\u003e\u003c/span\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: 12.4417px 7.91667px; transform-origin: 12.4417px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eFor example for \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"35\" height=\"18\" style=\"vertical-align: baseline;width: 35px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABdUlEQVRoge2XbXWDQBBFrwccYAADKIiCOsABDrCAhkrAAxaiAQvtj+UV0oTsApsspXPPmR/54sy8zMzbBcMwDMMwjkUBlGMYIzUwAF+/ogGyhHklp+delHl0/FOBapwAFZMAOfed1CTJLiEZrvCPhc9LJnGGdyV1FCrg0/Od+cgVL8/oQNT4XUljt0ucEjerQpb415E4AyuWcoXb4lcmZbMxutl79YpEyggRu/VbXB2+8XuIZrLHCdNzK9iaLf/MTkNjUxFPUC2bpkDiNLjEJIZe5wu/e0QXIdZ0qg+51SbBZYUSp4+X1yHQ2ljzB/9wYRLnyrmsrsIt4c01aVm9YtZTUuBquux5yHzxxuiaI7hVgeuYXcJI3Zhdk9qtoggDbiaV0O6HjaR0qxy/MBmBlq6D3hkuZDqf+YRtWb6k3jxMXdPuTi0tEmbAibMUHYFXiLmFxxqpFEiY0H0WdNrXvaqLn+9bUUeExpnOcYZhGIZhGMZWvgF1o8SVzUIOYgAAAABJRU5ErkJggg==\" 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: 24.4917px 7.91667px; transform-origin: 24.4917px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, that is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"43\" height=\"18\" style=\"vertical-align: baseline;width: 43px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAkCAYAAAD8fqYDAAACEUlEQVRoge2YbZHDIBRFjwcc1EANVAEK6mAdxEEtREMlxEMsVEMt7P6AN7xkmwBpd/Mx78ww0w5pApfbmwdgGIZhGIZhJE7AJTa38lgOgwcewPeodQTBjYXc+C2qbk9M4EVcCAK2JAEdcGXo5H6V0e2cniDsKxzBtSLw+b8GdQTOBHfOvbh0ZHz9x6COgicvmMTGJsR1pFLmCGhxS+ckGugYkRKvGgc0hL9YGz/38XvNDc+khXmnfZIrQdhcfBCf3RFyuiFEShfbN3CvfbiPN3swLFda0lu2tBiXQbzTnrUTyCDzaDLXSTaPBVyc2XOrKmVMzWT1Si9t1e6YQaqFnGtlAV49uyGJW1wr57LIxxvvuXwRYeaiRoR9TPTfMv0vEWd+0ilb4kyY33XmGk8ymJ+4po/9t9IHSxzUvEH3hCOYJyeIGGxq93YiL/4v7upHnzw52kK14Ahi5YTVBptyd8sCnWRL+On99trVQqmwkDeYdm1XM4i/OsxYu1ooEVb+3jmDaaMU5y0Ms2bK7l/s65iuJe+wK+mQZ85gLUNne4JOdwriQWfJuNRysX/qpGmLyHxuhPLrVZNrJNOlCtBnvTL3O8NMPsXrizYR+iiuJ6zMhXQGOle+bA1tlFzTLtXiPUnbXjFVM+qv2p25+AOdd3uLAk9dno9N4wku7Qiu13M/xb6WY5arhmEYhmEYhmGswQ/bvA+w30MOtwAAAABJRU5ErkJggg==\" 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: 81.675px 7.91667px; transform-origin: 81.675px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, the smallest perimeter is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"18\" height=\"18\" style=\"vertical-align: baseline;width: 18px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAABLUlEQVRYhe2WUbHDIBBFjwccYKAGoiAK4qAOcBAL0RAJeKiFaoiFvg+WmX2dPEIC5fWDO7Nfu1lOLiwJdHV1fZcsYE4+M0jcaoMswCuzsQFm4Ak4iafEvQTEKJAYR0AWeMji726u0sPv5A41Et5slAVygWKt28kZYEvks+UygaaMOu34aZfOAsUt2RI1GvqyS7lAcTtSQIPqtX4aKNakgGxmXVWgo/PRDMiruvEbgO4cn4+mW2YIF2LKJT32j08DIXkN5eX5meDIqnJLCyAITk2yoBcIR9iumbxzVhUoBRrvqr1vXXMg3Wcq6FMF6MbxBDYD0tN36dejJpCeurUGjOX3GJ/5QjvCId4o/FOMIDPB4vdY/ljAEEY53jle6opduSorAMN/QnR1dXWV6Ae9sZqCc2SAGwAAAABJRU5ErkJggg==\" 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: 12.05px 7.91667px; transform-origin: 12.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e for \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"48\" height=\"18\" style=\"vertical-align: baseline;width: 48px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAAC1UlEQVRoge1aW5HDMAxcDmEQAiFQBEUQBmEQBqUQDIEQDqVwGEqh9+HsxHXjWG5lO3fjndFPH7KitR6WA1RUVFScHqNHLiWN+gO4wO+7aDwB3AEsjvQalv5j9Hj32R3Gn9F4ou56LVxQkIRuFS10MDZJRHNdAGi+0F2MhOuqY/5Ch4ufVadEbkpr9uu6M7bcfgfwADAIdRQhoYExUpMEkioVjVQ6rbquB99JyC5CwoLNGVoksMi1B79p1jV/FNbrsTUnPnCjHdkEFCBhhHECOwINEtpVZxP4HR2nkYpmhO3nZgulpawkdNb/aKAWCRJb6DiNVET7jyKBvwm17dlIaGB2Kw8lmiRI13/CpIhQxEhww5ZS95xsr3eadDTBOJ7ITQJT0aSkr8VroXeLMwuz5CSchYQrTBTY/XNuEpiK9jqZT0FiKRMMOTPM80rXSk5CCxOSbsjmJEE7FdlwieAzxayTnIQF+ykgJwnaqcin3z0MSolISgLb0T1jcpKQIhURHV4HmTYRC2REJCOB7ahvjpKLhJSpqFv12s4esB3SSEQISUhgOzrBP0DjYW2xPtMeqgHpUpE9enHt7vBKRJFzApXGSoqoYMRpp6IBx4c1ZgJJNCQhocP7xYUr3CkP67OPbpcOwF4+RSqSpFPWokdAV7FRdo6awN2aoiuS2D/ij5PQwDhxxOe1gnVHcuXKu98esqghwUcTWY42QpvgtCTw2E+JJcJORaHZjTuCkESnXZh9syNeMoVsPy0JzKf2SCAG3KmSFtEuopQQcfwfHT1gi6AWW92TNATFSLjhuBh3METwYWJJoH5pVzTi9c0HCQlEj21AyQmBTUoIRS/6pcj5Ks0FOjdvsWuemgSGvHaL6cMM+QW9Fk5NAucyKU7Se5ig9xZGDL4iYcD7OCImlx6hgXGIlr4QeuRJebyKtYVNRDR8owftU+9/Aw9we1JRUVFRUVFxdvwCuGJ2Vt22a+kAAAAASUVORK5CYII=\" 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: 57.9583px 7.91667px; transform-origin: 57.9583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, while the second (r-th) smallest perimeter is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"18\" height=\"18\" style=\"vertical-align: baseline;width: 18px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6klEQVRYhe2WUQ2DMBCGfw91UAMYmIIqwMEc4AAL1TAJ9TALaJgF9sBd0i2DXQ9u4+G+5MIDBT74QgBwHOc/dAAuwumE54wAglZoAjALZxSIZForlX8hNcjMWJ7SJ0IlwqMSKjRxY02gC0wr+xOAgbb3PUKRLvKtdQ9ZLpDYLqG1BDU3bOc6TEgC53pA9taYC3GuLFxvLsS50hmEWnOZC7XmMhdqzWUqpMllKqTJZSpU0J7LTChCl8tM6ApdLjMh/mL3ZxCqc239kvxMiHMVxbH8O8NCwxFCI8m0vF2xOu59MpabdBzHcSQ8AUZlel3qgGXQAAAAAElFTkSuQmCC\" 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: 25.6583px 7.91667px; transform-origin: 25.6583px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, for the \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 53.6833px 7.91667px; transform-origin: 53.6833px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e with dimensions \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"71\" height=\"18\" style=\"vertical-align: baseline;width: 71px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEa0lEQVR4nO1bbZHrMAxcDmFQAiEQBEUQBmVQBqUQDIUQDqVQDKXQ98PRZOvKsp2vJve8M565mUtsWVpLsqICBQUFBQUFh8U1MJpfClWwChqE7Z2NN4AHgN4b7RKSFuwKLb7t/IDjQDbeKN7lf0aDHxGnzni2GtbSxhnAbYYcIcj8OXJqqOFcejeM88z5fLBupkDePU14b1PitACeAO4Z71yH9UJjKc9XwRnXn/8F4JI5zxVun+/h71zDxHDGGC543Ib1LZzg9vnCmKs84UJQ6kHZjDhnjIp8I504FdwGQ6TpM2SwcIqsI0aJoca4zx7LEwZwh0/mvw5ysW4tndRw+3zikyQVzZHiFTchzg3uxF6QTxw5DbFTNBf9sA4n9zW+PZCl1BZ5J38KmkFOTQ6WVbMNk0PzoEKGN+Kybx6qconzwjo5DOM8rBNy0xwqQ3Kz0nusR3QrnJxIBo0Yso8Xwp5QiBWzz66JIyf4gvlJqoU77Bymwme+o/3/hbhR5qJCvNxheUaR8WG8z17LIv+uicNxW4zSYXkSdYgbu0eYOKzstb2jBfE4Wmg/Y5SxM+bgdMIi6W6Jw/mCNjqsn/cwhDh+4sne6I2RgDWmXXPnQEKR5m043FrelUOuRbDdEgdwSm/gNnrHN3nWzCV8hJJKPqFPOAP5t7On8t7SaId1Q8k76y+VOFZI2zVxfJzwTaBJ30smrCsE8D2IL48U+RqMNas1w1jtyRCqOfXIJ44Wlv3nsvEL4gg4jL2wvtcRN68pnItw2v8r75klK8c3jGUE3xv7JGXixHLEP0scwCnGqlksBbkxhYpqrORQPsOJ6VIFSx+aN2aCMHEsfcVukILDEidWs1gKdziPEfJqKUr2n1vTQ/KB4jBeQhVBQsBaxLnguzTvg+s3FnJCxRywx2AdT7lVWTY6NHHEGGv0AEliGzMy13csT7IVcXgt1jHnhanEsZL5QxNHPM7StZJU0gCfocF6PpVgS0DWYoJwaLd0z57JSuQPSxxRhFVrmAL5im+RoMZnoU/2ZHk+ufksLW9oLS1ZF0I9jXfv9MwhPzlI5TUEKfOHvgJf4E5PTliQloPYreOBT6OI5wuRgvMOn1zSz9tiGU8kBtXCDIehkN5SLxy7JI5fjfWNL/E6VPzzWyFSyCOkeSDcmM0NTww2iOZ1xP3773H4SDlM3DOktW3IHqyKuoRWba2QnBo2JQ7HT60K6wvFoxvel4KXFX+1aq4FUbi/Zmhoa7c0B3sPOQR36Ib257byNZ9o0nIirampnzbkYDH5RM7UzzibEKeFU5zfKS8dbJpHOGGsjPKzKTcoKcP3GL+oWwjJpg2NAAIJkTxf7CdDchhSE/1m2A/Lc0V+RbrBp35vmXP8rFl9KxzlJzvS2XcU/GniSP/vlu0XUxFrJtsb/ixxajj3v3axbQl0+G0D2BTMIs4F379z2rJxKYQKzhB7kCWGFvsPpdIXxUOS6WyEbhxb9McUbAvrd20FBQUFBQUFBQUFBRb+AeqNb10z+oPdAAAAAElFTkSuQmCC\" 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: 16.325px 7.91667px; transform-origin: 16.325px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. For \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"35\" height=\"18\" style=\"vertical-align: baseline;width: 35px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABd0lEQVRoge2YX5GDMBCHPw84wAAGogAFdYADHNQCGiohHrBwGmqBewg7hOtw14WUpL39ZvahD8ns/rr/CBiGYRiGURY14IAmtyMl0QNfwBTZHehyOlUCA0GMgSDSQBBGROrzuZaXHvA8llEFjCwZVJ3sV3ZEgK3ALyzZ8+96UENovls4lsypT/HojZDMuR29yLFW969/5R3whAmmLqkuOix1Wc3m2dfpXQJL1RsGQmyHykk6ujS2kbVgV8VdUwI7WgJtFNM0x7K7AuSi6+yYiCG/Ncr7BLZ3J6kJ2eJZ7zhirfbCinWGjDsdKxHHYwapdp32x+FP3AVigVTlJWt3knFXKHECqL6z4sabImtKmlYxanEa0mdNCdPqN7+eFr6LDqk7+QY5p9UWNcuq8jSy6N0TO1MaPcoEiEf48CKnzkCa7dajlnxbaRbZVQdPVVI5iJ8kZB3pZ7sRSkkdn3xX+WRu5uNCEELikdfAT9zZDMMwDMMwjBR8AxS7vP5/0oaBAAAAAElFTkSuQmCC\" 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: 31.1083px 7.91667px; transform-origin: 31.1083px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, the third smallest perimeter is \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"33\" height=\"18\" style=\"vertical-align: baseline;width: 33px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAkCAYAAAA9+eyvAAACF0lEQVRoge1YUbXDIAy9HnCAgRqogil4DuagDmqhGiYBD7MwDbPw3gfJWcaAJoXuvA/uOfwMkhsukKQDBgYGBgYGzoIH4Iw2E4CZbK2YaUwHbFt4i/AANgC/yqAcrX+SDY8HBbdnu9LahcaDxvVEXpVj6XRPCAfgTsGsiBu5JT5KQXmyfeDz5rGPkJlr5a3iQs4uRKAVIiCKlwY74XVSoWDLPEtmzgn73HwLrxoLdELMiKdQAt+uZ2buR8Ehb6fccAuvCVohLqgnJ/Zzz8zxNa4FK8WSt6KF1wStEHvgk8klPb6+NSFmEUftBlh4TeghBL/xUrJj/zUhvHKdhdeEViE4o98qwcjsXgvYIoSG14SjQjjEdy3rekD+PQex5lLxqRHCwmvCESE4k8sNyk2kQV2x//41T8PKa0KPHJGeULpZh9hI1W6FLJ/aCrDHa0KvquHxXh1yzY8UIxD3Sutlp7h15FWjlxBA3FTNF7/vDVGIG/H7xLaWR47wqtBTCNkLWBMvn2ruW+Qs3jecIYS13ZUx/HyRtxhEqxDcJq8Gm0nwH012R3g/0FOIgHi1tX5kNWnpDq28WWiF4IRU+iOEy5820ckqUusOe/Nm4fFe0nL/BaSEaflb8Gp1tSeyIL7nJ/Y/lnryfoDLVciMrRCco9/l2pV+2+voHOKJcc8QyE7zFFp4/x08YuAzOn0gDQwMDAwMDAx8A39JRSsd5481owAAAABJRU5ErkJggg==\" 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: 12.05px 7.91667px; transform-origin: 12.05px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e for \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"32\" height=\"18\" style=\"vertical-align: baseline;width: 32px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\" 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: 1.94167px 7.91667px; transform-origin: 1.94167px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" width=\"101\" height=\"18\" style=\"vertical-align: baseline;width: 101px;height: 18px\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAAlCAYAAAADd3b/AAAFFElEQVR4nO1cbdXyMAy9HuYAAxhAAQpw8DjAARbQgAQ8YAENWOD9seUQSj+Spt0Gb+45/fHwLF0b7k3TrANwOBwOh8PhcKwAx0TbLTkoh6MBdkjzW40ngBuAa9AOLUbqcCyIAz55fcPIeTWe8NXD8f9ghxmFsplsdgCGinuS7abClmM7tR7Y4jXOsJ3xOfbc9WELx2yxbQlt3xYeWDnEoeHBLELZA7hPNrxdUSb9BiPBHnjliffJtubL30/3vlTYljBgHGc4Tz7fEDG/pNqpoW0LHKYxSH1p4YHFNtWfhgfdhXJC/gt8ID3R7fT/O95FMeDltL1izJzIPYRyRH6uob/2hetz9hZbK0LSSnxp4YHFNoYaHnQVCnXOU44Br0hEE71FbLkY/jJ9PyFfgq/QfbkakPNjY82NpxQRB4zjvTe0teCEcY5/kPvSwgOLbQo1POgqlBvGCcYQpilhGkXRORctyFGSyVLKRtWL1kL5gy6ybabxlER+wGfqZLFtCSnZLDyw2MZQy4NuQtmi/GXyJTWMxOSAXKQ4M/vcfbZsvBRNWguFnC/dZNKmtIQLPn1tsW0JiVAsPLByKDaWWh50E8oe5YHz9Ilfy/PvVDQB3pf/1PMbSuHoYVEPoVDk5u02fW6pzFDq9Kjox2IrhUQoVh7U2oaw8mDW8nDq5mFffFOcmzy3TwnqjPdqUw+h5KpPD9T7iQSYCxY9bKVotd9L8aClrZUHiwqFvsxweaWUQSOUWIpG1Rmeu/ZKvXbT/U6IC0dTnSOQH+a2laKVUFI8aGXbggeLCoX2GOEZGl6VkArlEfxvM30WpmS9hBLigPeNpjYFWnvaBbQTSooHLWxb8WAxoVDFIhYJuFBKlYyUUK6Ipx1zCQUY50XVFS0R1p52AW2EkuNBC9tWPFhMKLQPifXBhZK7x4C4UKgEGHPenEIBXhHtifiT+RTWnnYBbYSS44HVtiUPFhEKlelSlSpL6kV9p1aiuYUCvNKDcNVL4RvSLsAulBIPLLateTC7UKhMl3sIVlP1urC+z0gfDqRU6Mo+63lgEHiVu6VC+Ya0C7AJRcKDWtsePJhVKJSzl5zDn0tIhXIK/ta03qsLjUt6lISiXU3qZLHVotZ/Uh7U2vbgwWxC0ThnA9ng+cqzxxgRwhduwkb7hQf7rOrNNQVoRZFEeZp7Tepksa1BjVB6iwTow4PZhCKZII+CFBlzUfjCrtEejFxijyKJ8nTaoCZ1stjWoEYoWh60sg2xyj1K+FQ0hgPev+DSE1de8dKe2M05aJj6O0K2dxmQf5mMory04kW5c80GV2O7wzhHyzEbrVBqeNDCNobVCYWi6QnpF/bpmrA/OvAWmwylXZqSK1B2ED9omauaEPhDxSPeSUepwk3QD/CeOmlfRtLY8tTWsrpq7C08sNimsCqhhKTLtdQpYe4kIiGlGFfoo2HJQfz4jCSN4aVsSgOP03gfk710jHxeWmhsqXTKm1aYfH94L9hbeNCCQzGsRih7lDdU0l9v2WEkHl17Qn1Vh/pJbdy2GJ1HGz7JUn5gNvQk+Ag9+WhsNXPT2h7x/usi0rGGc+Utlq5aeNCSQyFKPAix6FmvtUPr/G/EDm3fgPxVuFASkLw09Au4QFcM+V/hQolgC/kG/JtxRr/XhH8NJqH84fNogPU3t5bGgJE83z6PEg74/bSyFvy3w6hRsUSNVOWh91Nuh6M3cj875XA4HA6Hw+FwOBwOh+MX8A+XjItEEg0W1AAAAABJRU5ErkJggg==\" 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: 3.88333px 7.91667px; transform-origin: 3.88333px 7.91667px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 21px; text-align: left; transform-origin: 310px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 305.717px 7.91667px; transform-origin: 305.717px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe output can be very large, so please present only the last 12 digits if the number of digits of the perimeter exceeds 12.\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 310px 21px; text-align: left; transform-origin: 310px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\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: 282.908px 7.91667px; transform-origin: 282.908px 7.91667px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eFinally, as with the original, the use of java, BigInteger, persistent, and global are not allowed.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function function perimeter = rthPerAPTdbl(r)\r\n  perimeter = r^2;\r\nend","test_suite":"%% Test Case 1\r\nr = 2;\r\np_correct = 71;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 2\r\nr = 3;\r\np_correct = 1393;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 3\r\nr = 5;\r\np_correct = 1046629;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 4\r\nr = 10;\r\np_correct = 737287485879;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 5\r\nr = 100;\r\np_correct = 16183149010201;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 6\r\nrs = 101:150;\r\nps = arrayfun(@(r) rthPerAPTdbl(r),rs);\r\nps = mod([sum(ps) ps(5:5:end) floor(std(double(ps)))],1e6);\r\nps_correct = [12636 824229 203679 227761 926641 15749 664839 210241 515881 139269 477199 789840];\r\nassert(isequal(ps,ps_correct))\r\n%% Test Case 7\r\nr = 1000;\r\np_correct = 499499001002001;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 8\r\nr = 10000;\r\np_correct = 100020001;\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 9\r\nr = 123456;\r\np_correct = uint64(76696064606196865);\r\nassert(isequal(rthPerAPTdbl(r),p_correct))\r\n%% Test Case 10: Forbid java and BigInteger\r\nfiletext = fileread('rthPerAPTdbl.m');\r\nnot_allowed = contains(filetext, 'persistent') || contains(filetext, 'global') || contains(filetext, 'BigInteger') || contains(filetext, 'java'); \r\nassert(~not_allowed)","published":true,"deleted":false,"likes_count":0,"comments_count":4,"created_by":2404920,"edited_by":2404920,"edited_at":"2026-03-04T15:24:47.000Z","deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2026-03-04T14:14:29.000Z","updated_at":"2026-04-20T11:04:36.000Z","published_at":"2026-03-04T15:24: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\u003eThis  is essentially the same as:  \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52834\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 52834. Easy Sequences 32: Almost Pythagorean Triples\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e; it even presents the same set of test problems.  The difference is that the \\\"correct\\\" solutions for larger cases of 52834 were the result of roundoff errors due to values being larger than flintmax('double').  This problem requires care to avoid such roundoff.\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eRepeating the original problem description:\\t\\t\\t\\t\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\u003eAn Almost Pythagorean Triple (abbreviated as \\\"APT'), is a set of 3 integers in which square of the largest element, which we will call as its 'hypotenuse', is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eless\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e than the sum of square of the smaller elements (shorter sides). This means that if \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ec\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the hypotenuse and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eb\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are the shorter sides, \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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, satisfies the following equation: \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\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"19\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"99\\\"/\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\u003e        where:  \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"62\\\"/\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=\\\"rId3\\\"/\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\u003eThe smallest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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 is the triple \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"48\\\"/\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=\\\"rId4\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"19\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"100\\\"/\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=\\\"rId5\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e and perimeter (the sum of the 3 elements)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e  \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eof \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"18\\\"/\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=\\\"rId6\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. Some researchers consider \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"48\\\"/\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=\\\"rId7\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e as the smallest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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, but here, we will only look at \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's where the hypotenuse is \\\"strictly\\\" greater than the other shorter sides. Other examples of \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's are \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"56\\\"/\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=\\\"rId8\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, and \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"71\\\"/\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=\\\"rId9\\\"/\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\u003eUnfortunately, unlike Pythagorean Triples, a 'closed formula' for generating all possible \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's, has not yet been discovered, at the time of this writing. For this exercise, we will be dealing with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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's with a known ratio between the hypotenuse and the shortest side: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"50\\\"/\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=\\\"rId10\\\"/\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGiven the value of \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e, find the perimeter of the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e with the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003er-th smallest\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e perimeter. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eFor example for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"35\\\"/\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=\\\"rId11\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, that is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"43\\\"/\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=\\\"rId12\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, the smallest perimeter is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"18\\\"/\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=\\\"rId13\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"48\\\"/\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=\\\"rId14\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, while the second (r-th) smallest perimeter is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"18\\\"/\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=\\\"rId15\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, for the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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 with dimensions \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"71\\\"/\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=\\\"rId16\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e. For \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"35\\\"/\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=\\\"rId17\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e, the third smallest perimeter is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"33\\\"/\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=\\\"rId18\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e for \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"32\\\"/\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\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"18\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"101\\\"/\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=\\\"rId19\\\"/\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\u003eThe output can be very large, so please present only the last 12 digits if the number of digits of the perimeter exceeds 12.\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFinally, as with the original, the use of java, BigInteger, persistent, and global are not allowed.\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\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image3.png\",\"relationshipId\":\"rId3\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image4.png\",\"relationshipId\":\"rId4\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image5.png\",\"relationshipId\":\"rId5\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image6.png\",\"relationshipId\":\"rId6\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image7.png\",\"relationshipId\":\"rId7\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image8.png\",\"relationshipId\":\"rId8\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image9.png\",\"relationshipId\":\"rId9\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image10.png\",\"relationshipId\":\"rId10\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image11.png\",\"relationshipId\":\"rId11\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image12.png\",\"relationshipId\":\"rId12\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image13.png\",\"relationshipId\":\"rId13\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image14.png\",\"relationshipId\":\"rId14\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image15.png\",\"relationshipId\":\"rId15\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image16.png\",\"relationshipId\":\"rId16\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image17.png\",\"relationshipId\":\"rId17\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image18.png\",\"relationshipId\":\"rId18\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image19.png\",\"relationshipId\":\"rId19\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAkCAYAAADWzlesAAACIklEQVRoge2YS5XDMAxFH4cwCIESCIJBEAZlEAalEAyFEA6hUAyh0FlUmr4o/sj5rMb3nCzq2LItS09OgUqlUqlUrqID0Dj7NtI/96TseW3stV9MD+Athj00MmaWcfxM8ujvWfraBd/NuBeNXah9ibS/ineZ2dBLDPeFYzusN8JObLF20oi1I57SPmDrILb5Y96N0v4oXGuSgSYsNfyD9YlZWsQ3tMjcKZtvbB3UBGwdwi5yLhz/oLHPSB+OBnVyl5iLbU6RPiHn7GbCNxU0z0qM8wbviTmso1TYcjZDkQKcmAqazzYaSioEj7tF+rETcou3Nr1CvZsXLYq97801rSg5pWZFzwlvTmNOZZBJ9NRVqVNhbVGVVuUPwWXQU9I8GnMKDT4O4M3uqRC5E+5Mn1i6MKxP3sPYxYitMnMYeirEDevc7fEVux7rKJnhc4DVJs+YXagY2rznTXkqBIf5gk/oTvSM0qdkI16NOcyEz8mE7uElFaJE8b14NOYw6ukp8nD+5irEFWWM9aD0+u5CxTB1at4KYa+1Z2A15tSvQ0XVP2XcWyGuKGOsMaVXdxequrncZWFKLeSKMsZRGLsqnzJBLsRYHGMV4qoyxnp0+lVZN+ZRW5uXbaDPFWUs9+l8iBu+HvY4wS7GhiX/+aJOCDmqhAbbf6eO2vyjw7YEDpEJOnkXKps6psf2QjRJ255y1ibmfMq7y78gK5VKpVKpVP4Nv14fLJbptxZTAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMcAAAAmCAYAAABwHY/hAAAEBElEQVR4nO2b7ZGCMBCG3x7ogAZogAqowA7sgA5swRoowR5swRpswfux7LAiASG7RHL7zGRu7vA0m+x3IuA4juM4juM4juM4zqGpAHQAngBeAB4AmqQz2ocCwBUk7wskf5t0Rnb8J1nVqEALdgZQA7iAFu+FvBevAHAHyVuD5GfncEs4Lwv+k6yqdPiMEmcM3iVXziBlkVQYHEO1+4zs+E+yqnIDeRZJgWHhxs9yoQNQTvz9DpL7CGllBZrnUoTPQVamwLQsu8K1R67GEeKG3/emsnaISY2OICtTgJzAExQJk1GCFq1LOYlEPHAMp1AjvjY8iqxsFCxvUuM49ZM5gkfRhJ3CKfVEvqDBoCz1hv8/gqwlqFY6gaLlTxjHA3l3qkJcQdFSy5O2sIvArCxbmybaslojI2Uy42hBC3eURdOiBhWomsWepXFwzbHlvS1ktSa5cTSY7l7lTglSNm1lsTIO2YZdqyhWslpjahxF/wGh/LQCGcbRFi0EyyvrphKf8hcgubfk7UtYGQefQ73wvl8VPmWWWMpqjbpxcPvrAUqVWlA4feB9gfiUfMow1qRYvDmxI4YapAB8PeLS/85tS6mofHI81edvEd+QsDKODkOrHaD5y9Yut3flflrLao2qcTQgBRkrPRdydwwHKk/QYrajccPnyeocrIAxI+ZUnq++jJVRXomRC8uOYiz3FTrppZVxsCzcyXn2P2sMhjP+XGtZrVEzjhPCh3jy4hl7kzllXeNRpJfeOrYqEhv91P+zkso0RLYGp4ZG6LYwDtnCveC7Pd5DVmtUjEO+yVSKwtcNfj2MroE3/xF4fll4vhVZx00Nntdt4XVr6jwZBVn5x8gIrhkRUqbMKsYR0+I7ItKThu4IcXRckyJ+g9ywmLFms2VtETrAY3m1L46mTJmjjYPTqVDUyBFWlnvgOZ8EzxnPVrjDFxoyvZl73bfzkrKE5JWXRrUdZKqUGVAwDlmMpSiw9u5WSWcQ8qIy3957TbRrDtnCDcmbq4OMNg6+nBXyKtbs3a1acgbS06b4Uo+2cbC8c2vE0Sq3LzFFG8dSyLVm727VkjOQxqpdb3yDtnGwvNeFzwsV6kcm2jhk/h1anDPyOQWfcwZ8sU7WGwX2vWynaRxSOaZSKvk8p04kE20cMr8eLxD3u0Ne54jIrgwbPMvZ4T3/LvvX79nT1zQO2cIdF/A1aA1y/ppBtHEUeE81mv5NT6Co8st397cglZ87Qk8MDqAdPd/7sMvKOHgfS/H3nG9Sc8SXXbhNshYgJZB5fE6p1JgGtFh81UXKWfbPrkjTudGuOSq813Ud8t5bYLjGNFWbtsjXIWRPDdrA3CK24ziO4ziO4ziO4ziO4ziO4ziOY8QfaJ4ygEB93kYAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image3.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAAAkCAYAAABLw14kAAAC50lEQVR4nO2a7ZGDIBCG3x7swAZswAqsIB3YQTqwhdSQEuwhLViDLeR+wA4rB56woLnMPjPMmPOyfLzLskAARVEURVEURVGUT6AHcLNF+VJaAE8AK4C3LfdLW6QcYgDQCL5/hxO8L9IipQo3AAuMUJ3AzgQnuPKBcKHfMGG5FdgjW09504rQQNafryEktDQEt8zeKLQlpYFZXtYPaMul1BCaGJldybIggQtNbRkuasufdDCDz5OmHvKQRINQS2jiaW0v3t97lOnHHiGhpwp1kkbZdnlDn/Z5xjb5yZ0toUGoITRB9TzsZ79uEkGyC/BpA/WUFrqHGbfF1kXaJPelQzgzbuAav2Y08GyhYW3zEPoA8LLPg30uub63tg7fmUoK3cBFLX6mwHOVw4dLHZwgoRlMBh+Bd3uM2Ao945z9MI9IE35n6XyQZkE9ZwgNGLHJSX0HvSHRebnYIQ/hMzz1ePKsAfGhwVntcwhqT+z9Hmf3a0bcOSmCHo5UNDixjg9wncpd785KYoDt7H1H6uBOnLJHv8KB+QwW7za4sdh2gTqYMxN8zhCe92mK/A934pQ1fMB2d7Gg/jaL6pMsPb+M+VsXgs+W2ODlEBO+xH6ZEpvY7Aa2szQH//yglvAdCo7/EWN8YGokW6E9+QyZ8OREsVDNnVh6g1ZbeH54JLb7lzG+tZGs30fxBy9HeO7EsQRzLwHKpZbw/LZPbG/PGGXuFB5p/b6h/lmwP3gpovM+hcI5vV9Qx4F7OIcqITzPR2IO3O2828ATFx7Sexix+UHMBCdE7ZlOUH0pgvMDFb+dFNFegXelKSU8X35CSxRpdTjp5TPpZQuJDfZuxblic1IyeC44fa+DG/yzb6pCwqcuUzxq3eHuAuj0MEmTBmb2zjAe5IeG0b4bUw1fCB2lzrY8YPp1ZftJoFyno+/zPn3krRvd5kjKf3G0I7T48p9a8XCWW666y1YyoOVCUvQnQYqiKIqiKIqifAk/IsB4nRPGszsAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image4.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACsklEQVRoge2a0ZGDIBRFTw92YAM2kApSQTqwAztIC9awJdhDWrCGtJD9wDcSFQTDI+4OZ4afDAJ5Fy48FAqFQuH0dI5y+eag/gAX3LGL5gU8gGFRbilG+o+5sY7ZAxPPaF6UWZ+KC5lEqKb6W+UK3I8MwkPj6a8H6g/b9/2frVJ52somQjc94yopV1UFPD19DQn6uHnaX5YnftGziJAjKDY5BBcfDyl7/y+LCB0w4l+SqRDBW8U+JGh7h5B7YL0sIjxJ7/kuWvaX/6f0hIk8Bo5FXQTxzhazWWozYqxibzP8hJBjeEO41aqLMLLepHp0BNnaLB/T7zms0EasKCQJUxVh7wTRkzY4S8GX4ufMa2QsIbaovhLqqV4L/LB9ckgphJ13bIlyTdiXC7GiR2D9bHmCULMW49C9SSA33o/HT/StKcaK4AsiCLZVaQem4v1cryk6xFkRfFEEmGdMjnuomnlFpE4ObWKtCL4sQs0sgmZyJfTMK0+LWCuCL4sAs03kEOGKvgixVgQnEGEgLLVPgfzZUbn9GCuyn4sm9UrQvGYQZCX0Su2L3cVu/KfYE2JnzlEkSFq5gmz8sRNKVYRmp44EZatOhdknOsKuOOQliysAIrjrZCTvfo9eccgqO2J1aiK0zCefkXUgJU9wLV0RSMqeEHZC1vEeSMkTHo527FPaC5NMxiLjPXJbrCaCNLy8K+ows3HEbwvLrHrPxwfe649TX3fmS0PXDG9YjzXWUmQSHLFoVTuqMUGwvyyQJb9HgxFiYA7iHjfrmYFZ9JCAyuQ4clBopmePrCA4wekohJyf0lzQO8L6+jy1CA35Xo2Cmc05EkebU4vQ4N5MNejJ9xrW5iMRWtbf16RKuipMQHIkcWDsLoflyfsVu8hJMhrXGyzta+K/ju9znEKhUCgUCmfnFzTbYsvcMy9LAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image5.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMkAAAAmCAYAAABu1L9SAAAD6ElEQVR4nO2c7ZGjMAyG3x7SAQ3QABWkAjpIB3SQFqghJdBDWqCGtLD3w7yDz3zYAdlgomdGczO7XGJblixLYgFFURRFURRFURRFUX6KO4AOwN8gHYDy0BGloQTwAvCBmXcPsxZX5Fd1LEIN4D38e4fZNFzI6sBxxaaEMYoHzDyfGOfdHDiuGPyqjsXoARTOz7iIr/TDScYL01PjATPvT/rhROVXdTyhhPEKIcJjlh7U5Q6zgO+4QxanwPKcHzCelHQAbs7/v2H0sO7vzsaavluMRnFFHW/WTY9RwT6ZWzSbCnl6GTvmduWDsMXl3eTMRnLDeI+aky7gM3LTcQFj/H/YeJeiVwgVXxxaD889tgzmIKj0JQm5ZxTIY+M02KdfIB8d3zAaB2WTkXSDuHGn+2X0kj5amGP4zN7UpcP+zV3DeOgzZ314iuzd3Dno+A7jEO4wY91sJAXCwgN6Dl+oRW+aU9ajhBnz3vRtD9nM1i7Pt8ADxkjWHKKPHHVsn56bjCRkssxm+J7tcP4j2IXHcYXtm6cZPkfSs8Ywkh7Gq1bYPtYcdbzLSEJgqOW7vD7hP2nOBr2iLTwRQg2GhTbp0ENaqYwGbGH9I3TsOeoYSGAkXNzW84y0J02Be6lzxecxS/jvc1uRVupaBvODsIRMjjoGEhgJQ62lmL3Gct1gzbDcZ0PrNGuyZbOyZtDg/wueL+XNqvvcd0psphhKrWD0+MS80cTU8ZFENRJfqMX0cTsMxJZvepl8KdhQkYiVK0yNxfWyBcyadJjOu4NMSBLV8w0wI7dWD5LS8ZFENZK1UKvEelHqm6Iaw5a9IqkwOxSzC2w3zJ84u3PxDimMBJjOx87QSer4SKIaiS/UujrcPKEV92/wtQJRqbXnOQl4MroOQQqJcHrP5o5mJKFZrStjZ4SkPdBaG0yoSDZT8uSM0aApEU7vKfZGM5KQrNbVsZsWpY3kifXQkd/7XnlGsgWGd48YRiIRTu8p1EYzEioqRah1ZHbLBxc3xmeHfG+qNhd6+5DWo9yIYiQssqUKtc6U3bL5pmdNmtRGYmexrkYUI+ELRKkW7IzZLSC8Zy0GqY2Ed5IrJmmiGAmzOrXvwczxZU16LBcMYyOpVIazS/Ng5BAjs3UGxI3EDrWO2BypsN/VfmE61xZmDY7yrJJKtWsdDf4PoVkneQt91xkRNxKGWlf1KsR9+egDE1axknz0XwSRVKqbbmYT5xNm3rn2ZIXA10HmiqWbYWryirGpC9/ptlOqDc7xroR0DF3DzI9zZZvJVaOFAstp9hb5tfsrM7A/6qqbWFEURVEURVEURVEURVEURVEURTkZ/wCi5zysuW8z8wAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image6.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6UlEQVRYhe2WQQ3DMAxFP4cwCIESGIIiKIMxKINSKIZBKIdRKIZR6A6ztWiHxkm+qkjzl6xenOQpL5UMeDyevhIBhEzPAOBmrKEFZAVwGDbZpc9SSylISEC0zoDGApgDn1syZwQwy/dpBNqk4klPkH32EpjfzAagKIfk3tiESl01QBYFD1ToqgGyRHW9kL/JS4BU19oCwwRSXWMPQDRdLCCaLhYQTRcDiKqLAUTVxQDaQNTVChRB1tUKdAdZVyuQTgpTD0CprrORpCg6VijQXLBWdW0skAXfoSutVQ7LRdfT/i6Px+P5u7wB3c96XQFb71kAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image7.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAACcklEQVRoge2aXZWDMBBGrwcc1AAGUFAFOKgDHNRCNSABD1hYDbWw+zCdQ0qbPxpSFvKdM08tnXRuMhkmgaKioqLNq7NY881B/QM12GMXrV9gBIaZtSlGumO1vMZsROIZrV/KrE+lhi9BqD94NlTNw3L4Ohn+qshns0NogR+gX+I0QBVwQ8Zn2h24rODvjPyfub8BAROibBDmg10DwgkJ9jwgpl0T+rt6fN0JA5EFwhWZhRfWhTAgoM3ioOZ1ZZwT+NLA3ZgCXTGtdPU1RvxWtJamo7UgnJGZZ8v/XWLfIwLgnSqeV6RvT9oNhB53zq94ThOfqEZmu2sDNlOVby/aDQQzLdg0kAbCmfDAHgpCiBTCkMGXCcEXp0NB0A1zjVJ1rvbhy5e24EAQTkxBCa3fP5FWZCE9ocNA0OooxyrQ6ihkFcBBIGhQcuwFMAEPjc8hIPRIXR/b01miGvl/Md3k3UO4IGkhRxOveviKbY3sGoK2EHIBGFnWm9othP8CAHYKQTu2LgA16UrVEACupuFmIVRIPu+Im801Ugm5xqYz14SgZ78tcRv4DX/V1WJv9qnvTUKYt59DQCiAEftheoesEjNw+iIXu0p1jFeHL/2OK1ZZIZjtZN+ba89zYFwzCSYArkMW25lC/eZzX6p6d3pnM9+ZQhYILRLU+S2DAXu6qY1n7vgh2H7/nfW8ppyO55sPLgjnCF8hN1C+dtAfo5xXaRpklebU5iGEHKCklO9waA1tGkKNpIcctT5Iykt5ESBUH0G4MN21UUtVe1dIQHK0nUHSXY6UZ95PUtMLENGyVQKL7lQeSGaFOLeioqKioqKiresPwN5Zrqu1TD0AAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image8.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAlCAYAAACao20PAAADbklEQVR4nO2a3bGDIBCFTw92kAZswAqswA7SQTpIC9ZgCfaQFlKDLXgfcIcNEViE1cwdvhke7o3KyuHnLAhUKpVKRYGHp3RXBvXP6eBv92RWAC8As1OGEpFWdhnw3d4vGC2SWVFH2y/Q4UQBb9s9HYDmSKWJtCfXx+tNIaddThGwgxnqE8x8PW73TzDBl+S2PX+BXR/o71mhPs4A4A3zXhL67frVKSlxqgt43669O/9vYQPujwSwQwsrlNuT6bcF5UV0hZAI+MS3cLxI41QVsGfB7E0Nj8jvqVAj+joEdaaxQF3Ec3suPVsiIDX6CCtSAzuC6TkvQf2qAlIwvhe6wQb7PBIEg49o3xpEL7tk1uVDKuAL/k7UwMQXexdCTUDeoO70ySGRc0chvUhoBNI174x6QkgEbLf6Q+/Kp9dQ2wGKAvIpJRTEDHlvC9Hgc+rZayBqmNzR7kMiYA+5KJcKSOtbLIhReJ0E/izXyJCJeUPPiaaYmBBcwNgydYqAoR4vFVpCA7szQdNyB9PrFxiBNfPBUgIOsFN9LF41AXkvCrmpkgIC3yKSkKVSlRClBKSZRLLHqepCJW6q5BRK+ETMWWMllBCQXKhk9AHKAnIjE0quSyf0NKqfzvNL1rFHCQEp9pRdLtWdGG6Jl+3vB+xOOk9cS5gLGtEk1A2fTjelcVLJFZBSr5QTnVP2QltY0WYYEQd8W/9cqPfuNSCfqq/MA300MHGlpjinnka4lDYwNF36pskJuqPwqIC0Zh/JTy8TkG8Z+RLvFLjr9ZkV6e7QUY4ImCMecKGAfDSUcIcSAYHfE1AiXsh4XSIgd6e+4JrtugfkAtOI9pkAvua6hom+N6G1+QipAo4wniDEgPDpyekCkiuNJdfcdEhHKa2pvimZOo7bwPxUJMdFptxP70eufK/QNZINk0PBpgjYwtr5CXFB+BS7Qn6GRx3k5dRxh+k0E/bz0dUpqSkNN2Sx/Va3c4ZKzJ2rCtjCNNwMmwOmpB4TuzflEPaGz7RlRvyTR56bpgg4sDjdsjf9955rfSWWE6oKOGwB55qUMz9X7KCXJ2pwaR4oQXIAWpIJOg5Vi58WsMX3WqbJCL3DXi2yBLzDfs9IpdRhaQPTmJqfAXIG/P5X5fz7USrkrJPxuaZD3+lXRHCn65ZKpVKpVCqV/8Mf0OnMkPT9w/AAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image9.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEK0lEQVR4nO1bW5HrMAw9HMKgBEKgCIogDMqgDEIhGAohHEqhGEph74dzJkpqx7KV1+71mfHH7liJIh3rYbtAQUFBQUHBr8UjMK5HKlWwCa4I+zsZPwBeAPrZaNbQtOBUaPDt5xccB5LxgxJd/mdcsSNxqkEmh3AWWStquLDcDeOWIEu9q5V0kXbQjKX3XpTzfNiFODeMoU2OFnGFLbIWVHBkeQ/ve8AZOhXUvV5JrwbftgiND/w63zB+lxx9YL4PmxOHH9rDGb/FVOl+I1kLavGeFGPO8cCo61rE8S2i0PDZp43IhMg2x6bEucI5wBfaO4zK+p5jkbVArmhLVKNh1yQOnxlrQNrAPMp3GMlRDfPkgnwl6JIMjdN6hA12wajofWXZXEhn98gnTQW3cp9YlzgddN/7hj9yvIZn+ECdtfpuRhwyOfaMH3xHFYtsLqThtOE6hCcc8SQR1yCOZqujhj9NMf0uLQaZxmIE3bWrkmDUiH3M2rIhyPTXGp5zh9OLHcvaNU4MdP58c+4GPRlOTRwWjjkRwyLrQ4VpPcJoU8N9ozb61HDRinY5gjisVXIiptRXU7/uTpwGzsA5jrfIhnDHaLA3HDFlvuf/Y6vwhWm02ps4TFOa4tYHNgaaSL4rcWpMC8YP9MWtRTYG+Vx2HTe475t3HKE01sI5TBp8b+KE0pQWTNca+d2I08IVbL6Np1hNYZHVQO6N+MhYzebMo90VjshzcuxNHEuaYnOgrRsPSVUXfK9yrWEtsiFoNr9uYp7sWGhwH+H2JI41TbFu1Pr0sOIYmLZ/qeHVIjuHJI52Hlflcxg+7EkcS5oi6VJuNhxKHNnNhIy/hewccv9mCT2mRLhjLNR9B4yy6G7E/7c4Y8tNU9Ugm5ryDyUOMDojx/kWWd9zZCRZmkfiyL9TxtrRh05MTVOs3XLqxNMQJ6dDsshKyLS35NQ5wVi0h4YsqOWlN8uutA8p3RBhIQ1wAuKEzlW2lpVgjo/leaYD7creq8Zhqk2xg4Y0S3tlhxKHL7eESp9sBReFHtA7jNEhRApZU2mLSA1xeJ+3QV7tw27vnSDTIX4lpUH4QBTYkDgXjCvBdz2B2/O+U2iLLDA9d9KudulkHzHYrqbcAYoRR57y59Zq/Fbt4pPzQxfQOWfJv5sSRxrlI5TtsLyFb5EF/DvBGvA4g+QhKdkdPZEWFWLEkSmSIzXtUl9N9J8vqKURS8ebX+RiWOzhDP+A7pzJIsvjiR7OsFriAGOaozxvH+akZXZeSwXxA9NCOoU4fL4mUt2wXMin/lrl8OJ4a/yWn+zwxuNvwZ8mjuby0lnwxLq3GbfGnyVODRf+97oHY0GHdQ5r94SJOHd8b7OvvbmVA27OnUGXGBqcP5XK31/Nj1OSEarGrQeOBeeD/JnPfBQUFBQUFBQUFBQULOEfKW5XzxL1fJoAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image10.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAlCAYAAAC05kydAAACWElEQVRoge2abdGDMAzH/x5wMAMYmAIU4AAHc4CFaUACHrCAhlng+ZDmGjh4SICjsOV3x4eVsaYkzVsHOI7jOD9ClVoAJ1IC+KQWwok0AOrUQjhEBmAAkKcWxCEqAH1qIZxIB+CVWgiHeIDc1SO1IA7xAu0Q5yL0oJTXuQA5yF1lqQV5Yuwz8zB2Z57hsrzcN6j+2DMfk1nmrwC0oO05IFpFFsZ5zJJpPA+49ub9Jcj/t0H2BlRta1sgHwCFYb4HSIkDqIjk+MNj5kq/Cw92IGV0GCvJUqkOB1xbrTMXa5FWWorfXsuaCtheILdWeox3QYEd6+FF1Bi3CvizJfVrD7i25P456MXMVdZsqZqquwnf18CKnioDIIPgOU3JAbcHWCF3TPUyRGXMKTMP42tuyNIqWdt1xcr9ReSDvVKYq7HZV08ooWuVPBANYMmd14hhwITczlt9d0q4orYmH3NoWyXynS1lTxyDzZ1iGbyP2B1nZ1mVkN+SGU3RtkqkASzFGunOTDJxAXTk7jg7y2qwbq0atK0SjQFIIzdxlHVJzs6yZL20RyE9dHXKmgG8xH1z/ODF3PmIUvrzJXdT4P+Og6VV8p8BcEE6jR/1yvwAxumuNu++ItJfz1m45pCJ6y0NnD1NvQrPk0/uq9swMt09yl2lQu70EmSNRRjXGBs/p0EG9QGx9cRdDlkQfmCIh9zHarUPXJwStHheUw1dtmZtlSD87htR4VN3xLvC2/cbeOPeLvur4Dh69yOGr0HbKnFOgmONcwH8XyUXo8I9jxq+liOOih3HcX6BP7UvFJF5pfzWAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image11.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABdUlEQVRoge2XbXWDQBBFrwccYAADKIiCOsABDrCAhkrAAxaiAQvtj+UV0oTsApsspXPPmR/54sy8zMzbBcMwDMMwjkUBlGMYIzUwAF+/ogGyhHklp+delHl0/FOBapwAFZMAOfed1CTJLiEZrvCPhc9LJnGGdyV1FCrg0/Od+cgVL8/oQNT4XUljt0ucEjerQpb415E4AyuWcoXb4lcmZbMxutl79YpEyggRu/VbXB2+8XuIZrLHCdNzK9iaLf/MTkNjUxFPUC2bpkDiNLjEJIZe5wu/e0QXIdZ0qg+51SbBZYUSp4+X1yHQ2ljzB/9wYRLnyrmsrsIt4c01aVm9YtZTUuBquux5yHzxxuiaI7hVgeuYXcJI3Zhdk9qtoggDbiaV0O6HjaR0qxy/MBmBlq6D3hkuZDqf+YRtWb6k3jxMXdPuTi0tEmbAibMUHYFXiLmFxxqpFEiY0H0WdNrXvaqLn+9bUUeExpnOcYZhGIZhGMZWvgF1o8SVzUIOYgAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image12.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAkCAYAAAD8fqYDAAACEUlEQVRoge2YbZHDIBRFjwcc1EANVAEK6mAdxEEtREMlxEMsVEMt7P6AN7xkmwBpd/Mx78ww0w5pApfbmwdgGIZhGIZhJE7AJTa38lgOgwcewPeodQTBjYXc+C2qbk9M4EVcCAK2JAEdcGXo5H6V0e2cniDsKxzBtSLw+b8GdQTOBHfOvbh0ZHz9x6COgicvmMTGJsR1pFLmCGhxS+ckGugYkRKvGgc0hL9YGz/38XvNDc+khXmnfZIrQdhcfBCf3RFyuiFEShfbN3CvfbiPN3swLFda0lu2tBiXQbzTnrUTyCDzaDLXSTaPBVyc2XOrKmVMzWT1Si9t1e6YQaqFnGtlAV49uyGJW1wr57LIxxvvuXwRYeaiRoR9TPTfMv0vEWd+0ilb4kyY33XmGk8ymJ+4po/9t9IHSxzUvEH3hCOYJyeIGGxq93YiL/4v7upHnzw52kK14Ahi5YTVBptyd8sCnWRL+On99trVQqmwkDeYdm1XM4i/OsxYu1ooEVb+3jmDaaMU5y0Ms2bK7l/s65iuJe+wK+mQZ85gLUNne4JOdwriQWfJuNRysX/qpGmLyHxuhPLrVZNrJNOlCtBnvTL3O8NMPsXrizYR+iiuJ6zMhXQGOle+bA1tlFzTLtXiPUnbXjFVM+qv2p25+AOdd3uLAk9dno9N4wku7Qiu13M/xb6WY5arhmEYhmEYhmGswQ/bvA+w30MOtwAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image13.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAABLUlEQVRYhe2WUbHDIBBFjwccYKAGoiAK4qAOcBAL0RAJeKiFaoiFvg+WmX2dPEIC5fWDO7Nfu1lOLiwJdHV1fZcsYE4+M0jcaoMswCuzsQFm4Ak4iafEvQTEKJAYR0AWeMji726u0sPv5A41Et5slAVygWKt28kZYEvks+UygaaMOu34aZfOAsUt2RI1GvqyS7lAcTtSQIPqtX4aKNakgGxmXVWgo/PRDMiruvEbgO4cn4+mW2YIF2LKJT32j08DIXkN5eX5meDIqnJLCyAITk2yoBcIR9iumbxzVhUoBRrvqr1vXXMg3Wcq6FMF6MbxBDYD0tN36dejJpCeurUGjOX3GJ/5QjvCId4o/FOMIDPB4vdY/ljAEEY53jle6opduSorAMN/QnR1dXWV6Ae9sZqCc2SAGwAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image14.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAlCAYAAABSz4fZAAAC1UlEQVRoge1aW5HDMAxcDmEQAiFQBEUQBmEQBqUQDIEQDqVwGEqh9+HsxHXjWG5lO3fjndFPH7KitR6WA1RUVFScHqNHLiWN+gO4wO+7aDwB3AEsjvQalv5j9Hj32R3Gn9F4ou56LVxQkIRuFS10MDZJRHNdAGi+0F2MhOuqY/5Ch4ufVadEbkpr9uu6M7bcfgfwADAIdRQhoYExUpMEkioVjVQ6rbquB99JyC5CwoLNGVoksMi1B79p1jV/FNbrsTUnPnCjHdkEFCBhhHECOwINEtpVZxP4HR2nkYpmhO3nZgulpawkdNb/aKAWCRJb6DiNVET7jyKBvwm17dlIaGB2Kw8lmiRI13/CpIhQxEhww5ZS95xsr3eadDTBOJ7ITQJT0aSkr8VroXeLMwuz5CSchYQrTBTY/XNuEpiK9jqZT0FiKRMMOTPM80rXSk5CCxOSbsjmJEE7FdlwieAzxayTnIQF+ykgJwnaqcin3z0MSolISgLb0T1jcpKQIhURHV4HmTYRC2REJCOB7ahvjpKLhJSpqFv12s4esB3SSEQISUhgOzrBP0DjYW2xPtMeqgHpUpE9enHt7vBKRJFzApXGSoqoYMRpp6IBx4c1ZgJJNCQhocP7xYUr3CkP67OPbpcOwF4+RSqSpFPWokdAV7FRdo6awN2aoiuS2D/ij5PQwDhxxOe1gnVHcuXKu98esqghwUcTWY42QpvgtCTw2E+JJcJORaHZjTuCkESnXZh9syNeMoVsPy0JzKf2SCAG3KmSFtEuopQQcfwfHT1gi6AWW92TNATFSLjhuBh3METwYWJJoH5pVzTi9c0HCQlEj21AyQmBTUoIRS/6pcj5Ks0FOjdvsWuemgSGvHaL6cMM+QW9Fk5NAucyKU7Se5ig9xZGDL4iYcD7OCImlx6hgXGIlr4QeuRJebyKtYVNRDR8owftU+9/Aw9we1JRUVFRUVFxdvwCuGJ2Vt22a+kAAAAASUVORK5CYII=\",\"relationship\":null},{\"partUri\":\"/media/image15.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAA6klEQVRYhe2WUQ2DMBCGfw91UAMYmIIqwMEc4AAL1TAJ9TALaJgF9sBd0i2DXQ9u4+G+5MIDBT74QgBwHOc/dAAuwumE54wAglZoAjALZxSIZForlX8hNcjMWJ7SJ0IlwqMSKjRxY02gC0wr+xOAgbb3PUKRLvKtdQ9ZLpDYLqG1BDU3bOc6TEgC53pA9taYC3GuLFxvLsS50hmEWnOZC7XmMhdqzWUqpMllKqTJZSpU0J7LTChCl8tM6ApdLjMh/mL3ZxCqc239kvxMiHMVxbH8O8NCwxFCI8m0vF2xOu59MpabdBzHcSQ8AUZlel3qgGXQAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image16.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAlCAYAAACUJtElAAAEa0lEQVR4nO1bbZHrMAxcDmFQAiEQBEUQBmVQBqUQDIUQDqVQDKXQ98PRZOvKsp2vJve8M565mUtsWVpLsqICBQUFBQUFh8U1MJpfClWwChqE7Z2NN4AHgN4b7RKSFuwKLb7t/IDjQDbeKN7lf0aDHxGnzni2GtbSxhnAbYYcIcj8OXJqqOFcejeM88z5fLBupkDePU14b1PitACeAO4Z71yH9UJjKc9XwRnXn/8F4JI5zxVun+/h71zDxHDGGC543Ib1LZzg9vnCmKs84UJQ6kHZjDhnjIp8I504FdwGQ6TpM2SwcIqsI0aJoca4zx7LEwZwh0/mvw5ysW4tndRw+3zikyQVzZHiFTchzg3uxF6QTxw5DbFTNBf9sA4n9zW+PZCl1BZ5J38KmkFOTQ6WVbMNk0PzoEKGN+Kybx6qconzwjo5DOM8rBNy0xwqQ3Kz0nusR3QrnJxIBo0Yso8Xwp5QiBWzz66JIyf4gvlJqoU77Bymwme+o/3/hbhR5qJCvNxheUaR8WG8z17LIv+uicNxW4zSYXkSdYgbu0eYOKzstb2jBfE4Wmg/Y5SxM+bgdMIi6W6Jw/mCNjqsn/cwhDh+4sne6I2RgDWmXXPnQEKR5m043FrelUOuRbDdEgdwSm/gNnrHN3nWzCV8hJJKPqFPOAP5t7On8t7SaId1Q8k76y+VOFZI2zVxfJzwTaBJ30smrCsE8D2IL48U+RqMNas1w1jtyRCqOfXIJ44Wlv3nsvEL4gg4jL2wvtcRN68pnItw2v8r75klK8c3jGUE3xv7JGXixHLEP0scwCnGqlksBbkxhYpqrORQPsOJ6VIFSx+aN2aCMHEsfcVukILDEidWs1gKdziPEfJqKUr2n1vTQ/KB4jBeQhVBQsBaxLnguzTvg+s3FnJCxRywx2AdT7lVWTY6NHHEGGv0AEliGzMy13csT7IVcXgt1jHnhanEsZL5QxNHPM7StZJU0gCfocF6PpVgS0DWYoJwaLd0z57JSuQPSxxRhFVrmAL5im+RoMZnoU/2ZHk+ufksLW9oLS1ZF0I9jXfv9MwhPzlI5TUEKfOHvgJf4E5PTliQloPYreOBT6OI5wuRgvMOn1zSz9tiGU8kBtXCDIehkN5SLxy7JI5fjfWNL/E6VPzzWyFSyCOkeSDcmM0NTww2iOZ1xP3773H4SDlM3DOktW3IHqyKuoRWba2QnBo2JQ7HT60K6wvFoxvel4KXFX+1aq4FUbi/Zmhoa7c0B3sPOQR36Ib257byNZ9o0nIirampnzbkYDH5RM7UzzibEKeFU5zfKS8dbJpHOGGsjPKzKTcoKcP3GL+oWwjJpg2NAAIJkTxf7CdDchhSE/1m2A/Lc0V+RbrBp35vmXP8rFl9KxzlJzvS2XcU/GniSP/vlu0XUxFrJtsb/ixxajj3v3axbQl0+G0D2BTMIs4F379z2rJxKYQKzhB7kCWGFvsPpdIXxUOS6WyEbhxb9McUbAvrd20FBQUFBQUFBQUFBRb+AeqNb10z+oPdAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image17.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEcAAAAkCAYAAADb0CfrAAABd0lEQVRoge2YX5GDMBCHPw84wAAGogAFdYADHNQCGiohHrBwGmqBewg7hOtw14WUpL39ZvahD8ns/rr/CBiGYRiGURY14IAmtyMl0QNfwBTZHehyOlUCA0GMgSDSQBBGROrzuZaXHvA8llEFjCwZVJ3sV3ZEgK3ALyzZ8+96UENovls4lsypT/HojZDMuR29yLFW969/5R3whAmmLqkuOix1Wc3m2dfpXQJL1RsGQmyHykk6ujS2kbVgV8VdUwI7WgJtFNM0x7K7AuSi6+yYiCG/Ncr7BLZ3J6kJ2eJZ7zhirfbCinWGjDsdKxHHYwapdp32x+FP3AVigVTlJWt3knFXKHECqL6z4sabImtKmlYxanEa0mdNCdPqN7+eFr6LDqk7+QY5p9UWNcuq8jSy6N0TO1MaPcoEiEf48CKnzkCa7dajlnxbaRbZVQdPVVI5iJ8kZB3pZ7sRSkkdn3xX+WRu5uNCEELikdfAT9zZDMMwDMMwjBR8AxS7vP5/0oaBAAAAAElFTkSuQmCC\",\"relationship\":null},{\"partUri\":\"/media/image18.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAkCAYAAAA9+eyvAAACF0lEQVRoge1YUbXDIAy9HnCAgRqogil4DuagDmqhGiYBD7MwDbPw3gfJWcaAJoXuvA/uOfwMkhsukKQDBgYGBgYGzoIH4Iw2E4CZbK2YaUwHbFt4i/AANgC/yqAcrX+SDY8HBbdnu9LahcaDxvVEXpVj6XRPCAfgTsGsiBu5JT5KQXmyfeDz5rGPkJlr5a3iQs4uRKAVIiCKlwY74XVSoWDLPEtmzgn73HwLrxoLdELMiKdQAt+uZ2buR8Ehb6fccAuvCVohLqgnJ/Zzz8zxNa4FK8WSt6KF1wStEHvgk8klPb6+NSFmEUftBlh4TeghBL/xUrJj/zUhvHKdhdeEViE4o98qwcjsXgvYIoSG14SjQjjEdy3rekD+PQex5lLxqRHCwmvCESE4k8sNyk2kQV2x//41T8PKa0KPHJGeULpZh9hI1W6FLJ/aCrDHa0KvquHxXh1yzY8UIxD3Sutlp7h15FWjlxBA3FTNF7/vDVGIG/H7xLaWR47wqtBTCNkLWBMvn2ruW+Qs3jecIYS13ZUx/HyRtxhEqxDcJq8Gm0nwH012R3g/0FOIgHi1tX5kNWnpDq28WWiF4IRU+iOEy5820ckqUusOe/Nm4fFe0nL/BaSEaflb8Gp1tSeyIL7nJ/Y/lnryfoDLVciMrRCco9/l2pV+2+voHOKJcc8QyE7zFFp4/x08YuAzOn0gDQwMDAwMDAx8A39JRSsd5481owAAAABJRU5ErkJggg==\",\"relationship\":null},{\"partUri\":\"/media/image19.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMoAAAAlCAYAAAADd3b/AAAFFElEQVR4nO1cbdXyMAy9HuYAAxhAAQpw8DjAARbQgAQ8YAENWOD9seUQSj+Spt0Gb+45/fHwLF0b7k3TrANwOBwOh8PhcKwAx0TbLTkoh6MBdkjzW40ngBuAa9AOLUbqcCyIAz55fcPIeTWe8NXD8f9ghxmFsplsdgCGinuS7abClmM7tR7Y4jXOsJ3xOfbc9WELx2yxbQlt3xYeWDnEoeHBLELZA7hPNrxdUSb9BiPBHnjliffJtubL30/3vlTYljBgHGc4Tz7fEDG/pNqpoW0LHKYxSH1p4YHFNtWfhgfdhXJC/gt8ID3R7fT/O95FMeDltL1izJzIPYRyRH6uob/2hetz9hZbK0LSSnxp4YHFNoYaHnQVCnXOU44Br0hEE71FbLkY/jJ9PyFfgq/QfbkakPNjY82NpxQRB4zjvTe0teCEcY5/kPvSwgOLbQo1POgqlBvGCcYQpilhGkXRORctyFGSyVLKRtWL1kL5gy6ybabxlER+wGfqZLFtCSnZLDyw2MZQy4NuQtmi/GXyJTWMxOSAXKQ4M/vcfbZsvBRNWguFnC/dZNKmtIQLPn1tsW0JiVAsPLByKDaWWh50E8oe5YHz9Ilfy/PvVDQB3pf/1PMbSuHoYVEPoVDk5u02fW6pzFDq9Kjox2IrhUQoVh7U2oaw8mDW8nDq5mFffFOcmzy3TwnqjPdqUw+h5KpPD9T7iQSYCxY9bKVotd9L8aClrZUHiwqFvsxweaWUQSOUWIpG1Rmeu/ZKvXbT/U6IC0dTnSOQH+a2laKVUFI8aGXbggeLCoX2GOEZGl6VkArlEfxvM30WpmS9hBLigPeNpjYFWnvaBbQTSooHLWxb8WAxoVDFIhYJuFBKlYyUUK6Ipx1zCQUY50XVFS0R1p52AW2EkuNBC9tWPFhMKLQPifXBhZK7x4C4UKgEGHPenEIBXhHtifiT+RTWnnYBbYSS44HVtiUPFhEKlelSlSpL6kV9p1aiuYUCvNKDcNVL4RvSLsAulBIPLLateTC7UKhMl3sIVlP1urC+z0gfDqRU6Mo+63lgEHiVu6VC+Ya0C7AJRcKDWtsePJhVKJSzl5zDn0tIhXIK/ta03qsLjUt6lISiXU3qZLHVotZ/Uh7U2vbgwWxC0ThnA9ng+cqzxxgRwhduwkb7hQf7rOrNNQVoRZFEeZp7Tepksa1BjVB6iwTow4PZhCKZII+CFBlzUfjCrtEejFxijyKJ8nTaoCZ1stjWoEYoWh60sg2xyj1K+FQ0hgPev+DSE1de8dKe2M05aJj6O0K2dxmQf5mMory04kW5c80GV2O7wzhHyzEbrVBqeNDCNobVCYWi6QnpF/bpmrA/OvAWmwylXZqSK1B2ED9omauaEPhDxSPeSUepwk3QD/CeOmlfRtLY8tTWsrpq7C08sNimsCqhhKTLtdQpYe4kIiGlGFfoo2HJQfz4jCSN4aVsSgOP03gfk710jHxeWmhsqXTKm1aYfH94L9hbeNCCQzGsRih7lDdU0l9v2WEkHl17Qn1Vh/pJbdy2GJ1HGz7JUn5gNvQk+Ag9+WhsNXPT2h7x/usi0rGGc+Utlq5aeNCSQyFKPAix6FmvtUPr/G/EDm3fgPxVuFASkLw09Au4QFcM+V/hQolgC/kG/JtxRr/XhH8NJqH84fNogPU3t5bGgJE83z6PEg74/bSyFvy3w6hRsUSNVOWh91Nuh6M3cj875XA4HA6Hw+FwOBwOh+MX8A+XjItEEg0W1AAAAABJRU5ErkJggg==\",\"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":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2023-08-09T13:28:37.000Z","updated_at":"2026-04-16T16:09:30.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":"difficulty_rating_bin:unrated","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":"difficulty_rating_bin:unrated","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"difficulty_rating_bin":[["difficulty_rating_bin:unrated","","","unrated",""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff650\u003e":null,"#\u003cMathWorks::Search::Field:0x00007effdf0ff5b0\u003e":["unrated"]},"filters":{"#\u003cMathWorks::Search::Field:0x00007effdf0fecf0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff8d0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007effdf0ff830\u003e":50,"#\u003cMathWorks::Search::Field:0x00007effdf0ff790\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007effdf0ff6f0\u003e":"difficulty_rating_bin:unrated"},"user_query":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff6f0\u003e":"difficulty_rating_bin:unrated"},"queried_facets":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff5b0\u003e":["unrated"]}},"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},"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":"difficulty_rating_bin:unrated","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"difficulty_rating_bin":[["difficulty_rating_bin:unrated","","","unrated",""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff650\u003e":null,"#\u003cMathWorks::Search::Field:0x00007effdf0ff5b0\u003e":["unrated"]},"filters":{"#\u003cMathWorks::Search::Field:0x00007effdf0fecf0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff8d0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007effdf0ff830\u003e":50,"#\u003cMathWorks::Search::Field:0x00007effdf0ff790\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007effdf0ff6f0\u003e":"difficulty_rating_bin:unrated"},"user_query":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff6f0\u003e":"difficulty_rating_bin:unrated"},"queried_facets":{"#\u003cMathWorks::Search::Field:0x00007effdf0ff5b0\u003e":["unrated"]}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":42355,"difficulty_rating":"unrated"},{"id":42774,"difficulty_rating":"unrated"},{"id":42765,"difficulty_rating":"unrated"},{"id":42341,"difficulty_rating":"unrated"},{"id":44784,"difficulty_rating":"unrated"},{"id":44832,"difficulty_rating":"unrated"},{"id":44545,"difficulty_rating":"unrated"},{"id":44655,"difficulty_rating":"unrated"},{"id":3074,"difficulty_rating":"unrated"},{"id":2122,"difficulty_rating":"unrated"},{"id":2103,"difficulty_rating":"unrated"},{"id":2226,"difficulty_rating":"unrated"},{"id":2242,"difficulty_rating":"unrated"},{"id":2291,"difficulty_rating":"unrated"},{"id":60761,"difficulty_rating":"unrated"},{"id":60768,"difficulty_rating":"unrated"},{"id":60799,"difficulty_rating":"unrated"},{"id":2646,"difficulty_rating":"unrated"},{"id":2647,"difficulty_rating":"unrated"},{"id":2697,"difficulty_rating":"unrated"},{"id":2737,"difficulty_rating":"unrated"},{"id":2191,"difficulty_rating":"unrated"},{"id":2192,"difficulty_rating":"unrated"},{"id":43648,"difficulty_rating":"unrated"},{"id":43676,"difficulty_rating":"unrated"},{"id":44692,"difficulty_rating":"unrated"},{"id":44734,"difficulty_rating":"unrated"},{"id":44718,"difficulty_rating":"unrated"},{"id":44720,"difficulty_rating":"unrated"},{"id":44724,"difficulty_rating":"unrated"},{"id":44727,"difficulty_rating":"unrated"},{"id":44723,"difficulty_rating":"unrated"},{"id":46053,"difficulty_rating":"unrated"},{"id":42685,"difficulty_rating":"unrated"},{"id":61269,"difficulty_rating":"unrated"},{"id":58842,"difficulty_rating":"unrated"}]}}