{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.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":"2025-12-14T00: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":2007,"title":"Swap two numbers","description":"Example \r\n\r\nInput:\r\n\r\n a = 10\r\n b = 20\r\n\r\nOutput\r\n\r\n a = 20\r\n b = 10\r\n","description_html":"\u003cp\u003eExample\u003c/p\u003e\u003cp\u003eInput:\u003c/p\u003e\u003cpre\u003e a = 10\r\n b = 20\u003c/pre\u003e\u003cp\u003eOutput\u003c/p\u003e\u003cpre\u003e a = 20\r\n b = 10\u003c/pre\u003e","function_template":"function [aOut,bOut] = swapit(aIn,bIn)\r\n  aOut = 0;\r\n  bOut = 0;\r\nend","test_suite":"%%\r\naIn = 10;\r\nbIn = 20;\r\naOut_correct = 20;\r\nbOut_correct = 10;\r\n[aOut,bOut] = swapit(aIn,bIn);\r\n\r\nassert(isequal(aOut, aOut_correct))\r\nassert(isequal(bOut, bOut_correct))\r\n\r\n%%\r\n\r\naIn = 0;\r\nbIn = -3;\r\naOut_correct = -3;\r\nbOut_correct = 0;\r\n[aOut,bOut] = swapit(aIn,bIn);\r\n\r\nassert(isequal(aOut, aOut_correct))\r\nassert(isequal(bOut, bOut_correct))\r\n","published":true,"deleted":false,"likes_count":5,"comments_count":3,"created_by":1388,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":778,"test_suite_updated_at":"2013-11-20T16:20:49.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-11-19T07:42:21.000Z","updated_at":"2026-03-19T08:08:41.000Z","published_at":"2013-11-19T07:42:21.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\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\u003eInput:\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 = 10\\n b = 20]]\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\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 = 20\\n b = 10]]\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":45467,"title":"Find the fastest reaction chain to reach a target compound","description":"This problem is related to Problem \u003c45470\u003e.\r\n\r\nLet's denote a list of *N* compounds as 1, 2, ..., *N*. You are then given a list of valid reactions for converting one compound to another (e.g. 1 --\u003e 2), as well as the time it takes to complete them ( _completion time_ ). With this information, we can generate _reaction chains_. A reaction chain is a series of valid reaction steps taken one after the other. Examples are given below:\r\n\r\n  Given N = 4 and the following valid reactions:\r\n  Reaction 1:    1 --\u003e 2 takes 1.5 mins\r\n  Reaction 2:    1 --\u003e 3 takes 2.5 mins \r\n  Reaction 3:    2 --\u003e 3 takes 0.6 mins\r\n  Reaction 4:    3 --\u003e 4 takes 4.1 mins \r\n  Reaction 5:    4 --\u003e 2 takes 3.2 mins\r\n  Sample reaction chains: 1 --\u003e 3 --\u003e 4         takes (2.5 + 4.1) mins\r\n                          1 --\u003e 2 --\u003e 3 --\u003e 4   takes (1.5 + 0.6 + 4.1) mins \r\n                          4 --\u003e 2 --\u003e 3         takes (3.2 + 0.6) mins\r\n\r\nNote that conversion reactions can only move forward. But if the list states that converting to and from the same two compounds is possible, then a reaction chain can take only one of these paths.\r\n\r\nYour task is this: Given a starting compound *S* and a target compound *T*, can you find a reaction chain between them with the smallest _total completion time_? \r\n\r\nThe inputs to this problem are *R*, *S*, and *T*. Variable *R* is a 3-column matrix containing the list of valid reaction steps at each row _i_: \r\n\r\n\"Reaction _i_: *R*( _i_, _1_) --\u003e *R*( _i_, _2_) takes *R*( _i_, _3_) mins\" \r\n\r\nOutput the total time of the fastest reaction chain from *S* to *T*, rounded to 2 decimal places. If a solution does not exist, then output |Inf|. You are ensured that:\r\n\r\n* 2 \u003c= *N* \u003c= 20\r\n* *S*, *T*, and all elements in the first 2 columns of *R* are integers within [1, *N*].\r\n* Completion times are decimal numbers within (0,10].\r\n* *S* is not equal to *T*.\r\n* Each compound 1, ..., *N* is mentioned at least once in *R*. Hence, *N* can be inferred from matrix *R*.\r\n\r\nThe following sample test case is the one illustrated above:\r\n\r\n  \u003e\u003e R = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\r\n  \u003e\u003e reaction_chain(R,1,4)\r\n  ans = \r\n       6.20\r\n\r\n","description_html":"\u003cp\u003eThis problem is related to Problem \u003ca href = \"45470\"\u003e45470\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eLet's denote a list of \u003cb\u003eN\u003c/b\u003e compounds as 1, 2, ..., \u003cb\u003eN\u003c/b\u003e. You are then given a list of valid reactions for converting one compound to another (e.g. 1 --\u0026gt; 2), as well as the time it takes to complete them ( \u003ci\u003ecompletion time\u003c/i\u003e ). With this information, we can generate \u003ci\u003ereaction chains\u003c/i\u003e. A reaction chain is a series of valid reaction steps taken one after the other. Examples are given below:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eGiven N = 4 and the following valid reactions:\r\nReaction 1:    1 --\u0026gt; 2 takes 1.5 mins\r\nReaction 2:    1 --\u0026gt; 3 takes 2.5 mins \r\nReaction 3:    2 --\u0026gt; 3 takes 0.6 mins\r\nReaction 4:    3 --\u0026gt; 4 takes 4.1 mins \r\nReaction 5:    4 --\u0026gt; 2 takes 3.2 mins\r\nSample reaction chains: 1 --\u0026gt; 3 --\u0026gt; 4         takes (2.5 + 4.1) mins\r\n                        1 --\u0026gt; 2 --\u0026gt; 3 --\u0026gt; 4   takes (1.5 + 0.6 + 4.1) mins \r\n                        4 --\u0026gt; 2 --\u0026gt; 3         takes (3.2 + 0.6) mins\r\n\u003c/pre\u003e\u003cp\u003eNote that conversion reactions can only move forward. But if the list states that converting to and from the same two compounds is possible, then a reaction chain can take only one of these paths.\u003c/p\u003e\u003cp\u003eYour task is this: Given a starting compound \u003cb\u003eS\u003c/b\u003e and a target compound \u003cb\u003eT\u003c/b\u003e, can you find a reaction chain between them with the smallest \u003ci\u003etotal completion time\u003c/i\u003e?\u003c/p\u003e\u003cp\u003eThe inputs to this problem are \u003cb\u003eR\u003c/b\u003e, \u003cb\u003eS\u003c/b\u003e, and \u003cb\u003eT\u003c/b\u003e. Variable \u003cb\u003eR\u003c/b\u003e is a 3-column matrix containing the list of valid reaction steps at each row \u003ci\u003ei\u003c/i\u003e:\u003c/p\u003e\u003cp\u003e\"Reaction \u003ci\u003ei\u003c/i\u003e: \u003cb\u003eR\u003c/b\u003e( \u003ci\u003ei\u003c/i\u003e, \u003ci\u003e1\u003c/i\u003e) --\u0026gt; \u003cb\u003eR\u003c/b\u003e( \u003ci\u003ei\u003c/i\u003e, \u003ci\u003e2\u003c/i\u003e) takes \u003cb\u003eR\u003c/b\u003e( \u003ci\u003ei\u003c/i\u003e, \u003ci\u003e3\u003c/i\u003e) mins\"\u003c/p\u003e\u003cp\u003eOutput the total time of the fastest reaction chain from \u003cb\u003eS\u003c/b\u003e to \u003cb\u003eT\u003c/b\u003e, rounded to 2 decimal places. If a solution does not exist, then output \u003ctt\u003eInf\u003c/tt\u003e. You are ensured that:\u003c/p\u003e\u003cul\u003e\u003cli\u003e2 \u0026lt;= \u003cb\u003eN\u003c/b\u003e \u0026lt;= 20\u003c/li\u003e\u003cli\u003e\u003cb\u003eS\u003c/b\u003e, \u003cb\u003eT\u003c/b\u003e, and all elements in the first 2 columns of \u003cb\u003eR\u003c/b\u003e are integers within [1, \u003cb\u003eN\u003c/b\u003e].\u003c/li\u003e\u003cli\u003eCompletion times are decimal numbers within (0,10].\u003c/li\u003e\u003cli\u003e\u003cb\u003eS\u003c/b\u003e is not equal to \u003cb\u003eT\u003c/b\u003e.\u003c/li\u003e\u003cli\u003eEach compound 1, ..., \u003cb\u003eN\u003c/b\u003e is mentioned at least once in \u003cb\u003eR\u003c/b\u003e. Hence, \u003cb\u003eN\u003c/b\u003e can be inferred from matrix \u003cb\u003eR\u003c/b\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe following sample test case is the one illustrated above:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e\u0026gt;\u0026gt; R = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\r\n\u0026gt;\u0026gt; reaction_chain(R,1,4)\r\nans = \r\n     6.20\r\n\u003c/pre\u003e","function_template":"function y = reaction_chain(R,S,T)\r\n  y = R;\r\nend","test_suite":"%%\r\nfiletext = fileread('reaction_chain.m')\r\nassert(isempty(strfind(filetext, 'rand')))\r\nassert(isempty(strfind(filetext, 'fileread')))\r\nassert(isempty(strfind(filetext, 'assert')))\r\nassert(isempty(strfind(filetext, 'echo')))\r\n%%\r\nR = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\r\nassert(isequal(reaction_chain(R,1,4),6.20))\r\n%%\r\nR = [3 4 9.6489;1 4 9.5717;2 4 1.4189;2 4 7.9221;4 3 0.3571; 4 3 3.9223];\r\nassert(isequal(reaction_chain(R,1,3),9.93))\r\n%%\r\nR = [2 3 3.1864;3 2 4.9359;1 2 7.7339;5 1 5.2448;2 5 1.3431; ...\r\n4 1 4.8876;4 1 9.5712;4 1 2.6840;4 3 0.0273;5 4 1.7028; ...\r\n5 4 5.2548;3 2 4.2046;3 4 8.6170;3 4 9.1101;2 1 3.3861];\r\nassert(isequal(reaction_chain(R,3,4),7.25))\r\n%%\r\nR = [1 4 8.1730;4 1 3.9978;2 4 4.3141;4 1 2.6380;4 3 3.5095; ...\r\n3 2 0.7597;1 2 0.4965;2 1 7.8025;2 1 4.0391;4 3 0.5978; ...\r\n1 2 8.2119;2 3 2.9632;3 1 6.8678;1 2 6.2562;4 1 9.2939; ...\r\n4 2 4.3586;3 4 7.9483;3 2 8.1158;3 2 9.3900;4 3 6.2248];\r\nassert(isequal(reaction_chain(R,3,1),4.80))\r\n%%\r\nR = [6 1 4.8990;2 6 7.1269;4 3 0.5962;5 1 0.7145;4 1 8.1815];\r\nassert(isequal(reaction_chain(R,5,5),0.00))\r\nassert(isequal(reaction_chain(R,2,1),12.03))\r\nassert(isequal(reaction_chain(R,2,3),Inf))\r\nassert(isequal(reaction_chain(R,3,4),Inf))\r\n%%\r\nR = [1 3 1.3056;1 3 6.0879;6 7 9.7350;6 5 0.4248;5 7 3.1795; ...\r\n10 11 8.0540;11 9 9.7753;11 9 5.1325;14 15 7.6027;15 14 8.0163; ...\r\n14 15 5.9045;17 1 1.4939;1 17 2.5989;1 17 6.2406;4 5 1.9871; ...\r\n3 4 0.6724;3 5 8.6804;7 9 7.2118;8 7 8.1865;9 7 2.9695; ...\r\n12 11 5.1967;11 12 4.1216;11 12 3.9005;16 17 9.2406;15 16 6.7641; ...\r\n17 16 0.6583;3 2 5.0605;2 3 4.9252;1 3 6.1090;5 7 4.1419; ...\r\n6 7 4.7752;7 5 7.2523;9 10 2.9741;11 9 0.1670;11 9 8.7837; ...\r\n14 13 1.5026;13 15 3.3175;15 14 6.1016;18 1 6.7336;1 17 2.5181; ...\r\n17 1 9.1524;4 3 6.0197;3 5 6.5784;4 3 3.0603;];\r\nassert(isequal(reaction_chain(R,18,3),8.04))\r\nassert(isequal(reaction_chain(R,13,12),50.1))\r\nassert(isequal(reaction_chain(R,14,12),51.6))\r\n%%\r\nR = [9 13 1.5437;8 4 7.5811;18 8 6.8554;6 11 8.3242;12 7 2.9923; ...\r\n10 9 3.5961;12 15 4.2433;9 3 0.2443;6 7 6.5369;20 19 4.5789; ...\r\n5 16 7.5933;14 10 2.1216;2 17 1.7501;4 14 8.9439;11 15 1.5359; ...\r\n20 11 6.7973;1 17 7.4862;3 11 3.2583;11 8 4.1509;4 6 0.2054; ...\r\n19 14 9.3261;4 19 7.9466;12 9 2.5761;16 5 0.6419;16 14 7.1521; ...\r\n13 9 3.9076;17 7 8.1454;16 18 5.0564;13 20 4.4396;2 18 6.3119];\r\nassert(isequal(reaction_chain(R,8,20),28.23))\r\nassert(isequal(reaction_chain(R,2,13),36.95))\r\n%%\r\nR = [9 20 9.8797;18 8 4.5474;5 16 8.8284;19 12 5.9887;3 18 4.5039; ...\r\n5 18 7.6259;18 6 6.7323;14 3 4.0732;6 15 2.8338;18 17 3.9003; ...\r\n10 14 8.3437;13 12 3.2604;10 15 8.8441;15 1 6.7478;17 7 2.4623; ...\r\n7 8 5.4655;12 8 3.9813;11 14 9.5092;15 9 8.3187;3 2 0.8425; ...\r\n4 7 3.0173;1 11 0.9537;3 13 8.5932];\r\nassert(isequal(reaction_chain(R,20,12),Inf))\r\nassert(isequal(reaction_chain(R,15,8),30.34))\r\n%%\r\nR = [11 12 2.1328;12 3 0.5222;14 13 2.1966;9 13 5.5531;3 4 0.0100; ...\r\n9 10 1.5987;14 1 1.1968;10 18 2.4288;1 8 9.0441;14 8 6.3195; ...\r\n5 12 9.8173;17 6 6.8246;8 20 0.8399;6 17 0.8442;11 17 7.3882; ...\r\n3 9 3.5038;10 12 1.4581;19 13 1.6294;12 19 7.8310;14 10 2.6032; ...\r\n12 5 3.1930;19 18 7.9459;19 4 5.1754;13 19 6.6397;8 15 8.1763; ...\r\n13 2 9.2236;2 11 1.1885;8 17 2.4410;18 15 3.7815;5 6 7.6724; ...\r\n1 14 6.2028;15 20 3.8391;6 18 8.0610;10 2 5.6427;4 11 3.5503; ...\r\n7 15 5.1577;16 5 6.7811;2 17 6.7857;19 2 9.0844;11 13 3.1607; ...\r\n2 18 1.4453;8 13 9.9755];\r\nassert(isequal(reaction_chain(R,11,20),17.81))\r\n%%\r\nR = [3 1 7.1176;14 2 0.3902;9 10 5.1643;1 11 9.4602;14 2 3.5457; ...\r\n4 9 6.1273;5 12 7.9564;12 6 0.5430;11 15 1.6248;2 14 4.8166; ...\r\n4 1 6.0896;12 8 0.2775;15 8 3.3200;3 10 5.7513;12 3 3.5679; ...\r\n3 13 3.3787;5 1 8.0191;8 9 8.7091;9 15 5.9602;13 15 8.8592; ...\r\n4 1 4.5112;1 8 9.5120;4 6 4.3143;6 14 7.4084;12 15 5.1010; ...\r\n12 7 8.4920;6 12 9.7644;8 7 2.0716;5 2 3.7521;5 6 8.1712; ...\r\n2 10 3.4665;6 9 8.6394;3 11 9.0183;3 5 4.9652;14 8 2.7700; ...\r\n1 11 5.0675;6 1 3.5858;6 1 3.7505;12 3 9.1222;12 2 9.5003; ...\r\n3 5 6.8713;3 8 7.2133;14 11 7.4985;7 4 5.2085;4 13 6.6293];\r\nassert(isequal(reaction_chain(R,13,12),33.54))\r\n%%\r\nR = [7 13 9.2048;12 5 7.9682;3 8 6.1069;11 6 7.2868;14 1 1.3822; ...\r\n13 7 4.1131;15 12 9.8100;4 2 3.8458;8 9 9.7663;8 7 9.9499; ...\r\n4 10 9.6426;11 5 5.3113;1 14 4.0438;5 15 4.6065;5 2 5.8218; ...\r\n3 2 5.8056;5 6 7.2482;13 6 9.6175;15 4 7.6824;10 14 6.0254; ...\r\n11 12 3.8510;4 1 4.7212;10 5 5.1786;4 5 6.5047;14 13 2.0992; ...\r\n6 14 2.5653;15 10 1.6535;13 10 5.4645;4 1 2.3338;6 10 9.8610; ...\r\n4 12 8.8633;8 3 8.1092;8 2 8.7572;10 2 9.0844;11 6 5.0432; ...\r\n12 1 7.2593;11 7 5.8229;6 3 3.9919;14 4 3.6101;5 2 5.1267; ...\r\n13 14 7.2360;6 5 6.9171;8 2 2.5291;14 3 1.2135;9 5 3.8204; ...\r\n12 13 6.8024;7 10 2.1408;10 11 6.0102;12 8 3.5462;12 4 8.4483];\r\nassert(isequal(reaction_chain(R,1,12),16.52))\r\nassert(isequal(reaction_chain(R,15,9),23.12))\r\nassert(isequal(reaction_chain(R,9,15),8.43))\r\n%%\r\nR = [14 10 9.0000;14 10 10.0000;4 13 10.0000;5 2 8.0000;2 11 5.0000; ...\r\n10 3 6.0000;9 1 5.0000;13 2 5.0000;10 5 10.0000;10 3 6.0000; ...\r\n13 8 8.0000;13 12 2.0000;1 9 7.0000;13 11 4.0000;7 4 8.0000; ...\r\n2 11 9.0000;11 5 6.0000;7 2 9.0000;10 4 10.0000;3 5 5.0000; ...\r\n4 3 8.0000;3 8 3.0000;7 13 3.0000;1 13 7.0000;14 6 7.0000; ...\r\n6 1 6.0000;8 4 1.0000;12 1 4.0000;11 14 6.0000;10 14 6.0000; ...\r\n6 10 5.0000;2 7 6.0000;8 7 1.0000;4 7 7.0000;10 14 10.0000; ...\r\n2 14 2.0000;14 9 3.0000;1 5 9.0000;2 5 2.0000;3 1 8.0000];\r\nassert(isequal(reaction_chain(R,8,9),14))\r\n%%\r\nR = [1 2 5;1 2 9];\r\nassert(isequal(reaction_chain(R,2,1),Inf))\r\n%%\r\nR = [4 16 0.4237;2 9 0.0306;8 11 0.6388;1 13 0.1693;2 16 0.3843; ...\r\n8 6 0.5554;6 7 0.3490;17 7 0.1930;17 6 0.5509;17 2 0.2577; ...\r\n8 11 0.8995;4 18 0.4340;15 10 0.3313;8 13 0.9162;17 3 0.1199; ...\r\n17 12 0.0403;10 17 0.3857;6 5 0.2009;7 11 0.2684;12 15 0.1040; ...\r\n14 12 0.4747;17 2 0.5991;5 1 0.5799;16 11 0.8399;4 12 0.1740; ...\r\n6 1 0.7015;18 14 0.7567;10 6 0.2449;6 18 0.2307;10 4 0.4340; ...\r\n3 7 0.7936;15 17 0.5404;15 13 0.0432;3 5 0.2467;4 5 0.2755; ...\r\n18 7 0.2973;8 6 0.7573;7 3 0.6172;16 9 0.0776;17 6 0.6139; ...\r\n12 4 0.9600;12 10 0.8690;11 1 0.4827;15 14 0.5723;1 13 0.4494; ...\r\n12 14 0.8047;1 15 0.5674;2 5 0.1335;11 10 0.0689;18 5 0.3155; ...\r\n6 1 0.5279;5 8 0.9475;17 3 0.5919];\r\nassert(isequal(reaction_chain(R,7,13),0.91))\r\nassert(isequal(reaction_chain(R,1,18),1.37))\r\nassert(isequal(reaction_chain(R,14,2),1.38))\r\n%%\r\nR = [3 2 8.2070;2 1 1.0576;5 6 4.3201;5 6 1.1111;6 7 5.3338; ...\r\n11 10 9.7877;10 11 5.9987;9 10 4.3743;14 13 2.7591;13 15 8.6333; ...\r\n14 13 5.6640;17 18 1.6193;17 1 2.8767;17 18 6.9178;4 3 5.6304; ...\r\n4 3 4.3412;5 4 0.5619;9 8 9.5380;9 7 0.0224;9 8 7.1412; ...\r\n11 13 2.7473;11 12 0.6646;12 11 1.2049;17 15 8.9250;16 15 3.4592; ...\r\n17 15 0.4951;1 2 4.0666;1 2 0.5611;2 3 6.7063;6 5 2.7088; ...\r\n5 7 7.1288;5 6 0.6856;11 9 4.1500;11 10 5.9775;9 10 8.3965; ...\r\n15 14 7.5966;14 15 4.1755;14 13 8.3002;1 18 5.0146;1 17 9.7139; ...\r\n17 18 0.2792;3 5 5.4500;5 3 2.3200;5 3 8.7088;7 8 4.0699; ...\r\n8 7 1.8611;9 8 7.8793;13 11 7.7952;11 13 5.4524;13 12 1.3119];\r\nassert(isequal(reaction_chain(R,3,9),36.50))\r\n%%\r\nR = [2 1 7.2341;3 1 1.9214;6 7 7.0439;6 7 4.1053;5 6 1.2955; ...\r\n11 10 8.3926;10 11 9.0473;10 11 7.1775;14 15 7.2521;15 14 4.9151; ...\r\n14 15 9.6543;17 19 2.7357;17 18 2.7711;17 18 8.5647;3 2 4.8920; ...\r\n4 2 7.0194;2 3 8.9539;8 6 1.9255;6 8 1.1520;8 6 1.3625; ...\r\n12 10 3.7379;11 12 4.7925;12 10 7.2198;16 14 6.2466;16 15 7.1463; ...\r\n16 15 3.7445;1 18 6.6056;19 1 9.1260;19 1 3.0015;3 5 2.1327; ...\r\n4 3 3.6967;3 5 0.7346;8 9 9.3318;8 7 4.9644;8 9 3.0559; ...\r\n11 13 7.6445;11 12 1.6309;11 13 2.0184;17 15 7.9096;17 15 3.8180; ...\r\n16 15 4.1780;2 19 1.3889;19 2 2.6529;1 19 9.4927;5 4 6.9571; ...\r\n5 6 3.8858;4 5 8.8546];\r\nassert(isequal(reaction_chain(R,4,14),Inf))\r\nassert(isequal(reaction_chain(R,9,12),Inf))\r\n%%\r\nR = [2 1 1.5592;1 2 2.4465;7 6 5.9819;7 6 1.9563;5 7 4.9169; ...\r\n9 10 2.6206;9 10 3.6554;10 9 6.9576;2 1 1.5000;2 13 9.0677; ...\r\n13 2 7.3477;4 5 8.9883;5 4 7.8082;6 5 0.7312;10 8 2.5875; ...\r\n8 9 4.9516;10 9 3.9300;12 1 0.0830;1 12 9.7302;13 12 6.0841; ...\r\n3 5 0.0807;3 5 5.3663;4 5 2.4256;7 9 0.1973;7 9 8.2272; ...\r\n8 9 1.6038;11 12 8.2550;13 11 1.9458;13 11 1.3879;2 4 9.8468; ...\r\n3 2 4.8237;2 3 5.5103;7 6 9.9712;7 8 5.0623;7 6 8.8766; ...\r\n11 12 4.6054;10 12 1.0703;10 12 5.3461;3 2 5.4698;1 2 5.6282; ...\r\n2 1 2.9354;7 6 1.5597;6 5 8.5908;5 7 7.9862;9 11 5.0525; ...\r\n9 11 3.1038;11 10 2.6583];\r\nassert(isequal(reaction_chain(R,10,5),9.19))\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":255320,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":17,"test_suite_updated_at":"2020-04-21T14:16:29.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2020-04-18T19:42:11.000Z","updated_at":"2025-12-04T16:15:32.000Z","published_at":"2020-04-18T21:51:06.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 related 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=\\\"45470\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e45470\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\u003eLet's denote a list 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e compounds as 1, 2, ...,\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. You are then given a list of valid reactions for converting one compound to another (e.g. 1 --\u0026gt; 2), as well as the time it takes to complete 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\u003ecompletion time\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e ). With this information, we can generate\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\u003ereaction chains\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. A reaction chain is a series of valid reaction steps taken one after the other. Examples are given 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[Given N = 4 and the following valid reactions:\\nReaction 1:    1 --\u003e 2 takes 1.5 mins\\nReaction 2:    1 --\u003e 3 takes 2.5 mins \\nReaction 3:    2 --\u003e 3 takes 0.6 mins\\nReaction 4:    3 --\u003e 4 takes 4.1 mins \\nReaction 5:    4 --\u003e 2 takes 3.2 mins\\nSample reaction chains: 1 --\u003e 3 --\u003e 4         takes (2.5 + 4.1) mins\\n                        1 --\u003e 2 --\u003e 3 --\u003e 4   takes (1.5 + 0.6 + 4.1) mins \\n                        4 --\u003e 2 --\u003e 3         takes (3.2 + 0.6) mins]]\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 that conversion reactions can only move forward. But if the list states that converting to and from the same two compounds is possible, then a reaction chain can take only one of these paths.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this: Given a starting compound\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\u003eS\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and a target compound\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\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, can you find a reaction chain between them with the smallest\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\u003etotal completion time\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 inputs to this problem are\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\u003eR\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a 3-column matrix containing the list of valid reaction steps at each 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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\u003e\\\"Reaction\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\u003ei\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) --\u0026gt;\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\u003eR\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) takes\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\u003eR\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) mins\\\"\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 the total time of the fastest reaction chain 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, rounded to 2 decimal places. If a solution does not exist, then 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\u003eInf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. You are ensured that:\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\u003e2 \u0026lt;=\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u0026lt;= 20\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and all elements in the first 2 columns 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are integers within [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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCompletion times are decimal numbers within (0,10].\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is not equal 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach compound 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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is mentioned at least once 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Hence,\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e can be inferred from 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\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 following sample test case is the one illustrated above:\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 R = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\\n\u003e\u003e reaction_chain(R,1,4)\\nans = \\n     6.20]]\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":490,"title":"Fastest shortest-path-finder in the west","description":"Given connectivity information about a graph, your job is to find the shortest-path distance between every pair of vertices in this graph.\r\nNote: Valid solutions will be scored based on their speed, not their size (hence the fastest in the west...).\r\nFormat: D = mindist(from,to)\r\nInputs: two vectors, from and to, listing the vertex labels for each edge in the graph (note: vertex labels are positive integers, connectivity is unidirectional, meaning that a connection between vertex a and b does not imply a connection between vertex b and a; in other words this is a directed graph)\r\nOutput: D is a square matrix where D(a,b) is the number of edges in the shortest-path starting from vertex a and ending in vertex b (or inf if there is no path connecting them). Note: Your algorithm is not required to output the actual optimal paths between each pair of vertices, just their distance.\r\nExample:\r\n    D=mindist([1,2,3],[2,3,4])\r\n    D =\r\n\r\n     0     1     2     3\r\n   Inf     0     1     2\r\n   Inf   Inf     0     1\r\n   Inf   Inf   Inf     0\r\nImportant note \u0026 disclaimer: Your algorithm will be scored based on its speed, not based on its cody size. The reported 'size' measure for any valid entry will instead reflect the time (in milliseconds) your algorithm takes to solve various test suite problems (see the test suite for details). There has been some discussion (e.g. http://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments) regarding the cody scoring method. This problem is just a little experiment on tweaking cody to use a different scoring method other than the default node-length measure. Of course scoring based on running time has its own issues (e.g. lack of appropriate repeatability), please feel free to comment on ways you would improve how this problem is scored.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: 527px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 469px 263.5px; transform-origin: 469px 263.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven connectivity information about a graph, your job is to find 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://en.wikipedia.org/wiki/Shortest_path_problem\"\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=\"font-weight: 700; \"\u003eshortest-path distance\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e between every pair of vertices in this graph.\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: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNote: Valid solutions will be scored based on their\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003espeed\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, not their\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003esize\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e (hence 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efastest in the west\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: 0px 0px; transform-origin: 0px 0px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eFormat:\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e D = mindist(from,to)\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 31.5px; text-align: left; transform-origin: 445px 31.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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInputs:\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e two vectors,\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efrom\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eto\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, listing the vertex labels for each edge in the graph (note: vertex labels are positive integers, connectivity is unidirectional, meaning that a connection between vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e does not imply a connection between vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e; in other words this is a directed graph)\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 31.5px; text-align: left; transform-origin: 445px 31.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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eD\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is a square matrix where\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eD(a,b)\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is the number of edges in the shortest-path starting from vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and ending in vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e (or\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003einf\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e if there is no path connecting them). Note: Your algorithm is not required to output the actual optimal paths between each pair of vertices, just their distance.\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: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 126px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 465px 63px; transform-origin: 465px 63px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    D=mindist([1,2,3],[2,3,4])\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    D =\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0     1     2     3\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   Inf     0     1     2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   Inf   Inf     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   Inf   Inf   Inf     0\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 126px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 63px; text-align: left; transform-origin: 445px 63px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eImportant note \u0026amp; disclaimer:\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e Your algorithm will be scored based on its\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003espeed\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, not based on its cody\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003esize\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. The reported 'size' measure for any valid entry will instead reflect the time (in milliseconds) your algorithm takes to solve various test suite problems (see the test suite for details). There has been some discussion (e.g.\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\"\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=\"\"\u003ehttp://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) regarding the cody scoring method. This problem is just a little experiment on\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003etweaking\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e cody to use a different scoring method other than the default node-length measure. Of course scoring based on running time has its own issues (e.g. lack of appropriate repeatability), please feel free to comment on ways you would improve how this problem is scored.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function D = mindist(from,to)\r\n  D=zeros(max([from,to]));\r\nend","test_suite":"%%\r\n% test small connectivity matrix (3x3)\r\nassert(isequal(mindist([1,3,2,3],[2,2,1,2]),[0 1 Inf;1 0 Inf;2 1 0]))\r\nt0=clock;\r\nD=mindist([1,3,2,3],[2,2,1,2]);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)'); \r\ndisp(t1)\r\n\r\n%%\r\n% test small connectivity matrix (10 vertices, 15 edges)\r\nassert(isequal(mindist([10 5 5 7 7 3 3 4 6 6 1 8 7 1 10],[7 4 10 6 8 4 1 7 9 4 6 9 6 10 9]),[0 Inf Inf 2 Inf 1 2 3 2 1;Inf 0 Inf Inf Inf Inf Inf Inf Inf Inf;1 Inf 0 1 Inf 2 2 3 3 2;Inf Inf Inf 0 Inf 2 1 2 3 Inf;Inf Inf Inf 1 0 3 2 3 2 1;Inf Inf Inf 1 Inf 0 2 3 1 Inf;Inf Inf Inf 2 Inf 1 0 1 2 Inf;Inf Inf Inf Inf Inf Inf Inf 0 1 Inf;Inf Inf Inf Inf Inf Inf Inf Inf 0 Inf;Inf Inf Inf 3 Inf 2 1 2 1 0]))\r\nt0=clock;\r\nD=mindist([10 5 5 7 7 3 3 4 6 6 1 8 7 1 10],[7 4 10 6 8 4 1 7 9 4 6 9 6 10 9]);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)');\r\ndisp(t1)\r\n\r\n%%\r\n% test small connectivity matrix (10 vertices, 30 edges)\r\nassert(isequal(mindist([4 10 2 9 8 2 7 10 3 7 5 9 2 6 9 3 2 9 8 7 9 9 10 8 2 7 3 2 1 8],[2 6 9 4 3 1 4 8 10 5 4 6 5 5 7 4 7 1 4 4 3 8 5 7 5 4 7 3 4 1]),[0 2 3 1 3 4 3 4 3 4;1 0 1 2 1 2 1 2 1 2;3 2 0 1 2 2 1 2 3 1;2 1 2 0 2 3 2 3 2 3;3 2 3 1 0 4 3 4 3 4;4 3 4 2 1 0 4 5 4 5;3 2 3 1 1 4 0 4 3 4;1 2 1 1 2 3 1 0 3 2;1 2 1 1 2 1 1 1 0 2;2 3 2 2 1 1 2 1 4 0]))\r\nt0=clock;\r\nD=mindist([4 10 2 9 8 2 7 10 3 7 5 9 2 6 9 3 2 9 8 7 9 9 10 8 2 7 3 2 1 8],[2 6 9 4 3 1 4 8 10 5 4 6 5 5 7 4 7 1 4 4 3 8 5 7 5 4 7 3 4 1]);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)');\r\ndisp(t1)\r\n\r\n%%\r\n% test medium connectivity matrix (100 vertices, 200 edges)\r\ni=[17 21 97 93 63 87 68 14 40 12 30 60 45 63 55 43 71 74 32 66 48 27 10 80 1 50 36 40 100 35 84 75 93 94 79 49 6 6 60 24 80 43 60 41 64 87 1 17 44 63 6 89 15 70 74 48 69 68 63 24 77 82 48 69 33 50 100 90 37 29 10 62 61 87 69 6 45 27 77 8 100 94 77 26 8 72 59 4 4 36 59 47 9 60 95 88 15 27 32 50 51 42 40 76 22 32 68 39 46 82 32 27 15 39 75 63 33 63 63 91 64 43 13 10 2 56 10 62 45 24 44 58 80 2 44 98 80 92 31 97 76 82 48 68 5 100 91 65 65 90 77 96 95 44 84 4 29 85 25 99 26 75 47 2 47 64 63 4 83 73 63 26 56 99 9 98 47 7 82 53 86 84 66 40 83 76 69 86 74 60 18 99 69 3 10 35 85];\r\nj=[6 27 87 92 2 77 23 12 86 60 81 18 14 69 98 84 91 76 12 81 22 81 4 26 25 27 56 39 52 20 56 92 21 37 61 100 24 67 34 76 77 90 46 25 76 69 44 94 65 9 80 28 56 39 65 68 37 51 12 1 64 21 98 50 46 99 86 21 46 99 99 81 16 60 80 20 88 74 68 15 72 55 28 67 11 31 24 39 85 35 64 42 65 87 45 95 78 59 49 13 61 30 28 31 28 35 13 74 13 7 94 60 2 40 74 93 38 18 91 84 25 29 72 36 98 12 41 28 31 54 73 71 49 29 43 82 10 46 8 91 30 80 54 26 83 46 84 51 17 20 78 7 50 30 58 58 27 30 36 15 42 54 32 13 80 89 4 50 56 88 16 98 49 24 91 72 55 77 65 83 79 12 82 70 93 19 95 35 62 98 51 70 48 68 56 28 6];\r\n\r\nassert(isequal(interp2(mindist(i,j),[2 55 45 33 34 87 53 43 99 50],[90 66 53 41 94 68 94 38 23 76],'nearest'),[8,5,8,Inf,7,7,Inf,Inf,Inf,9]))\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)');\r\ndisp(t1)\r\n\r\n%%\r\n% Time-score evaluation\r\n% test medium connectivity matrix (100 vertices, 200 edges)\r\nrand('state',2); \r\nn=100;m=200; \r\ni=ceil(n*rand(1,m));\r\nj=ceil(n*rand(1,m));\r\nk=i==j;i(k)=[];j(k)=[];\r\nI=ceil(n*rand(1,10));J=ceil(n*rand(1,10));\r\n\r\n% first run for initialization\r\nassert(isequal(interp2(mindist(i,j),I,J,'nearest'),[6 6 Inf 0 5 Inf 4 8 6 3]))\r\n\r\n% second run for time evaluation\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1(1)=etime(clock,t0)*1e3;\r\n\r\n% test large connectivity matrix (1000 vertices, 2000 edges)\r\nrand('state',0); \r\nn=1000;m=2000; \r\ni=ceil(n*rand(1,m));\r\nj=ceil(n*rand(1,m));\r\nk=i==j;i(k)=[];j(k)=[];\r\nI=ceil(n*rand(1,10));J=ceil(n*rand(1,10));\r\n\r\n% first run for initialization\r\nassert(isequal(interp2(mindist(i,j),I,J,'nearest'),[8 8 9 8 11 7 Inf 5 8 Inf]))\r\n\r\n% second run for time evaluation\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1(2)=etime(clock,t0)*1e3;\r\n\r\n% test large connectivity matrix (1000 vertices, 10000 edges)\r\nrand('state',1); \r\nn=1000;m=10000; \r\ni=ceil(n*rand(1,m));\r\nj=ceil(n*rand(1,m));\r\nk=i==j;i(k)=[];j(k)=[];\r\nI=ceil(n*rand(1,10));J=ceil(n*rand(1,10));\r\n\r\n% second run for time evaluation\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1(3)=etime(clock,t0)*1e3;\r\nassert(isequal(interp2(D,I,J,'nearest'),[3 4 3 4 4 3 3 2 3 3]))\r\n\r\n% convert time to score\r\ndisp('Time (ms)');\r\ndisp(t1);\r\n\r\n% urlwrite('https://sites.google.com/a/alfnie.com/alfnie/software/SetSolutionScore.p?attredirects=0\u0026amp;d=1','SetSolutionScore.p');\r\n% rehash path; \r\n% SetSolutionScore(round(sum(t1)));\r\n%feval(@evalin,'caller',sprintf('score=%d',round(sum(t1))));\r\n%%fh=fopen('mindist.m','wt');\r\n%%fprintf(fh,'%s\\n',repmat('1;',[1,ceil(sum(t1)/2)]));\r\n%%fclose(fh);","published":true,"deleted":false,"likes_count":3,"comments_count":1,"created_by":43,"edited_by":485721,"edited_at":"2026-03-19T14:03:22.000Z","deleted_by":null,"deleted_at":null,"solvers_count":18,"test_suite_updated_at":"2026-03-19T14:03:22.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-13T04:35:04.000Z","updated_at":"2026-03-19T15:07:26.000Z","published_at":"2012-03-15T18:12:51.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\u003eGiven connectivity information about a graph, your job is to find 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://en.wikipedia.org/wiki/Shortest_path_problem\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eshortest-path distance\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e between every pair of vertices in this graph.\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\u003eNote: Valid solutions will be scored based on their\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\u003espeed\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, not their\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\u003esize\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (hence 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efastest in the west\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\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\u003eFormat:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e D = mindist(from,to)\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\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e two vectors,\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\u003efrom\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\u003eto\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, listing the vertex labels for each edge in the graph (note: vertex labels are positive integers, connectivity is unidirectional, meaning that a connection between vertex\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 does not imply a connection between vertex\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 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\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e; in other words this is a directed graph)\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\u003eOutput:\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\u003eD\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a square matrix where\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\u003eD(a,b)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the number of edges in the shortest-path starting from vertex\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 ending in vertex\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 (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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003einf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e if there is no path connecting them). Note: Your algorithm is not required to output the actual optimal paths between each pair of vertices, just their distance.\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\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[    D=mindist([1,2,3],[2,3,4])\\n    D =\\n\\n     0     1     2     3\\n   Inf     0     1     2\\n   Inf   Inf     0     1\\n   Inf   Inf   Inf     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\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\u003eImportant note \u0026amp; disclaimer:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Your algorithm will be scored based on its\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\u003espeed\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, not based on its cody\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\u003esize\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. The reported 'size' measure for any valid entry will instead reflect the time (in milliseconds) your algorithm takes to solve various test suite problems (see the test suite for details). There has been some discussion (e.g.\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://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) regarding the cody scoring method. This problem is just a little experiment 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etweaking\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e cody to use a different scoring method other than the default node-length measure. Of course scoring based on running time has its own issues (e.g. lack of appropriate repeatability), please feel free to comment on ways you would improve how this problem is scored.\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":2685,"title":"FloydWarshall","description":"Our task is to find shortest paths between every pair of nodes. Floyd-Warshall is a graph algorithm for finding shortest paths in weighted graph. The input of a function will be in weighted adjacency matrix representation. If two vertices does not have any edge than this matrix has Inf value. Function will return a matrix with values of shortest paths between each pair of nodes.\r\nExample :\r\n input= [0   1  Inf Inf \r\n        Inf  0   2  Inf\r\n        Inf Inf  0   3\r\n         4   7  Inf  0]\r\n\r\n output= [0   1   3   6\r\n          9   0   2   5\r\n          7   8   0   3\r\n          4   5   7   0]","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: 307.9px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 153.95px; transform-origin: 407px 153.95px; 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: 372.5px 8px; transform-origin: 372.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eOur task is to find shortest paths between every pair of nodes. Floyd-Warshall is a graph algorithm for finding shortest paths in weighted graph. The input of a function will be in weighted adjacency matrix representation. If two vertices does not have any edge than this matrix has Inf value. Function will return a matrix with values of shortest paths between each pair of nodes.\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: 29.5px 8px; transform-origin: 29.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample\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: 4px 8px; transform-origin: 4px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e :\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 183.9px; 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 91.95px; transform-origin: 404px 91.95px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 96px 8.5px; tab-size: 4; transform-origin: 96px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e input= [0   1  Inf Inf \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e        Inf  0   2  Inf\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 88px 8.5px; tab-size: 4; transform-origin: 88px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e        Inf Inf  0   3\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e         4   7  Inf  0]\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e output= [0   1   3   6\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e          9   0   2   5\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e          7   8   0   3\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 96px 8.5px; tab-size: 4; transform-origin: 96px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e          4   5   7   0]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = floydwarshall(x)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = [0   1  Inf Inf;\r\n    Inf  0   2  Inf;\r\n    Inf Inf  0   3\r\n     4   7  Inf  0];\r\ny_correct = [0   1   3   6;\r\n             9   0   2   5;\r\n             7   8   0   3;\r\n             4   5   7   0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n\r\n%%\r\nx = [0   8  Inf  1;\r\n    Inf  0   1  Inf;\r\n     4  Inf  0  Inf;\r\n    Inf  2   9   0];\r\ny_correct = [0   3   4   1\r\n             5   0   1   6\r\n             4   7   0   5\r\n             7   2   3   0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n\r\n%%\r\nx = [0   3   6  Inf Inf Inf Inf\r\n     3   0   2   1  Inf Inf Inf\r\n     6   2   0   1   4   2  Inf\r\n    Inf  1   1   0   2  Inf  4\r\n    Inf Inf  4   2   0   2   1\r\n    Inf Inf  2  Inf  2   0   1\r\n    Inf Inf Inf  4   1   1   0];\r\ny_correct = [0 3 5 4 6 7 7\r\n            3 0 2 1 3 4 4\r\n            5 2 0 1 3 2 3\r\n            4 1 1 0 2 3 3\r\n            6 3 3 2 0 2 1\r\n            7 4 2 3 2 0 1\r\n            7 4 3 3 1 1 0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n\r\n%%\r\nx = [0   3  Inf  5;\r\n     2   0  Inf  4;\r\n    Inf  1   0  Inf;\r\n    Inf Inf  2   0];\r\ny_correct = [0 3 7 5\r\n             2 0 6 4\r\n             3 1 0 5\r\n             5 3 2 0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":32478,"edited_by":223089,"edited_at":"2023-01-03T06:19:00.000Z","deleted_by":null,"deleted_at":null,"solvers_count":32,"test_suite_updated_at":"2023-01-03T06:19:00.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-11-23T22:43:29.000Z","updated_at":"2026-03-30T15:58:21.000Z","published_at":"2014-11-23T22:44:41.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\u003eOur task is to find shortest paths between every pair of nodes. Floyd-Warshall is a graph algorithm for finding shortest paths in weighted graph. The input of a function will be in weighted adjacency matrix representation. If two vertices does not have any edge than this matrix has Inf value. Function will return a matrix with values of shortest paths between each pair of nodes.\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\u003eExample\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=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ input= [0   1  Inf Inf \\n        Inf  0   2  Inf\\n        Inf Inf  0   3\\n         4   7  Inf  0]\\n\\n output= [0   1   3   6\\n          9   0   2   5\\n          7   8   0   3\\n          4   5   7   0]]]\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":2220,"title":"Wayfinding 3 - passed areas","description":"This is the third 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 . \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i58.tinypic.com/263wzdt.png\u003e\u003e\r\n\r\nFor this third 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.\r\n\r\nIn this assignments, the areas do not overlap. If 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 ... ]|. Simple.\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 |v| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 4 4 1 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\r\n","description_html":"\u003cp\u003eThis is the third 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 .\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i58.tinypic.com/263wzdt.png\"\u003e\u003cp\u003eFor this third 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.\u003c/p\u003e\u003cp\u003eIn this assignments, the areas do not overlap. If 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. Simple.\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\u003ev\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 4 4 1 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'. If you pass the same area multiple times, and leave it in between, each event is listed.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"    %%\r\n\r\n    AB = [ 2 -2 ; 8 -6 ];\r\n    F{1} = [\r\n        -4   -4    4    4\r\n        -4   -0   -0   -4\r\n        ];\r\n    F{2} = [\r\n        -4   -4    4    4\r\n        2    6    6    2\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [2 1];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 8 -4 ; 8 -8 ];\r\n    F{1} = [\r\n        -6    2    2   -4   -4    8    8   -6\r\n        -6   -6   -4   -4    2    2    4    4\r\n        ];\r\n    F{2} = [\r\n        -2   -2    4    4\r\n        -0   -2   -2   -0\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -8 8 ; 8 -8 ];\r\n    F{1} = [\r\n        -2   -2    0    0\r\n        -0    2    2   -0\r\n        ];\r\n    F{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\n    F{3} = [\r\n        -3   -3    1    0\r\n        -1   -3   -3   -1\r\n        ];\r\n    F{4} = [\r\n        5    9    9    5\r\n        -3   -3   -9   -9\r\n        ];\r\n    F{5} = [\r\n        -9  -10  -10   -9\r\n        9    9   10   10\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 2 4 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    AB = [ 0 0 ; -8 8 ];\r\n    F{1} = [\r\n        -4   -2   -2   -4\r\n        8    8    4    4\r\n        ];\r\n    F{2} = [\r\n        2    4    4    2\r\n        -0   -0   -6   -6\r\n        ];\r\n    F{3} = [\r\n        -4   -2   -2   -6   -6\r\n        -4   -4   -6   -6   -4\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    assert(isempty(f));\r\n    \r\n    %%\r\n\r\n    AB = [ 7 -8 ; 0 0 ];\r\n    F{1} = [\r\n        8    9    9    8\r\n        3    3   -2   -2\r\n        ];\r\n    F{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\n    F{3} = [\r\n        -2   -1   -1   -2\r\n        1    1   -4   -4\r\n        ];\r\n    F{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\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 4 2 3 2 4 2 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 0 -2 ; 0 -4 ];\r\n    F{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\n    F{2} = [\r\n        -1    1    1   -1\r\n        1    1   -1   -1\r\n        ];\r\n    F{3} = [\r\n        -4    4    4    5    5   -5   -5   -4\r\n        4    4   -7   -7    5    5   -1   -1\r\n        ];\r\n    F{4} = [\r\n        -5   -4   -4    4    4   -5\r\n        -1   -1   -6   -6   -7   -7\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -2 0 ; 6 -6 ];\r\n    F{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\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 1 1 ];\r\n    assert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":5,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":"2014-03-03T12:10:50.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T23:45:22.000Z","updated_at":"2026-02-19T10:36:52.000Z","published_at":"2014-03-03T09:46:27.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 third 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\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 third 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.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this assignments, the areas do not overlap. 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. Simple.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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\u003ev\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 4 4 1 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'. If you pass the same area multiple times, and leave it in between, each event is listed.\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":458,"title":"Parcel Routing","description":"Given a matrix that represent the distance along highways between major cities numbered 1 to _N_, provide the path and shortest distance from a given city, _from_, to a given city, _to_. Assume that 0 represents no direct path between two cities. If there is no solution to the problem, return -1 for both the path and the distance.","description_html":"\u003cp\u003eGiven a matrix that represent the distance along highways between major cities numbered 1 to \u003ci\u003eN\u003c/i\u003e, provide the path and shortest distance from a given city, \u003ci\u003efrom\u003c/i\u003e, to a given city, \u003ci\u003eto\u003c/i\u003e. Assume that 0 represents no direct path between two cities. If there is no solution to the problem, return -1 for both the path and the distance.\u003c/p\u003e","function_template":"function [route d] = parcel_route( from, to, graph )\r\n  route = -1;\r\n  d = -1;\r\nend","test_suite":"%%\r\n[route d] = parcel_route( 1, 5, zeros( 5 ) )\r\nassert(route == -1 \u0026\u0026 d == -1);\r\n\r\n%%\r\n[route d] = parcel_route( 1, 2, [0 0.320527862039621 0 0 0;0.320527862039621 0 0 0 0.85044688801616;0 0 0 0 0;0 0 0 0 0;0 0.85044688801616 0 0 0] );\r\nassert( isequal(route,[1 2]) \u0026\u0026 abs( d - 0.320528 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 4, 2, [0 0 0 0 0.648056184801628;0 0 0.168504735306137 0 0;0 0.168504735306137 0 0 0;0 0 0 0 0;0.648056184801628 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 3, 3, [0 0 0 1.07077622171054 0.00497624606093106;0 0 0 0 0;0 0 0 0 0;1.07077622171054 0 0 0 0;0.00497624606093106 0 0 0 0] );\r\nassert( isequal(route,3) \u0026\u0026 abs( d - 0 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 5, 2, [0 0 0.478447257684744 0.52778921303553 0;0 0 0 0.344727452766697 0;0.478447257684744 0 0 0 0;0.52778921303553 0.344727452766697 0 0 0;0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 1, 4, [0 0 0 0 0;0 0 0 0 0;0 0 0 0 0;0 0 0 0 0;0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 10, 5, [0 0 0 0 0.758920911298127 1.17184862472796 0 0 0 0;0 0 0 0.229051389055984 0 0 0.110344033764499 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0.229051389055984 0 0 0 0 0 0 0 0;0.758920911298127 0 0 0 0 0 0.582786870390757 0 0 0.266149081187709;1.17184862472796 0 0 0 0 0 0.91437757836659 0 0 0.928664694998184;0 0.110344033764499 0 0 0.582786870390757 0.91437757836659 0 0.72845914907191 0.440667818657679 0.0752998054887686;0 0 0 0 0 0 0.72845914907191 0 0 0;0 0 0 0 0 0 0.440667818657679 0 0 0.72584117080215;0 0 0 0 0.266149081187709 0.928664694998184 0.0752998054887686 0 0.72584117080215 0] );\r\nassert( isequal(route,[10 5]) \u0026\u0026 abs( d - 0.266149 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 7, 3, [0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0.348270614748404 0 0.963402246386651 0 0 0 0;0 0 0.348270614748404 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.00647302663148808 0 0;0 0 0.963402246386651 0 0 0 0 1.11338837090812 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.00647302663148808 1.11338837090812 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 4, 7, [0 0 0.529236850857286 0 0 0 1.60144982503606 0 0 0;0 0 0 0 0 0 0.828441215877115 0 0 0;0.529236850857286 0 0 0.0279102825979989 0 0 0 0 0 0.0544746812572747;0 0 0.0279102825979989 0 0 0 0 0 0 0;0 0 0 0 0 1.04094484718858 0 0 0 0;0 0 0 0 1.04094484718858 0 0 0 0 0.124040053577104;1.60144982503606 0.828441215877115 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.37043522751259;0 0 0.0544746812572747 0 0 0.124040053577104 0 0 0.37043522751259 0] );\r\nassert( isequal(route,[4 3 1 7]) \u0026\u0026 abs( d - 2.1586 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 4, 7, [0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.577543761888686 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.124487323633357 0 0 0.679813903514902;0 0.577543761888686 0 0 0 0 0.560623889702786 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0.124487323633357 0.560623889702786 0 0 0 0.250828758360099 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.250828758360099 0 0 0.914651700028183;0 0 0 0.679813903514902 0 0 0 0 0.914651700028183 0] );\r\nassert( isequal(route,[4 7]) \u0026\u0026 abs( d - 0.124487 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 1, 9, [0 0 0.210714289971845 0 0 0.655795786759233 0 0 0.417975370686535 0.0762383289683841;0 0 0 0 0 0 0 0 0 0;0.210714289971845 0 0 0 0 0 0.627639413184948 0.546973506820504 0 0;0 0 0 0 0 0.44290978142888 0 0 0 0;0 0 0 0 0 0 0.494959375382896 0.199417369123429 0.61193318690704 0;0.655795786759233 0 0 0.44290978142888 0 0 0 0 0.295901565877421 0;0 0 0.627639413184948 0 0.494959375382896 0 0 0 0 0;0 0 0.546973506820504 0 0.199417369123429 0 0 0 0 0.882898432991531;0.417975370686535 0 0 0 0.61193318690704 0.295901565877421 0 0 0 0.0999710063468799;0.0762383289683841 0 0 0 0 0 0 0.882898432991531 0.0999710063468799 0] );\r\nassert( isequal(route,[1 10 9]) \u0026\u0026 abs( d - 0.176209 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 12, 3, [0 0.139438875035701 0.112367141305958 0 0 0 0 0 0 0.742115072015769 0 0 0.244537467584915 0 0;0.139438875035701 0 0.135942047224331 0 0 0 0 0 0 0 0.374140881779805 0 0.217860680093506 0.379818098539566 1.17229854239237;0.112367141305958 0.135942047224331 0 0 0 0 0 1.7792137360137 0.350752848520651 0 0 0.284985494377118 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.161446305533344 0 0 0 0.183948436622344 0 0 0;0 0 1.7792137360137 0 0 0 0.161446305533344 0 0 0 0 0 0 0 0;0 0 0.350752848520651 0 0 0 0 0 0 0 0 0 0 0 0.362973369969354;0.742115072015769 0 0 0 0 0 0 0 0 0 0.263865914379949 0 0 0 0;0 0.374140881779805 0 0 0 0 0 0 0 0.263865914379949 0 0 0 0 0;0 0 0.284985494377118 0 0 0 0.183948436622344 0 0 0 0 0 0 0 0;0.244537467584915 0.217860680093506 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.379818098539566 0 0 0 0 0 0 0 0 0 0 0 0 1.863621808387;0 1.17229854239237 0 0 0 0 0 0 0.362973369969354 0 0 0 0 1.863621808387 0] );\r\nassert( isequal(route,[12 3]) \u0026\u0026 abs( d - 0.284985 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 14, 13, [0 0 0 0.0850075668378245 0 0 0 0 0.0463952689981919 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0.0850075668378245 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.831785345865625 0 0 0 0 0 0 0 0.300824537605104 0;0 0 0 0 0.831785345865625 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.316676635592728 0 0 0.18465657297998 0 0;0.0463952689981919 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.316676635592728 0 0 0 0 0 0 2.01596808102817;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0.735349103904233 0 0;0 0 0 0 0 0 0 0.18465657297998 0 0 0 0.735349103904233 0 0 0;0 0 0 0 0.300824537605104 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 2.01596808102817 0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 8, 8, [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.669844066951192 0 0 1.79425332134151 0 0 0 0;0 0 0 0 0 0.354813543185228 0.350829365088585 0.334017411457367 0 0 0.750194269879854 0 0 0 0.837083783283494;0 0 0 0 0 0 0 0 0 0 0 0.7666462425288 0 0 0;0 0 0 0 0 0 0 0 0 0 0.335432927184154 0.290662441159473 0 0 0;0 0 0.354813543185228 0 0 0 0 0 0 0 0 0.612746104915618 0 1.3702409817804 0;0 0 0.350829365088585 0 0 0 0 0 0 0 0 0 0 0 0;0 0.669844066951192 0.334017411457367 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 1.79425332134151 0.750194269879854 0 0.335432927184154 0 0 0 0 0 0 0 0 0 0;0 0 0 0.7666462425288 0.290662441159473 0.612746104915618 0 0 0 0 0 0 0.600235691901178 0 0;0 0 0 0 0 0 0 0 0 0 0 0.600235691901178 0 0 0;0 0 0 0 0 1.3702409817804 0 0 0 0 0 0 0 0 0.25725306655894;0 0 0.837083783283494 0 0 0 0 0 0 0 0 0 0 0.25725306655894 0] );\r\nassert( isequal(route,8) \u0026\u0026 abs( d - 0 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 9, 2, [0 0 0 0 0 0 0 0.216161539093326 0 0 0 0 0 0 0;0 0 0 0.154899548332433 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0.195632123891572 0 0.638112022611646 0 0;0 0.154899548332433 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.924920233869358 0 0 0 0 0 0 0.225753938901222;0 0 0 0 0 0 0 0 0 0 0 0.105130198814148 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0.216161539093326 0 0 0 0.924920233869358 0 0 0 0.283480661544537 0 0 0 0 0 0;0 0 0 0 0 0 0 0.283480661544537 0 0 0.860820315822094 0 0 0.114189406386242 0;0 0 0 0 0 0 0 0 0 0 0.777006911310097 0.0395282910845656 0.559642782958394 0.0374763085984708 0;0 0 0.195632123891572 0 0 0 0 0 0.860820315822094 0.777006911310097 0 0.107327989339846 0 0 0;0 0 0 0 0 0.105130198814148 0 0 0 0.0395282910845656 0.107327989339846 0 0 0 0;0 0 0.638112022611646 0 0 0 0 0 0 0.559642782958394 0 0 0 0 0;0 0 0 0 0 0 0 0 0.114189406386242 0.0374763085984708 0 0 0 0 0;0 0 0 0 0.225753938901222 0 0 0 0 0 0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 6, 8, [0 1.00600776349789 0 0 0.409642943366229 0 0 0 0 0 0 0 0.780942905018081 0.218269812307052 0;1.00600776349789 0 0 0 0 0 0 0 0 0.604439587022491 0 0 0 0 0;0 0 0 2.19497071462911 0 0.384068674620751 0 0 0 0.752596352506117 0.210553220187945 0 0 0 0.101200876472261;0 0 2.19497071462911 0 0 0 0 0 0 0 0 0.0821684991109088 0 0 1.39540244685607;0.409642943366229 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.384068674620751 0 0 0 0.0278385656290563 0 0 0 0 0 0 0 0;0 0 0 0 0 0.0278385656290563 0 0 0 0 0.314664537582249 0 0 0 0.157551652892199;0 0 0 0 0 0 0 0 0 0 1.37753279184511 0 0 0.647734508061038 0.538120114299927;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.604439587022491 0.752596352506117 0 0 0 0 0 0 0 0.38099752988379 0 0 0 0;0 0 0.210553220187945 0 0 0 0.314664537582249 1.37753279184511 0 0.38099752988379 0 0 0 0 0;0 0 0 0.0821684991109088 0 0 0 0 0 0 0 0 0.724941186609613 0 0;0.780942905018081 0 0 0 0 0 0 0 0 0 0 0.724941186609613 0 0 0;0.218269812307052 0 0 0 0 0 0 0.647734508061038 0 0 0 0 0 0 0;0 0 0.101200876472261 1.39540244685607 0 0 0.157551652892199 0.538120114299927 0 0 0 0 0 0 0] );\r\nassert( isequal(route,[6 7 15 8]) \u0026\u0026 abs( d - 0.72351 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 15, 1, [0 0 0 0 0 0 0 0 0 0 0 0.444956179153313 0.694837045312089 0 0 0 1.21296662658388 0 1.56620351515086 0.139996151546743;0 0 0.436509042497808 0 0 0 0 0 0 0.51021617110356 0.382775864014207 0 0 0 0 0 0 0 0.0458660640982067 0;0 0.436509042497808 0 0.142843784706697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.142843784706697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.923358421898822 0 0 0 0 0 0 0.535622573665002 0 0 0.0623807988546017 0 0 0 0;0 0 0 0 0.923358421898822 0 0 0 0 0 0 0 0 0 0.0225268450194125 0.789248499651178 0.131644262096824 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0.157622272676696 0.474149476188578 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 1.38990078830045 0 0 0 0 0.691403775437505 0;0 0.51021617110356 0 0 0 0 0 0 0 0 0.597507997139564 0 0 0 0.354205526419423 0 0 0 0 0;0 0.382775864014207 0 0 0 0 0 0 0 0.597507997139564 0 0 0 0.659672915756231 0 0 0 0 0 0;0.444956179153313 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.138835508200668;0.694837045312089 0 0 0 0.535622573665002 0 0.157622272676696 0 0 0 0 0 0 0 0 0.112112626230952 0 0 0 0.0843937952650982;0 0 0 0 0 0 0.474149476188578 0 1.38990078830045 0 0.659672915756231 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.0225268450194125 0 0 0 0.354205526419423 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.0623807988546017 0.789248499651178 0 0 0 0 0 0 0.112112626230952 0 0 0 0 0 0 2.40412068693751;1.21296662658388 0 0 0 0 0.131644262096824 0 0 0 0 0 0 0 0 0 0 0 0 0.332961917093088 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.464569385286 0;1.56620351515086 0.0458660640982067 0 0 0 0 0 0 0.691403775437505 0 0 0 0 0 0 0 0.332961917093088 1.464569385286 0 0;0.139996151546743 0 0 0 0 0 0 0 0 0 0 0.138835508200668 0.0843937952650982 0 0 2.40412068693751 0 0 0 0] );\r\nassert( isequal(route,[15 6 16 13 20 1]) \u0026\u0026 abs( d - 1.14828 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 6, 9, [0 0.366176160541789 0.786653302253499 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.21056171145861;0.366176160541789 0 0 0 0 0 0 0 0 1.00794652016003 0 0 0 0 0 0 0 0 0 0;0.786653302253499 0 0 0 0.00852440175782365 0 0 0 0 0 0.17749671083585 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.104971160045632 0 0.612122585766863 0 0.283798036821908;0 0 0.00852440175782365 0 0 0 0.643083445674635 0 0 0 1.48191061231689 0 0 0 0.200776975353452 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.20656027667801 0 0 0;0 0 0 0 0.643083445674635 0 0 0 0.0293301078099069 0 0 0.0684877514911584 0.244866042619905 0 0 0 0 0.844967783108164 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.0293301078099069 0 0 0 0 0.112122931478046 0 0 0 0.904924565740344 0 0 0 0;0 1.00794652016003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.17749671083585 0 1.48191061231689 0 0 0 0 0 0 0.356911349006201 0 0 0.157837394902406 0 0 0 0 0;0 0 0 0 0 0 0.0684877514911584 0 0.112122931478046 0 0.356911349006201 0 0.682956498987976 0.369934947078526 0 0 0 0 0 0;0 0 0 0 0 0 0.244866042619905 0 0 0 0 0.682956498987976 0 0 0 0 1.43719870645473 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0.369934947078526 0 0 0 0 0 0 0 0;0 0 0 0 0.200776975353452 0 0 0 0 0 0.157837394902406 0 0 0 0 0.0962643536575907 0 0 0 0;0 0 0 0.104971160045632 0 0 0 0 0.904924565740344 0 0 0 0 0 0.0962643536575907 0 0 0 0 0.884861315533158;0 0 0 0 0 1.20656027667801 0 0 0 0 0 0 1.43719870645473 0 0 0 0 0.00316254045496533 0.917601066178612 0;0 0 0 0.612122585766863 0 0 0.844967783108164 0 0 0 0 0 0 0 0 0 0.00316254045496533 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.917601066178612 0 0 0;0.21056171145861 0 0 0.283798036821908 0 0 0 0 0 0 0 0 0 0 0 0.884861315533158 0 0 0 0] );\r\nassert( isequal(route,[6 17 18 7 9]) \u0026\u0026 abs( d - 2.08402 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 15, 8, [0 0 0 0 0 0 0 0.444927230771171 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0.0904807891398611 0 0 0.117980802815763 0 0 0 0 0 0 0 0 0 0 0.786791961925432 0 0;0 0 0 0 0 0 0 0 0 0.159132007464481 0.110433064086588 0 0 0 0 0 0 0 0 0.139982926657546;0 0.0904807891398611 0 0 0.388870980511861 0 0 0 0 0 0 0.973527639623757 0 0 0 0 0 0 0 0;0 0 0 0.388870980511861 0 0 0 0.305597627987039 0 0 0 0 0.027077532916115 0 0 0 0 0 0.290796760442986 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.117980802815763 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.27266472620458 0.665594866955372 0 0.626568354787985;0.444927230771171 0 0 0 0.305597627987039 0 0 0 0 0 0 0 0 0 0 0 0 0 0.498229667608556 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.159132007464481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.110433064086588 0 0 0 0 0 0 0 0 0 0.611004915345871 0 0 0 0.561899811991367 0 0 0;0 0 0 0.973527639623757 0 0 0 0 0 0 0 0 0.949329689605504 0 0 0 0 0 0 0;0 0 0 0 0.027077532916115 0 0 0 0 0 0.611004915345871 0.949329689605504 0 0 0 0 0 0.45822991145669 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.916926430883478 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0944227233455792;0 0 0 0 0 0 1.27266472620458 0 0 0 0.561899811991367 0 0 0 0 0 0 0.0123263072768274 0 0;0 0.786791961925432 0 0 0 0 0.665594866955372 0 0 0 0 0 0.45822991145669 0 0 0 0.0123263072768274 0 0.708053638455894 0;0 0 0 0 0.290796760442986 0 0 0.498229667608556 0 0 0 0 0 0.916926430883478 0 0 0 0.708053638455894 0 0;0 0 0.139982926657546 0 0 0 0.626568354787985 0 0 0 0 0 0 0 0 0.0944227233455792 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 5, 4, [0 0 0 0 0 0 0 0 0 0.482056160228392 0 0 0 0 0 0 0 0 0.00508309589200806 0;0 0 0.342764171753101 0 0.592230924022738 0 0 0 0 0 0 0 0 0 0 0 0.616196530219501 0 0.105964156030294 0;0 0.342764171753101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.06756913797405 0 0 0 0 0;0 0.592230924022738 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 1.75169005582658 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.198256254136309 0 0.117040404671406 0.742253008190119 0 0 0 0 0 0 0 0 0;0 0 0 0 0 1.75169005582658 0.198256254136309 0 0 0.193487168668438 0 0 0 0 0 0.213470445629309 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0.672768253513765 0 0 0 0 0 0 0 0;0.482056160228392 0 0 0 0 0 0.117040404671406 0.193487168668438 0 0 0.182397544709499 0 0 0 0 0 0 0 0.352313653363684 0;0 0 0 0 0 0 0.742253008190119 0 0 0.182397544709499 0 0.863897537114491 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0.672768253513765 0 0.863897537114491 0 0 0 0 0 0.849422540372472 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.126177070732391 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 1.06756913797405 0 0 0 0 0 0 0 0 0.126177070732391 0 0 0 0 0.810675752838635 0.192588746332897 0;0 0 0 0 0 0 0 0.213470445629309 0 0 0 0 0 0 0 0 0 0 0 0;0 0.616196530219501 0 0 0 0 0 0 0 0 0 0.849422540372472 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.810675752838635 0 0 0 0 0;0.00508309589200806 0.105964156030294 0 0 0 0 0 0 0 0.352313653363684 0 0 0 0 0.192588746332897 0 0 0 0 0.473102743220109;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.473102743220109 0] );\r\nassert( isequal(route,[5 2 19 15 4]) \u0026\u0026 abs( d - 1.95835 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 18, 3, [0 0 0 0 0 0 0.588131422298983 0 0 0 0 0 0 0 0 0 0 0 0.411615488806083 0;0 0 0 0 0 0 0 0 0 0.148093137302263 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.513126690185934 0.314081294727961 0 0 0 0 0 0 0 0 0 0 0.105622237791164 0 0;0 0 0 0 0.0233388222703319 0 0 0.620281238898666 0 0 0 1.01777898612281 0 0 1.02802169259185 0 0 0 0 0.829878923718159;0 0 0 0.0233388222703319 0 0.103664033766553 0 0 0 0 0.800687507355036 0.724909646173659 0 0 0 0 0 0 0 0;0 0 0.513126690185934 0 0.103664033766553 0 0 0 0 0 0 0 0.51932792913499 0.111508583765534 0 0 0 0 0 0;0.588131422298983 0 0.314081294727961 0 0 0 0 0 0.632615202648636 0 0 0 1.12039468709595 0 0 0 0 0 0 0;0 0 0 0.620281238898666 0 0 0 0 0.665853755155897 0 0.443519419164187 0 0.0287540443670959 0 0 0 0 0 0 0;0 0 0 0 0 0 0.632615202648636 0.665853755155897 0 0 0 0 0 0 0 0 0 0 0 0.341087071649035;0 0.148093137302263 0 0 0 0 0 0 0 0 0.0523829918450132 0 0 0 0 0 0 0.401940201122634 0.691832558529399 0;0 0 0 0 0.800687507355036 0 0 0.443519419164187 0 0.0523829918450132 0 0.491690939364275 0 0.757845451055127 0 0 0 0.024463668194654 0 0;0 0 0 1.01777898612281 0.724909646173659 0 0 0 0 0 0.491690939364275 0 0 0 0 0 0 0 0 1.02836268723464;0 0 0 0 0 0.51932792913499 1.12039468709595 0.0287540443670959 0 0 0 0 0 0 0 0 0 0 0 0.366143225287491;0 0 0 0 0 0.111508583765534 0 0 0 0 0.757845451055127 0 0 0 0.223088374978438 0 0 0 0 0;0 0 0 1.02802169259185 0 0 0 0 0 0 0 0 0 0.223088374978438 0 0.344909749483892 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.344909749483892 0 0 0 0.353158597614942 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.105622237791164 0 0 0 0 0 0 0.401940201122634 0.024463668194654 0 0 0 0 0 0 0 0 0;0.411615488806083 0 0 0 0 0 0 0 0 0.691832558529399 0 0 0 0 0 0.353158597614942 0 0 0 0.849677928981906;0 0 0 0.829878923718159 0 0 0 0 0.341087071649035 0 0 1.02836268723464 0.366143225287491 0 0 0 0 0 0.849677928981906 0] );\r\nassert( isequal(route,[18 3]) \u0026\u0026 abs( d - 0.105622 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 17, 23, [0 0.151141399637051 0 0 0 0 0 0 0 0 0 0.105216194021975 0 0 0 0 0 0.437381445735918 0 0 0.949941070771521 0 0 0 0;0.151141399637051 0 0 0 0 0 0 0 1.22583368379244 0 0 0.079829221583307 0.71041636270324 0 0 0 0.1075924794072 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 1.21948687450578 0 0.567263036089771 0 0 0 0 0 0.857795458880245 0 0 0 0 0.731569267553795 0 0 0;0 0 0 0 0 0 0.186039341309778 0 0 0 0 0 0 0 0 0 0 2.00348310018009 0 0 0 0 0 0 0;0 0 0 0 0 1.32070145417138 0 0 0 0 0 0 0 0 0 0 0 0.430765092398605 0 0 0 0 0 0.46856479561555 0;0 0 0 0 1.32070145417138 0 0 0.203767017753022 0 0 0 0 0 0 0.487213897131877 0 0 0.896335225888555 0 0 0 0 0 0 0;0 0 0 0.186039341309778 0 0 0 0 0 0 0 0 0.406945507381253 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.203767017753022 0 0 0.15769661193131 0 0.65001597680104 0 0 0 0 0 0 0.15666137867965 0 0 0 0 0.723509833846064 0 0;0 1.22583368379244 1.21948687450578 0 0 0 0 0.15769661193131 0 0 0 0 0 0 0 0 0.508542446617735 0 0 0.696934855529271 0.169312519482881 0 0.00704092733099992 0 0;0 0 0 0 0 0 0 0 0 0 0 0 1.08493079525094 0.214254564261975 0 0.425013648805044 0 0 0 0 0 0 0 0 0.00543872970590864;0 0 0.567263036089771 0 0 0 0 0.65001597680104 0 0 0 0 0 0 0 0 0.696979111426999 0.525282567629852 0 0.621146400617813 1.20050590589561 0 0 0 0;0.105216194021975 0.079829221583307 0 0 0 0 0 0 0 0 0 0 0.459862031186997 0 0 0 0 0 0 0.698687249438191 0 0 0.00200957746053532 0 0;0 0.71041636270324 0 0 0 0 0.406945507381253 0 0 1.08493079525094 0 0.459862031186997 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.214254564261975 0 0 0 0 0.380308744719566 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.487213897131877 0 0 0 0 0 0 0 0.380308744719566 0 0 0.0449909078512449 0 0 1.22341039971646 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.425013648805044 0 0 0 0 0 0 0 0 0 0 0 0 1.43760755773283 0.719177032769178 0;0 0.1075924794072 0.857795458880245 0 0 0 0 0 0.508542446617735 0 0.696979111426999 0 0 0 0.0449909078512449 0 0 0 0 0 0 0 0 0 0;0.437381445735918 0 0 2.00348310018009 0.430765092398605 0.896335225888555 0 0.15666137867965 0 0 0.525282567629852 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0.696934855529271 0 0.621146400617813 0.698687249438191 0 0 1.22341039971646 0 0 0 0 0 1.1519343197436 0 0 0 0;0.949941070771521 0 0 0 0 0 0 0 0.169312519482881 0 1.20050590589561 0 0 0 0 0 0 0 0 1.1519343197436 0 0 0 0 0.214330337662627;0 0 0.731569267553795 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.723509833846064 0.00704092733099992 0 0 0.00200957746053532 0 0 0 1.43760755773283 0 0 0 0 0 0 0 0 0;0 0 0 0 0.46856479561555 0 0 0 0 0 0 0 0 0 0 0.719177032769178 0 0 0 0 0 0 0 0 0.649429697531317;0 0 0 0 0 0 0 0 0 0.00543872970590864 0 0 0 0 0 0 0 0 0 0 0.214330337662627 0 0 0.649429697531317 0] );\r\nassert( isequal(route,[17 2 12 23]) \u0026\u0026 abs( d - 0.189431 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 2, 9, [0 0 0 0 0 0.390568942736463 0.253317405921882 0 0 0 0 0 0 0 0 0.035303866587423 0 0.0932427029924401 0 0.228317786309953 0 0 0 0 0;0 0 0 0 0 0 0.22325539367323 0.0737968434096563 0 0.0216391156829114 1.01817561468837 0 0 0.166613690540579 0 0 0 0 0 0.0929136548216463 0 0 0 0 0;0 0 0 0 0 0.324975382720294 0 0 0 0 0 0 0 0 0.257683850031889 0 0 0 0.818836795828793 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0.0227807501033899 0 0 0 0 0.254392094407223 0 0 0 0 0 0.499630884751228 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.645309316664204 0 0 0 0 0 0.377002225744615 0 0 0 0 0;0.390568942736463 0 0.324975382720294 0 0 0 0 0 0 0 0 0.381625987614713 0.187530187877611 0 0 0 0 0 1.03662835165178 0 0 0 0 0 0;0.253317405921882 0.22325539367323 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.420116352005782 0.288516971344659 0 0 0 0 0.290423766876168 0;0 0.0737968434096563 0 0 0 0 0 0 0 0 0 0 0 1.14302504189143 0 0.894497023541543 0 0 0 0 0 0 0.181212342324972 0 0.4790219658659;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.66947645498941 0 0 0 0 0 0 0 0.881432911415172 0.190738003819626 0;0 0.0216391156829114 0 0 0 0 0 0 0 0 0 0 0 0 0 0.406383564162139 0 0 0 0 0 0 0 0 0.0727730905533963;0 1.01817561468837 0 0 0 0 0 0 0 0 0 0.968244418446258 0 0 0.528273242216383 0.125653272829919 0 0 0 0 0 0 0 0 0;0 0 0 0.0227807501033899 0 0.381625987614713 0 0 0 0 0.968244418446258 0 0 0 0 0.545221500471632 0 0 0.602095719309548 0 0 0 0 0 0;0 0 0 0 0 0.187530187877611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.926256705235548 0 0 0 0;0 0.166613690540579 0 0 0.645309316664204 0 0 1.14302504189143 0 0 0 0 0 0 0 0 0 0.21560951711239 0 0 0 0 0 0 0;0 0 0.257683850031889 0 0 0 0 0 0.66947645498941 0 0.528273242216383 0 0 0 0 0 0 0 0 0 0.213055228450905 0 0 0 0;0.035303866587423 0 0 0 0 0 0 0.894497023541543 0 0.406383564162139 0.125653272829919 0.545221500471632 0 0 0 0 0.450996873658263 0 0 0 0 0 0 0 0;0 0 0 0.254392094407223 0 0 0 0 0 0 0 0 0 0 0 0.450996873658263 0 0 0 0 0 0 0.219529444302005 0 0;0.0932427029924401 0 0 0 0 0 0.420116352005782 0 0 0 0 0 0 0.21560951711239 0 0 0 0 0 0 0 0.863470148104069 0 0.444628451921207 0;0 0 0.818836795828793 0 0 1.03662835165178 0.288516971344659 0 0 0 0 0.602095719309548 0 0 0 0 0 0 0 0 0 0.109259232718513 0 0 0;0.228317786309953 0.0929136548216463 0 0 0.377002225744615 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.615496286883062;0 0 0 0 0 0 0 0 0 0 0 0 0.926256705235548 0 0.213055228450905 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.863470148104069 0.109259232718513 0 0 0 0 0.0137884729469751 0;0 0 0 0.499630884751228 0 0 0 0.181212342324972 0.881432911415172 0 0 0 0 0 0 0 0.219529444302005 0 0 0 0 0 0 0.365687691203556 0;0 0 0 0 0 0 0.290423766876168 0 0.190738003819626 0 0 0 0 0 0 0 0 0.444628451921207 0 0 0 0.0137884729469751 0.365687691203556 0 0;0 0 0 0 0 0 0 0.4790219658659 0 0.0727730905533963 0 0 0 0 0 0 0 0 0 0.615496286883062 0 0 0 0 0] );\r\nassert( isequal(route,[2 7 24 9]) \u0026\u0026 abs( d - 0.704417 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 12, 4, [0 0 0 0 0 0.714172260222902 0 0 0 0 0 0 0 0 0 0 0 0 0 0.361655390928043 0 0 0 0 0;0 0 0 0 0 0.181492418867339 0 0 0 0 0 0 0 0 0 0 0 0 0.22307965545124 0 0 0 0 0 0.779096496125678;0 0 0 0 0 0 0.47292346615082 0 0 0.168841046075892 0 0 0 0 0 0 0 0 0 0.0217708463553388 0 0 0.667747131809592 0 0;0 0 0 0 0 0 0 0.57532352865356 0 0 1.14531063150095 0 0 0 0 0 0 0 0 1.81120439254402 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0.347520308679668 0 0 0 0 1.19301977580358 0 0.820270346367214 0 0 0.0596854204267023 0 0.365147722552969 0.160828167983497 0;0.714172260222902 0.181492418867339 0 0 0 0 0.993473525288174 0 0 0 0 0 0 0 0 0 0 0 0 0.900267645686867 0 0 0 0 0;0 0 0.47292346615082 0 0 0.993473525288174 0 0 0 0 0.303524976604928 0 0 0.988108387042638 0 0 0 0 1.09908596860658 0 0 0 0 0 0;0 0 0 0.57532352865356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0496932258637628 0 0 0 0 0 0 0.220051533000778 0 0 0;0 0 0.168841046075892 0 0 0 0 0 0 0 0 0 0.415893111213311 0 0 0 0 0 0 0 0 0 0 0.252874847836154 0.7525160069564;0 0 0 1.14531063150095 0.347520308679668 0 0.303524976604928 0 0 0 0 0 0.315427799185682 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.0659140954680451 0.229430180128888 0 0 0 1.02421541676855 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.415893111213311 0.315427799185682 0 0 0 1.43148800286315 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.988108387042638 0 0 0 0 0.0659140954680451 0 0 0 0 0.0723048054691602 0.570598773372364 0 0 0 0 0 0 0.816798020448907;0 0 0 0 0 0 0 0 0.0496932258637628 0 0 0.229430180128888 1.43148800286315 0 0 0.0969052461008522 0 0 0.562394406606289 0 0 0 0 0 0;0 0 0 0 1.19301977580358 0 0 0 0 0 0 0 0 0 0.0969052461008522 0 0.830027198843182 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.0723048054691602 0 0.830027198843182 0 0 0 0 0.471570888980097 0 0 0 0;0 0 0 0 0.820270346367214 0 0 0 0 0 0 0 0 0.570598773372364 0 0 0 0 0 0 0 0 0 0 0;0 0.22307965545124 0 0 0 0 1.09908596860658 0 0 0 0 1.02421541676855 0 0 0.562394406606289 0 0 0 0 0 0 0 0 0 0;0.361655390928043 0 0.0217708463553388 1.81120439254402 0 0.900267645686867 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.0596854204267023 0 0 0 0 0 0 0 0 0 0 0 0.471570888980097 0 0 0 0 0.920738174557066 0 0 0;0 0 0 0 0 0 0 0 0.220051533000778 0 0 0 0 0 0 0 0 0 0 0 0.920738174557066 0 0 0 0;0 0 0.667747131809592 0 0.365147722552969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.431353900603143;0 0 0 0 0.160828167983497 0 0 0 0 0.252874847836154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.139899289183316;0 0.779096496125678 0 0 0 0 0 0 0 0.7525160069564 0 0 0 0.816798020448907 0 0 0 0 0 0 0 0 0.431353900603143 0.139899289183316 0] );\r\nassert( isequal(route,[12 14 17 21 5 11 4]) \u0026\u0026 abs( d - 2.16231 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 21, 9, [0 1.30397831279197 0 0 0 0 0 0 0.205205702932437 0 0 0 0 0.462991342326146 0 0.0919395070383298 0 0 0 0 0 0 0 0.788285106392582 0;1.30397831279197 0 0 0 0 1.05960547137835 0 0 0.153644616706166 0 0 0.860262579703983 0 0 0 0 0 0 0 0 0 0 0 0.773468224481749 0;0 0 0 0.13195985000036 0 0 0 1.51813223209895 0 0 0 0 0 0.0156327604904785 0 1.27556519583119 0.93793259222666 0 0 0 0 0 0 0 0;0 0 0.13195985000036 0 0 0 0.458734989962526 0 0 0 0 0 0 0 0 0 0 0 0.835183344604242 0.11324698880843 0 0 1.27194671889278 0 0.873215204449672;0 0 0 0 0 0 0.0522387394084536 0.441514133149768 0 0 0 0 0 0 0 0 0 0 0 0.104845115642955 0 0 0 0 0;0 1.05960547137835 0 0 0 0 0 0 0 0 0 0.323427832607934 0 0 0 0 0 0.548178891330981 0 0 0 1.78927187214965 0 0 0;0 0 0 0.458734989962526 0.0522387394084536 0 0 0.128458273651367 0 1.10447307401052 0 0 1.60635812839544 0.490059715639469 0 0 0 0 0.87297695015148 0 0 0 0.0385154612576837 0 0;0 0 1.51813223209895 0 0.441514133149768 0 0.128458273651367 0 0 0.0426997868037813 0 0 0 0.316089962309322 0.556234063736422 0 0 0 0 0 0 0 0.125426946797567 0 0.501620852747415;0.205205702932437 0.153644616706166 0 0 0 0 0 0 0 0 0 0 0 0 0 1.22841179064666 0 0.506177174936367 0 0 0 0.139674374757514 0 0 0;0 0 0 0 0 0 1.10447307401052 0.0426997868037813 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.695460494256037;0 0 0 0 0 0 0 0 0 0 0 1.09170738934842 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.860262579703983 0 0 0 0.323427832607934 0 0 0 0 1.09170738934842 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 1.60635812839544 0 0 0 0 0 0 0 0 0 0 0 0 1.27248881503698 0 0 0 0 0.162219187624835;0.462991342326146 0 0.0156327604904785 0 0 0 0.490059715639469 0.316089962309322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.111140488918591 0.0639936929497993;0 0 0 0 0 0 0 0.556234063736422 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0.0919395070383298 0 1.27556519583119 0 0 0 0 0 1.22841179064666 0 0 0 0 0 0 0 0.772788879713252 0 0 0 0.00743946114818939 0 0.662296573850469 0 0;0 0 0.93793259222666 0 0 0 0 0 0 0 0 0 0 0 0 0.772788879713252 0 0 0 0 0 0 0 0 0.235465388137087;0 0 0 0 0 0.548178891330981 0 0 0.506177174936367 0 0 0 0 0 0 0 0 0 0.596123003045261 0 0 0.50807778971881 0 0.192149930306311 0;0 0 0 0.835183344604242 0 0 0.87297695015148 0 0 0 0 0 0 0 0 0 0 0.596123003045261 0 1.75354812715354 0 0 0 0.230875543406997 0.402865723829543;0 0 0 0.11324698880843 0.104845115642955 0 0 0 0 0 0 0 1.27248881503698 0 0 0 0 0 1.75354812715354 0 0 0 0.286957051522517 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00743946114818939 0 0 0 0 0 0 0 0 0.12234328650336;0 0 0 0 0 1.78927187214965 0 0 0.139674374757514 0 0 0 0 0 0 0 0 0.50807778971881 0 0 0 0 0 0 0.0229366876888033;0 0 0 1.27194671889278 0 0 0.0385154612576837 0.125426946797567 0 0 0 0 0 0 0 0.662296573850469 0 0 0 0.286957051522517 0 0 0 0 0;0.788285106392582 0.773468224481749 0 0 0 0 0 0 0 0 0 0 0 0.111140488918591 0 0 0 0.192149930306311 0.230875543406997 0 0 0 0 0 0;0 0 0 0.873215204449672 0 0 0 0.501620852747415 0 0.695460494256037 0 0 0.162219187624835 0.0639936929497993 0 0 0.235465388137087 0 0.402865723829543 0 0.12234328650336 0.0229366876888033 0 0 0] );\r\nassert( isequal(route,[21 25 22 9]) \u0026\u0026 abs( d - 0.284954 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 5, 5, [0 0 0.235687387990488 0 0 0.518662908555243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00169033754843562 1.18573193396702 0 0 0 0 0;0.235687387990488 0 0 0 0.350144748614205 0 0 0.499051956190166 0 0 0 0 0 0 0 0.428154355783706 0 0 0 0.988646147648288 0 0 0 0 0.766292681932783;0 0 0 0 0 0 0 0 0 0.306976149669423 0 0 0 0 0 0 0.148608071246878 0 0 0 0 0 0 0 0;0 0 0.350144748614205 0 0 0 0.366820040758671 0 0 0 0.947779130029861 0 0 0 0 0 0 0 0 0.781367996905263 0 0 0 0 0;0.518662908555243 0 0 0 0 0 0.28467286265608 0 0 0 0 0 0 0 0 0 0 0 0.814169013559602 0 0 0 0 0 0.514510683872373;0 0 0 0 0.366820040758671 0.28467286265608 0 0 0 0 0 0.137928171247269 0 0 0 0 0 0.581896713318172 0 0 0 1.00288388568789 0.926366539848811 0 0;0 0 0.499051956190166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.211128675902371 0 0 0 0 0 0 0 0 0;0 0 0 0.306976149669423 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.332300868928405;0 0 0 0 0.947779130029861 0 0 0 0 0 0 0 0 0 0.140274584917356 0 0 0 0.276337784565307 0 0 0 0 0 0;0 0 0 0 0 0 0.137928171247269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.422423933152413 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16443124331918 0 0 0 0.113521569230241 0 0 0.431552467605628 0;0 0 0 0 0 0 0 0 0 0 0.140274584917356 0 0 0 0 0 0 1.01590071824433 0 0 0 0 0 0 0;0 0 0.428154355783706 0 0 0 0 0 0.211128675902371 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0.148608071246878 0 0 0 0 0 0 0 0 0 0.16443124331918 0 0 0 0 0 0.816401527141028 0 0 0 0 1.51727966787778;0 0 0 0 0 0 0.581896713318172 0 0 0 0 0 0 0 1.01590071824433 0 0 0 0 0 0.0315916186043663 0 0 0 0;0 0.00169033754843562 0 0 0 0.814169013559602 0 0 0 0 0.276337784565307 0 0.422423933152413 0 0 0 0 0 0 0 0 0 0 0.113122720118215 0;0 1.18573193396702 0.988646147648288 0 0.781367996905263 0 0 0 0 0 0 0 0 0 0 0 0.816401527141028 0 0 0 0 0 0 0 1.22595526329414;0 0 0 0 0 0 0 0 0 0 0 0 0 0.113521569230241 0 0 0 0.0315916186043663 0 0 0 0 0 0.0278718835255773 0;0 0 0 0 0 0 1.00288388568789 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.627233109842477 0 0;0 0 0 0 0 0 0.926366539848811 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.627233109842477 0 0.210579136296008 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.431552467605628 0 0 0 0 0.113122720118215 0 0.0278718835255773 0 0.210579136296008 0 0;0 0 0.766292681932783 0 0 0.514510683872373 0 0 0 0.332300868928405 0 0 0 0 0 0 1.51727966787778 0 0 1.22595526329414 0 0 0 0 0] );\r\nassert( isequal(route,5) \u0026\u0026 abs( d - 0 ) \u003c 1e-4 );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":26,"test_suite_updated_at":"2012-03-07T20:02:13.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-06T18:48:13.000Z","updated_at":"2026-03-30T17:22:55.000Z","published_at":"2012-03-07T20:03: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:t\u003eGiven a matrix that represent the distance along highways between major cities numbered 1 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, provide the path and shortest distance from a given city,\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\u003efrom\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, to a given city,\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\u003eto\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Assume that 0 represents no direct path between two cities. If there is no solution to the problem, return -1 for both the path and the distance.\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":45457,"title":"Minimal Path - 02 ","description":"Given a matrix, find the minimal path from the top left to the bottom right by only moving to the right and down so that the summation is minimum.\r\n\r\nUse linear index to show the path.\r\n\r\nFor example,\r\n\r\n x=[ 2     2     2     2     2\r\n    10    10    10     1     2\r\n    20    20    20     1     2\r\n    30    30    30    30     2]\r\n\r\nThe minimal path is -- [1     5     9    13    14    15    19    20]","description_html":"\u003cp\u003eGiven a matrix, find the minimal path from the top left to the bottom right by only moving to the right and down so that the summation is minimum.\u003c/p\u003e\u003cp\u003eUse linear index to show the path.\u003c/p\u003e\u003cp\u003eFor example,\u003c/p\u003e\u003cpre\u003e x=[ 2     2     2     2     2\r\n    10    10    10     1     2\r\n    20    20    20     1     2\r\n    30    30    30    30     2]\u003c/pre\u003e\u003cp\u003eThe minimal path is -- [1     5     9    13    14    15    19    20]\u003c/p\u003e","function_template":"function y = minimal_path_3(x)","test_suite":"%%\r\nx = [2     2     2     2     2\r\n    10    10    10     1     2\r\n    20    20    20     1     2\r\n    30    30    30    30     2]\r\ny=[1     5     9    13    14    15    19    20]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\nx = [2     2     2     2     2\r\n     0     0    10     1     2\r\n    20     0    20     1     2\r\n    30     0     0     3     2]\r\ny=[1     2     6     7     8    12    16    20]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\nx = [100    20    30    40    50\r\n    60    70    80    90   100]\r\ny=[1     3     5     7     9    10]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\nx =  [11         111          23          45          67        -500          34          23\r\n          22          32         432        1234          12        1244        -544          44\r\n           1           2           3           4           5           6           7           8\r\n      -12000          45           6           7           8         433         664        2344];\r\ny=[1     2     3     4     8    12    16    20    24    28    32]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\n%x=magic(10);\r\n%y=[ 1    11    21    22    32    42    43    44    45    55    56    57    58 68    69    79    89    90   100];\r\n%assert(isequal(minimal_path_3(x),y))","published":true,"deleted":false,"likes_count":0,"comments_count":5,"created_by":363598,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":11,"test_suite_updated_at":"2020-04-16T05:52:42.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2020-04-14T22:27:26.000Z","updated_at":"2020-04-16T05:52:42.000Z","published_at":"2020-04-14T22:29:27.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\u003eGiven a matrix, find the minimal path from the top left to the bottom right by only moving to the right and down so that the summation is 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\u003eUse linear index to show the path.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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,\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[ x=[ 2     2     2     2     2\\n    10    10    10     1     2\\n    20    20    20     1     2\\n    30    30    30    30     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\u003eThe minimal path is -- [1 5 9 13 14 15 19 20]\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":2218,"title":"Wayfinding 1 - crossing","description":"This is the first part of a series of assignments about wayfinding. The final goal 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.\r\n\r\n*How many times does AB cross another line?*\r\n\r\n\u003c\u003chttp://i60.tinypic.com/mk7us1.png\u003e\u003e\r\n\r\nThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.  \r\n\r\nThe inputs of the function |WayfindingIntersections(AB,L)| 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 3-dimensional matrix |L| of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \r\n\r\nYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end. \r\n\r\np.s. I noticed later on that there is another Cody problem \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect 1720\u003e that is somewhat similar. But this was a logical start for the series.","description_html":"\u003cp\u003eThis is the first part of a series of assignments about wayfinding. The final goal 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.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross another line?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i60.tinypic.com/mk7us1.png\"\u003e\u003cp\u003eThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingIntersections(AB,L)\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 3-dimensional matrix \u003ctt\u003eL\u003c/tt\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\u003c/p\u003e\u003cp\u003ep.s. I noticed later on that there is another Cody problem \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\"\u003e1720\u003c/a\u003e that is somewhat similar. But this was a logical start for the series.\u003c/p\u003e","function_template":"function n = WayfindingIntersections(AB,L)\r\n  n = randi(size(L,3)+1)-1;\r\nend","test_suite":"%%\r\nAB = [2 0;0 5];\r\nL = cat(3,...\r\n    [1 0;2 2],...\r\n    [-1 4;3 3],...\r\n    [-3 2;0 2],...\r\n    [2 3;4 2]...\r\n    );\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 5 2 ];\r\nL = cat(3,...\r\n[ 2 2 ; 2 -9 ],...\r\n[ -2 3 ; 8 8 ],...\r\n[ 7 -1 ; 4 6 ],...\r\n[ 7 -3 ; -6 1 ],...\r\n[ -6 -6 ; -1 2 ],...\r\n[ 5 -8 ; 3 4 ],...\r\n[ 3 5 ; -8 -9 ],...\r\n[ 8 -8 ; 4 -3 ],...\r\n[ -7 9 ; -5 9 ],...\r\n[ 6 3 ; 8 3 ],...\r\n[ 0 4 ; 9 -2 ],...\r\n[ -8 0 ; 4 0 ],...\r\n[ 6 8 ; 6 0 ],...\r\n[ -6 2 ; -6 9 ],...\r\n[ 8 -4 ; 1 -5 ],...\r\n[ 5 -1 ; -5 -3 ],...\r\n[ -2 -9 ; 6 -5 ],...\r\n[ 8 6 ; 6 -7 ],...\r\n[ -4 2 ; 5 2 ],...\r\n[ 8 6 ; 0 6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -3 -1 ; -3 7 ];\r\nL = cat(3,...\r\n[ 9 8 ; 1 6 ],...\r\n[ -4 -6 ; -3 9 ],...\r\n[ -2 8 ; 7 5 ],...\r\n[ -3 5 ; -8 2 ],...\r\n[ 1 2 ; 3 5 ],...\r\n[ 4 -5 ; -3 -5 ],...\r\n[ 8 5 ; -1 -2 ],...\r\n[ 4 8 ; 3 5 ],...\r\n[ -3 -4 ; 7 8 ],...\r\n[ 9 7 ; -1 -3 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 5 9 ; -9 0 ];\r\nL = cat(3,...\r\n[ 3 -1 ; 1 -2 ],...\r\n[ -5 3 ; -3 4 ],...\r\n[ -9 -2 ; -3 -7 ],...\r\n[ -6 -5 ; -1 -3 ],...\r\n[ 4 -3 ; 5 -9 ],...\r\n[ -6 -2 ; -4 -4 ],...\r\n[ -1 -7 ; -3 -4 ],...\r\n[ 0 9 ; 6 3 ],...\r\n[ -6 1 ; -7 -8 ],...\r\n[ 6 5 ; 6 5 ],...\r\n[ 5 6 ; -5 -1 ],...\r\n[ 7 9 ; -7 -7 ],...\r\n[ -9 -4 ; -2 -3 ],...\r\n[ 3 5 ; -2 5 ],...\r\n[ -3 -4 ; 5 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 0;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 6 -7 ];\r\nL = cat(3,...\r\n[ -7 0 ; -3 0 ],...\r\n[ -1 5 ; -8 0 ],...\r\n[ 8 -5 ; 1 4 ],...\r\n[ -4 -4 ; 7 3 ],...\r\n[ 0 0 ; 4 -5 ],...\r\n[ -2 -3 ; -4 4 ],...\r\n[ 4 -8 ; 2 -5 ],...\r\n[ -7 6 ; 6 3 ],...\r\n[ -2 -7 ; -3 -8 ],...\r\n[ -6 5 ; 8 7 ],...\r\n[ 9 -9 ; 5 -9 ],...\r\n[ 6 8 ; 4 6 ],...\r\n[ 2 7 ; 5 -2 ],...\r\n[ -7 -5 ; -1 -7 ],...\r\n[ -8 -2 ; 0 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 45 25 ; 23 101 ];\r\nL = cat(3,...\r\n[ 94 6 ; 2 71 ],...\r\n[ 40 -9 ; 51 84 ],...\r\n[ -8 97 ; 72 105 ],...\r\n[ 18 59 ; 36 88 ],...\r\n[ 95 56 ; 10 -6 ],...\r\n[ 61 48 ; 96 22 ],...\r\n[ 12 100 ; 94 16 ],...\r\n[ 103 90 ; 54 106 ],...\r\n[ 108 53 ; 34 68 ],...\r\n[ 9 20 ; 1 7 ],...\r\n[ 76 64 ; -8 106 ],...\r\n[ 60 9 ; 51 69 ],...\r\n[ 75 62 ; 60 -7 ],...\r\n[ 80 -8 ; 70 68 ],...\r\n[ 8 30 ; 68 67 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -5 -6 ; -2 -6 ];\r\nL = cat(3,...\r\n[ -1 -7 ; -7 -1 ],...\r\n[ -4 -6 ; -6 -5 ],...\r\n[ -7 -2 ; -1 -5 ],...\r\n[ -9 -6 ; -4 -4 ],...\r\n[ -9 -3 ; -3 -2 ],...\r\n[ -2 -1 ; -3 -2 ],...\r\n[ -4 -5 ; -6 -9 ],...\r\n[ -8 -1 ; -4 -6 ],...\r\n[ -1 -5 ; -5 -1 ],...\r\n[ -4 -6 ; -2 -5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 6;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 1 6 ; 6 7 ];\r\nL = cat(3,...\r\n[ 5 8 ; 2 8 ],...\r\n[ 6 5 ; 3 2 ],...\r\n[ 4 8 ; 6 1 ],...\r\n[ 7 2 ; 7 9 ],...\r\n[ 1 8 ; 1 2 ],...\r\n[ 1 6 ; 1 9 ],...\r\n[ 2 6 ; 1 2 ],...\r\n[ 3 9 ; 2 4 ],...\r\n[ 5 9 ; 2 8 ],...\r\n[ 2 8 ; 2 5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T14:46:37.000Z","updated_at":"2026-02-19T10:27:05.000Z","published_at":"2014-02-25T14:59: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\":[{\"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 first part of a series of assignments about wayfinding. The final goal 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.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eHow many times does AB cross another line?\u003c/w:t\u003e\u003c/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 first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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\u003eWayfindingIntersections(AB,L)\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 3-dimensional 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\u003eL\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\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 L = cat(3,...\\n  [ x1_start x1_end\\n    y1_start y1_end ] ...\\n   ,...\\n  [ x2_start x2_end\\n    y2_start y2_end ] ...\\n   ,...\\n  [ x3_start x3_end\\n    y3_start y3_end ] ... % etc.\\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 n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ep.s. I noticed later on that there is another Cody 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.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1720\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e that is somewhat similar. But this was a logical start for the series.\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":2219,"title":"Wayfinding 2 - traversing","description":"This is the second part of a series of assignments about wayfinding. The final goal 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\r\n*How many times does AB cross the boundary of area F?*\r\n\r\n\u003c\u003chttp://i59.tinypic.com/219vz42.png\u003e\u003e\r\n\r\nFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\r\n\r\nThe inputs of the function WayfindingBoundaryCrossing(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 matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\r\n\r\nYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\r\n","description_html":"\u003cp\u003eThis is the second part of a series of assignments about wayfinding. The final goal 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.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross the boundary of area F?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i59.tinypic.com/219vz42.png\"\u003e\u003cp\u003eFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\u003c/p\u003e\u003cp\u003eThe inputs of the function WayfindingBoundaryCrossing(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 matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\u003c/p\u003e","function_template":"function n = WayfindingBoundaryCrossing(AB,F)\r\n  n = randi(size(F,2))-1;\r\nend","test_suite":"%%\r\nAB = [ 0 0 ; 6 -8 ];\r\nF = [\r\n      -4    4    4   -4\r\n       2    2   -4   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 0 0 ; 4 -6 ];\r\nF = [\r\n      -6    4    0\r\n      -0    2   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 6 -6 ; 0 0 ];\r\nF = [\r\n      -8   -8    4\r\n       2   -4   -0\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 8 -6 ; 6 -8 ];\r\nF = [\r\n      -6    0   -3    7    9    4    6   -4   -7   -2   -7   -8\r\n      -9   -9    0   -4    1    7   -0    4   -1   -7   -5   -9\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nn_correct = randi(9)-1;\r\nAB = [ 0 0 ; n_correct*2-9 -10 ];\r\nF = [\r\n      -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    4    4\r\n      -8   -6   -6   -4   -4   -2   -2   -0   -0    2    2    4    4    6    6   -8\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":3,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":"2014-02-26T11:59:09.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T15:14:11.000Z","updated_at":"2026-02-19T10:33:57.000Z","published_at":"2014-02-26T11:59:09.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 second part of a series of assignments about wayfinding. The final goal 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\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\u003eHow many times does AB cross the boundary of area F?\u003c/w:t\u003e\u003c/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 second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 WayfindingBoundaryCrossing(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 matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\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  [ x1 x2 ... xn ;\\n    y1 y2 ... yn ]]]\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 n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\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":45459,"title":"Minimal Path - 04","description":"Given a matrix, find the minimal path sum from any cell in the left column and finishing in any cell in the right column.\r\n\r\nYou can move up, right \u0026 down.","description_html":"\u003cp\u003eGiven a matrix, find the minimal path sum from any cell in the left column and finishing in any cell in the right column.\u003c/p\u003e\u003cp\u003eYou can move up, right \u0026 down.\u003c/p\u003e","function_template":"function y = minimal_path_5(xx)","test_suite":"%%\r\nx =[1 12 4 6 8 10 100 ; 1 5 7 87 98 2 200;20 56 74 1 34 56 21]\r\ny_correct = 120;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n%%\r\nx =[1 122 4 6 8 10 100 ; 1 5 7 87 98 2 200;20 56 74 1 34 56 21]\r\ny_correct = 120;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n\r\n%%\r\nx = [2     2     2     2     2\r\n     0     0    10     1     2\r\n    20     0    20     1     2\r\n    30     0     0     3     2];\r\nx=flipud(x);\r\ny_correct = 5;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n\r\n%%\r\nx=[131\t673\t234\t103\t18\r\n201\t96\t342\t965\t150\r\n630\t803\t746\t422\t111\r\n537\t699\t497\t121\t956\r\n805\t732\t524\t37\t331];\r\n\r\ny_correct = 994;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n%%\r\nx=magic(10);\r\ny_correct = 429;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n%%\r\nx=[4074\t3279\t2194\t3757\t1759\t811\t534\t4266\t3902\t2736\t3222\t1556\t428\t189\t153\t299\t867\t4759\t164\t1260\t2115\t3895\t1274\t880\t3239\t2912\t2023\t1739\t4109\t2573\r\n4529\t179\t1908\t1276\t4155\t3972\t4810\t3111\t1949\t1482\t1894\t4617\t1313\t4426\t3721\t3410\t1955\t4602\t2806\t1453\t472\t2118\t1121\t3609\t3396\t2704\t2242\t750\t2150\t4422\r\n635\t4246\t3828\t2530\t2927\t1557\t24\t1755\t1209\t3724\t4058\t2152\t4006\t4567\t2501\t213\t4157\t264\t4410\t3086\t2993\t455\t3340\t2368\t3179\t4350\t1830\t2931\t4439\t2941\r\n4567\t4670\t3976\t3496\t2749\t2643\t3875\t2567\t2020\t945\t2665\t925\t147\t3981\t2400\t358\t4017\t3690\t3346\t1327\t2355\t1333\t4222\t764\t4726\t1324\t3818\t1311\t1956\t774\r\n3162\t3394\t935\t4455\t4586\t829\t4087\t2010\t483\t3434\t1754\t4525\t4645\t494\t4524\t2609\t303\t1346\t953\t4122\t3480\t769\t1723\t1706\t1045\t1591\t3140\t223\t3846\t1000\r\n488\t3789\t2449\t4797\t1430\t3010\t4344\t380\t660\t918\t4696\t4899\t3652\t1310\t3050\t484\t1997\t2115\t1845\t4914\t3500\t1406\t3903\t3037\t3547\t597\t3860\t3775\t1984\t2035\r\n1393\t3716\t2228\t2737\t3787\t1315\t423\t1200\t4711\t1843\t4380\t2195\t2444\t1677\t3089\t4091\t2635\t2740\t2304\t3652\t3193\t2201\t3377\t959\t1182\t4700\t4665\t1214\t4043\t3744\r\n2735\t1962\t3232\t694\t3769\t3271\t1999\t617\t4781\t3129\t2751\t556\t2893\t3399\t4298\t4088\t2084\t4714\t4909\t1720\t169\t2636\t34\t3693\t597\t3228\t4864\t2213\t3776\t4128\r\n4788\t3278\t3547\t747\t1903\t3447\t1300\t920\t2877\t3902\t3113\t1291\t1187\t683\t4028\t3613\t3285\t2089\t783\t2921\t345\t2288\t3011\t1215\t3037\t2398\t961\t3439\t1887\t3950\r\n4825\t856\t3774\t1288\t2840\t3741\t4001\t1200\t299\t406\t2936\t2044\t2295\t3607\t2884\t750\t3140\t4916\t4278\t539\t1598\t4377\t1934\t4588\t2251\t3197\t695\t1797\t1081\t1593\r\n789\t3531\t1381\t4204\t380\t2253\t2158\t2087\t1174\t4647\t1039\t2975\t4816\t534\t915\t3299\t1460\t1508\t3224\t4532\t2655\t2591\t4580\t1346\t2294\t2724\t3482\t3682\t3953\t2671\r\n4853\t160\t3399\t1272\t270\t420\t4554\t249\t1766\t3879\t1507\t1312\t2735\t3269\t1200\t2593\t2159\t3506\t1882\t4399\t3273\t4719\t6\t3828\t3310\t3237\t470\t1974\t4747\t450\r\n4786\t1385\t3276\t4072\t2654\t1145\t910\t4514\t4106\t2434\t2355\t3015\t2606\t2471\t4433\t4865\t78\t3332\t955\t4089\t2039\t3189\t2313\t944\t3852\t2720\t2628\t3418\t1638\t559\r\n2427\t231\t814\t1218\t3896\t4567\t1320\t4724\t78\t2180\t1153\t3557\t1158\t3896\t144\t3245\t4921\t2696\t2142\t1304\t4100\t4789\t2122\t1438\t1752\t3606\t2652\t3521\t3357\t682\r\n4002\t486\t595\t4647\t4671\t762\t728\t2455\t216\t2234\t4222\t1109\t2445\t3576\t2450\t4002\t836\t3491\t2411\t2972\t3592\t1204\t2305\t456\t3311\t2613\t4306\t2212\t2194\t3394\r\n710\t4118\t2492\t1750\t650\t4130\t681\t2447\t845\t1532\t974\t588\t3121\t4519\t840\t2269\t532\t3333\t604\t113\t4844\t3381\t3851\t2882\t2081\t4969\t2425\t98\t4168\t2476\r\n2109\t3475\t4799\t983\t2845\t2692\t4347\t1689\t3246\t2543\t1130\t1484\t3396\t4455\t4894\t2162\t1863\t891\t2948\t2127\t2657\t1446\t1613\t3417\t4210\t1094\t1968\t1655\t3845\t949\r\n4579\t1586\t1702\t1256\t2347\t4981\t2899\t4501\t3659\t2554\t854\t1594\t1978\t1671\t3564\t4127\t991\t641\t1131\t1564\t1626\t3360\t3924\t2733\t4165\t529\t3358\t2122\t837\t2476\r\n3962\t4752\t2927\t3081\t60\t391\t2750\t1847\t3239\t4089\t1139\t2121\t1838\t3494\t2503\t418\t2449\t4996\t1924\t808\t529\t3476\t2357\t2129\t1283\t549\t3707\t1352\t4310\t739\r\n4798\t173\t1120\t2367\t1686\t2214\t725\t557\t2255\t3975\t2179\t2540\t4940\t990\t2356\t666\t1698\t856\t2915\t894\t3055\t340\t179\t3223\t3068\t318\t2601\t986\t4950\t275];\r\n\r\ny_correct = 56185;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":363598,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-04-14T23:28:19.000Z","updated_at":"2020-04-14T23:28:19.000Z","published_at":"2020-04-14T23:28:19.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\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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 matrix, find the minimal path sum from any cell in the left column and finishing in any cell in the right column.\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\u003eYou can move up, right \u0026amp; down.\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":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":787,"title":"Path Optimization thru N words : Time Optimization","description":"This is an extension of\r\n\u003chttp://www.mathworks.com/matlabcentral/cody/problems/196-love-is-an-n-letter-word Cody 196 love\u003e with a more stressing test set and scoring based upon time.\r\n\r\nGreater than 10 words induces time issues with brute force combinatorics.\r\n\r\nDescription is copy of Alfonso Nieto-Castanon's problem statement for Cody 196.\r\n\r\nGiven a list of N words, return the N-letter word (choosing one letter from each word) with the property of having the least distance between each pair of two consecutive letters (if there are multiple optimal solutions return any one of them). Letters may repeat inside words.\r\n\r\nExample: s1 = {'abcd','bcde','cdef','defg'}; should return s2 = 'dddd'; (with total letter-distance = 0)\r\n\r\nExample: s1={'aldfejk','czoa','vwy','abcde'}; should return s2='love'; (with total letter-distance = 27: 'l'-'o'=3 + 'o'-'v'=7 + 'v'-'e'=17 ; compare for example to the possible word 'aave' which has a total letter-distance of 38)\r\n\r\n*Passing:* All problems correct and time \u003c 2 seconds\r\n\r\n*Output chart:* Time in milliseconds with a max of 100 ms.\r\n\r\nNote: Did consider logarithmic scale but keeping it simple for now.","description_html":"\u003cp\u003eThis is an extension of \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/196-love-is-an-n-letter-word\"\u003eCody 196 love\u003c/a\u003e with a more stressing test set and scoring based upon time.\u003c/p\u003e\u003cp\u003eGreater than 10 words induces time issues with brute force combinatorics.\u003c/p\u003e\u003cp\u003eDescription is copy of Alfonso Nieto-Castanon's problem statement for Cody 196.\u003c/p\u003e\u003cp\u003eGiven a list of N words, return the N-letter word (choosing one letter from each word) with the property of having the least distance between each pair of two consecutive letters (if there are multiple optimal solutions return any one of them). Letters may repeat inside words.\u003c/p\u003e\u003cp\u003eExample: s1 = {'abcd','bcde','cdef','defg'}; should return s2 = 'dddd'; (with total letter-distance = 0)\u003c/p\u003e\u003cp\u003eExample: s1={'aldfejk','czoa','vwy','abcde'}; should return s2='love'; (with total letter-distance = 27: 'l'-'o'=3 + 'o'-'v'=7 + 'v'-'e'=17 ; compare for example to the possible word 'aave' which has a total letter-distance of 38)\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e All problems correct and time \u0026lt; 2 seconds\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput chart:\u003c/b\u003e Time in milliseconds with a max of 100 ms.\u003c/p\u003e\u003cp\u003eNote: Did consider logarithmic scale but keeping it simple for now.\u003c/p\u003e","function_template":"function y = min_path_cost(s1)\r\n  s2 = '';\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',100);\r\n%%\r\nformat short\r\nformat compact\r\nglobal net_time\r\ns1 = {'abcd','bcde','cdef','defg'};\r\n\r\ns2=min_path_cost(s1); % to get good time\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3;\r\n\r\nassert(isequal(s2,'dddd'))\r\n\r\nnet_time=dt\r\n%%\r\nglobal net_time\r\ntemp=net_time; % anti-cheat\r\ns1 = {'aldfejk','czoa','vwy','abcde'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'love'))\r\n\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\n% anti-cheat \r\ntemp=net_time;\r\n\r\ns1 = {'aldfejk','czoa','vwy','abcde'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\npause(0.2);\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'love'))\r\n\r\nif dt\u003c200\r\n net_time=2001 % cheat trap fail condition\r\nend\r\n%%\r\n% not part of the time trial\r\n% avoids look-up table hack - Castano\r\ns1 = cellfun(@(x)char('a'-1+randi(26,1,5)),cell(1,7),'uniformoutput',false);\r\nassert(all(any(bsxfun(@eq,min_path_cost(s1),cell2mat(cellfun(@(x)x',s1,'uniformoutput',false)))))\u0026all(sum(abs(diff(double(min_path_cost(s1)))))\u003c=sum(abs(diff(double(cell2mat(cellfun(@(x)x(randi(numel(x),1,1000))',s1,'uniformoutput',false))),1,2)),2)));\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'lqjfac','deamv','fkazbw','idlw','ajmf','abcwz','wxyz'}; %lmklmww\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'lmklmww'))\r\nnet_time=temp+dt\r\n\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'lwjac','demv','fkabw','idlw','pqmf','abcnq','fwxyz','mnop'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'cdfdfcfm')|isequal(s2,'cdbdfcfm'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'ldjac','demv','fkabw','idlw','pqmf','abcnq','fwxyz','mnop','flap'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'ddfdfcfml')|isequal(s2,'ddbdfcfml'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'the','goal','of','life','is','living','in','agreement','with','nature'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'hgfiiiighe')|isequal(s2,'hgffiiighe'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'he' 'has','all','the','virtues','idislike','andnone','ofthe','vicesi','admire'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'eaaeeeeeee'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\n\r\ns1 = {'history' 'will','be','kind','to','me','for','i','intend','to','write','it'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'iiekomoiiort')|isequal(s2,'iieiomoiiort'))\r\nnet_time=temp+dt\r\n\r\n%%\r\nglobal net_time\r\n% Time performance rqmt\r\nassert(net_time\u003c2000,sprintf('Net time = %s',num2str(net_time))); \r\n%%\r\nglobal net_time\r\n% net_time in ms\r\n% Create graph data\r\nnet_time=min(100,net_time) % Limit graph y-axis\r\n\r\nfeval(@assignin,'caller','score',floor(net_time));\r\n\r\n%fh=fopen('min_path_cost.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,round(net_time/2)]));\r\n%fclose(fh);","published":true,"deleted":false,"likes_count":1,"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":"2012-11-22T12:11:45.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-24T20:34:17.000Z","updated_at":"2012-11-22T12:11:45.000Z","published_at":"2012-06-25T00:03: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:t\u003eThis is an extension 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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/196-love-is-an-n-letter-word\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody 196 love\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e with a more stressing test set and scoring based upon time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGreater than 10 words induces time issues with brute force combinatorics.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDescription is copy of Alfonso Nieto-Castanon's problem statement for Cody 196.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 a list of N words, return the N-letter word (choosing one letter from each word) with the property of having the least distance between each pair of two consecutive letters (if there are multiple optimal solutions return any one of them). Letters may repeat inside words.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: s1 = {'abcd','bcde','cdef','defg'}; should return s2 = 'dddd'; (with total letter-distance = 0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: s1={'aldfejk','czoa','vwy','abcde'}; should return s2='love'; (with total letter-distance = 27: 'l'-'o'=3 + 'o'-'v'=7 + 'v'-'e'=17 ; compare for example to the possible word 'aave' which has a total letter-distance of 38)\u003c/w:t\u003e\u003c/w:r\u003e\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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e All problems correct and time \u0026lt; 2 seconds\u003c/w:t\u003e\u003c/w:r\u003e\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 chart:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time in milliseconds with a max of 100 ms.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: Did consider logarithmic scale but keeping it simple for now.\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\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":2007,"title":"Swap two numbers","description":"Example \r\n\r\nInput:\r\n\r\n a = 10\r\n b = 20\r\n\r\nOutput\r\n\r\n a = 20\r\n b = 10\r\n","description_html":"\u003cp\u003eExample\u003c/p\u003e\u003cp\u003eInput:\u003c/p\u003e\u003cpre\u003e a = 10\r\n b = 20\u003c/pre\u003e\u003cp\u003eOutput\u003c/p\u003e\u003cpre\u003e a = 20\r\n b = 10\u003c/pre\u003e","function_template":"function [aOut,bOut] = swapit(aIn,bIn)\r\n  aOut = 0;\r\n  bOut = 0;\r\nend","test_suite":"%%\r\naIn = 10;\r\nbIn = 20;\r\naOut_correct = 20;\r\nbOut_correct = 10;\r\n[aOut,bOut] = swapit(aIn,bIn);\r\n\r\nassert(isequal(aOut, aOut_correct))\r\nassert(isequal(bOut, bOut_correct))\r\n\r\n%%\r\n\r\naIn = 0;\r\nbIn = -3;\r\naOut_correct = -3;\r\nbOut_correct = 0;\r\n[aOut,bOut] = swapit(aIn,bIn);\r\n\r\nassert(isequal(aOut, aOut_correct))\r\nassert(isequal(bOut, bOut_correct))\r\n","published":true,"deleted":false,"likes_count":5,"comments_count":3,"created_by":1388,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":778,"test_suite_updated_at":"2013-11-20T16:20:49.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-11-19T07:42:21.000Z","updated_at":"2026-03-19T08:08:41.000Z","published_at":"2013-11-19T07:42:21.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\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\u003eInput:\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 = 10\\n b = 20]]\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\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 = 20\\n b = 10]]\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":45467,"title":"Find the fastest reaction chain to reach a target compound","description":"This problem is related to Problem \u003c45470\u003e.\r\n\r\nLet's denote a list of *N* compounds as 1, 2, ..., *N*. You are then given a list of valid reactions for converting one compound to another (e.g. 1 --\u003e 2), as well as the time it takes to complete them ( _completion time_ ). With this information, we can generate _reaction chains_. A reaction chain is a series of valid reaction steps taken one after the other. Examples are given below:\r\n\r\n  Given N = 4 and the following valid reactions:\r\n  Reaction 1:    1 --\u003e 2 takes 1.5 mins\r\n  Reaction 2:    1 --\u003e 3 takes 2.5 mins \r\n  Reaction 3:    2 --\u003e 3 takes 0.6 mins\r\n  Reaction 4:    3 --\u003e 4 takes 4.1 mins \r\n  Reaction 5:    4 --\u003e 2 takes 3.2 mins\r\n  Sample reaction chains: 1 --\u003e 3 --\u003e 4         takes (2.5 + 4.1) mins\r\n                          1 --\u003e 2 --\u003e 3 --\u003e 4   takes (1.5 + 0.6 + 4.1) mins \r\n                          4 --\u003e 2 --\u003e 3         takes (3.2 + 0.6) mins\r\n\r\nNote that conversion reactions can only move forward. But if the list states that converting to and from the same two compounds is possible, then a reaction chain can take only one of these paths.\r\n\r\nYour task is this: Given a starting compound *S* and a target compound *T*, can you find a reaction chain between them with the smallest _total completion time_? \r\n\r\nThe inputs to this problem are *R*, *S*, and *T*. Variable *R* is a 3-column matrix containing the list of valid reaction steps at each row _i_: \r\n\r\n\"Reaction _i_: *R*( _i_, _1_) --\u003e *R*( _i_, _2_) takes *R*( _i_, _3_) mins\" \r\n\r\nOutput the total time of the fastest reaction chain from *S* to *T*, rounded to 2 decimal places. If a solution does not exist, then output |Inf|. You are ensured that:\r\n\r\n* 2 \u003c= *N* \u003c= 20\r\n* *S*, *T*, and all elements in the first 2 columns of *R* are integers within [1, *N*].\r\n* Completion times are decimal numbers within (0,10].\r\n* *S* is not equal to *T*.\r\n* Each compound 1, ..., *N* is mentioned at least once in *R*. Hence, *N* can be inferred from matrix *R*.\r\n\r\nThe following sample test case is the one illustrated above:\r\n\r\n  \u003e\u003e R = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\r\n  \u003e\u003e reaction_chain(R,1,4)\r\n  ans = \r\n       6.20\r\n\r\n","description_html":"\u003cp\u003eThis problem is related to Problem \u003ca href = \"45470\"\u003e45470\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eLet's denote a list of \u003cb\u003eN\u003c/b\u003e compounds as 1, 2, ..., \u003cb\u003eN\u003c/b\u003e. You are then given a list of valid reactions for converting one compound to another (e.g. 1 --\u0026gt; 2), as well as the time it takes to complete them ( \u003ci\u003ecompletion time\u003c/i\u003e ). With this information, we can generate \u003ci\u003ereaction chains\u003c/i\u003e. A reaction chain is a series of valid reaction steps taken one after the other. Examples are given below:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eGiven N = 4 and the following valid reactions:\r\nReaction 1:    1 --\u0026gt; 2 takes 1.5 mins\r\nReaction 2:    1 --\u0026gt; 3 takes 2.5 mins \r\nReaction 3:    2 --\u0026gt; 3 takes 0.6 mins\r\nReaction 4:    3 --\u0026gt; 4 takes 4.1 mins \r\nReaction 5:    4 --\u0026gt; 2 takes 3.2 mins\r\nSample reaction chains: 1 --\u0026gt; 3 --\u0026gt; 4         takes (2.5 + 4.1) mins\r\n                        1 --\u0026gt; 2 --\u0026gt; 3 --\u0026gt; 4   takes (1.5 + 0.6 + 4.1) mins \r\n                        4 --\u0026gt; 2 --\u0026gt; 3         takes (3.2 + 0.6) mins\r\n\u003c/pre\u003e\u003cp\u003eNote that conversion reactions can only move forward. But if the list states that converting to and from the same two compounds is possible, then a reaction chain can take only one of these paths.\u003c/p\u003e\u003cp\u003eYour task is this: Given a starting compound \u003cb\u003eS\u003c/b\u003e and a target compound \u003cb\u003eT\u003c/b\u003e, can you find a reaction chain between them with the smallest \u003ci\u003etotal completion time\u003c/i\u003e?\u003c/p\u003e\u003cp\u003eThe inputs to this problem are \u003cb\u003eR\u003c/b\u003e, \u003cb\u003eS\u003c/b\u003e, and \u003cb\u003eT\u003c/b\u003e. Variable \u003cb\u003eR\u003c/b\u003e is a 3-column matrix containing the list of valid reaction steps at each row \u003ci\u003ei\u003c/i\u003e:\u003c/p\u003e\u003cp\u003e\"Reaction \u003ci\u003ei\u003c/i\u003e: \u003cb\u003eR\u003c/b\u003e( \u003ci\u003ei\u003c/i\u003e, \u003ci\u003e1\u003c/i\u003e) --\u0026gt; \u003cb\u003eR\u003c/b\u003e( \u003ci\u003ei\u003c/i\u003e, \u003ci\u003e2\u003c/i\u003e) takes \u003cb\u003eR\u003c/b\u003e( \u003ci\u003ei\u003c/i\u003e, \u003ci\u003e3\u003c/i\u003e) mins\"\u003c/p\u003e\u003cp\u003eOutput the total time of the fastest reaction chain from \u003cb\u003eS\u003c/b\u003e to \u003cb\u003eT\u003c/b\u003e, rounded to 2 decimal places. If a solution does not exist, then output \u003ctt\u003eInf\u003c/tt\u003e. You are ensured that:\u003c/p\u003e\u003cul\u003e\u003cli\u003e2 \u0026lt;= \u003cb\u003eN\u003c/b\u003e \u0026lt;= 20\u003c/li\u003e\u003cli\u003e\u003cb\u003eS\u003c/b\u003e, \u003cb\u003eT\u003c/b\u003e, and all elements in the first 2 columns of \u003cb\u003eR\u003c/b\u003e are integers within [1, \u003cb\u003eN\u003c/b\u003e].\u003c/li\u003e\u003cli\u003eCompletion times are decimal numbers within (0,10].\u003c/li\u003e\u003cli\u003e\u003cb\u003eS\u003c/b\u003e is not equal to \u003cb\u003eT\u003c/b\u003e.\u003c/li\u003e\u003cli\u003eEach compound 1, ..., \u003cb\u003eN\u003c/b\u003e is mentioned at least once in \u003cb\u003eR\u003c/b\u003e. Hence, \u003cb\u003eN\u003c/b\u003e can be inferred from matrix \u003cb\u003eR\u003c/b\u003e.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe following sample test case is the one illustrated above:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e\u0026gt;\u0026gt; R = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\r\n\u0026gt;\u0026gt; reaction_chain(R,1,4)\r\nans = \r\n     6.20\r\n\u003c/pre\u003e","function_template":"function y = reaction_chain(R,S,T)\r\n  y = R;\r\nend","test_suite":"%%\r\nfiletext = fileread('reaction_chain.m')\r\nassert(isempty(strfind(filetext, 'rand')))\r\nassert(isempty(strfind(filetext, 'fileread')))\r\nassert(isempty(strfind(filetext, 'assert')))\r\nassert(isempty(strfind(filetext, 'echo')))\r\n%%\r\nR = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\r\nassert(isequal(reaction_chain(R,1,4),6.20))\r\n%%\r\nR = [3 4 9.6489;1 4 9.5717;2 4 1.4189;2 4 7.9221;4 3 0.3571; 4 3 3.9223];\r\nassert(isequal(reaction_chain(R,1,3),9.93))\r\n%%\r\nR = [2 3 3.1864;3 2 4.9359;1 2 7.7339;5 1 5.2448;2 5 1.3431; ...\r\n4 1 4.8876;4 1 9.5712;4 1 2.6840;4 3 0.0273;5 4 1.7028; ...\r\n5 4 5.2548;3 2 4.2046;3 4 8.6170;3 4 9.1101;2 1 3.3861];\r\nassert(isequal(reaction_chain(R,3,4),7.25))\r\n%%\r\nR = [1 4 8.1730;4 1 3.9978;2 4 4.3141;4 1 2.6380;4 3 3.5095; ...\r\n3 2 0.7597;1 2 0.4965;2 1 7.8025;2 1 4.0391;4 3 0.5978; ...\r\n1 2 8.2119;2 3 2.9632;3 1 6.8678;1 2 6.2562;4 1 9.2939; ...\r\n4 2 4.3586;3 4 7.9483;3 2 8.1158;3 2 9.3900;4 3 6.2248];\r\nassert(isequal(reaction_chain(R,3,1),4.80))\r\n%%\r\nR = [6 1 4.8990;2 6 7.1269;4 3 0.5962;5 1 0.7145;4 1 8.1815];\r\nassert(isequal(reaction_chain(R,5,5),0.00))\r\nassert(isequal(reaction_chain(R,2,1),12.03))\r\nassert(isequal(reaction_chain(R,2,3),Inf))\r\nassert(isequal(reaction_chain(R,3,4),Inf))\r\n%%\r\nR = [1 3 1.3056;1 3 6.0879;6 7 9.7350;6 5 0.4248;5 7 3.1795; ...\r\n10 11 8.0540;11 9 9.7753;11 9 5.1325;14 15 7.6027;15 14 8.0163; ...\r\n14 15 5.9045;17 1 1.4939;1 17 2.5989;1 17 6.2406;4 5 1.9871; ...\r\n3 4 0.6724;3 5 8.6804;7 9 7.2118;8 7 8.1865;9 7 2.9695; ...\r\n12 11 5.1967;11 12 4.1216;11 12 3.9005;16 17 9.2406;15 16 6.7641; ...\r\n17 16 0.6583;3 2 5.0605;2 3 4.9252;1 3 6.1090;5 7 4.1419; ...\r\n6 7 4.7752;7 5 7.2523;9 10 2.9741;11 9 0.1670;11 9 8.7837; ...\r\n14 13 1.5026;13 15 3.3175;15 14 6.1016;18 1 6.7336;1 17 2.5181; ...\r\n17 1 9.1524;4 3 6.0197;3 5 6.5784;4 3 3.0603;];\r\nassert(isequal(reaction_chain(R,18,3),8.04))\r\nassert(isequal(reaction_chain(R,13,12),50.1))\r\nassert(isequal(reaction_chain(R,14,12),51.6))\r\n%%\r\nR = [9 13 1.5437;8 4 7.5811;18 8 6.8554;6 11 8.3242;12 7 2.9923; ...\r\n10 9 3.5961;12 15 4.2433;9 3 0.2443;6 7 6.5369;20 19 4.5789; ...\r\n5 16 7.5933;14 10 2.1216;2 17 1.7501;4 14 8.9439;11 15 1.5359; ...\r\n20 11 6.7973;1 17 7.4862;3 11 3.2583;11 8 4.1509;4 6 0.2054; ...\r\n19 14 9.3261;4 19 7.9466;12 9 2.5761;16 5 0.6419;16 14 7.1521; ...\r\n13 9 3.9076;17 7 8.1454;16 18 5.0564;13 20 4.4396;2 18 6.3119];\r\nassert(isequal(reaction_chain(R,8,20),28.23))\r\nassert(isequal(reaction_chain(R,2,13),36.95))\r\n%%\r\nR = [9 20 9.8797;18 8 4.5474;5 16 8.8284;19 12 5.9887;3 18 4.5039; ...\r\n5 18 7.6259;18 6 6.7323;14 3 4.0732;6 15 2.8338;18 17 3.9003; ...\r\n10 14 8.3437;13 12 3.2604;10 15 8.8441;15 1 6.7478;17 7 2.4623; ...\r\n7 8 5.4655;12 8 3.9813;11 14 9.5092;15 9 8.3187;3 2 0.8425; ...\r\n4 7 3.0173;1 11 0.9537;3 13 8.5932];\r\nassert(isequal(reaction_chain(R,20,12),Inf))\r\nassert(isequal(reaction_chain(R,15,8),30.34))\r\n%%\r\nR = [11 12 2.1328;12 3 0.5222;14 13 2.1966;9 13 5.5531;3 4 0.0100; ...\r\n9 10 1.5987;14 1 1.1968;10 18 2.4288;1 8 9.0441;14 8 6.3195; ...\r\n5 12 9.8173;17 6 6.8246;8 20 0.8399;6 17 0.8442;11 17 7.3882; ...\r\n3 9 3.5038;10 12 1.4581;19 13 1.6294;12 19 7.8310;14 10 2.6032; ...\r\n12 5 3.1930;19 18 7.9459;19 4 5.1754;13 19 6.6397;8 15 8.1763; ...\r\n13 2 9.2236;2 11 1.1885;8 17 2.4410;18 15 3.7815;5 6 7.6724; ...\r\n1 14 6.2028;15 20 3.8391;6 18 8.0610;10 2 5.6427;4 11 3.5503; ...\r\n7 15 5.1577;16 5 6.7811;2 17 6.7857;19 2 9.0844;11 13 3.1607; ...\r\n2 18 1.4453;8 13 9.9755];\r\nassert(isequal(reaction_chain(R,11,20),17.81))\r\n%%\r\nR = [3 1 7.1176;14 2 0.3902;9 10 5.1643;1 11 9.4602;14 2 3.5457; ...\r\n4 9 6.1273;5 12 7.9564;12 6 0.5430;11 15 1.6248;2 14 4.8166; ...\r\n4 1 6.0896;12 8 0.2775;15 8 3.3200;3 10 5.7513;12 3 3.5679; ...\r\n3 13 3.3787;5 1 8.0191;8 9 8.7091;9 15 5.9602;13 15 8.8592; ...\r\n4 1 4.5112;1 8 9.5120;4 6 4.3143;6 14 7.4084;12 15 5.1010; ...\r\n12 7 8.4920;6 12 9.7644;8 7 2.0716;5 2 3.7521;5 6 8.1712; ...\r\n2 10 3.4665;6 9 8.6394;3 11 9.0183;3 5 4.9652;14 8 2.7700; ...\r\n1 11 5.0675;6 1 3.5858;6 1 3.7505;12 3 9.1222;12 2 9.5003; ...\r\n3 5 6.8713;3 8 7.2133;14 11 7.4985;7 4 5.2085;4 13 6.6293];\r\nassert(isequal(reaction_chain(R,13,12),33.54))\r\n%%\r\nR = [7 13 9.2048;12 5 7.9682;3 8 6.1069;11 6 7.2868;14 1 1.3822; ...\r\n13 7 4.1131;15 12 9.8100;4 2 3.8458;8 9 9.7663;8 7 9.9499; ...\r\n4 10 9.6426;11 5 5.3113;1 14 4.0438;5 15 4.6065;5 2 5.8218; ...\r\n3 2 5.8056;5 6 7.2482;13 6 9.6175;15 4 7.6824;10 14 6.0254; ...\r\n11 12 3.8510;4 1 4.7212;10 5 5.1786;4 5 6.5047;14 13 2.0992; ...\r\n6 14 2.5653;15 10 1.6535;13 10 5.4645;4 1 2.3338;6 10 9.8610; ...\r\n4 12 8.8633;8 3 8.1092;8 2 8.7572;10 2 9.0844;11 6 5.0432; ...\r\n12 1 7.2593;11 7 5.8229;6 3 3.9919;14 4 3.6101;5 2 5.1267; ...\r\n13 14 7.2360;6 5 6.9171;8 2 2.5291;14 3 1.2135;9 5 3.8204; ...\r\n12 13 6.8024;7 10 2.1408;10 11 6.0102;12 8 3.5462;12 4 8.4483];\r\nassert(isequal(reaction_chain(R,1,12),16.52))\r\nassert(isequal(reaction_chain(R,15,9),23.12))\r\nassert(isequal(reaction_chain(R,9,15),8.43))\r\n%%\r\nR = [14 10 9.0000;14 10 10.0000;4 13 10.0000;5 2 8.0000;2 11 5.0000; ...\r\n10 3 6.0000;9 1 5.0000;13 2 5.0000;10 5 10.0000;10 3 6.0000; ...\r\n13 8 8.0000;13 12 2.0000;1 9 7.0000;13 11 4.0000;7 4 8.0000; ...\r\n2 11 9.0000;11 5 6.0000;7 2 9.0000;10 4 10.0000;3 5 5.0000; ...\r\n4 3 8.0000;3 8 3.0000;7 13 3.0000;1 13 7.0000;14 6 7.0000; ...\r\n6 1 6.0000;8 4 1.0000;12 1 4.0000;11 14 6.0000;10 14 6.0000; ...\r\n6 10 5.0000;2 7 6.0000;8 7 1.0000;4 7 7.0000;10 14 10.0000; ...\r\n2 14 2.0000;14 9 3.0000;1 5 9.0000;2 5 2.0000;3 1 8.0000];\r\nassert(isequal(reaction_chain(R,8,9),14))\r\n%%\r\nR = [1 2 5;1 2 9];\r\nassert(isequal(reaction_chain(R,2,1),Inf))\r\n%%\r\nR = [4 16 0.4237;2 9 0.0306;8 11 0.6388;1 13 0.1693;2 16 0.3843; ...\r\n8 6 0.5554;6 7 0.3490;17 7 0.1930;17 6 0.5509;17 2 0.2577; ...\r\n8 11 0.8995;4 18 0.4340;15 10 0.3313;8 13 0.9162;17 3 0.1199; ...\r\n17 12 0.0403;10 17 0.3857;6 5 0.2009;7 11 0.2684;12 15 0.1040; ...\r\n14 12 0.4747;17 2 0.5991;5 1 0.5799;16 11 0.8399;4 12 0.1740; ...\r\n6 1 0.7015;18 14 0.7567;10 6 0.2449;6 18 0.2307;10 4 0.4340; ...\r\n3 7 0.7936;15 17 0.5404;15 13 0.0432;3 5 0.2467;4 5 0.2755; ...\r\n18 7 0.2973;8 6 0.7573;7 3 0.6172;16 9 0.0776;17 6 0.6139; ...\r\n12 4 0.9600;12 10 0.8690;11 1 0.4827;15 14 0.5723;1 13 0.4494; ...\r\n12 14 0.8047;1 15 0.5674;2 5 0.1335;11 10 0.0689;18 5 0.3155; ...\r\n6 1 0.5279;5 8 0.9475;17 3 0.5919];\r\nassert(isequal(reaction_chain(R,7,13),0.91))\r\nassert(isequal(reaction_chain(R,1,18),1.37))\r\nassert(isequal(reaction_chain(R,14,2),1.38))\r\n%%\r\nR = [3 2 8.2070;2 1 1.0576;5 6 4.3201;5 6 1.1111;6 7 5.3338; ...\r\n11 10 9.7877;10 11 5.9987;9 10 4.3743;14 13 2.7591;13 15 8.6333; ...\r\n14 13 5.6640;17 18 1.6193;17 1 2.8767;17 18 6.9178;4 3 5.6304; ...\r\n4 3 4.3412;5 4 0.5619;9 8 9.5380;9 7 0.0224;9 8 7.1412; ...\r\n11 13 2.7473;11 12 0.6646;12 11 1.2049;17 15 8.9250;16 15 3.4592; ...\r\n17 15 0.4951;1 2 4.0666;1 2 0.5611;2 3 6.7063;6 5 2.7088; ...\r\n5 7 7.1288;5 6 0.6856;11 9 4.1500;11 10 5.9775;9 10 8.3965; ...\r\n15 14 7.5966;14 15 4.1755;14 13 8.3002;1 18 5.0146;1 17 9.7139; ...\r\n17 18 0.2792;3 5 5.4500;5 3 2.3200;5 3 8.7088;7 8 4.0699; ...\r\n8 7 1.8611;9 8 7.8793;13 11 7.7952;11 13 5.4524;13 12 1.3119];\r\nassert(isequal(reaction_chain(R,3,9),36.50))\r\n%%\r\nR = [2 1 7.2341;3 1 1.9214;6 7 7.0439;6 7 4.1053;5 6 1.2955; ...\r\n11 10 8.3926;10 11 9.0473;10 11 7.1775;14 15 7.2521;15 14 4.9151; ...\r\n14 15 9.6543;17 19 2.7357;17 18 2.7711;17 18 8.5647;3 2 4.8920; ...\r\n4 2 7.0194;2 3 8.9539;8 6 1.9255;6 8 1.1520;8 6 1.3625; ...\r\n12 10 3.7379;11 12 4.7925;12 10 7.2198;16 14 6.2466;16 15 7.1463; ...\r\n16 15 3.7445;1 18 6.6056;19 1 9.1260;19 1 3.0015;3 5 2.1327; ...\r\n4 3 3.6967;3 5 0.7346;8 9 9.3318;8 7 4.9644;8 9 3.0559; ...\r\n11 13 7.6445;11 12 1.6309;11 13 2.0184;17 15 7.9096;17 15 3.8180; ...\r\n16 15 4.1780;2 19 1.3889;19 2 2.6529;1 19 9.4927;5 4 6.9571; ...\r\n5 6 3.8858;4 5 8.8546];\r\nassert(isequal(reaction_chain(R,4,14),Inf))\r\nassert(isequal(reaction_chain(R,9,12),Inf))\r\n%%\r\nR = [2 1 1.5592;1 2 2.4465;7 6 5.9819;7 6 1.9563;5 7 4.9169; ...\r\n9 10 2.6206;9 10 3.6554;10 9 6.9576;2 1 1.5000;2 13 9.0677; ...\r\n13 2 7.3477;4 5 8.9883;5 4 7.8082;6 5 0.7312;10 8 2.5875; ...\r\n8 9 4.9516;10 9 3.9300;12 1 0.0830;1 12 9.7302;13 12 6.0841; ...\r\n3 5 0.0807;3 5 5.3663;4 5 2.4256;7 9 0.1973;7 9 8.2272; ...\r\n8 9 1.6038;11 12 8.2550;13 11 1.9458;13 11 1.3879;2 4 9.8468; ...\r\n3 2 4.8237;2 3 5.5103;7 6 9.9712;7 8 5.0623;7 6 8.8766; ...\r\n11 12 4.6054;10 12 1.0703;10 12 5.3461;3 2 5.4698;1 2 5.6282; ...\r\n2 1 2.9354;7 6 1.5597;6 5 8.5908;5 7 7.9862;9 11 5.0525; ...\r\n9 11 3.1038;11 10 2.6583];\r\nassert(isequal(reaction_chain(R,10,5),9.19))\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":255320,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":17,"test_suite_updated_at":"2020-04-21T14:16:29.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2020-04-18T19:42:11.000Z","updated_at":"2025-12-04T16:15:32.000Z","published_at":"2020-04-18T21:51:06.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 related 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=\\\"45470\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e45470\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\u003eLet's denote a list 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e compounds as 1, 2, ...,\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. You are then given a list of valid reactions for converting one compound to another (e.g. 1 --\u0026gt; 2), as well as the time it takes to complete 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\u003ecompletion time\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e ). With this information, we can generate\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\u003ereaction chains\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. A reaction chain is a series of valid reaction steps taken one after the other. Examples are given 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[Given N = 4 and the following valid reactions:\\nReaction 1:    1 --\u003e 2 takes 1.5 mins\\nReaction 2:    1 --\u003e 3 takes 2.5 mins \\nReaction 3:    2 --\u003e 3 takes 0.6 mins\\nReaction 4:    3 --\u003e 4 takes 4.1 mins \\nReaction 5:    4 --\u003e 2 takes 3.2 mins\\nSample reaction chains: 1 --\u003e 3 --\u003e 4         takes (2.5 + 4.1) mins\\n                        1 --\u003e 2 --\u003e 3 --\u003e 4   takes (1.5 + 0.6 + 4.1) mins \\n                        4 --\u003e 2 --\u003e 3         takes (3.2 + 0.6) mins]]\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 that conversion reactions can only move forward. But if the list states that converting to and from the same two compounds is possible, then a reaction chain can take only one of these paths.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this: Given a starting compound\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\u003eS\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and a target compound\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\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, can you find a reaction chain between them with the smallest\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\u003etotal completion time\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 inputs to this problem are\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\u003eR\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a 3-column matrix containing the list of valid reaction steps at each 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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\u003e\\\"Reaction\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\u003ei\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e1\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) --\u0026gt;\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\u003eR\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) takes\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\u003eR\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ei\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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e3\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) mins\\\"\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 the total time of the fastest reaction chain 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, rounded to 2 decimal places. If a solution does not exist, then 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\u003eInf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. You are ensured that:\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\u003e2 \u0026lt;=\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u0026lt;= 20\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and all elements in the first 2 columns 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e are integers within [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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCompletion times are decimal numbers within (0,10].\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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eS\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is not equal 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach compound 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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is mentioned at least once 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Hence,\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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e can be inferred from 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eR\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 following sample test case is the one illustrated above:\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 R = [1 2 1.5; 1 3 2.5; 2 3 0.6; 3 4 4.1; 4 2 3.2];\\n\u003e\u003e reaction_chain(R,1,4)\\nans = \\n     6.20]]\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":490,"title":"Fastest shortest-path-finder in the west","description":"Given connectivity information about a graph, your job is to find the shortest-path distance between every pair of vertices in this graph.\r\nNote: Valid solutions will be scored based on their speed, not their size (hence the fastest in the west...).\r\nFormat: D = mindist(from,to)\r\nInputs: two vectors, from and to, listing the vertex labels for each edge in the graph (note: vertex labels are positive integers, connectivity is unidirectional, meaning that a connection between vertex a and b does not imply a connection between vertex b and a; in other words this is a directed graph)\r\nOutput: D is a square matrix where D(a,b) is the number of edges in the shortest-path starting from vertex a and ending in vertex b (or inf if there is no path connecting them). Note: Your algorithm is not required to output the actual optimal paths between each pair of vertices, just their distance.\r\nExample:\r\n    D=mindist([1,2,3],[2,3,4])\r\n    D =\r\n\r\n     0     1     2     3\r\n   Inf     0     1     2\r\n   Inf   Inf     0     1\r\n   Inf   Inf   Inf     0\r\nImportant note \u0026 disclaimer: Your algorithm will be scored based on its speed, not based on its cody size. The reported 'size' measure for any valid entry will instead reflect the time (in milliseconds) your algorithm takes to solve various test suite problems (see the test suite for details). There has been some discussion (e.g. http://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments) regarding the cody scoring method. This problem is just a little experiment on tweaking cody to use a different scoring method other than the default node-length measure. Of course scoring based on running time has its own issues (e.g. lack of appropriate repeatability), please feel free to comment on ways you would improve how this problem is scored.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; 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: 527px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 469px 263.5px; transform-origin: 469px 263.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven connectivity information about a graph, your job is to find 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://en.wikipedia.org/wiki/Shortest_path_problem\"\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=\"font-weight: 700; \"\u003eshortest-path distance\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e between every pair of vertices in this graph.\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: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNote: Valid solutions will be scored based on their\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003espeed\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, not their\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003esize\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e (hence 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efastest in the west\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: 0px 0px; transform-origin: 0px 0px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eFormat:\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e D = mindist(from,to)\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 31.5px; text-align: left; transform-origin: 445px 31.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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInputs:\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e two vectors,\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003efrom\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eto\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, listing the vertex labels for each edge in the graph (note: vertex labels are positive integers, connectivity is unidirectional, meaning that a connection between vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e does not imply a connection between vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e; in other words this is a directed graph)\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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 31.5px; text-align: left; transform-origin: 445px 31.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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eD\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is a square matrix where\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eD(a,b)\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is the number of edges in the shortest-path starting from vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and ending in vertex\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e (or\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003einf\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e if there is no path connecting them). Note: Your algorithm is not required to output the actual optimal paths between each pair of vertices, just their distance.\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: 445px 10.5px; text-align: left; transform-origin: 445px 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 126px; 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; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 465px 63px; transform-origin: 465px 63px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    D=mindist([1,2,3],[2,3,4])\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e    D =\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0     1     2     3\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   Inf     0     1     2\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   Inf   Inf     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 18px; 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.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; line-height: 18.004px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 465px 9px; text-wrap-mode: nowrap; transform-origin: 465px 9px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(33, 33, 33); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(33, 33, 33); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(33, 33, 33); border-left-style: none; border-left-width: 0px; border-right-color: rgb(33, 33, 33); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e   Inf   Inf   Inf     0\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 126px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 445px 63px; text-align: left; transform-origin: 445px 63px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eImportant note \u0026amp; disclaimer:\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e Your algorithm will be scored based on its\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003espeed\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, not based on its cody\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003esize\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. The reported 'size' measure for any valid entry will instead reflect the time (in milliseconds) your algorithm takes to solve various test suite problems (see the test suite for details). There has been some discussion (e.g.\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"http://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\"\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=\"\"\u003ehttp://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) regarding the cody scoring method. This problem is just a little experiment on\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: 0px 0px; transform-origin: 0px 0px; 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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003etweaking\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: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e cody to use a different scoring method other than the default node-length measure. Of course scoring based on running time has its own issues (e.g. lack of appropriate repeatability), please feel free to comment on ways you would improve how this problem is scored.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function D = mindist(from,to)\r\n  D=zeros(max([from,to]));\r\nend","test_suite":"%%\r\n% test small connectivity matrix (3x3)\r\nassert(isequal(mindist([1,3,2,3],[2,2,1,2]),[0 1 Inf;1 0 Inf;2 1 0]))\r\nt0=clock;\r\nD=mindist([1,3,2,3],[2,2,1,2]);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)'); \r\ndisp(t1)\r\n\r\n%%\r\n% test small connectivity matrix (10 vertices, 15 edges)\r\nassert(isequal(mindist([10 5 5 7 7 3 3 4 6 6 1 8 7 1 10],[7 4 10 6 8 4 1 7 9 4 6 9 6 10 9]),[0 Inf Inf 2 Inf 1 2 3 2 1;Inf 0 Inf Inf Inf Inf Inf Inf Inf Inf;1 Inf 0 1 Inf 2 2 3 3 2;Inf Inf Inf 0 Inf 2 1 2 3 Inf;Inf Inf Inf 1 0 3 2 3 2 1;Inf Inf Inf 1 Inf 0 2 3 1 Inf;Inf Inf Inf 2 Inf 1 0 1 2 Inf;Inf Inf Inf Inf Inf Inf Inf 0 1 Inf;Inf Inf Inf Inf Inf Inf Inf Inf 0 Inf;Inf Inf Inf 3 Inf 2 1 2 1 0]))\r\nt0=clock;\r\nD=mindist([10 5 5 7 7 3 3 4 6 6 1 8 7 1 10],[7 4 10 6 8 4 1 7 9 4 6 9 6 10 9]);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)');\r\ndisp(t1)\r\n\r\n%%\r\n% test small connectivity matrix (10 vertices, 30 edges)\r\nassert(isequal(mindist([4 10 2 9 8 2 7 10 3 7 5 9 2 6 9 3 2 9 8 7 9 9 10 8 2 7 3 2 1 8],[2 6 9 4 3 1 4 8 10 5 4 6 5 5 7 4 7 1 4 4 3 8 5 7 5 4 7 3 4 1]),[0 2 3 1 3 4 3 4 3 4;1 0 1 2 1 2 1 2 1 2;3 2 0 1 2 2 1 2 3 1;2 1 2 0 2 3 2 3 2 3;3 2 3 1 0 4 3 4 3 4;4 3 4 2 1 0 4 5 4 5;3 2 3 1 1 4 0 4 3 4;1 2 1 1 2 3 1 0 3 2;1 2 1 1 2 1 1 1 0 2;2 3 2 2 1 1 2 1 4 0]))\r\nt0=clock;\r\nD=mindist([4 10 2 9 8 2 7 10 3 7 5 9 2 6 9 3 2 9 8 7 9 9 10 8 2 7 3 2 1 8],[2 6 9 4 3 1 4 8 10 5 4 6 5 5 7 4 7 1 4 4 3 8 5 7 5 4 7 3 4 1]);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)');\r\ndisp(t1)\r\n\r\n%%\r\n% test medium connectivity matrix (100 vertices, 200 edges)\r\ni=[17 21 97 93 63 87 68 14 40 12 30 60 45 63 55 43 71 74 32 66 48 27 10 80 1 50 36 40 100 35 84 75 93 94 79 49 6 6 60 24 80 43 60 41 64 87 1 17 44 63 6 89 15 70 74 48 69 68 63 24 77 82 48 69 33 50 100 90 37 29 10 62 61 87 69 6 45 27 77 8 100 94 77 26 8 72 59 4 4 36 59 47 9 60 95 88 15 27 32 50 51 42 40 76 22 32 68 39 46 82 32 27 15 39 75 63 33 63 63 91 64 43 13 10 2 56 10 62 45 24 44 58 80 2 44 98 80 92 31 97 76 82 48 68 5 100 91 65 65 90 77 96 95 44 84 4 29 85 25 99 26 75 47 2 47 64 63 4 83 73 63 26 56 99 9 98 47 7 82 53 86 84 66 40 83 76 69 86 74 60 18 99 69 3 10 35 85];\r\nj=[6 27 87 92 2 77 23 12 86 60 81 18 14 69 98 84 91 76 12 81 22 81 4 26 25 27 56 39 52 20 56 92 21 37 61 100 24 67 34 76 77 90 46 25 76 69 44 94 65 9 80 28 56 39 65 68 37 51 12 1 64 21 98 50 46 99 86 21 46 99 99 81 16 60 80 20 88 74 68 15 72 55 28 67 11 31 24 39 85 35 64 42 65 87 45 95 78 59 49 13 61 30 28 31 28 35 13 74 13 7 94 60 2 40 74 93 38 18 91 84 25 29 72 36 98 12 41 28 31 54 73 71 49 29 43 82 10 46 8 91 30 80 54 26 83 46 84 51 17 20 78 7 50 30 58 58 27 30 36 15 42 54 32 13 80 89 4 50 56 88 16 98 49 24 91 72 55 77 65 83 79 12 82 70 93 19 95 35 62 98 51 70 48 68 56 28 6];\r\n\r\nassert(isequal(interp2(mindist(i,j),[2 55 45 33 34 87 53 43 99 50],[90 66 53 41 94 68 94 38 23 76],'nearest'),[8,5,8,Inf,7,7,Inf,Inf,Inf,9]))\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1=etime(clock,t0)*1e3;\r\ndisp('Time (ms)');\r\ndisp(t1)\r\n\r\n%%\r\n% Time-score evaluation\r\n% test medium connectivity matrix (100 vertices, 200 edges)\r\nrand('state',2); \r\nn=100;m=200; \r\ni=ceil(n*rand(1,m));\r\nj=ceil(n*rand(1,m));\r\nk=i==j;i(k)=[];j(k)=[];\r\nI=ceil(n*rand(1,10));J=ceil(n*rand(1,10));\r\n\r\n% first run for initialization\r\nassert(isequal(interp2(mindist(i,j),I,J,'nearest'),[6 6 Inf 0 5 Inf 4 8 6 3]))\r\n\r\n% second run for time evaluation\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1(1)=etime(clock,t0)*1e3;\r\n\r\n% test large connectivity matrix (1000 vertices, 2000 edges)\r\nrand('state',0); \r\nn=1000;m=2000; \r\ni=ceil(n*rand(1,m));\r\nj=ceil(n*rand(1,m));\r\nk=i==j;i(k)=[];j(k)=[];\r\nI=ceil(n*rand(1,10));J=ceil(n*rand(1,10));\r\n\r\n% first run for initialization\r\nassert(isequal(interp2(mindist(i,j),I,J,'nearest'),[8 8 9 8 11 7 Inf 5 8 Inf]))\r\n\r\n% second run for time evaluation\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1(2)=etime(clock,t0)*1e3;\r\n\r\n% test large connectivity matrix (1000 vertices, 10000 edges)\r\nrand('state',1); \r\nn=1000;m=10000; \r\ni=ceil(n*rand(1,m));\r\nj=ceil(n*rand(1,m));\r\nk=i==j;i(k)=[];j(k)=[];\r\nI=ceil(n*rand(1,10));J=ceil(n*rand(1,10));\r\n\r\n% second run for time evaluation\r\nt0=clock;\r\nD=mindist(i,j);\r\nt1(3)=etime(clock,t0)*1e3;\r\nassert(isequal(interp2(D,I,J,'nearest'),[3 4 3 4 4 3 3 2 3 3]))\r\n\r\n% convert time to score\r\ndisp('Time (ms)');\r\ndisp(t1);\r\n\r\n% urlwrite('https://sites.google.com/a/alfnie.com/alfnie/software/SetSolutionScore.p?attredirects=0\u0026amp;d=1','SetSolutionScore.p');\r\n% rehash path; \r\n% SetSolutionScore(round(sum(t1)));\r\n%feval(@evalin,'caller',sprintf('score=%d',round(sum(t1))));\r\n%%fh=fopen('mindist.m','wt');\r\n%%fprintf(fh,'%s\\n',repmat('1;',[1,ceil(sum(t1)/2)]));\r\n%%fclose(fh);","published":true,"deleted":false,"likes_count":3,"comments_count":1,"created_by":43,"edited_by":485721,"edited_at":"2026-03-19T14:03:22.000Z","deleted_by":null,"deleted_at":null,"solvers_count":18,"test_suite_updated_at":"2026-03-19T14:03:22.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-13T04:35:04.000Z","updated_at":"2026-03-19T15:07:26.000Z","published_at":"2012-03-15T18:12:51.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\u003eGiven connectivity information about a graph, your job is to find 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://en.wikipedia.org/wiki/Shortest_path_problem\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eshortest-path distance\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e between every pair of vertices in this graph.\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\u003eNote: Valid solutions will be scored based on their\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\u003espeed\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, not their\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\u003esize\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (hence 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003efastest in the west\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\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\u003eFormat:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e D = mindist(from,to)\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\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e two vectors,\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\u003efrom\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\u003eto\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, listing the vertex labels for each edge in the graph (note: vertex labels are positive integers, connectivity is unidirectional, meaning that a connection between vertex\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 does not imply a connection between vertex\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 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\u003ea\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e; in other words this is a directed graph)\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\u003eOutput:\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\u003eD\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a square matrix where\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\u003eD(a,b)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is the number of edges in the shortest-path starting from vertex\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 ending in vertex\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 (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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003einf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e if there is no path connecting them). Note: Your algorithm is not required to output the actual optimal paths between each pair of vertices, just their distance.\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\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[    D=mindist([1,2,3],[2,3,4])\\n    D =\\n\\n     0     1     2     3\\n   Inf     0     1     2\\n   Inf   Inf     0     1\\n   Inf   Inf   Inf     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\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\u003eImportant note \u0026amp; disclaimer:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Your algorithm will be scored based on its\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\u003espeed\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, not based on its cody\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\u003esize\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. The reported 'size' measure for any valid entry will instead reflect the time (in milliseconds) your algorithm takes to solve various test suite problems (see the test suite for details). There has been some discussion (e.g.\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://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://blogs.mathworks.com/desktop/2012/02/06/scoring-in-cody/#comments\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) regarding the cody scoring method. This problem is just a little experiment 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etweaking\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e cody to use a different scoring method other than the default node-length measure. Of course scoring based on running time has its own issues (e.g. lack of appropriate repeatability), please feel free to comment on ways you would improve how this problem is scored.\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":2685,"title":"FloydWarshall","description":"Our task is to find shortest paths between every pair of nodes. Floyd-Warshall is a graph algorithm for finding shortest paths in weighted graph. The input of a function will be in weighted adjacency matrix representation. If two vertices does not have any edge than this matrix has Inf value. Function will return a matrix with values of shortest paths between each pair of nodes.\r\nExample :\r\n input= [0   1  Inf Inf \r\n        Inf  0   2  Inf\r\n        Inf Inf  0   3\r\n         4   7  Inf  0]\r\n\r\n output= [0   1   3   6\r\n          9   0   2   5\r\n          7   8   0   3\r\n          4   5   7   0]","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: 307.9px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 153.95px; transform-origin: 407px 153.95px; 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: 372.5px 8px; transform-origin: 372.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eOur task is to find shortest paths between every pair of nodes. Floyd-Warshall is a graph algorithm for finding shortest paths in weighted graph. The input of a function will be in weighted adjacency matrix representation. If two vertices does not have any edge than this matrix has Inf value. Function will return a matrix with values of shortest paths between each pair of nodes.\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: 29.5px 8px; transform-origin: 29.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample\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: 4px 8px; transform-origin: 4px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e :\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 183.9px; 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 91.95px; transform-origin: 404px 91.95px; 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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 96px 8.5px; tab-size: 4; transform-origin: 96px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e input= [0   1  Inf Inf \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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e        Inf  0   2  Inf\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 88px 8.5px; tab-size: 4; transform-origin: 88px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e        Inf Inf  0   3\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e         4   7  Inf  0]\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 0px 8.5px; tab-size: 4; transform-origin: 0px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e output= [0   1   3   6\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e          9   0   2   5\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 92px 8.5px; tab-size: 4; transform-origin: 92px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e          7   8   0   3\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: 1px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 1px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 1px; 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: 96px 8.5px; tab-size: 4; transform-origin: 96px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e          4   5   7   0]\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = floydwarshall(x)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = [0   1  Inf Inf;\r\n    Inf  0   2  Inf;\r\n    Inf Inf  0   3\r\n     4   7  Inf  0];\r\ny_correct = [0   1   3   6;\r\n             9   0   2   5;\r\n             7   8   0   3;\r\n             4   5   7   0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n\r\n%%\r\nx = [0   8  Inf  1;\r\n    Inf  0   1  Inf;\r\n     4  Inf  0  Inf;\r\n    Inf  2   9   0];\r\ny_correct = [0   3   4   1\r\n             5   0   1   6\r\n             4   7   0   5\r\n             7   2   3   0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n\r\n%%\r\nx = [0   3   6  Inf Inf Inf Inf\r\n     3   0   2   1  Inf Inf Inf\r\n     6   2   0   1   4   2  Inf\r\n    Inf  1   1   0   2  Inf  4\r\n    Inf Inf  4   2   0   2   1\r\n    Inf Inf  2  Inf  2   0   1\r\n    Inf Inf Inf  4   1   1   0];\r\ny_correct = [0 3 5 4 6 7 7\r\n            3 0 2 1 3 4 4\r\n            5 2 0 1 3 2 3\r\n            4 1 1 0 2 3 3\r\n            6 3 3 2 0 2 1\r\n            7 4 2 3 2 0 1\r\n            7 4 3 3 1 1 0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n\r\n%%\r\nx = [0   3  Inf  5;\r\n     2   0  Inf  4;\r\n    Inf  1   0  Inf;\r\n    Inf Inf  2   0];\r\ny_correct = [0 3 7 5\r\n             2 0 6 4\r\n             3 1 0 5\r\n             5 3 2 0];\r\nassert(isequal(floydwarshall(x),y_correct))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":32478,"edited_by":223089,"edited_at":"2023-01-03T06:19:00.000Z","deleted_by":null,"deleted_at":null,"solvers_count":32,"test_suite_updated_at":"2023-01-03T06:19:00.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2014-11-23T22:43:29.000Z","updated_at":"2026-03-30T15:58:21.000Z","published_at":"2014-11-23T22:44:41.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\u003eOur task is to find shortest paths between every pair of nodes. Floyd-Warshall is a graph algorithm for finding shortest paths in weighted graph. The input of a function will be in weighted adjacency matrix representation. If two vertices does not have any edge than this matrix has Inf value. Function will return a matrix with values of shortest paths between each pair of nodes.\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\u003eExample\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=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ input= [0   1  Inf Inf \\n        Inf  0   2  Inf\\n        Inf Inf  0   3\\n         4   7  Inf  0]\\n\\n output= [0   1   3   6\\n          9   0   2   5\\n          7   8   0   3\\n          4   5   7   0]]]\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":2220,"title":"Wayfinding 3 - passed areas","description":"This is the third 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 . \r\n\r\n*Which areas are traversed?*\r\n\r\n\u003c\u003chttp://i58.tinypic.com/263wzdt.png\u003e\u003e\r\n\r\nFor this third 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.\r\n\r\nIn this assignments, the areas do not overlap. If 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 ... ]|. Simple.\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 |v| will contain the indices in |F| of the crossed areas, in the correct order. In the example above, the correct answer is |[ 3 4 4 1 1]|. Crossing means 'being present in that area', so if A, the start, is in area 3, it is considered as 'crossed'. If you pass the same area multiple times, and leave it in between, each event is listed.\r\n","description_html":"\u003cp\u003eThis is the third 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 .\u003c/p\u003e\u003cp\u003e\u003cb\u003eWhich areas are traversed?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i58.tinypic.com/263wzdt.png\"\u003e\u003cp\u003eFor this third 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.\u003c/p\u003e\u003cp\u003eIn this assignments, the areas do not overlap. If 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. Simple.\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\u003ev\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 4 4 1 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'. If you pass the same area multiple times, and leave it in between, each event is listed.\u003c/p\u003e","function_template":"function f = WayfindingPassed(AB,F)\r\n  f = 1:length(F);\r\nend","test_suite":"    %%\r\n\r\n    AB = [ 2 -2 ; 8 -6 ];\r\n    F{1} = [\r\n        -4   -4    4    4\r\n        -4   -0   -0   -4\r\n        ];\r\n    F{2} = [\r\n        -4   -4    4    4\r\n        2    6    6    2\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [2 1];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 8 -4 ; 8 -8 ];\r\n    F{1} = [\r\n        -6    2    2   -4   -4    8    8   -6\r\n        -6   -6   -4   -4    2    2    4    4\r\n        ];\r\n    F{2} = [\r\n        -2   -2    4    4\r\n        -0   -2   -2   -0\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -8 8 ; 8 -8 ];\r\n    F{1} = [\r\n        -2   -2    0    0\r\n        -0    2    2   -0\r\n        ];\r\n    F{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\n    F{3} = [\r\n        -3   -3    1    0\r\n        -1   -3   -3   -1\r\n        ];\r\n    F{4} = [\r\n        5    9    9    5\r\n        -3   -3   -9   -9\r\n        ];\r\n    F{5} = [\r\n        -9  -10  -10   -9\r\n        9    9   10   10\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 2 4 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    AB = [ 0 0 ; -8 8 ];\r\n    F{1} = [\r\n        -4   -2   -2   -4\r\n        8    8    4    4\r\n        ];\r\n    F{2} = [\r\n        2    4    4    2\r\n        -0   -0   -6   -6\r\n        ];\r\n    F{3} = [\r\n        -4   -2   -2   -6   -6\r\n        -4   -4   -6   -6   -4\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    assert(isempty(f));\r\n    \r\n    %%\r\n\r\n    AB = [ 7 -8 ; 0 0 ];\r\n    F{1} = [\r\n        8    9    9    8\r\n        3    3   -2   -2\r\n        ];\r\n    F{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\n    F{3} = [\r\n        -2   -1   -1   -2\r\n        1    1   -4   -4\r\n        ];\r\n    F{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\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 4 2 3 2 4 2 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ 0 -2 ; 0 -4 ];\r\n    F{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\n    F{2} = [\r\n        -1    1    1   -1\r\n        1    1   -1   -1\r\n        ];\r\n    F{3} = [\r\n        -4    4    4    5    5   -5   -5   -4\r\n        4    4   -7   -7    5    5   -1   -1\r\n        ];\r\n    F{4} = [\r\n        -5   -4   -4    4    4   -5\r\n        -1   -1   -6   -6   -7   -7\r\n        ];\r\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 2 1 ];\r\n    assert(isequal(f,f_correct));\r\n    \r\n    %%\r\n\r\n    AB = [ -2 0 ; 6 -6 ];\r\n    F{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\n    f = WayfindingPassed(AB,F);\r\n    f_correct = [ 1 1 1 ];\r\n    assert(isequal(f,f_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":5,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":"2014-03-03T12:10:50.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T23:45:22.000Z","updated_at":"2026-02-19T10:36:52.000Z","published_at":"2014-03-03T09:46:27.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 third 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\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 third 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.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this assignments, the areas do not overlap. 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. Simple.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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\u003ev\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 4 4 1 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'. If you pass the same area multiple times, and leave it in between, each event is listed.\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":458,"title":"Parcel Routing","description":"Given a matrix that represent the distance along highways between major cities numbered 1 to _N_, provide the path and shortest distance from a given city, _from_, to a given city, _to_. Assume that 0 represents no direct path between two cities. If there is no solution to the problem, return -1 for both the path and the distance.","description_html":"\u003cp\u003eGiven a matrix that represent the distance along highways between major cities numbered 1 to \u003ci\u003eN\u003c/i\u003e, provide the path and shortest distance from a given city, \u003ci\u003efrom\u003c/i\u003e, to a given city, \u003ci\u003eto\u003c/i\u003e. Assume that 0 represents no direct path between two cities. If there is no solution to the problem, return -1 for both the path and the distance.\u003c/p\u003e","function_template":"function [route d] = parcel_route( from, to, graph )\r\n  route = -1;\r\n  d = -1;\r\nend","test_suite":"%%\r\n[route d] = parcel_route( 1, 5, zeros( 5 ) )\r\nassert(route == -1 \u0026\u0026 d == -1);\r\n\r\n%%\r\n[route d] = parcel_route( 1, 2, [0 0.320527862039621 0 0 0;0.320527862039621 0 0 0 0.85044688801616;0 0 0 0 0;0 0 0 0 0;0 0.85044688801616 0 0 0] );\r\nassert( isequal(route,[1 2]) \u0026\u0026 abs( d - 0.320528 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 4, 2, [0 0 0 0 0.648056184801628;0 0 0.168504735306137 0 0;0 0.168504735306137 0 0 0;0 0 0 0 0;0.648056184801628 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 3, 3, [0 0 0 1.07077622171054 0.00497624606093106;0 0 0 0 0;0 0 0 0 0;1.07077622171054 0 0 0 0;0.00497624606093106 0 0 0 0] );\r\nassert( isequal(route,3) \u0026\u0026 abs( d - 0 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 5, 2, [0 0 0.478447257684744 0.52778921303553 0;0 0 0 0.344727452766697 0;0.478447257684744 0 0 0 0;0.52778921303553 0.344727452766697 0 0 0;0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 1, 4, [0 0 0 0 0;0 0 0 0 0;0 0 0 0 0;0 0 0 0 0;0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 10, 5, [0 0 0 0 0.758920911298127 1.17184862472796 0 0 0 0;0 0 0 0.229051389055984 0 0 0.110344033764499 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0.229051389055984 0 0 0 0 0 0 0 0;0.758920911298127 0 0 0 0 0 0.582786870390757 0 0 0.266149081187709;1.17184862472796 0 0 0 0 0 0.91437757836659 0 0 0.928664694998184;0 0.110344033764499 0 0 0.582786870390757 0.91437757836659 0 0.72845914907191 0.440667818657679 0.0752998054887686;0 0 0 0 0 0 0.72845914907191 0 0 0;0 0 0 0 0 0 0.440667818657679 0 0 0.72584117080215;0 0 0 0 0.266149081187709 0.928664694998184 0.0752998054887686 0 0.72584117080215 0] );\r\nassert( isequal(route,[10 5]) \u0026\u0026 abs( d - 0.266149 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 7, 3, [0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0.348270614748404 0 0.963402246386651 0 0 0 0;0 0 0.348270614748404 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.00647302663148808 0 0;0 0 0.963402246386651 0 0 0 0 1.11338837090812 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.00647302663148808 1.11338837090812 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 4, 7, [0 0 0.529236850857286 0 0 0 1.60144982503606 0 0 0;0 0 0 0 0 0 0.828441215877115 0 0 0;0.529236850857286 0 0 0.0279102825979989 0 0 0 0 0 0.0544746812572747;0 0 0.0279102825979989 0 0 0 0 0 0 0;0 0 0 0 0 1.04094484718858 0 0 0 0;0 0 0 0 1.04094484718858 0 0 0 0 0.124040053577104;1.60144982503606 0.828441215877115 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.37043522751259;0 0 0.0544746812572747 0 0 0.124040053577104 0 0 0.37043522751259 0] );\r\nassert( isequal(route,[4 3 1 7]) \u0026\u0026 abs( d - 2.1586 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 4, 7, [0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.577543761888686 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.124487323633357 0 0 0.679813903514902;0 0.577543761888686 0 0 0 0 0.560623889702786 0 0 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0.124487323633357 0.560623889702786 0 0 0 0.250828758360099 0;0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.250828758360099 0 0 0.914651700028183;0 0 0 0.679813903514902 0 0 0 0 0.914651700028183 0] );\r\nassert( isequal(route,[4 7]) \u0026\u0026 abs( d - 0.124487 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 1, 9, [0 0 0.210714289971845 0 0 0.655795786759233 0 0 0.417975370686535 0.0762383289683841;0 0 0 0 0 0 0 0 0 0;0.210714289971845 0 0 0 0 0 0.627639413184948 0.546973506820504 0 0;0 0 0 0 0 0.44290978142888 0 0 0 0;0 0 0 0 0 0 0.494959375382896 0.199417369123429 0.61193318690704 0;0.655795786759233 0 0 0.44290978142888 0 0 0 0 0.295901565877421 0;0 0 0.627639413184948 0 0.494959375382896 0 0 0 0 0;0 0 0.546973506820504 0 0.199417369123429 0 0 0 0 0.882898432991531;0.417975370686535 0 0 0 0.61193318690704 0.295901565877421 0 0 0 0.0999710063468799;0.0762383289683841 0 0 0 0 0 0 0.882898432991531 0.0999710063468799 0] );\r\nassert( isequal(route,[1 10 9]) \u0026\u0026 abs( d - 0.176209 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 12, 3, [0 0.139438875035701 0.112367141305958 0 0 0 0 0 0 0.742115072015769 0 0 0.244537467584915 0 0;0.139438875035701 0 0.135942047224331 0 0 0 0 0 0 0 0.374140881779805 0 0.217860680093506 0.379818098539566 1.17229854239237;0.112367141305958 0.135942047224331 0 0 0 0 0 1.7792137360137 0.350752848520651 0 0 0.284985494377118 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.161446305533344 0 0 0 0.183948436622344 0 0 0;0 0 1.7792137360137 0 0 0 0.161446305533344 0 0 0 0 0 0 0 0;0 0 0.350752848520651 0 0 0 0 0 0 0 0 0 0 0 0.362973369969354;0.742115072015769 0 0 0 0 0 0 0 0 0 0.263865914379949 0 0 0 0;0 0.374140881779805 0 0 0 0 0 0 0 0.263865914379949 0 0 0 0 0;0 0 0.284985494377118 0 0 0 0.183948436622344 0 0 0 0 0 0 0 0;0.244537467584915 0.217860680093506 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.379818098539566 0 0 0 0 0 0 0 0 0 0 0 0 1.863621808387;0 1.17229854239237 0 0 0 0 0 0 0.362973369969354 0 0 0 0 1.863621808387 0] );\r\nassert( isequal(route,[12 3]) \u0026\u0026 abs( d - 0.284985 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 14, 13, [0 0 0 0.0850075668378245 0 0 0 0 0.0463952689981919 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0.0850075668378245 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.831785345865625 0 0 0 0 0 0 0 0.300824537605104 0;0 0 0 0 0.831785345865625 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.316676635592728 0 0 0.18465657297998 0 0;0.0463952689981919 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.316676635592728 0 0 0 0 0 0 2.01596808102817;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0.735349103904233 0 0;0 0 0 0 0 0 0 0.18465657297998 0 0 0 0.735349103904233 0 0 0;0 0 0 0 0.300824537605104 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 2.01596808102817 0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 8, 8, [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.669844066951192 0 0 1.79425332134151 0 0 0 0;0 0 0 0 0 0.354813543185228 0.350829365088585 0.334017411457367 0 0 0.750194269879854 0 0 0 0.837083783283494;0 0 0 0 0 0 0 0 0 0 0 0.7666462425288 0 0 0;0 0 0 0 0 0 0 0 0 0 0.335432927184154 0.290662441159473 0 0 0;0 0 0.354813543185228 0 0 0 0 0 0 0 0 0.612746104915618 0 1.3702409817804 0;0 0 0.350829365088585 0 0 0 0 0 0 0 0 0 0 0 0;0 0.669844066951192 0.334017411457367 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 1.79425332134151 0.750194269879854 0 0.335432927184154 0 0 0 0 0 0 0 0 0 0;0 0 0 0.7666462425288 0.290662441159473 0.612746104915618 0 0 0 0 0 0 0.600235691901178 0 0;0 0 0 0 0 0 0 0 0 0 0 0.600235691901178 0 0 0;0 0 0 0 0 1.3702409817804 0 0 0 0 0 0 0 0 0.25725306655894;0 0 0.837083783283494 0 0 0 0 0 0 0 0 0 0 0.25725306655894 0] );\r\nassert( isequal(route,8) \u0026\u0026 abs( d - 0 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 9, 2, [0 0 0 0 0 0 0 0.216161539093326 0 0 0 0 0 0 0;0 0 0 0.154899548332433 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0.195632123891572 0 0.638112022611646 0 0;0 0.154899548332433 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.924920233869358 0 0 0 0 0 0 0.225753938901222;0 0 0 0 0 0 0 0 0 0 0 0.105130198814148 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0.216161539093326 0 0 0 0.924920233869358 0 0 0 0.283480661544537 0 0 0 0 0 0;0 0 0 0 0 0 0 0.283480661544537 0 0 0.860820315822094 0 0 0.114189406386242 0;0 0 0 0 0 0 0 0 0 0 0.777006911310097 0.0395282910845656 0.559642782958394 0.0374763085984708 0;0 0 0.195632123891572 0 0 0 0 0 0.860820315822094 0.777006911310097 0 0.107327989339846 0 0 0;0 0 0 0 0 0.105130198814148 0 0 0 0.0395282910845656 0.107327989339846 0 0 0 0;0 0 0.638112022611646 0 0 0 0 0 0 0.559642782958394 0 0 0 0 0;0 0 0 0 0 0 0 0 0.114189406386242 0.0374763085984708 0 0 0 0 0;0 0 0 0 0.225753938901222 0 0 0 0 0 0 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 6, 8, [0 1.00600776349789 0 0 0.409642943366229 0 0 0 0 0 0 0 0.780942905018081 0.218269812307052 0;1.00600776349789 0 0 0 0 0 0 0 0 0.604439587022491 0 0 0 0 0;0 0 0 2.19497071462911 0 0.384068674620751 0 0 0 0.752596352506117 0.210553220187945 0 0 0 0.101200876472261;0 0 2.19497071462911 0 0 0 0 0 0 0 0 0.0821684991109088 0 0 1.39540244685607;0.409642943366229 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.384068674620751 0 0 0 0.0278385656290563 0 0 0 0 0 0 0 0;0 0 0 0 0 0.0278385656290563 0 0 0 0 0.314664537582249 0 0 0 0.157551652892199;0 0 0 0 0 0 0 0 0 0 1.37753279184511 0 0 0.647734508061038 0.538120114299927;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.604439587022491 0.752596352506117 0 0 0 0 0 0 0 0.38099752988379 0 0 0 0;0 0 0.210553220187945 0 0 0 0.314664537582249 1.37753279184511 0 0.38099752988379 0 0 0 0 0;0 0 0 0.0821684991109088 0 0 0 0 0 0 0 0 0.724941186609613 0 0;0.780942905018081 0 0 0 0 0 0 0 0 0 0 0.724941186609613 0 0 0;0.218269812307052 0 0 0 0 0 0 0.647734508061038 0 0 0 0 0 0 0;0 0 0.101200876472261 1.39540244685607 0 0 0.157551652892199 0.538120114299927 0 0 0 0 0 0 0] );\r\nassert( isequal(route,[6 7 15 8]) \u0026\u0026 abs( d - 0.72351 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 15, 1, [0 0 0 0 0 0 0 0 0 0 0 0.444956179153313 0.694837045312089 0 0 0 1.21296662658388 0 1.56620351515086 0.139996151546743;0 0 0.436509042497808 0 0 0 0 0 0 0.51021617110356 0.382775864014207 0 0 0 0 0 0 0 0.0458660640982067 0;0 0.436509042497808 0 0.142843784706697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.142843784706697 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.923358421898822 0 0 0 0 0 0 0.535622573665002 0 0 0.0623807988546017 0 0 0 0;0 0 0 0 0.923358421898822 0 0 0 0 0 0 0 0 0 0.0225268450194125 0.789248499651178 0.131644262096824 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0.157622272676696 0.474149476188578 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 1.38990078830045 0 0 0 0 0.691403775437505 0;0 0.51021617110356 0 0 0 0 0 0 0 0 0.597507997139564 0 0 0 0.354205526419423 0 0 0 0 0;0 0.382775864014207 0 0 0 0 0 0 0 0.597507997139564 0 0 0 0.659672915756231 0 0 0 0 0 0;0.444956179153313 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.138835508200668;0.694837045312089 0 0 0 0.535622573665002 0 0.157622272676696 0 0 0 0 0 0 0 0 0.112112626230952 0 0 0 0.0843937952650982;0 0 0 0 0 0 0.474149476188578 0 1.38990078830045 0 0.659672915756231 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.0225268450194125 0 0 0 0.354205526419423 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.0623807988546017 0.789248499651178 0 0 0 0 0 0 0.112112626230952 0 0 0 0 0 0 2.40412068693751;1.21296662658388 0 0 0 0 0.131644262096824 0 0 0 0 0 0 0 0 0 0 0 0 0.332961917093088 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.464569385286 0;1.56620351515086 0.0458660640982067 0 0 0 0 0 0 0.691403775437505 0 0 0 0 0 0 0 0.332961917093088 1.464569385286 0 0;0.139996151546743 0 0 0 0 0 0 0 0 0 0 0.138835508200668 0.0843937952650982 0 0 2.40412068693751 0 0 0 0] );\r\nassert( isequal(route,[15 6 16 13 20 1]) \u0026\u0026 abs( d - 1.14828 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 6, 9, [0 0.366176160541789 0.786653302253499 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.21056171145861;0.366176160541789 0 0 0 0 0 0 0 0 1.00794652016003 0 0 0 0 0 0 0 0 0 0;0.786653302253499 0 0 0 0.00852440175782365 0 0 0 0 0 0.17749671083585 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.104971160045632 0 0.612122585766863 0 0.283798036821908;0 0 0.00852440175782365 0 0 0 0.643083445674635 0 0 0 1.48191061231689 0 0 0 0.200776975353452 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.20656027667801 0 0 0;0 0 0 0 0.643083445674635 0 0 0 0.0293301078099069 0 0 0.0684877514911584 0.244866042619905 0 0 0 0 0.844967783108164 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.0293301078099069 0 0 0 0 0.112122931478046 0 0 0 0.904924565740344 0 0 0 0;0 1.00794652016003 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.17749671083585 0 1.48191061231689 0 0 0 0 0 0 0.356911349006201 0 0 0.157837394902406 0 0 0 0 0;0 0 0 0 0 0 0.0684877514911584 0 0.112122931478046 0 0.356911349006201 0 0.682956498987976 0.369934947078526 0 0 0 0 0 0;0 0 0 0 0 0 0.244866042619905 0 0 0 0 0.682956498987976 0 0 0 0 1.43719870645473 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0.369934947078526 0 0 0 0 0 0 0 0;0 0 0 0 0.200776975353452 0 0 0 0 0 0.157837394902406 0 0 0 0 0.0962643536575907 0 0 0 0;0 0 0 0.104971160045632 0 0 0 0 0.904924565740344 0 0 0 0 0 0.0962643536575907 0 0 0 0 0.884861315533158;0 0 0 0 0 1.20656027667801 0 0 0 0 0 0 1.43719870645473 0 0 0 0 0.00316254045496533 0.917601066178612 0;0 0 0 0.612122585766863 0 0 0.844967783108164 0 0 0 0 0 0 0 0 0 0.00316254045496533 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.917601066178612 0 0 0;0.21056171145861 0 0 0.283798036821908 0 0 0 0 0 0 0 0 0 0 0 0.884861315533158 0 0 0 0] );\r\nassert( isequal(route,[6 17 18 7 9]) \u0026\u0026 abs( d - 2.08402 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 15, 8, [0 0 0 0 0 0 0 0.444927230771171 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0.0904807891398611 0 0 0.117980802815763 0 0 0 0 0 0 0 0 0 0 0.786791961925432 0 0;0 0 0 0 0 0 0 0 0 0.159132007464481 0.110433064086588 0 0 0 0 0 0 0 0 0.139982926657546;0 0.0904807891398611 0 0 0.388870980511861 0 0 0 0 0 0 0.973527639623757 0 0 0 0 0 0 0 0;0 0 0 0.388870980511861 0 0 0 0.305597627987039 0 0 0 0 0.027077532916115 0 0 0 0 0 0.290796760442986 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.117980802815763 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.27266472620458 0.665594866955372 0 0.626568354787985;0.444927230771171 0 0 0 0.305597627987039 0 0 0 0 0 0 0 0 0 0 0 0 0 0.498229667608556 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.159132007464481 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.110433064086588 0 0 0 0 0 0 0 0 0 0.611004915345871 0 0 0 0.561899811991367 0 0 0;0 0 0 0.973527639623757 0 0 0 0 0 0 0 0 0.949329689605504 0 0 0 0 0 0 0;0 0 0 0 0.027077532916115 0 0 0 0 0 0.611004915345871 0.949329689605504 0 0 0 0 0 0.45822991145669 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.916926430883478 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0944227233455792;0 0 0 0 0 0 1.27266472620458 0 0 0 0.561899811991367 0 0 0 0 0 0 0.0123263072768274 0 0;0 0.786791961925432 0 0 0 0 0.665594866955372 0 0 0 0 0 0.45822991145669 0 0 0 0.0123263072768274 0 0.708053638455894 0;0 0 0 0 0.290796760442986 0 0 0.498229667608556 0 0 0 0 0 0.916926430883478 0 0 0 0.708053638455894 0 0;0 0 0.139982926657546 0 0 0 0.626568354787985 0 0 0 0 0 0 0 0 0.0944227233455792 0 0 0 0] );\r\nassert( isequal(route,-1) \u0026\u0026 abs( d - -1 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 5, 4, [0 0 0 0 0 0 0 0 0 0.482056160228392 0 0 0 0 0 0 0 0 0.00508309589200806 0;0 0 0.342764171753101 0 0.592230924022738 0 0 0 0 0 0 0 0 0 0 0 0.616196530219501 0 0.105964156030294 0;0 0.342764171753101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.06756913797405 0 0 0 0 0;0 0.592230924022738 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 1.75169005582658 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.198256254136309 0 0.117040404671406 0.742253008190119 0 0 0 0 0 0 0 0 0;0 0 0 0 0 1.75169005582658 0.198256254136309 0 0 0.193487168668438 0 0 0 0 0 0.213470445629309 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0.672768253513765 0 0 0 0 0 0 0 0;0.482056160228392 0 0 0 0 0 0.117040404671406 0.193487168668438 0 0 0.182397544709499 0 0 0 0 0 0 0 0.352313653363684 0;0 0 0 0 0 0 0.742253008190119 0 0 0.182397544709499 0 0.863897537114491 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0.672768253513765 0 0.863897537114491 0 0 0 0 0 0.849422540372472 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.126177070732391 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 1.06756913797405 0 0 0 0 0 0 0 0 0.126177070732391 0 0 0 0 0.810675752838635 0.192588746332897 0;0 0 0 0 0 0 0 0.213470445629309 0 0 0 0 0 0 0 0 0 0 0 0;0 0.616196530219501 0 0 0 0 0 0 0 0 0 0.849422540372472 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.810675752838635 0 0 0 0 0;0.00508309589200806 0.105964156030294 0 0 0 0 0 0 0 0.352313653363684 0 0 0 0 0.192588746332897 0 0 0 0 0.473102743220109;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.473102743220109 0] );\r\nassert( isequal(route,[5 2 19 15 4]) \u0026\u0026 abs( d - 1.95835 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 18, 3, [0 0 0 0 0 0 0.588131422298983 0 0 0 0 0 0 0 0 0 0 0 0.411615488806083 0;0 0 0 0 0 0 0 0 0 0.148093137302263 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.513126690185934 0.314081294727961 0 0 0 0 0 0 0 0 0 0 0.105622237791164 0 0;0 0 0 0 0.0233388222703319 0 0 0.620281238898666 0 0 0 1.01777898612281 0 0 1.02802169259185 0 0 0 0 0.829878923718159;0 0 0 0.0233388222703319 0 0.103664033766553 0 0 0 0 0.800687507355036 0.724909646173659 0 0 0 0 0 0 0 0;0 0 0.513126690185934 0 0.103664033766553 0 0 0 0 0 0 0 0.51932792913499 0.111508583765534 0 0 0 0 0 0;0.588131422298983 0 0.314081294727961 0 0 0 0 0 0.632615202648636 0 0 0 1.12039468709595 0 0 0 0 0 0 0;0 0 0 0.620281238898666 0 0 0 0 0.665853755155897 0 0.443519419164187 0 0.0287540443670959 0 0 0 0 0 0 0;0 0 0 0 0 0 0.632615202648636 0.665853755155897 0 0 0 0 0 0 0 0 0 0 0 0.341087071649035;0 0.148093137302263 0 0 0 0 0 0 0 0 0.0523829918450132 0 0 0 0 0 0 0.401940201122634 0.691832558529399 0;0 0 0 0 0.800687507355036 0 0 0.443519419164187 0 0.0523829918450132 0 0.491690939364275 0 0.757845451055127 0 0 0 0.024463668194654 0 0;0 0 0 1.01777898612281 0.724909646173659 0 0 0 0 0 0.491690939364275 0 0 0 0 0 0 0 0 1.02836268723464;0 0 0 0 0 0.51932792913499 1.12039468709595 0.0287540443670959 0 0 0 0 0 0 0 0 0 0 0 0.366143225287491;0 0 0 0 0 0.111508583765534 0 0 0 0 0.757845451055127 0 0 0 0.223088374978438 0 0 0 0 0;0 0 0 1.02802169259185 0 0 0 0 0 0 0 0 0 0.223088374978438 0 0.344909749483892 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.344909749483892 0 0 0 0.353158597614942 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0.105622237791164 0 0 0 0 0 0 0.401940201122634 0.024463668194654 0 0 0 0 0 0 0 0 0;0.411615488806083 0 0 0 0 0 0 0 0 0.691832558529399 0 0 0 0 0 0.353158597614942 0 0 0 0.849677928981906;0 0 0 0.829878923718159 0 0 0 0 0.341087071649035 0 0 1.02836268723464 0.366143225287491 0 0 0 0 0 0.849677928981906 0] );\r\nassert( isequal(route,[18 3]) \u0026\u0026 abs( d - 0.105622 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 17, 23, [0 0.151141399637051 0 0 0 0 0 0 0 0 0 0.105216194021975 0 0 0 0 0 0.437381445735918 0 0 0.949941070771521 0 0 0 0;0.151141399637051 0 0 0 0 0 0 0 1.22583368379244 0 0 0.079829221583307 0.71041636270324 0 0 0 0.1075924794072 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 1.21948687450578 0 0.567263036089771 0 0 0 0 0 0.857795458880245 0 0 0 0 0.731569267553795 0 0 0;0 0 0 0 0 0 0.186039341309778 0 0 0 0 0 0 0 0 0 0 2.00348310018009 0 0 0 0 0 0 0;0 0 0 0 0 1.32070145417138 0 0 0 0 0 0 0 0 0 0 0 0.430765092398605 0 0 0 0 0 0.46856479561555 0;0 0 0 0 1.32070145417138 0 0 0.203767017753022 0 0 0 0 0 0 0.487213897131877 0 0 0.896335225888555 0 0 0 0 0 0 0;0 0 0 0.186039341309778 0 0 0 0 0 0 0 0 0.406945507381253 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.203767017753022 0 0 0.15769661193131 0 0.65001597680104 0 0 0 0 0 0 0.15666137867965 0 0 0 0 0.723509833846064 0 0;0 1.22583368379244 1.21948687450578 0 0 0 0 0.15769661193131 0 0 0 0 0 0 0 0 0.508542446617735 0 0 0.696934855529271 0.169312519482881 0 0.00704092733099992 0 0;0 0 0 0 0 0 0 0 0 0 0 0 1.08493079525094 0.214254564261975 0 0.425013648805044 0 0 0 0 0 0 0 0 0.00543872970590864;0 0 0.567263036089771 0 0 0 0 0.65001597680104 0 0 0 0 0 0 0 0 0.696979111426999 0.525282567629852 0 0.621146400617813 1.20050590589561 0 0 0 0;0.105216194021975 0.079829221583307 0 0 0 0 0 0 0 0 0 0 0.459862031186997 0 0 0 0 0 0 0.698687249438191 0 0 0.00200957746053532 0 0;0 0.71041636270324 0 0 0 0 0.406945507381253 0 0 1.08493079525094 0 0.459862031186997 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.214254564261975 0 0 0 0 0.380308744719566 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0.487213897131877 0 0 0 0 0 0 0 0.380308744719566 0 0 0.0449909078512449 0 0 1.22341039971646 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.425013648805044 0 0 0 0 0 0 0 0 0 0 0 0 1.43760755773283 0.719177032769178 0;0 0.1075924794072 0.857795458880245 0 0 0 0 0 0.508542446617735 0 0.696979111426999 0 0 0 0.0449909078512449 0 0 0 0 0 0 0 0 0 0;0.437381445735918 0 0 2.00348310018009 0.430765092398605 0.896335225888555 0 0.15666137867965 0 0 0.525282567629852 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0.696934855529271 0 0.621146400617813 0.698687249438191 0 0 1.22341039971646 0 0 0 0 0 1.1519343197436 0 0 0 0;0.949941070771521 0 0 0 0 0 0 0 0.169312519482881 0 1.20050590589561 0 0 0 0 0 0 0 0 1.1519343197436 0 0 0 0 0.214330337662627;0 0 0.731569267553795 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0.723509833846064 0.00704092733099992 0 0 0.00200957746053532 0 0 0 1.43760755773283 0 0 0 0 0 0 0 0 0;0 0 0 0 0.46856479561555 0 0 0 0 0 0 0 0 0 0 0.719177032769178 0 0 0 0 0 0 0 0 0.649429697531317;0 0 0 0 0 0 0 0 0 0.00543872970590864 0 0 0 0 0 0 0 0 0 0 0.214330337662627 0 0 0.649429697531317 0] );\r\nassert( isequal(route,[17 2 12 23]) \u0026\u0026 abs( d - 0.189431 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 2, 9, [0 0 0 0 0 0.390568942736463 0.253317405921882 0 0 0 0 0 0 0 0 0.035303866587423 0 0.0932427029924401 0 0.228317786309953 0 0 0 0 0;0 0 0 0 0 0 0.22325539367323 0.0737968434096563 0 0.0216391156829114 1.01817561468837 0 0 0.166613690540579 0 0 0 0 0 0.0929136548216463 0 0 0 0 0;0 0 0 0 0 0.324975382720294 0 0 0 0 0 0 0 0 0.257683850031889 0 0 0 0.818836795828793 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0.0227807501033899 0 0 0 0 0.254392094407223 0 0 0 0 0 0.499630884751228 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.645309316664204 0 0 0 0 0 0.377002225744615 0 0 0 0 0;0.390568942736463 0 0.324975382720294 0 0 0 0 0 0 0 0 0.381625987614713 0.187530187877611 0 0 0 0 0 1.03662835165178 0 0 0 0 0 0;0.253317405921882 0.22325539367323 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.420116352005782 0.288516971344659 0 0 0 0 0.290423766876168 0;0 0.0737968434096563 0 0 0 0 0 0 0 0 0 0 0 1.14302504189143 0 0.894497023541543 0 0 0 0 0 0 0.181212342324972 0 0.4790219658659;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.66947645498941 0 0 0 0 0 0 0 0.881432911415172 0.190738003819626 0;0 0.0216391156829114 0 0 0 0 0 0 0 0 0 0 0 0 0 0.406383564162139 0 0 0 0 0 0 0 0 0.0727730905533963;0 1.01817561468837 0 0 0 0 0 0 0 0 0 0.968244418446258 0 0 0.528273242216383 0.125653272829919 0 0 0 0 0 0 0 0 0;0 0 0 0.0227807501033899 0 0.381625987614713 0 0 0 0 0.968244418446258 0 0 0 0 0.545221500471632 0 0 0.602095719309548 0 0 0 0 0 0;0 0 0 0 0 0.187530187877611 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.926256705235548 0 0 0 0;0 0.166613690540579 0 0 0.645309316664204 0 0 1.14302504189143 0 0 0 0 0 0 0 0 0 0.21560951711239 0 0 0 0 0 0 0;0 0 0.257683850031889 0 0 0 0 0 0.66947645498941 0 0.528273242216383 0 0 0 0 0 0 0 0 0 0.213055228450905 0 0 0 0;0.035303866587423 0 0 0 0 0 0 0.894497023541543 0 0.406383564162139 0.125653272829919 0.545221500471632 0 0 0 0 0.450996873658263 0 0 0 0 0 0 0 0;0 0 0 0.254392094407223 0 0 0 0 0 0 0 0 0 0 0 0.450996873658263 0 0 0 0 0 0 0.219529444302005 0 0;0.0932427029924401 0 0 0 0 0 0.420116352005782 0 0 0 0 0 0 0.21560951711239 0 0 0 0 0 0 0 0.863470148104069 0 0.444628451921207 0;0 0 0.818836795828793 0 0 1.03662835165178 0.288516971344659 0 0 0 0 0.602095719309548 0 0 0 0 0 0 0 0 0 0.109259232718513 0 0 0;0.228317786309953 0.0929136548216463 0 0 0.377002225744615 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.615496286883062;0 0 0 0 0 0 0 0 0 0 0 0 0.926256705235548 0 0.213055228450905 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.863470148104069 0.109259232718513 0 0 0 0 0.0137884729469751 0;0 0 0 0.499630884751228 0 0 0 0.181212342324972 0.881432911415172 0 0 0 0 0 0 0 0.219529444302005 0 0 0 0 0 0 0.365687691203556 0;0 0 0 0 0 0 0.290423766876168 0 0.190738003819626 0 0 0 0 0 0 0 0 0.444628451921207 0 0 0 0.0137884729469751 0.365687691203556 0 0;0 0 0 0 0 0 0 0.4790219658659 0 0.0727730905533963 0 0 0 0 0 0 0 0 0 0.615496286883062 0 0 0 0 0] );\r\nassert( isequal(route,[2 7 24 9]) \u0026\u0026 abs( d - 0.704417 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 12, 4, [0 0 0 0 0 0.714172260222902 0 0 0 0 0 0 0 0 0 0 0 0 0 0.361655390928043 0 0 0 0 0;0 0 0 0 0 0.181492418867339 0 0 0 0 0 0 0 0 0 0 0 0 0.22307965545124 0 0 0 0 0 0.779096496125678;0 0 0 0 0 0 0.47292346615082 0 0 0.168841046075892 0 0 0 0 0 0 0 0 0 0.0217708463553388 0 0 0.667747131809592 0 0;0 0 0 0 0 0 0 0.57532352865356 0 0 1.14531063150095 0 0 0 0 0 0 0 0 1.81120439254402 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0.347520308679668 0 0 0 0 1.19301977580358 0 0.820270346367214 0 0 0.0596854204267023 0 0.365147722552969 0.160828167983497 0;0.714172260222902 0.181492418867339 0 0 0 0 0.993473525288174 0 0 0 0 0 0 0 0 0 0 0 0 0.900267645686867 0 0 0 0 0;0 0 0.47292346615082 0 0 0.993473525288174 0 0 0 0 0.303524976604928 0 0 0.988108387042638 0 0 0 0 1.09908596860658 0 0 0 0 0 0;0 0 0 0.57532352865356 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0496932258637628 0 0 0 0 0 0 0.220051533000778 0 0 0;0 0 0.168841046075892 0 0 0 0 0 0 0 0 0 0.415893111213311 0 0 0 0 0 0 0 0 0 0 0.252874847836154 0.7525160069564;0 0 0 1.14531063150095 0.347520308679668 0 0.303524976604928 0 0 0 0 0 0.315427799185682 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.0659140954680451 0.229430180128888 0 0 0 1.02421541676855 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0.415893111213311 0.315427799185682 0 0 0 1.43148800286315 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0.988108387042638 0 0 0 0 0.0659140954680451 0 0 0 0 0.0723048054691602 0.570598773372364 0 0 0 0 0 0 0.816798020448907;0 0 0 0 0 0 0 0 0.0496932258637628 0 0 0.229430180128888 1.43148800286315 0 0 0.0969052461008522 0 0 0.562394406606289 0 0 0 0 0 0;0 0 0 0 1.19301977580358 0 0 0 0 0 0 0 0 0 0.0969052461008522 0 0.830027198843182 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.0723048054691602 0 0.830027198843182 0 0 0 0 0.471570888980097 0 0 0 0;0 0 0 0 0.820270346367214 0 0 0 0 0 0 0 0 0.570598773372364 0 0 0 0 0 0 0 0 0 0 0;0 0.22307965545124 0 0 0 0 1.09908596860658 0 0 0 0 1.02421541676855 0 0 0.562394406606289 0 0 0 0 0 0 0 0 0 0;0.361655390928043 0 0.0217708463553388 1.81120439254402 0 0.900267645686867 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0.0596854204267023 0 0 0 0 0 0 0 0 0 0 0 0.471570888980097 0 0 0 0 0.920738174557066 0 0 0;0 0 0 0 0 0 0 0 0.220051533000778 0 0 0 0 0 0 0 0 0 0 0 0.920738174557066 0 0 0 0;0 0 0.667747131809592 0 0.365147722552969 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.431353900603143;0 0 0 0 0.160828167983497 0 0 0 0 0.252874847836154 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.139899289183316;0 0.779096496125678 0 0 0 0 0 0 0 0.7525160069564 0 0 0 0.816798020448907 0 0 0 0 0 0 0 0 0.431353900603143 0.139899289183316 0] );\r\nassert( isequal(route,[12 14 17 21 5 11 4]) \u0026\u0026 abs( d - 2.16231 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 21, 9, [0 1.30397831279197 0 0 0 0 0 0 0.205205702932437 0 0 0 0 0.462991342326146 0 0.0919395070383298 0 0 0 0 0 0 0 0.788285106392582 0;1.30397831279197 0 0 0 0 1.05960547137835 0 0 0.153644616706166 0 0 0.860262579703983 0 0 0 0 0 0 0 0 0 0 0 0.773468224481749 0;0 0 0 0.13195985000036 0 0 0 1.51813223209895 0 0 0 0 0 0.0156327604904785 0 1.27556519583119 0.93793259222666 0 0 0 0 0 0 0 0;0 0 0.13195985000036 0 0 0 0.458734989962526 0 0 0 0 0 0 0 0 0 0 0 0.835183344604242 0.11324698880843 0 0 1.27194671889278 0 0.873215204449672;0 0 0 0 0 0 0.0522387394084536 0.441514133149768 0 0 0 0 0 0 0 0 0 0 0 0.104845115642955 0 0 0 0 0;0 1.05960547137835 0 0 0 0 0 0 0 0 0 0.323427832607934 0 0 0 0 0 0.548178891330981 0 0 0 1.78927187214965 0 0 0;0 0 0 0.458734989962526 0.0522387394084536 0 0 0.128458273651367 0 1.10447307401052 0 0 1.60635812839544 0.490059715639469 0 0 0 0 0.87297695015148 0 0 0 0.0385154612576837 0 0;0 0 1.51813223209895 0 0.441514133149768 0 0.128458273651367 0 0 0.0426997868037813 0 0 0 0.316089962309322 0.556234063736422 0 0 0 0 0 0 0 0.125426946797567 0 0.501620852747415;0.205205702932437 0.153644616706166 0 0 0 0 0 0 0 0 0 0 0 0 0 1.22841179064666 0 0.506177174936367 0 0 0 0.139674374757514 0 0 0;0 0 0 0 0 0 1.10447307401052 0.0426997868037813 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.695460494256037;0 0 0 0 0 0 0 0 0 0 0 1.09170738934842 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0.860262579703983 0 0 0 0.323427832607934 0 0 0 0 1.09170738934842 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 1.60635812839544 0 0 0 0 0 0 0 0 0 0 0 0 1.27248881503698 0 0 0 0 0.162219187624835;0.462991342326146 0 0.0156327604904785 0 0 0 0.490059715639469 0.316089962309322 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.111140488918591 0.0639936929497993;0 0 0 0 0 0 0 0.556234063736422 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0.0919395070383298 0 1.27556519583119 0 0 0 0 0 1.22841179064666 0 0 0 0 0 0 0 0.772788879713252 0 0 0 0.00743946114818939 0 0.662296573850469 0 0;0 0 0.93793259222666 0 0 0 0 0 0 0 0 0 0 0 0 0.772788879713252 0 0 0 0 0 0 0 0 0.235465388137087;0 0 0 0 0 0.548178891330981 0 0 0.506177174936367 0 0 0 0 0 0 0 0 0 0.596123003045261 0 0 0.50807778971881 0 0.192149930306311 0;0 0 0 0.835183344604242 0 0 0.87297695015148 0 0 0 0 0 0 0 0 0 0 0.596123003045261 0 1.75354812715354 0 0 0 0.230875543406997 0.402865723829543;0 0 0 0.11324698880843 0.104845115642955 0 0 0 0 0 0 0 1.27248881503698 0 0 0 0 0 1.75354812715354 0 0 0 0.286957051522517 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00743946114818939 0 0 0 0 0 0 0 0 0.12234328650336;0 0 0 0 0 1.78927187214965 0 0 0.139674374757514 0 0 0 0 0 0 0 0 0.50807778971881 0 0 0 0 0 0 0.0229366876888033;0 0 0 1.27194671889278 0 0 0.0385154612576837 0.125426946797567 0 0 0 0 0 0 0 0.662296573850469 0 0 0 0.286957051522517 0 0 0 0 0;0.788285106392582 0.773468224481749 0 0 0 0 0 0 0 0 0 0 0 0.111140488918591 0 0 0 0.192149930306311 0.230875543406997 0 0 0 0 0 0;0 0 0 0.873215204449672 0 0 0 0.501620852747415 0 0.695460494256037 0 0 0.162219187624835 0.0639936929497993 0 0 0.235465388137087 0 0.402865723829543 0 0.12234328650336 0.0229366876888033 0 0 0] );\r\nassert( isequal(route,[21 25 22 9]) \u0026\u0026 abs( d - 0.284954 ) \u003c 1e-4 );\r\n\r\n%%\r\n[route d] = parcel_route( 5, 5, [0 0 0.235687387990488 0 0 0.518662908555243 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.00169033754843562 1.18573193396702 0 0 0 0 0;0.235687387990488 0 0 0 0.350144748614205 0 0 0.499051956190166 0 0 0 0 0 0 0 0.428154355783706 0 0 0 0.988646147648288 0 0 0 0 0.766292681932783;0 0 0 0 0 0 0 0 0 0.306976149669423 0 0 0 0 0 0 0.148608071246878 0 0 0 0 0 0 0 0;0 0 0.350144748614205 0 0 0 0.366820040758671 0 0 0 0.947779130029861 0 0 0 0 0 0 0 0 0.781367996905263 0 0 0 0 0;0.518662908555243 0 0 0 0 0 0.28467286265608 0 0 0 0 0 0 0 0 0 0 0 0.814169013559602 0 0 0 0 0 0.514510683872373;0 0 0 0 0.366820040758671 0.28467286265608 0 0 0 0 0 0.137928171247269 0 0 0 0 0 0.581896713318172 0 0 0 1.00288388568789 0.926366539848811 0 0;0 0 0.499051956190166 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.211128675902371 0 0 0 0 0 0 0 0 0;0 0 0 0.306976149669423 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.332300868928405;0 0 0 0 0.947779130029861 0 0 0 0 0 0 0 0 0 0.140274584917356 0 0 0 0.276337784565307 0 0 0 0 0 0;0 0 0 0 0 0 0.137928171247269 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.422423933152413 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.16443124331918 0 0 0 0.113521569230241 0 0 0.431552467605628 0;0 0 0 0 0 0 0 0 0 0 0.140274584917356 0 0 0 0 0 0 1.01590071824433 0 0 0 0 0 0 0;0 0 0.428154355783706 0 0 0 0 0 0.211128675902371 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0.148608071246878 0 0 0 0 0 0 0 0 0 0.16443124331918 0 0 0 0 0 0.816401527141028 0 0 0 0 1.51727966787778;0 0 0 0 0 0 0.581896713318172 0 0 0 0 0 0 0 1.01590071824433 0 0 0 0 0 0.0315916186043663 0 0 0 0;0 0.00169033754843562 0 0 0 0.814169013559602 0 0 0 0 0.276337784565307 0 0.422423933152413 0 0 0 0 0 0 0 0 0 0 0.113122720118215 0;0 1.18573193396702 0.988646147648288 0 0.781367996905263 0 0 0 0 0 0 0 0 0 0 0 0.816401527141028 0 0 0 0 0 0 0 1.22595526329414;0 0 0 0 0 0 0 0 0 0 0 0 0 0.113521569230241 0 0 0 0.0315916186043663 0 0 0 0 0 0.0278718835255773 0;0 0 0 0 0 0 1.00288388568789 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.627233109842477 0 0;0 0 0 0 0 0 0.926366539848811 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.627233109842477 0 0.210579136296008 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0.431552467605628 0 0 0 0 0.113122720118215 0 0.0278718835255773 0 0.210579136296008 0 0;0 0 0.766292681932783 0 0 0.514510683872373 0 0 0 0.332300868928405 0 0 0 0 0 0 1.51727966787778 0 0 1.22595526329414 0 0 0 0 0] );\r\nassert( isequal(route,5) \u0026\u0026 abs( d - 0 ) \u003c 1e-4 );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":26,"test_suite_updated_at":"2012-03-07T20:02:13.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-03-06T18:48:13.000Z","updated_at":"2026-03-30T17:22:55.000Z","published_at":"2012-03-07T20:03: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:t\u003eGiven a matrix that represent the distance along highways between major cities numbered 1 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:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, provide the path and shortest distance from a given city,\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\u003efrom\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, to a given city,\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\u003eto\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e. Assume that 0 represents no direct path between two cities. If there is no solution to the problem, return -1 for both the path and the distance.\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":45457,"title":"Minimal Path - 02 ","description":"Given a matrix, find the minimal path from the top left to the bottom right by only moving to the right and down so that the summation is minimum.\r\n\r\nUse linear index to show the path.\r\n\r\nFor example,\r\n\r\n x=[ 2     2     2     2     2\r\n    10    10    10     1     2\r\n    20    20    20     1     2\r\n    30    30    30    30     2]\r\n\r\nThe minimal path is -- [1     5     9    13    14    15    19    20]","description_html":"\u003cp\u003eGiven a matrix, find the minimal path from the top left to the bottom right by only moving to the right and down so that the summation is minimum.\u003c/p\u003e\u003cp\u003eUse linear index to show the path.\u003c/p\u003e\u003cp\u003eFor example,\u003c/p\u003e\u003cpre\u003e x=[ 2     2     2     2     2\r\n    10    10    10     1     2\r\n    20    20    20     1     2\r\n    30    30    30    30     2]\u003c/pre\u003e\u003cp\u003eThe minimal path is -- [1     5     9    13    14    15    19    20]\u003c/p\u003e","function_template":"function y = minimal_path_3(x)","test_suite":"%%\r\nx = [2     2     2     2     2\r\n    10    10    10     1     2\r\n    20    20    20     1     2\r\n    30    30    30    30     2]\r\ny=[1     5     9    13    14    15    19    20]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\nx = [2     2     2     2     2\r\n     0     0    10     1     2\r\n    20     0    20     1     2\r\n    30     0     0     3     2]\r\ny=[1     2     6     7     8    12    16    20]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\nx = [100    20    30    40    50\r\n    60    70    80    90   100]\r\ny=[1     3     5     7     9    10]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\nx =  [11         111          23          45          67        -500          34          23\r\n          22          32         432        1234          12        1244        -544          44\r\n           1           2           3           4           5           6           7           8\r\n      -12000          45           6           7           8         433         664        2344];\r\ny=[1     2     3     4     8    12    16    20    24    28    32]\r\nassert(isequal(minimal_path_3(x),y))\r\n\r\n%%\r\n%x=magic(10);\r\n%y=[ 1    11    21    22    32    42    43    44    45    55    56    57    58 68    69    79    89    90   100];\r\n%assert(isequal(minimal_path_3(x),y))","published":true,"deleted":false,"likes_count":0,"comments_count":5,"created_by":363598,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":11,"test_suite_updated_at":"2020-04-16T05:52:42.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2020-04-14T22:27:26.000Z","updated_at":"2020-04-16T05:52:42.000Z","published_at":"2020-04-14T22:29:27.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\u003eGiven a matrix, find the minimal path from the top left to the bottom right by only moving to the right and down so that the summation is 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\u003eUse linear index to show the path.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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,\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[ x=[ 2     2     2     2     2\\n    10    10    10     1     2\\n    20    20    20     1     2\\n    30    30    30    30     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\u003eThe minimal path is -- [1 5 9 13 14 15 19 20]\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":2218,"title":"Wayfinding 1 - crossing","description":"This is the first part of a series of assignments about wayfinding. The final goal 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.\r\n\r\n*How many times does AB cross another line?*\r\n\r\n\u003c\u003chttp://i60.tinypic.com/mk7us1.png\u003e\u003e\r\n\r\nThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.  \r\n\r\nThe inputs of the function |WayfindingIntersections(AB,L)| 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 3-dimensional matrix |L| of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \r\n\r\nYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end. \r\n\r\np.s. I noticed later on that there is another Cody problem \u003chttp://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect 1720\u003e that is somewhat similar. But this was a logical start for the series.","description_html":"\u003cp\u003eThis is the first part of a series of assignments about wayfinding. The final goal 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.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross another line?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i60.tinypic.com/mk7us1.png\"\u003e\u003cp\u003eThe first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\u003c/p\u003e\u003cp\u003eThe inputs of the function \u003ctt\u003eWayfindingIntersections(AB,L)\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 3-dimensional matrix \u003ctt\u003eL\u003c/tt\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e L = cat(3,...\r\n  [ x1_start x1_end\r\n    y1_start y1_end ] ...\r\n   ,...\r\n  [ x2_start x2_end\r\n    y2_start y2_end ] ...\r\n   ,...\r\n  [ x3_start x3_end\r\n    y3_start y3_end ] ... % etc.\r\n  )  \u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\u003c/p\u003e\u003cp\u003ep.s. I noticed later on that there is another Cody problem \u003ca href = \"http://www.mathworks.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\"\u003e1720\u003c/a\u003e that is somewhat similar. But this was a logical start for the series.\u003c/p\u003e","function_template":"function n = WayfindingIntersections(AB,L)\r\n  n = randi(size(L,3)+1)-1;\r\nend","test_suite":"%%\r\nAB = [2 0;0 5];\r\nL = cat(3,...\r\n    [1 0;2 2],...\r\n    [-1 4;3 3],...\r\n    [-3 2;0 2],...\r\n    [2 3;4 2]...\r\n    );\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 5 2 ];\r\nL = cat(3,...\r\n[ 2 2 ; 2 -9 ],...\r\n[ -2 3 ; 8 8 ],...\r\n[ 7 -1 ; 4 6 ],...\r\n[ 7 -3 ; -6 1 ],...\r\n[ -6 -6 ; -1 2 ],...\r\n[ 5 -8 ; 3 4 ],...\r\n[ 3 5 ; -8 -9 ],...\r\n[ 8 -8 ; 4 -3 ],...\r\n[ -7 9 ; -5 9 ],...\r\n[ 6 3 ; 8 3 ],...\r\n[ 0 4 ; 9 -2 ],...\r\n[ -8 0 ; 4 0 ],...\r\n[ 6 8 ; 6 0 ],...\r\n[ -6 2 ; -6 9 ],...\r\n[ 8 -4 ; 1 -5 ],...\r\n[ 5 -1 ; -5 -3 ],...\r\n[ -2 -9 ; 6 -5 ],...\r\n[ 8 6 ; 6 -7 ],...\r\n[ -4 2 ; 5 2 ],...\r\n[ 8 6 ; 0 6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -3 -1 ; -3 7 ];\r\nL = cat(3,...\r\n[ 9 8 ; 1 6 ],...\r\n[ -4 -6 ; -3 9 ],...\r\n[ -2 8 ; 7 5 ],...\r\n[ -3 5 ; -8 2 ],...\r\n[ 1 2 ; 3 5 ],...\r\n[ 4 -5 ; -3 -5 ],...\r\n[ 8 5 ; -1 -2 ],...\r\n[ 4 8 ; 3 5 ],...\r\n[ -3 -4 ; 7 8 ],...\r\n[ 9 7 ; -1 -3 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 5 9 ; -9 0 ];\r\nL = cat(3,...\r\n[ 3 -1 ; 1 -2 ],...\r\n[ -5 3 ; -3 4 ],...\r\n[ -9 -2 ; -3 -7 ],...\r\n[ -6 -5 ; -1 -3 ],...\r\n[ 4 -3 ; 5 -9 ],...\r\n[ -6 -2 ; -4 -4 ],...\r\n[ -1 -7 ; -3 -4 ],...\r\n[ 0 9 ; 6 3 ],...\r\n[ -6 1 ; -7 -8 ],...\r\n[ 6 5 ; 6 5 ],...\r\n[ 5 6 ; -5 -1 ],...\r\n[ 7 9 ; -7 -7 ],...\r\n[ -9 -4 ; -2 -3 ],...\r\n[ 3 5 ; -2 5 ],...\r\n[ -3 -4 ; 5 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 0;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 6 -3 ; 6 -7 ];\r\nL = cat(3,...\r\n[ -7 0 ; -3 0 ],...\r\n[ -1 5 ; -8 0 ],...\r\n[ 8 -5 ; 1 4 ],...\r\n[ -4 -4 ; 7 3 ],...\r\n[ 0 0 ; 4 -5 ],...\r\n[ -2 -3 ; -4 4 ],...\r\n[ 4 -8 ; 2 -5 ],...\r\n[ -7 6 ; 6 3 ],...\r\n[ -2 -7 ; -3 -8 ],...\r\n[ -6 5 ; 8 7 ],...\r\n[ 9 -9 ; 5 -9 ],...\r\n[ 6 8 ; 4 6 ],...\r\n[ 2 7 ; 5 -2 ],...\r\n[ -7 -5 ; -1 -7 ],...\r\n[ -8 -2 ; 0 -6 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 45 25 ; 23 101 ];\r\nL = cat(3,...\r\n[ 94 6 ; 2 71 ],...\r\n[ 40 -9 ; 51 84 ],...\r\n[ -8 97 ; 72 105 ],...\r\n[ 18 59 ; 36 88 ],...\r\n[ 95 56 ; 10 -6 ],...\r\n[ 61 48 ; 96 22 ],...\r\n[ 12 100 ; 94 16 ],...\r\n[ 103 90 ; 54 106 ],...\r\n[ 108 53 ; 34 68 ],...\r\n[ 9 20 ; 1 7 ],...\r\n[ 76 64 ; -8 106 ],...\r\n[ 60 9 ; 51 69 ],...\r\n[ 75 62 ; 60 -7 ],...\r\n[ 80 -8 ; 70 68 ],...\r\n[ 8 30 ; 68 67 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ -5 -6 ; -2 -6 ];\r\nL = cat(3,...\r\n[ -1 -7 ; -7 -1 ],...\r\n[ -4 -6 ; -6 -5 ],...\r\n[ -7 -2 ; -1 -5 ],...\r\n[ -9 -6 ; -4 -4 ],...\r\n[ -9 -3 ; -3 -2 ],...\r\n[ -2 -1 ; -3 -2 ],...\r\n[ -4 -5 ; -6 -9 ],...\r\n[ -8 -1 ; -4 -6 ],...\r\n[ -1 -5 ; -5 -1 ],...\r\n[ -4 -6 ; -2 -5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 6;\r\nassert(isequal(n,n_correct));\r\n\r\n%\r\nAB = [ 1 6 ; 6 7 ];\r\nL = cat(3,...\r\n[ 5 8 ; 2 8 ],...\r\n[ 6 5 ; 3 2 ],...\r\n[ 4 8 ; 6 1 ],...\r\n[ 7 2 ; 7 9 ],...\r\n[ 1 8 ; 1 2 ],...\r\n[ 1 6 ; 1 9 ],...\r\n[ 2 6 ; 1 2 ],...\r\n[ 3 9 ; 2 4 ],...\r\n[ 5 9 ; 2 8 ],...\r\n[ 2 8 ; 2 5 ]...\r\n);\r\nn = WayfindingIntersections(AB,L)\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":1,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T14:46:37.000Z","updated_at":"2026-02-19T10:27:05.000Z","published_at":"2014-02-25T14:59: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\":[{\"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 first part of a series of assignments about wayfinding. The final goal 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.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eHow many times does AB cross another line?\u003c/w:t\u003e\u003c/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 first assignment deals with the problem of finding the lines we cross while going from A to B. The answer will be the number of times the segment AB intersects with the other lines. The other lines are isolated (or intersecting) line segments of two nodes each.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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\u003eWayfindingIntersections(AB,L)\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 3-dimensional 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\u003eL\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of columns with x- and y-coordinates, each column either the start or the end of a line, and with all individual lines concatenated in the 3rd dimension.\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 L = cat(3,...\\n  [ x1_start x1_end\\n    y1_start y1_end ] ...\\n   ,...\\n  [ x2_start x2_end\\n    y2_start y2_end ] ...\\n   ,...\\n  [ x3_start x3_end\\n    y3_start y3_end ] ... % etc.\\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 n will be the number of times the line AB intersects with any of the other lines. The lines will not 'just touch' AB with their begin or end.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ep.s. I noticed later on that there is another Cody 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.nl/matlabcentral/cody/problems/1720-do-the-lines-intersect\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e1720\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e that is somewhat similar. But this was a logical start for the series.\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":2219,"title":"Wayfinding 2 - traversing","description":"This is the second part of a series of assignments about wayfinding. The final goal 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\r\n*How many times does AB cross the boundary of area F?*\r\n\r\n\u003c\u003chttp://i59.tinypic.com/219vz42.png\u003e\u003e\r\n\r\nFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\r\n\r\nThe inputs of the function WayfindingBoundaryCrossing(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 matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\r\n\r\n AB = [\r\n   xA xB\r\n   yA yB\r\n ]\r\n\r\n F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\r\n\r\nYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\r\n","description_html":"\u003cp\u003eThis is the second part of a series of assignments about wayfinding. The final goal 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.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHow many times does AB cross the boundary of area F?\u003c/b\u003e\u003c/p\u003e\u003cimg src = \"http://i59.tinypic.com/219vz42.png\"\u003e\u003cp\u003eFor this second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\u003c/p\u003e\u003cp\u003eThe inputs of the function WayfindingBoundaryCrossing(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 matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\u003c/p\u003e\u003cpre\u003e AB = [\r\n   xA xB\r\n   yA yB\r\n ]\u003c/pre\u003e\u003cpre\u003e F = [\r\n  [ x1 x2 ... xn ;\r\n    y1 y2 ... yn ]\u003c/pre\u003e\u003cp\u003eYour output n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\u003c/p\u003e","function_template":"function n = WayfindingBoundaryCrossing(AB,F)\r\n  n = randi(size(F,2))-1;\r\nend","test_suite":"%%\r\nAB = [ 0 0 ; 6 -8 ];\r\nF = [\r\n      -4    4    4   -4\r\n       2    2   -4   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 0 0 ; 4 -6 ];\r\nF = [\r\n      -6    4    0\r\n      -0    2   -4\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 2;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 6 -6 ; 0 0 ];\r\nF = [\r\n      -8   -8    4\r\n       2   -4   -0\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 1;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nAB = [ 8 -6 ; 6 -8 ];\r\nF = [\r\n      -6    0   -3    7    9    4    6   -4   -7   -2   -7   -8\r\n      -9   -9    0   -4    1    7   -0    4   -1   -7   -5   -9\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nn_correct = 7;\r\nassert(isequal(n,n_correct));\r\n\r\n%%\r\nn_correct = randi(9)-1;\r\nAB = [ 0 0 ; n_correct*2-9 -10 ];\r\nF = [\r\n      -2   -2    2    2   -2   -2    2    2   -2   -2    2    2   -2   -2    4    4\r\n      -8   -6   -6   -4   -4   -2   -2   -0   -0    2    2    4    4    6    6   -8\r\n  ];\r\nn = WayfindingBoundaryCrossing(AB,F);\r\nassert(isequal(n,n_correct));","published":true,"deleted":false,"likes_count":3,"comments_count":4,"created_by":6556,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":"2014-02-26T11:59:09.000Z","rescore_all_solutions":false,"group_id":26,"created_at":"2014-02-25T15:14:11.000Z","updated_at":"2026-02-19T10:33:57.000Z","published_at":"2014-02-26T11:59:09.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 second part of a series of assignments about wayfinding. The final goal 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\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\u003eHow many times does AB cross the boundary of area F?\u003c/w:t\u003e\u003c/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 second assignment in this series you have to calculate how many times we cross the boundary of a single area while going from A to B. Our path from A to B is a straight line. And the area boundary is a closed polygon consisting of a finite number of straight segments.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 WayfindingBoundaryCrossing(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 matrix F of columns with x- and y-coordinates, each column a subsequent node of the polygon boundary of the area. The last node is connected to the first.\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  [ x1 x2 ... xn ;\\n    y1 y2 ... yn ]]]\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 n will be the number of times the line AB crosses the boundary of F. Note that AB may cross the boundary of F at a corner node of F.\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":45459,"title":"Minimal Path - 04","description":"Given a matrix, find the minimal path sum from any cell in the left column and finishing in any cell in the right column.\r\n\r\nYou can move up, right \u0026 down.","description_html":"\u003cp\u003eGiven a matrix, find the minimal path sum from any cell in the left column and finishing in any cell in the right column.\u003c/p\u003e\u003cp\u003eYou can move up, right \u0026 down.\u003c/p\u003e","function_template":"function y = minimal_path_5(xx)","test_suite":"%%\r\nx =[1 12 4 6 8 10 100 ; 1 5 7 87 98 2 200;20 56 74 1 34 56 21]\r\ny_correct = 120;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n%%\r\nx =[1 122 4 6 8 10 100 ; 1 5 7 87 98 2 200;20 56 74 1 34 56 21]\r\ny_correct = 120;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n\r\n%%\r\nx = [2     2     2     2     2\r\n     0     0    10     1     2\r\n    20     0    20     1     2\r\n    30     0     0     3     2];\r\nx=flipud(x);\r\ny_correct = 5;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n\r\n%%\r\nx=[131\t673\t234\t103\t18\r\n201\t96\t342\t965\t150\r\n630\t803\t746\t422\t111\r\n537\t699\t497\t121\t956\r\n805\t732\t524\t37\t331];\r\n\r\ny_correct = 994;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n%%\r\nx=magic(10);\r\ny_correct = 429;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n%%\r\nx=[4074\t3279\t2194\t3757\t1759\t811\t534\t4266\t3902\t2736\t3222\t1556\t428\t189\t153\t299\t867\t4759\t164\t1260\t2115\t3895\t1274\t880\t3239\t2912\t2023\t1739\t4109\t2573\r\n4529\t179\t1908\t1276\t4155\t3972\t4810\t3111\t1949\t1482\t1894\t4617\t1313\t4426\t3721\t3410\t1955\t4602\t2806\t1453\t472\t2118\t1121\t3609\t3396\t2704\t2242\t750\t2150\t4422\r\n635\t4246\t3828\t2530\t2927\t1557\t24\t1755\t1209\t3724\t4058\t2152\t4006\t4567\t2501\t213\t4157\t264\t4410\t3086\t2993\t455\t3340\t2368\t3179\t4350\t1830\t2931\t4439\t2941\r\n4567\t4670\t3976\t3496\t2749\t2643\t3875\t2567\t2020\t945\t2665\t925\t147\t3981\t2400\t358\t4017\t3690\t3346\t1327\t2355\t1333\t4222\t764\t4726\t1324\t3818\t1311\t1956\t774\r\n3162\t3394\t935\t4455\t4586\t829\t4087\t2010\t483\t3434\t1754\t4525\t4645\t494\t4524\t2609\t303\t1346\t953\t4122\t3480\t769\t1723\t1706\t1045\t1591\t3140\t223\t3846\t1000\r\n488\t3789\t2449\t4797\t1430\t3010\t4344\t380\t660\t918\t4696\t4899\t3652\t1310\t3050\t484\t1997\t2115\t1845\t4914\t3500\t1406\t3903\t3037\t3547\t597\t3860\t3775\t1984\t2035\r\n1393\t3716\t2228\t2737\t3787\t1315\t423\t1200\t4711\t1843\t4380\t2195\t2444\t1677\t3089\t4091\t2635\t2740\t2304\t3652\t3193\t2201\t3377\t959\t1182\t4700\t4665\t1214\t4043\t3744\r\n2735\t1962\t3232\t694\t3769\t3271\t1999\t617\t4781\t3129\t2751\t556\t2893\t3399\t4298\t4088\t2084\t4714\t4909\t1720\t169\t2636\t34\t3693\t597\t3228\t4864\t2213\t3776\t4128\r\n4788\t3278\t3547\t747\t1903\t3447\t1300\t920\t2877\t3902\t3113\t1291\t1187\t683\t4028\t3613\t3285\t2089\t783\t2921\t345\t2288\t3011\t1215\t3037\t2398\t961\t3439\t1887\t3950\r\n4825\t856\t3774\t1288\t2840\t3741\t4001\t1200\t299\t406\t2936\t2044\t2295\t3607\t2884\t750\t3140\t4916\t4278\t539\t1598\t4377\t1934\t4588\t2251\t3197\t695\t1797\t1081\t1593\r\n789\t3531\t1381\t4204\t380\t2253\t2158\t2087\t1174\t4647\t1039\t2975\t4816\t534\t915\t3299\t1460\t1508\t3224\t4532\t2655\t2591\t4580\t1346\t2294\t2724\t3482\t3682\t3953\t2671\r\n4853\t160\t3399\t1272\t270\t420\t4554\t249\t1766\t3879\t1507\t1312\t2735\t3269\t1200\t2593\t2159\t3506\t1882\t4399\t3273\t4719\t6\t3828\t3310\t3237\t470\t1974\t4747\t450\r\n4786\t1385\t3276\t4072\t2654\t1145\t910\t4514\t4106\t2434\t2355\t3015\t2606\t2471\t4433\t4865\t78\t3332\t955\t4089\t2039\t3189\t2313\t944\t3852\t2720\t2628\t3418\t1638\t559\r\n2427\t231\t814\t1218\t3896\t4567\t1320\t4724\t78\t2180\t1153\t3557\t1158\t3896\t144\t3245\t4921\t2696\t2142\t1304\t4100\t4789\t2122\t1438\t1752\t3606\t2652\t3521\t3357\t682\r\n4002\t486\t595\t4647\t4671\t762\t728\t2455\t216\t2234\t4222\t1109\t2445\t3576\t2450\t4002\t836\t3491\t2411\t2972\t3592\t1204\t2305\t456\t3311\t2613\t4306\t2212\t2194\t3394\r\n710\t4118\t2492\t1750\t650\t4130\t681\t2447\t845\t1532\t974\t588\t3121\t4519\t840\t2269\t532\t3333\t604\t113\t4844\t3381\t3851\t2882\t2081\t4969\t2425\t98\t4168\t2476\r\n2109\t3475\t4799\t983\t2845\t2692\t4347\t1689\t3246\t2543\t1130\t1484\t3396\t4455\t4894\t2162\t1863\t891\t2948\t2127\t2657\t1446\t1613\t3417\t4210\t1094\t1968\t1655\t3845\t949\r\n4579\t1586\t1702\t1256\t2347\t4981\t2899\t4501\t3659\t2554\t854\t1594\t1978\t1671\t3564\t4127\t991\t641\t1131\t1564\t1626\t3360\t3924\t2733\t4165\t529\t3358\t2122\t837\t2476\r\n3962\t4752\t2927\t3081\t60\t391\t2750\t1847\t3239\t4089\t1139\t2121\t1838\t3494\t2503\t418\t2449\t4996\t1924\t808\t529\t3476\t2357\t2129\t1283\t549\t3707\t1352\t4310\t739\r\n4798\t173\t1120\t2367\t1686\t2214\t725\t557\t2255\t3975\t2179\t2540\t4940\t990\t2356\t666\t1698\t856\t2915\t894\t3055\t340\t179\t3223\t3068\t318\t2601\t986\t4950\t275];\r\n\r\ny_correct = 56185;\r\nassert(isequal(minimal_path_5(x),y_correct))\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":363598,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":9,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2020-04-14T23:28:19.000Z","updated_at":"2020-04-14T23:28:19.000Z","published_at":"2020-04-14T23:28:19.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\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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 matrix, find the minimal path sum from any cell in the left column and finishing in any cell in the right column.\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\u003eYou can move up, right \u0026amp; down.\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":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,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsASwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD31VG0cUbR/doX7op1ACbRRtFLRQA3aP7tG0f3adRQA3aP7tG0f3adRQA3aP7tG0f3adRQA3aP7tG0f3adRQA3aP7tLtFLRQAm2jaKWigBNoo2iuY174h+FfDTMmpa3apMnWCNvMk/75XJH41wWoftF+GrclbDTdRuz/eZViX+ZP6UAex7R/do2j+7Xz3N+0rdeZ+48OReX/00uTn9Fq7Y/tJ2zf8AH/4elX3gnB/QgUAe77R/do2j+7Xm+kfHTwTqZVJbufT3P8N1CQP++lyK7+w1Gx1S0W5sLuC6t26SQSB1/MUAWdo/u0u0UtFADdo/u0bR/dp1FADdo/u0bR/dp1FADdo/u0u0UtFACUUtFACUUtFACUUtFACUUtJQAi/dFOpF+7S0AFFFFABRRRQAUUUUAFFFFABRRRQAUUV4/wDFX4uxeG/M0LQZEl1cjbLP1W1/xf8Al3oA6zxp8SdB8EW5F9N59+RmOygIMh92/uj3P4Zr5+1/4n+NPHt79gsjLbW8hwtjp+csP9ph8zfy9qi8I/D3WPHN3JrGq3E8VlJIWku5fmknbvtz1+p4r3bQ9A0nw3Z/ZdJtFt0P336vJ/vN1NeDmefUMG3CHvT7dF6/5HTSw8p69DxbRPglrd6qy6rdwach58v/AFsv5DgfnXb2PwX8K2q/6U19eN33yCMfko/rXotGa+RxGf46s9J8q8tPx3/E7YYWmulzko/hh4KjTaNCQ+7Tyk/+hVXufhN4MuPu6bLAfWK4b+pNdrmiuNZnjU7+1l97L9hT7Hkeq/AqykDNpGsSxv2juoww/wC+lx/KuGufD/jb4dXn223a5tVH/L1Zybo2/wB7Hb/eFfSuMU1lDKyt8ynqK9XCcS4ui/3vvr7n96Mp4SEtjzfwV+0Cszx2Pi2FY2Pyi/gXj/gaDp9V/Kvc7S7t761jurWaOa3lXdHJEwZXB7givB/GXwm0/VlkvNFEdjedfL6QyH6fwn6cVw3g7x5r/wAMdafT7yKVrISYudPl7f7Seh/Q19pgcxoY2HNTevbqjgq0ZU99j65orK0DX9P8S6RBqml3CzW0o4PdT3Vh2IrVrvMgooooAKKKKACiiigAooooAKKKKACkpaaetACrS0lLQAUUUUAFFFFABRRRQAUUUUAFFFZPiHXbTw1oN7q9822C1jLkZ5c9FUe5PAoA4T4wfEb/AIQ/RxpumyqNavV+U/8APCPoZPr2X8+1eQfDXwA/ii6Ot6zvbTUkO1WJ3XT555/uj+I/hWVo9lqXxR+IE1xfSP8Av5DPdSDpFEONo/Daq19HW9tBZ2sNrawrDbwoEijXoijoK+bz/NnhIewpP35fgv8AM6sNR53d7EiqkcSpGqoiKFRFXAUDoABTs4rK8QahqOlaS17pmmf2jLGwMluJCreX3K4HJHpXCD446IqbZ9H1FJhwV3IcH6kj+VfGYfLcVio+0pR5vmjvdWEHZnqCjdVDS9Z0/Wop5dNuPtEcEpgkkVTt3jBO09xz1FeF+Lvi1qHiKFtPsIv7N0+T5ZSrbpJF9Cew9hXs3g630qz8IadFos/n2Hl7lm6GRifnLDsd3bt0rqxeUzweGVSv8UnolsvV9+yM4V/aTtHY3aKKK8U6jO0zXdP1ia9gsps3FjKYp4pF2sjA4zg9j2NaHNeKfFHUrbw346t9W0G/aHXPLH2yNFyvQbd3bLL1X6GrWn/HeI26rqmiO0w6vazYVv8AgLA4/OvoZ5FWqUo1sMrqS2e6/K67M5I4lJtSPYcA1x/jfwRZeKrDy22xX0S/6Nden+w3qv8AKqHhz4g6p4u1SKLSfDhi05ZB9ovLqY4VO+MADd6Dmu9ZVYbT0ri5cRllaLbtL1T++35Gycaqa6Hz14D8Zan8MvFk1nqEUi2TSeXf2h6jH8a+4/UfnX1haXcF/aRXdrKstvMgkjkQ5DqRkEV4L8VfB41jSm1e1j/4mFiv70DrLEOv4r1+lS/s/wDjhm8zwhfy5wGmsCx/F4//AGYf8Cr9Fy/HQxtBVI79Tyq1F0pW6Hv1FFFdxkFFFFABRRRQAUUUUAFFFFABTT1p1NPWgBV+7S0lLQAUUUUAFFFFABRRRQAUUUUAJXz9+0T4pLS2Hhe3fhR9rusepyEX/wBCP4ivf2O0ZPSvj6V2+InxekkZi0N/f9fSBP8ACNaic1Tg5y2WoJczsetfCvw0NA8Hw3Eqbb3UcTynuqfwL+XP/Aq7ntRx/Cu1RwB6CgdK/JcZiZ4mtKtLqz26cOSCSF9K8o+OEtnbaFZRC0tftt5OWM/kjzdiDn5sZ5LLXq1eK/Hnd9s0P+75UuPruFejw8r5hBev5MyxX8NmbpPw1hv/AIK6h4pYv/aCSNcQDd8vkRna4I9/mP8AwEVtfAvWHeHVNGdsomLqIemflb/2Wuw8M6vDD8DksGG5jpU65/hwQ+c/SvMfgeGHje4x0+wyZ/76Svu88w/NgKnOul18jy8JXjOr7r2Pfx0qK6u0sLK4vJfuW8TzN9FBP9KmrC8Z5/4QbXsdfsMv8q/McNBVK0YPq0vxPbm7RbPDPh/oJ+IXxI2aqzywv5l3eYYguo7Z92Kiq19ZL4D+Kr2cqrNb2N4BidQweFuRkHj7jV1HwDvY9P8AFGpyyKSrWWw46gGReaxfjNcrefEm7uUXCvFFx34QDmv1+VC9Jq3u2sfPqtH2nJfU+i9qRrsRVWJPuhVwMewFAqO23fZLff18pM/XaKkFfjc/iZ9BHYrzryr/AIGvnLxVYXHgH4hrdab+7jjlW8sz22k52/QHctfSbLvVl9a8r+MmkC88MQamq/vbGbY5/wBh+P8A0ICvouHMY6OJ9m3pLT59DLFQ56V+qPddE1WDXNDsdVtf9TdwrMvqMjOD9OlaVePfs866dQ8F3Wkyvuk024+QekUnzD/x4PXsNfoR44UUUUAFFFFABRRRQAUUUUAFRv1H0qSo5PvfhQA9fu0tIv3aWgAooooAKKKKACiiigAorA8TeMdD8I2a3Os3qQ7/APVxr8zyf7qjmvD/ABR+0NqV3ug8NWK2UfT7RcASS/gv3R+tAHs/j/WYtD8DazdvMsUv2SRIdzAEyMpCgfia+fPgbp4uPFV9fN0tbQ7f95yF/luri9WfxHrkT61q0t5couF8+4Ynr0C5/pXqPwGgVdN1u5/iaWKPPsAx/rXkZ5W5MvqNPy+9o3o03GpG6PXaKKK/Lz2BO1eZfG3R3vPC9pqUS5NjORJ7JJgZ/wC+gK9O7VDcW8F7aTWt1Es0EyFJI26Op6iu3AYp4XExrJbP8OpnVhzwaPn3TfGtta/C680d2b+0AzQQrzzG53M2fb5h/wB810vwL0l1j1XWJFwjBbWJvU53N/7LVqf4F2MmpF4dalisWbPktCGkA9A2cfpXpulaZZ6LpdvpthD5VtAu1E6n1JJ7knrX1md8QUMRhPY0Hdv10R5uEwPsqjlbd3Lgqve2iX9hdWUv3LmF4T/wIEf1qwKK+JhNwkpLoerLY+ZfBmpf8If44aLVMwxqZLS6OCfL5xnHswpWD+O/ieqwK3lXd0AAe0S9z/wBc16740+GGn+LLs6hBctYX7YEr+XuSXHAJGRz71d8FfD7TvBqyTJM13qEi7GuHXaFX+6q84z3r9BqcUYd4L3X7/bz9drHjxwH7/2lvI6843fL07UUUV+dt3PZCud8VaeupeGtXstvMltJs/3gNy/qK6LvVSVQ021vuuNp/HiunCzdOqprpZjS5k0eMfs/6zDpvje6s7mdIor20KrvYAGRWBUflur6iFfCSaZNdau9hax75fMZFXOM4z6/Suw0H4meNPBM62jXMstun/LpfqWGPYn5h+Br9cUk9Lng8krXtofX1FeTeE/jv4c1x4bXVVbSLtsLmVt0JP8Av9v+BD8a9WVldQytkHkEVRI+iiigAooooAKKKKACo5PvfhUlQyfeH0oAlX7tLSUtABRRRQAUUUUAFUNY1SDRdGvdUucmC0haaTb1wozgVfrjfipBNcfDDX0g++LUucf3VIZv0FAHy/Pcar8RvGE15eTfvZmZ2J5WGMdFHsOgrtrLw1oPh+H7RKsTFetxdMOvsDxXM/DWaMXd9Af9a8Ssv0B5/nVP4hR3MfiHdLIzQyIGhHYDoR+deZW562I9jzWX5nv4WNLDYNYrl5pX+40fF/i3T9Q0uTTrMyTEuCZTwvB7Z5Ndr8CGH9gawvcXMZ/NTWanwn0gfCS68VxajPfXj2QuYVVdkceCNykcklcMOval+A11/pGt2Rb70cUwH+6SD/6FXJnWGUMtnGHk/wAUcDxcsRiFUnue0UUUV+bHeFFFFABSNlV3N8q+rcCvOPiL8TV8Mu2k6Rsl1TH72VuVt89sd2/lXl9t4f8AHPjvdf8Al3l5Ex/19xLtT/gO4gflX0ODyGdWkq9eapxff+kck8Uk7QV2fSnnRf8APeL/AL+D/GnKyM21ZEZvRWBr5z/4U94y/wCfOD/wLj/xpr/CPxrbr5qWCuR0EVym78Pmrf8AsTBPbFL8P8yfrFT+U+kGVl+VuKK+ddB+IPifwXqP9n6utxcW0bbZbO8zvQf7DHlf5V75pWq2et6VBqWnyebbTrlT3U91Yeo715uY5RVwVpS96L2aNqVdT06l6iiivJNw71Wf/j7X8Ks1m6hci1guro9IInc/gpNb0I800kUup8wWupJpni9tQaNpI47lnKjgkZNekW+taB4mhW3donY/8sbhQG/D/wCsa5P4X+FrTxp43Gm6iJWtTBLNKY22sMDAIPP8RWq/xF8JWvgnxQdHs9Ra8AiWViY9jRluit6nGD/wKv1WrhI1UnezR5+EzGWHThypxfRmh4m8DQ2tpNfaYXAjG6SB+cL3IPtXpH7P/jW4vY7jwrfSNJ9nj86zdjyEBAZPwyCPxrn9JaSy8IQvqMjOUtmeQv12kEgH8OKx/gPDNN8UYHi+5DbTPJ/ukbf5stRgak5qUZu9uptm2Hp03CpTVuZXsfV1FFFdx5AUUUUAFFFFABUE33/wqeoZPvD6UASr92lpq/dFOoAKKKKACiiigAqKeGK5gkhmVXikUoyt0YHgipaKAPi/UbKbwF8RrizfdssrkqD/AH4W6H8UNdV4701dQ8Pm6i+Z7VvMBHdG4P8A7Ka6T9ovw1tfTfE0Kfe/0O5I9RlkP/oY/AV5W/jLUX0SDS4UVNsfkvJ95pB0A56ccVx16MpVI1Ibr8j1MHi6cKFSjV2e3qesfAvVo9d8Ka74Ku248p3iDf8APOQbXH4Mc/8AAq8/+Ft4+gfEuGzuvkaYyWUoPZj0/wDH1WsXT9A8YaeV1DTrLVLV1X5ZbdXjfH4YNZM97qKa01/dSy/2iJvOeWX7+/Odxz3zVV408TRnRTTumjz1GcGm0fXmaXrWV4c8Q2fijRYdTs5FO9QJo+8MmOVNaor8nq0p0puE1Zo9mMlJXQVR1fUBo+h3+pMu77LA8wHqQOB+dXqo6tp0es6Nd6XMzJHdRGNnTqM9xTocntI8/wAN1f0CV7Ox8+/DnQP+Ey8avNqm6eCLdd3W7/lqc8Kf95jzX0hGq/KiqqouFVVXAAHYCuL8B+AE8EfbZWv/ALXcXWE3LHtVUBz0yeSa7SvXzzHxxeItSleCWn6nPh6ThHVanjV/8dLiC/mitdCgaFHIUyyMGIHcgV3HgHxp/wAJrptzO9l9kmtnCMFYspDAkEE/TmtK78H+Gb64kubrQ7GWaRtzu0eCSe5xitHT9OsNKtfsun2kFpb7t3lxLgZPc0sVisunQ5KFJxnprf8A4IQhVU7t6HLfErwtb+I/Ct1cGNf7RsYjNBJ3KryyH2I/WuH+Bmsyi91HQ5GJikj+1RD0ZSA35g/+O17PLEk0MkD/ADJLGUf6EYNcN4L+GkHg/XZ9U/tBrtijRwr5e3ardS3Jya2wuYUv7Oq4au9fsinSftVOKO9ooor506wrhviTqg03wJqkm757rFsn/Azz/wCOhq7WZtsW1fvHgV4N8X/EkGoaha6NZzLJFZktOycjzTxt/AcV7mRYWWIxcXbRO7+RlXnyUm+rOj/Z7s4rFPEfia8/d21rbiPzPRRmST8gq15zHLP44+IM99dKf9LuTPKOuyMc7fwGFqrpaeK7/SG0zS/7TfTWYl4IN4iYnrux8p6d6igfXPCN/wCa1vLaysu0rLFw49Of6V+izmmnCLXMebQiozjOony3O1+IOp/ZdFSyRsPdNz7oOf54r0P9nrw19h8N3evzR/vdQk8uEn/nkhx+rZ/75rwy9u7zxr4ns4IIQk1y0dtDGGyAScfzOa+y9G0uDRdGstLthiC1hWFPcKMZP1qMLR9lSUXubZjivrFdyW2yNCiiiuk4QooooAKKKKACoZPvD6VNUMn3h9KAJF+6KdSL92loAKKKKACiiigAooooA8y+O19HZ/DC6iaNXN1cRQKT/Cc78j8EryD4UaDBMLnWriNZHifyYA38DYyW+vK4r13486fJe/DKeVBn7HcxTt9MlP8A2evL/hFfJJpF/p+797HKJgP9kjB/UV5mcSnHBzcDty+MJV1zno1YfiPwzp/iezaK6RUuQv7q5C/Mh9/Ue1bgoxXwtGtOjNTg7M+nqU4TTjJHifhDXb34f+M2tr0MluZPIvouxXPDj6dR/wDXr6U/3fmXsa+ePi3ZpFrdldqu154MP7lTjP5GvUvht4stvEnhi3t9wGo2MKQzxluWVRhZB6g9/Q16ueYf6zhqeOhHW3vHz9P91VlRbO1ooor5A6wooooAKKKKACiiigBKWiq9zOkMbMzKiqpZnZsBFHUk1UIuTsgOG+KPi1/D+grDaSbL69zHEy9UQfece/OBXnHw98Ex6qTq+qR77NWxDEf+WzDqT/sj9ay/iJ4nh8UeJfNtN32O2TyIS38YBJLY7ZJr2bRbNLDQbC0RdojgQfjjJP519vJSyzL4wgrTnuY4aCxGIbe0S4qrHGsaIqInARVwF+gFZOr6dbanbTWV1HvgmX/vg/3h7itiqN1IkcjSO21I13OzdgOTXh0JzVRSW57yjFxaa0PJvhk66H8XtJiuI0kZbt7U57MwZAR+Jr6/r4/+H0T+IPjFpc0S8G/N2R6KpMn9K+wK/SI3sr7nxU7cztsLRRRVEhRRRQAUUUUAFRyfe/CpKhk+8PpQBIv3RTqav3RTqACiiigAooooAKKKKAKWp6fb6rptzp92m+2uYmhkH+ywwa+Q9RsNX+FnjpoJFyYT+7Y8Jcwnv+P6Ee1fZArmvGHgvR/G2l/YtTh+dMmG4Th4ie4P8xUzipxcZK6ZUZOLTW55toPiLTPEdqsthMvm7f3luzfvEPuP6itZ8Rxs8reWi8l34AHuTXmevfArxfolyZdH8rU4AcpJBIIpR9VYj9CaxR8PPiTq0q2s2lao65/5eZcIPxZsV85V4cg53hOy+89eGbtQ95alTx1rQ8UeKILbTFaeKPFtBt6ysTyR9ScCp9e8NeJfhR4ktrpZcYwYL2Jf3cnHzIf5EGvZPhn8G4PCt2msa1JHd6qv+piQZjtz65P3m/l+tZfxp+JemxWtz4SsrW21C6b5bqSVd6W59F/6aD17fXp71KhThSVFL3UrHlVarnN1HuXfCvxK0TxHp7S3Vzb6beQrunhnkCr/ALyMeo9uorUPjzwmrbT4hsfwkJ/pXz5oPgPXfEEYuLe3WC0PS4uG2Kfp3P4CumX4NXePm1q1B/2Y2NeLLhCjVm5wuk+n/DkzzenS92clc9jtvGXhi6kVINf05nPQNMF/nitpRuVXHzIejLyD9DXz/c/BzVY491rqdnM/9xtyfqRisjT9c8WfDfUxBIJYY87mtJ/milHt2/Fa48XwfKEL0pO/n/mjWhm1Oq7J3PpjFFYXhLxVYeMNIF7ZfJImEnt2bLRMf5g9jXm3j34tSpPNpXhmUIqnZLfKcsx7iP0H+1+VfM4bKMViK7oJWa3v0PQnXhGHNc9a1DVdN0pd2paha2n/AF3mCn8jzWT/AMJ74S/6GGx/76P+FeGaZ8O/E/iH/Tbs/Z0l5869kO5/fHLGtj/hTV531u1/79tX11LguMo+/Jt+VkeXPOaUXbmR7APGfhmaNjDr+nPsUk/vgMAd8HFeNePPiLN4kkbR9GMqaczYZsHfdHPHHZfQfnUV98INat4y9neWd2R/AGMbfhuGP1rG8L6zd/DzxhHd3+jxTTQcSQXUeHQH+JD/AAt6Gu3CcOUcDU9o7t9L9BrMY4iPLTkP8U/D3WfCGiaVqWpx7Pt27fFjmBh0Vj6kc16h4J8Rwa/odvGJE+3W8Yjmh/iOBgOB3Br1NT4c+J/gz/n6068XkdHhcf8AoLqf8kV4H4j+B3izQrxp9EX+07UHckkDhJUHupI5/wB3NdOPwMMbT5JOzWxvhMU8PO6Wh6TO4t4md/lUd24H615T458bw3Fu+laXIJFk4nuB0Yf3V/qaqx/Dn4j606wzaXqJHreS7FH/AH2a9Q8CfAW10u4i1HxRLFfXCcpZR8wg/wC2T976dPrXFgskhh5+0m+ZnXiM1nVg4RVh/wABvAkukabL4m1KLZc3qbbVGXlIepb/AIFxj2HvXtdJ0pa9w8kKKKKACiiigAooooAKhk+8PpU1Ryfe/CgB6/dpaRfu0tABRRRQAUUUUAFFFFABRRRQAUUUUAcf8SfFB8I+Br7UomAu2xBbZ/56NwD+Ay3/AAGvm/4c+Fl8S6rPqepI01latucPz58jchSf1P8A9evT/wBpKd10PQrYfce5kcj3VQB/6FXIeBPF/hvQvCcNpeXvk3bSySSr5LN1OF5A9BW+HUXU996HJjp1I0X7NXb7Hpv91fuqvygLwFHoKK5b/hZPhL/oKt/4Dv8A/E0f8LJ8Jf8AQVb/AMB3/wDia9f2tPuj5r6rX/lf3HU1Q1rRbLxBpkmn3y5iPMcn8ULdmX/PNYv/AAsjwl/0FW/8B3/+Jo/4WP4S/wCgq3/gO/8A8TUynTlGzkio4fERkpRi015M8dafWfB2q6npsVw0Ezo9pcbOjofT69q7X4XeEobiP/hIb+NJFV9lpG/I3Dq5Ht2965r4iarpes+JlvtJn86J4EWR/LKfOMjv7Yr0Hw7458KaZ4Z0yxk1LypYbZVkTyJGw/Vug9TXm0KdJVm3Y9zF1K7wy5E7vc7pmZm3N8zUVy3/AAsnwl/0FW/8B3/+Jo/4WT4S/wCgq3/gO/8A8TXqe1p/zI8D6rX/AJX9x1NYXizwvB4q0hrdlUX0ak2s/cN/cJ/utVP/AIWT4S/6Crf+A7//ABNH/CyPCX/QXb/wGk/+JqZTpSjZtGtOjiaclOEXf0OW+B/ii48PeNhol0xW01JvJaNv4Jh9w/U/d/H2r6kr4v1PUrR/iV/amkyb7c38dxE+0rk7lY8Hn71faFeJJWk0fVQd4ptC0UUUigooooAKKKKACiiigAooooAKhk+8PpU1QTff/CgCVfuinUi/dpaACiiigAooooAKKKKACiiigAooooA8I/aV/wCQZ4e/67T/AMkrz/wv8MrfxD4dttUfVJYWmZ18tYAwGGx13Cvffih4I/4TnwsbW3dUv7aTzrVm6E4wUPsR+oFfNkZ8deDZJtNjj1Sx+bc0QjJXPqOCPxFaUpRi/fV0YYiFWULUpWZ1v/CmbT/oOy/+Aw/+Ko/4Uzaf9B2X/wABh/8AFVyf/CXePv8An71P/vwf/iaP+Eu8ff8AP3qf/fg//E10+1w/8pxewx3/AD8X9fI6z/hTNp/0HZf/AAGH/wAVR/wpq0/6Dcv/AIDD/wCKrk/+Eu8ff8/ep/8Afg//ABNH/CXePv8An71P/vwf/iaPa4f+UPYY7/n4v6+RT8aeF4/Cmrw2MV21yJIFl3tHs6kjGMn0rr9M+Ettf6RZXraxIjXMCTbPswONwzjO6sKz8E+OfHElzqn2C7uHVcme6/d+Zjoq7sZP0qvBq/jrQIxpsR1W1SBiogaFvk9hkVlCdLnba0OirSrypqMJWl1Ou/4Uzaf9B2X/AMBh/wDFUf8ACmbT/oOy/wDgMP8A4quT/wCEu8ff8/ep/wDfg/8AxNH/AAl3j7/n71P/AL8H/wCJrX2uH/lOf2GO/wCfi/r5HWf8KZtP+g7L/wCAw/8AiqP+FNWn/Qbl/wDAYf8AxVcn/wAJd4+/5+9T/wC/B/8Aiad/wl/j7/n81T/vx/8AWo9rh/5Q9hjv+fi/r5Gdq+jJ4f8AG50uOZphb3MYEhXBbO09OfWvtqvmL4afDDXPEHiWDXtftriCwimFwz3IIkuXByBg84z1Jr6dxiuSVrux6UU0km9RaKKKkoKKKKACiiigAooooAKKKKACoJvv/hU9QTff/CgCVfuinU1fuinUAFFFFABRRRQAUUUUAFFFFACUVFNNFbQSTSyLHFGpd2bgADkk15LdfEzxHrt1N/wiWm2w02Ftn2y9OPNPsMjH06/StKdGdT4TOrWhSV5M9forzbwx8Spbqx1tPEFolrqGjwmeWOD7sqDuuc859/4hXHw3fjDxbB/bNx4kl0iCZiba1tcgBc+2PzNRViqKbrPlRPto2TR7zRXl3w/8W6uPEFx4U8RzLcXiR+ba3Y4MyDsfXjkf8CzXqNEo2tZ6PU0hNTV0LRRRSKCiiigAooooASql/f22mafPe3koitoELyyN/Co6nirZNcQmmeJbbxderfTLq3hrVMo8LYDWeRgDb3U9Dj604pPcls6rStUs9Z0yDUbGbzbadd8b7SNw+h5q6a8stfHfhf4fWEPhiO5vdTksC6M9vEG2fOx2scgZGcHFdr4a8WaR4ssWudJuN4Q7ZI3Xa8ZPTctXKnJa20FGaelzfooorMsKKKKACiiigAooooAKKKKACoJvv/hU9QTff/CgCVfuinU1fuinUAFFFFABRRRQAUUUUAJUF3d29jbSXN1PHBBGu55JGCqo9yanryH4uyG68ReGtJvZGi0eZnkmO7AdwQBk+2f/AB6tKNP2k1Ezqz5IORD8Q/HeneI9Kh8OeG7/AO1XGoTrDM8aEBY/TJAzk+nbNTQWltp9lDawfJaWseA3sOWY/XrRBptjY7fsun2tvj7jJGMj6N1qw0CzRtE8fmo64dGXIYehr26NFUlZHzOMxTxDV9EjidFNrqa+JdUv7lLW0vYZYpJOphiAAQ4HPzOUAHfa1SeFfErLosNrcabfytbrsSa2gMiuvb8aW78L6dd+NrWwto/KtfK+030CN8oCngY7bq7u5u1s7Sa5lbZb28ZcpHwqhR0AH5V89nmJpKUcO48zevax6lD36aa0R5zbeJksfHket6lY3Vv5PlpFDt+dI8/MxBxkkbv++q9u8N+NND8VeYul3RaaMbnglUq6g98Ht9K8V0WB9WubjXdR/e3E8h8oSchcdxn06CluLi/0rxha3Whoiag9uUG1QRzkEkdK1jWoSq/VUrOMd76Kx6sMHVpYVYhvST266n0bXK+JPH/h/wALy/Z767Z7vAP2eBN8gB6Z7D8a8kfRtQcm7m1+/k1Ffn81Zmxu68c1u/D/AEuKfTZtdvF+0ahd3D5nm+ZsDjv6muLFY/C4fDyxClzqLSstNX/TNZYavGcac48vNqd94Y8eaJ4smlg0+WVLmNdzQzx7G2+o6g1e8ReK9G8LWqz6tdrFu/1cQG53/wB1Rya8015xo3xF8O6tF+683KTlV+8oOGz/AMBNN0C2i8W+ItU8V6in2hPtBhsI5eVRF6HHsNv47jVSxuHjgVmE01Brbre9rf10MIqftXQXxXOx0X4p+G9b1FLGOW4tppOIxdRbA59AQSPzqG9+L3hOzv2tftM8+xtrywQF4wfr3/CuP+J0cMml6bAkCNdyXG2LavOMYI+mStaVpodrp2kf2UkETp5ZSUso/eOR8zE/Wu3Kp0sfho4nlcU76X7fI4cdipYSp7PdnYaz4r8KXGjSQXXiG2ghvoCqvFP8+1hjcuOQayfDuhaRpXhTUrvwvrN7qchtpBG7XplAkCnGEGFBz7Vyun+C9F0+FVezS7m2/vJZ8nJ9l6AViawbvwNqTX+gN9nh1GBoJI1yQj9io9R1X0rveEtH3ZGFPMo1J8rRu/DOKzXwjHJaojXjyP8Aa36yZzwD3ximaLPFpnxpb+zdi281uI79I/u+YxAHTvuK/wDj1S6Z8PNOtbBPtc979vljzPNDcmP5jyQMenvXNaLqdl4M1PVo7ktdtZXWbOBUANzOAVRpG67UByB6tnrivl8qjQxGYV61Co5Ps1pq+9+nyPYxEpwoQjOKXmfRTukabnZVUdSTgUqsJFyrAg9CK8FutH1LxG39p+MtUlTfjy7GNvLjhB+6DngH26+pptrJP8OvEGm3Vhe3T6TdT+TdWcrbh9R7jORX0TwMuTmvqefHMacqnIe/0U1WV1VhyDyDTq4T0AooooAKKKKACiiigAqCb7/4VPUE33/woAlX7op1Iv3aWgAooooAKKKKACiiigBK5T4h6Tpmp+D759SVSlnG1xG/dWUHp9eldX3rj/iiksnw31tYfveSCf8AdDKW/TNXS/iR1Jn8DPN/A8P2fwtDLLu33Mhk+bnao+VcflWN441aZdVhsre5aJIYt7eWxXLN649q6fRJI5PD+mtD/q/syKPw4P61ynivwzqV9q7X9hD9pSZRlFYbkIGOh7V9FHe58nBxlWbeht/Di08vTb7UG+Z7iYRAt/EFGT+pq54+uzb+HFtk+/dTBP8AgK/Mf/Zao+BbkN4YWJG2vb3EiyD3Y5FU/Gc8smv6DbM3ybi/zepYD+lfEN8+cSlUXwtv7lp+h71KPNFU110Ni0thZ2lvbL/yxjCn69/1pyxwwztP92a4xEXb07ItU5b9oVkllZFRcsS1c3/bd3Nqun6nPH5WnvcPFb7mxkjhzj23Lk/hXFhcJWxcqlS9lq359bH3eNxFLBxp02rvRLy6XO42hvl/vVc+Hsi/8I9NZt/rbO6kRx9eRWL9t2/K0X/j1Q6PrC6L4wXeuy01VRE57JMPun8f/Zq4ZUniMHVw630kvWP/AALmea0Zp069tE7P5ml8T4D/AGbpt1Hu3xXDp8vX5h/9auo0HSxo+gWdh/HHHmT/AH25b9adfQW+oJClzGzLDcJcAf7SnIBrN8WeJk0HQ5rpf+PqX91br/tnv/wHrXmrF1cbg6GV01qpP8Xp+p431dUa08TLaxgzTr4g+JilfntNHjJHozr/APZn/wAdrppJEjjaWVtiIpd3bsByTXFeAP3Oj3N6ysz3MuwFv7qdf/HjWn4o+36loclnpsamWRh5gaQKSg5IBPFfrGGwkcPRhQh8MVb/AIP3nw+LquvXbl1JfDetvrsWozldkUc4SEd1Qrnn3p+tWSahd6HbP827UUf8FUs38qr+HbF9D0dbV9rXMkhkmKtkA9AoPfAqa2vPtnjm1tF2f6FaSzv7M+FX/wAdrLNanscHVqx6J2+4vBUva4uEVtc6/wC9Llu7V5l4X01NQ1zUvEdwu9RdyC1DdC+cl/8AgI6e9dvreoHTdD1C83bfJt3YfXGB+tc94eh+z+GtLiX/AJ9w592b5if1r5DgfDtqrV72X5tn0PElX2cIU0c5r2r2l74vhs9Qu3h0uxk3ybcnzJBz29TxVlp7jxfrVvdQWztYwSGKyibg3V0w447Kv3mPZV9TWVr/AIR1O41y4ubCFZobmTfnzAPLJ6hs1d0i1fwf440JrW4eafyna92/dKHOVUen9a+7rJ8jseHh/Zc0dT6Gs7f7JZW9tu3+TGqb26nAxmrNFFfPn0QUUUUAFFFFABRRRQAVDJ94fSpqgm+/+FAEq/dFOpq/dFOoAKKKKACiiigAooooAKguLeO6tpLeeNXhkUpIjdCpGCKnooA8Au9G1/wFqUtjawLqGkyuXtkkba+D/dJ7juP0qG/1LxBd2UiLpsWi27rskvtQnEYQHrtzyT/ugn0r326tbe8haC6gimibqkqBgfwNZ9t4Z0KyuVubXR7CG4XlZI7ZAw+hxxXfHHS5bNannzwFOU+ex4fJ4U1rwzaW+v6LbStYsoilhu1IeZR/y1dP4Ax+6P4flzyazvEOqLr1lCP7G1S31C3bdE0cZkU56jcO3pX0swVlwelYNz4L8P3UzSNp/lsevkSyRD8kYCuW9KdVVqkfeXVGrw/8rPBbbStZ1iW3tNWE8SSt+7s4kAurwjsqH7o9ZHwq9ea9WX4Z2174VuLLUVhS/nRBEYM7LMJykceedoydx6sWYmuw0vQNJ0RX/s3T7e2Z/wDWOi/M/wDvN1P41qdqcqiWlJcqOhqc9aruz5m1mHXfB223vpbeT+GNJVIkI9V/vKPUGtfSfCGo66sd34jle1s/vx2cPySP7t/d/n9KvxT2+rfFLX7zW7mJZtOl8mygnYBUVTgMAePf/gWa0tU8caRp8nkW8raneu21Le0/eFj/ALw/+vXgZria6r/V8DS9/rJLv26erO7D1JTpXr1HyLpc3Lu7trCykurqVYraFfnd+eBx+JryjxFqX9t29xrt+sqW5jMOj2fdhnDTv/sj9W4HQ1tpput+MtYWLUoFmlhbdHo8MhENvn+K6lH3f90ZkPota/xL8OroHgyxYym4lk1GI31xtCbwFYIqqPuxr0VBwPrzXXkWTQwE1Uqu9R/h/Xf7jmx2LdaDUF7qHaRZf2fotjZ/xRwjf/vN8x/nWQ3i20s/EV7p2oP5UMcgEUu3IU4G5Wx7966OWWKNZLh2T7Oi+aX7bMZz+VYnw80FfErX0t7uSK9aS6YqqncobYgYMCMZ83/vmvr6tRU4XZ8nhaHt5y5iG78X2e5bXSFbVb+TiKCCIkZ9+5/Csuwi1jw1q6680T6qs2+3vzbcqsrcmNGGd5XC5K8Z+XtXrNn8N7KFGimvZzbPxJbWsUdqko9HMah2HtuxXVHSbBtOXTvscC2arsWBYwEAHTAHTFeZisRTr03SmrxejPawuD9g+aD1PC9e16bxXp/9n2dpdadpoYS6hfXsZSOFF7cdee3UnaBVbT9bufDUC6X4h0+6gWDAin8v7qn5lVx2PNe1w+DtCgvIbr7K8skDb4fPnkmWJv7yh2IB96s6r4e0/V9r3ETLMFws8TlXX8R1/GsMD7DAQVKhG0TXF4d4rWq7s8Wk8baXI6xabFdaldvxHBFGfmP6n8hWh4N8O3+reJpLrUNj3hdftoTmOziUhhBkceYxC5X+FN2eXr0NPAViPkl1DVJIG+9CLgRK/s3lqpP510djp9npdnHaWFtFbW0fCxxKFUfgK6a+N5laJlh8DCk7luiiivPPQCiiigAooooAKKKKACoJvv8A4VPUE33/AMKAJV+6KdTV+6KdQAUUVT1O7ex06e6itJbp41yIIvvP7CgC5RXn2l/EyTVNbk0qLwrq63EMiJc7lX9xuPBbnpUnhX4naTrmiwXmqXFlpVxPK8cdtJcglguBnkD1oA72iuZtPFUL6xrtre/ZLS10ry83LXaHIYZJdf4OfWtPStf0nXY5H0vULa8WNtr+TIG2/WgDTorlNN8Z2U76h/aUllYJbX7WULm9STziOnT7rH+71q4fGvhlbQ3Ta7YfZ1l8kyeeMb+uKAN+isbUPFGg6SsBv9Ws7cXC74vMmA3qf4h7e9PvvEmi6Yls99qllbpdf6lpJgBJ7j296ANaislfEmimyuL0apZ/ZrZ/Lnl84bY2/uk+tT6XrGna1a/adMvoLuHOC8EgcA+hxQBforlNL8aWFzol1qWqTWWnwW95Ja7jepIrbenzD+Ig/d61uWGradqlh9usb6C5tOf30MgZOOvI9KAOU8XfDew8T366hiBLraEkMsZYSAdM7WU8VW0j4XW1iuLi+8uFhhoNNg+yhx6PJuaUj/gYrpYvGHhqe4t7eLXbB5bn/Uok6nfzt4/EYqS98VaBpt+the6xZW92cfuZZgrc9M+lae2nblvoZ+yje9i7p2mWWk2aWmn2kVrbp92OJQo/SoNc0W01/RbnS72PfbzptPHIPZh7g81l+NPFp8IadY3gshd/ar2O02eZs27gx3Zwf7tXr3xVoOm362F7rFlb3bY/cyzBW56Z9Ki7vfqXy9DyCf4aa1a/8S6WTWbvT93yW9q0WyTH/TRnGwfVfzr1Twl4fbQ9OYzrEt3Pt3pDnZCijbHEmeSqjuepLHvVu/8AFOhaXPLBe6tZ280KB5I5JgGVSQAcfjSz+KdCtdOt9RuNWs4rK54gnaYbJPoa1qV5zVmZwowhsjZorKi8Q6NNBeTxapZvDZnbcyLMu2Ej+8c8VBF4s8P3GmTalFrNk1nCwSSfzhtQnoGPbNYmpuUVn2GrafqkM01heQXEUMhikeJwwRgASCfbNVLLxX4f1CeWCz1mxuJYULyJFOrFVXqeOwoA26KyU8RaM1raXS6naNBeSeVbSCUbZnzjap7nIpkXinQJ9V/suHWLJ7/cV8hZgXyOox60AbNFedf8LLKS6XG2lwSNfawdLzDerIIwCoDnap5w/wB3iusbxRoI1f8Ask6xZjUN+z7N5437v7uPX2oA2aK4bSfiRptzqOt22ry2mlrp9+9nE8twP320sN3IGOlaKeLhJ4/bwwtmuwWH237X5/BGQMbce/XNAHUUVkab4l0TWLqS107VrO7njGXjhmDkD14rXoAKKKKACoJvv/hU9QTff/CgCVfuinU1fuiqV9q+naZLaxXt3FbvdSeVAJGxvf8Auj35oAv0Vj6h4j0nS7iS2vL6OO4SA3Jh5L+UASW2jn+FquadqFtqum29/ZyeZbXEYljfaRuU8jg80AcV4R06+tfiZ4zup7S4it7loPJmkjKrLgHO1iMHHtXnlt4Ou/8AhR18j+Hbj+3GvQ6I1kftGNyDIG3djbur3B9e06LXBoz3G2++zG72Mpx5QOC27G39atWd/Z6laLdWN3BdW752zQSCRDjrhhxQB4tN4avbqXxut/omry29wtm0f2aLEkpUcmPcMPg9RXSfDhNZHiPVZby2eexaJBHqVzposp5WGMIVwNwA71302r2MFtJcPcqYo22sU+ba3TBxmrwYMM02mt0SpwbsmeAXfhrV7iO6hfRL94pPF3nMjWjEPAd2X6fc9+lbl34SLat8R2j0BtklpH9gZbTh28sk+V8vJ3f3e9ezZFJkeopFXPBYrLxCtpaWEuh3lqv9hiGKe20tZpp22/NFK8inyxntT9J0vUNI1TwhqOo6Be6lCmlNaGyWAGa3l8x/mMbkYGD1Ne23l9BZRq87bA7hAdpPJ6dKzda8LaH4j8ltVsUnkhz5cgdo5Ez1AdSG/WnZ2uTzRu1c8P0vRL/UPBt49hYy+XZeKPOmtbZRKyRqoHyIcq5XPSvSvh/pjR6xrer7dXxdmMNLqFslt5xUfeWJVGMeuOa7TS9K0/RbFLLTLSK2tU6Rxrgc96vZB70ijwKw8O3sXhKR73Ttctbi38QS3EMttab3hBSMCQwsMunHau4+H0Wr/wDCMa3/AGjpqQNNNKYZlshbS3YIP7x4hjBNei5HrRkeooC54AvhK+h+FXhvyvD90msJrAkuCtownWPMnzN8u7HCdfarmq6XfWH/AAmek3fh2/1LUNZuvNsbuG28yMqxyuZP4dle6ZBrFtfFGj32u3Gi2t55t/bKTLGsbYTBwQXxtz7ZoA4Tx5oerN8PPCunLBcX97Z3tp9o8iIyn5YnDMcZ4z3rA1bS76w/4TPSbvw7f6lqGs3Xm2N3DbeZGVY5XMn8OyvdKKAPHdE8JXi/EKZNb01ryCHw7HB9plhMkTzgRqQrkYLfe965nQdG1bR4vBmo6joV/dw2b3KS6cIP36lidriNsHHOfT5a+iKx9a8M6N4jSJdWslufJJMT7mRkJ67WUhh09aAPC7TRL/V/D/i+DS9PliWDxAk0ljEqM3lqZMxqvKnbleP9mr2u6DfapofiK/sLTxDdTTw28OLmwWDzisqH5Yo0DEqA3OK9s0fRNN0Ky+yaXZxWsGclU7n1JPJP1rSoA5mbTjpfgS4tdI0uBrj7EQlp5YCyvsxhhxnPevMfD9hq934w8HXU+l6jHbwxzpcI2li2gtiYyCg2qDjnq34d690rM0nXNP1tLp7CYyrbTvbS/IV2yL94cgUAeT+GvDWrweL7PRJ9NuF0nw/c3l5ayvGRFcbtvlAOeCQTmsZLDxDevoPnaJf201trkctxa22kiK3gAb74kC72yOpzj9K97u7u30+zmu7qRYbeFS8kjdFA6mqui63p3iDT1v8AS5zPbMxAfy2TJHswBoA8O0nw7rkZ0IPo1+hi8XPcSBraQbIf3P7w8cLw3PSn6nY+ItSt5kk0K9tbpNZSaSzstLUQhc/63zQu9z7g19A0UAeAT6fe2a/EGO58JajdS6rfzJY3CWhfku5UjIzt53Ajr+VXYPCfiJdWksvslwkreERZCfYfK87A/deZ93PbrXuVFAHivg7SLltW8OvPaa8t1o9u6yJLYRW8MJ27WTeFBl3duT6+ter6Jqc2saTDez6fdafJJnNvcrh0wccj3pJtd0uCPUGa/gY6fH5t2iSBnhAGfmUZI4FWNO1C21XTbe/s5PMtriMSxvtI3KeRweaALlFFFABUE33/AMKnqCb7/wCFAEq/dFcJ8WtJfUPAdxd23/H3pkiXsTr1XZ94/wDfJY13a/dFRyxRzxNFKivG4IZWXIYHqCKAPFbS+fxLF458bQM6LHpn2OykXKlCIg0mPQg7azbu71SbTNFuX1KW/t49FSSSxj1Y2k8bd5+fv/r9K9yg0XSrbT5NPt9Ns4bKXPmW8cCrG+euVAwc1WuvC+gX0NvFdaLp08VsuyBJLZCIx6KMcD2oA8n0/UpfEXiq1gXUtUayufDLt++kKSswZl3HGBnjrjmug+CMVr/wgP7m9eW4eRxND52fJ+ZtuF/hyOfevQ00nTYbtLyOwtUuUi8lJlhUSKn9wNjOPalstM0/TzM1lZWtq0zb5TBGE3n1bAGaAZ56pFrouqmK6lE6XOzb5nO3I+bH9a0p1murvXS15dILaJXjWOQgA7Sa7CTTbGUyGS1hcyfeJjB3fWl+w2oMx+zxfvhiT5B846YPrXfLGJ3dtf8Ahv8AI8WGVzTS5tP+H/zRx8ep3NhHpWpzzyvFNbNHIpYkbwCVOPU1CHuIX0OK7vriMTq7zN5hGc9ATXSap4ei1I20Bm8myhOTbxxgAn69utWLvRbe71C1uX+7bqyCPAKsCMc01iKX5/rb8yJYHEaq+itb8L/l+Zxct7cJbvDDdStbR6giRy+YckYbIz6dKtmcXB1K5vtVms7mC42RBWJ2qDxhM85rsRpliIFhFpD5StuCeWMA+uPWll06ymuFuHtIHmHSRkBP50pYqD6f1oXHLasdXK/l9/5X0MjxBqrR6NdrZTZu4lXft4ZA3fHasw3CWMd0dO1WWeX7H5hibLgH+/u6A+1dd9lg3O3kx5kGHO0fMPf1pltYWlpu+z20UO7rsUDP5VjGtGMbWOirhKtSfNzdLddPQ4m2uXguNKa2vZ53uoWNyrTFsHbnOO2Of++aitjdmw0i7+33fmXFwYX/AHnG0tjv3ruoNMsbZmeG0gjZuGKoBkUDT7NUjQWsISI7kHljCH1HpWv1uPRf1r/mc6y2p1l+fl/k/vMPw4ZYNX1WxaaWWKIoU81txGc968i02K88P6X8RdS0i8vGvLK9e2QtMW+QykNIw7yBR96vfY7aCKWSZIY0kk++yqAW+pqGDStPtWujb2NtE10xe4McKr5zHqXwPmPPeuWrPnlzWPTw1GVGnyt31Z4pe376NcwweHfEF7qEN74fuZ77ddmXy2WF2WUHPyNurvfhZYynwjZ6xd6lf3l3fQr5n2mcuqBWYKFB6e/rXS2nhjQdPiuIrPRrC3S4UpMsdsgEinqrYHI9q0LW0t7G1jt7OCK3gjGEjiUKqj2A4rM3PnjS59YbwRoOujxFq630uuixBa5LqEYHPynOTx3rR1rUta8Kal450vStU1KaG2gtnjkuJzLJHv8AL3sGPT77c17Unh7RY7SO0j0mwW2im86OFbZAiSD+MLjAb3qX+ydNF1cXX2C1Fxcrsnm8ld0q4xtdsZIx60AeJalqEuh6lcWXhzXb2/s7nw/Nc3TNdmXyXEbFZQ2flJO3p/eqa8bVNJ+HOgahFq2oyy65PapfTz3pUJGA2FWTB8oHPLV6/aeGNBsIbiCz0awghuBtmSO3UCQejDHIq0dKsG07+zmsbU2O3Z9m8oeXt9NuMUAcT8PDqMWsa3Zz30EtlG0bwWq6g149qSPmUuwBw3UV5vFqmrT3tparrN/D5/i6S2Lx3JyEJjGBnI4z06V79p2lafpFt9n06xgtICcmOCMIM+vFVx4e0RZFddGsFdLj7SrLbJlZv+eg4+9x160AeNXttPbw/EXw+2qajPY2FvFPAJ7ku6nG4gk9jnmnaeDHJ4I0K+1a9tNDvdON5JJ9rMfmTlT+738bVXC4H+1XtD6NpbvdO+m2bPeLsuWaFSZgOgfj5vxpl1oGj32nxWF1pdlNZw48qCSBTGmOm1cYH4UAeG/21rN1oem2ceuX/wBmHiY2NtfRznzJYDjHzfxYz3rf1DSZ3+Id14bi1vV4tPg0IyjZdncWDZBJr1T+xNJ+z2tudLs/ItWD28fkLthYdCgxwfpUraZYNetfGxtTdvH5JnMQ8xk/ulsZx7UAeGafd6tDofgTxKdd1GW8vdSFnOjz5iaISsmNv+6vJqOXxPPPf6Zrml32oL9q1pIfOudUDO8Z+9H9mA2qn3ea9wXQdHW3tbYaTYLBaSeZbx/Z12wtnO5BjCnPpUf/AAi+gee039iab5ryCZn+ypkuOjdOoz1oA8a8i303xV8R2j1S6ivYLR3tka5IaTdGzMcdW29vSn6RfPrWraLpviHW7yw0yPw+lzE63Zi86YkZYtn5iPm/75r2i50TSb24a5utMs553jMTSywKzMhHKkkZx7VFdeGdDvbW3tbrR7Ce3t+IY5LZWWMeijHFAHimj6rr2vr4Ctb3VtSgF3JdwyTRTlJJo1xgk9z1GT/Oup8Da3F4c1bxhp2razL/AGXpt7FFbTX85Ypv8wbdx/3R/OvSjpGmNJayHT7TzLQYtn8lcwg8fIcfL+FRtoWkM1w7aXZlrl1kmP2dcyspyrNxyQemaANOoZPvD6VNUE33/wAKAJV+6KdVVZ22rwP1p/nN7UAT0VB5ze1HnN7UAT0VD5h9BSpIW64oAloqEykdAKd5h9qAJKKh8w+gp28+goAkoqPzD7U7JoAdRTcmjJoAdRUfmH2p2TQA6iofMPoKd5h9qAJKKbk0ZNADqKbk0ZNADqKbk0ZNADqKbk0ZNADqKbk0ZNADqKj3n0FHmH2oAkoqHzD6CpMmgB1FNyab5h9qAJKKh8w+gp3mH2oAkqCb7/4U/efQU0uc9B+VAH//2Q==\"}]}"},{"id":787,"title":"Path Optimization thru N words : Time Optimization","description":"This is an extension of\r\n\u003chttp://www.mathworks.com/matlabcentral/cody/problems/196-love-is-an-n-letter-word Cody 196 love\u003e with a more stressing test set and scoring based upon time.\r\n\r\nGreater than 10 words induces time issues with brute force combinatorics.\r\n\r\nDescription is copy of Alfonso Nieto-Castanon's problem statement for Cody 196.\r\n\r\nGiven a list of N words, return the N-letter word (choosing one letter from each word) with the property of having the least distance between each pair of two consecutive letters (if there are multiple optimal solutions return any one of them). Letters may repeat inside words.\r\n\r\nExample: s1 = {'abcd','bcde','cdef','defg'}; should return s2 = 'dddd'; (with total letter-distance = 0)\r\n\r\nExample: s1={'aldfejk','czoa','vwy','abcde'}; should return s2='love'; (with total letter-distance = 27: 'l'-'o'=3 + 'o'-'v'=7 + 'v'-'e'=17 ; compare for example to the possible word 'aave' which has a total letter-distance of 38)\r\n\r\n*Passing:* All problems correct and time \u003c 2 seconds\r\n\r\n*Output chart:* Time in milliseconds with a max of 100 ms.\r\n\r\nNote: Did consider logarithmic scale but keeping it simple for now.","description_html":"\u003cp\u003eThis is an extension of \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/196-love-is-an-n-letter-word\"\u003eCody 196 love\u003c/a\u003e with a more stressing test set and scoring based upon time.\u003c/p\u003e\u003cp\u003eGreater than 10 words induces time issues with brute force combinatorics.\u003c/p\u003e\u003cp\u003eDescription is copy of Alfonso Nieto-Castanon's problem statement for Cody 196.\u003c/p\u003e\u003cp\u003eGiven a list of N words, return the N-letter word (choosing one letter from each word) with the property of having the least distance between each pair of two consecutive letters (if there are multiple optimal solutions return any one of them). Letters may repeat inside words.\u003c/p\u003e\u003cp\u003eExample: s1 = {'abcd','bcde','cdef','defg'}; should return s2 = 'dddd'; (with total letter-distance = 0)\u003c/p\u003e\u003cp\u003eExample: s1={'aldfejk','czoa','vwy','abcde'}; should return s2='love'; (with total letter-distance = 27: 'l'-'o'=3 + 'o'-'v'=7 + 'v'-'e'=17 ; compare for example to the possible word 'aave' which has a total letter-distance of 38)\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e All problems correct and time \u0026lt; 2 seconds\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput chart:\u003c/b\u003e Time in milliseconds with a max of 100 ms.\u003c/p\u003e\u003cp\u003eNote: Did consider logarithmic scale but keeping it simple for now.\u003c/p\u003e","function_template":"function y = min_path_cost(s1)\r\n  s2 = '';\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',100);\r\n%%\r\nformat short\r\nformat compact\r\nglobal net_time\r\ns1 = {'abcd','bcde','cdef','defg'};\r\n\r\ns2=min_path_cost(s1); % to get good time\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3;\r\n\r\nassert(isequal(s2,'dddd'))\r\n\r\nnet_time=dt\r\n%%\r\nglobal net_time\r\ntemp=net_time; % anti-cheat\r\ns1 = {'aldfejk','czoa','vwy','abcde'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'love'))\r\n\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\n% anti-cheat \r\ntemp=net_time;\r\n\r\ns1 = {'aldfejk','czoa','vwy','abcde'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\npause(0.2);\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'love'))\r\n\r\nif dt\u003c200\r\n net_time=2001 % cheat trap fail condition\r\nend\r\n%%\r\n% not part of the time trial\r\n% avoids look-up table hack - Castano\r\ns1 = cellfun(@(x)char('a'-1+randi(26,1,5)),cell(1,7),'uniformoutput',false);\r\nassert(all(any(bsxfun(@eq,min_path_cost(s1),cell2mat(cellfun(@(x)x',s1,'uniformoutput',false)))))\u0026all(sum(abs(diff(double(min_path_cost(s1)))))\u003c=sum(abs(diff(double(cell2mat(cellfun(@(x)x(randi(numel(x),1,1000))',s1,'uniformoutput',false))),1,2)),2)));\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'lqjfac','deamv','fkazbw','idlw','ajmf','abcwz','wxyz'}; %lmklmww\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'lmklmww'))\r\nnet_time=temp+dt\r\n\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'lwjac','demv','fkabw','idlw','pqmf','abcnq','fwxyz','mnop'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'cdfdfcfm')|isequal(s2,'cdbdfcfm'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'ldjac','demv','fkabw','idlw','pqmf','abcnq','fwxyz','mnop','flap'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'ddfdfcfml')|isequal(s2,'ddbdfcfml'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'the','goal','of','life','is','living','in','agreement','with','nature'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'hgfiiiighe')|isequal(s2,'hgffiiighe'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\ns1 = {'he' 'has','all','the','virtues','idislike','andnone','ofthe','vicesi','admire'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'eaaeeeeeee'))\r\nnet_time=temp+dt\r\n%%\r\nglobal net_time\r\ntemp=net_time;\r\n\r\ns1 = {'history' 'will','be','kind','to','me','for','i','intend','to','write','it'};\r\n\r\ns2=min_path_cost(s1);\r\nt0=clock;\r\ns2=min_path_cost(s1);\r\ndt=etime(clock,t0)*1e3\r\n\r\nassert(isequal(s2,'iiekomoiiort')|isequal(s2,'iieiomoiiort'))\r\nnet_time=temp+dt\r\n\r\n%%\r\nglobal net_time\r\n% Time performance rqmt\r\nassert(net_time\u003c2000,sprintf('Net time = %s',num2str(net_time))); \r\n%%\r\nglobal net_time\r\n% net_time in ms\r\n% Create graph data\r\nnet_time=min(100,net_time) % Limit graph y-axis\r\n\r\nfeval(@assignin,'caller','score',floor(net_time));\r\n\r\n%fh=fopen('min_path_cost.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,round(net_time/2)]));\r\n%fclose(fh);","published":true,"deleted":false,"likes_count":1,"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":"2012-11-22T12:11:45.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-24T20:34:17.000Z","updated_at":"2012-11-22T12:11:45.000Z","published_at":"2012-06-25T00:03: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:t\u003eThis is an extension 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=\\\"http://www.mathworks.com/matlabcentral/cody/problems/196-love-is-an-n-letter-word\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody 196 love\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e with a more stressing test set and scoring based upon time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGreater than 10 words induces time issues with brute force combinatorics.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDescription is copy of Alfonso Nieto-Castanon's problem statement for Cody 196.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 a list of N words, return the N-letter word (choosing one letter from each word) with the property of having the least distance between each pair of two consecutive letters (if there are multiple optimal solutions return any one of them). Letters may repeat inside words.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: s1 = {'abcd','bcde','cdef','defg'}; should return s2 = 'dddd'; (with total letter-distance = 0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: s1={'aldfejk','czoa','vwy','abcde'}; should return s2='love'; (with total letter-distance = 27: 'l'-'o'=3 + 'o'-'v'=7 + 'v'-'e'=17 ; compare for example to the possible word 'aave' which has a total letter-distance of 38)\u003c/w:t\u003e\u003c/w:r\u003e\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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e All problems correct and time \u0026lt; 2 seconds\u003c/w:t\u003e\u003c/w:r\u003e\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 chart:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time in milliseconds with a max of 100 ms.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: Did consider logarithmic scale but keeping it simple for now.\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\"}]}"}],"term":"tag:\"shortest path\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"shortest path\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"shortest path\"","","\"","shortest path","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f76f7980fb0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f76f7980f10\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f76f7980290\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f76f7981230\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f76f7981190\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f76f79810f0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f76f7981050\u003e":"tag:\"shortest path\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f76f7981050\u003e":"tag:\"shortest path\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"shortest path\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"shortest path\"","","\"","shortest path","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f76f7980fb0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f76f7980f10\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f76f7980290\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f76f7981230\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f76f7981190\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f76f79810f0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f76f7981050\u003e":"tag:\"shortest path\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f76f7981050\u003e":"tag:\"shortest path\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":2007,"difficulty_rating":"easy-medium"},{"id":45467,"difficulty_rating":"easy-medium"},{"id":490,"difficulty_rating":"easy-medium"},{"id":2685,"difficulty_rating":"medium"},{"id":2220,"difficulty_rating":"medium"},{"id":458,"difficulty_rating":"medium"},{"id":45457,"difficulty_rating":"medium"},{"id":2218,"difficulty_rating":"medium"},{"id":2219,"difficulty_rating":"medium"},{"id":45459,"difficulty_rating":"hard"},{"id":2226,"difficulty_rating":"unrated"},{"id":2242,"difficulty_rating":"unrated"},{"id":787,"difficulty_rating":"unrated"}]}}