{"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":793,"title":"Combinations without using nchoosek","description":"You have to generate a matrix with all possible combinations of n elements *taken 2* at a time, *without using nchoosek(1:n,2)* :\r\n\r\nExamples\r\n\r\nif  n = 3\r\n\r\noutput =\r\n\r\n       1     2\r\n       1     3\r\n       2     3\r\n\r\n\r\nif n = 5\r\n\r\n  output = \r\n  \r\n       1     2\r\n       1     3\r\n       1     4\r\n       1     5\r\n       2     3\r\n       2     4\r\n       2     5\r\n       3     4\r\n       3     5\r\n       4     5\r\n\r\n\r\nGood luck!!","description_html":"\u003cp\u003eYou have to generate a matrix with all possible combinations of n elements \u003cb\u003etaken 2\u003c/b\u003e at a time, \u003cb\u003ewithout using nchoosek(1:n,2)\u003c/b\u003e :\u003c/p\u003e\u003cp\u003eExamples\u003c/p\u003e\u003cp\u003eif  n = 3\u003c/p\u003e\u003cp\u003eoutput =\u003c/p\u003e\u003cpre\u003e       1     2\r\n       1     3\r\n       2     3\u003c/pre\u003e\u003cp\u003eif n = 5\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eoutput = \r\n\u003c/pre\u003e\u003cpre\u003e       1     2\r\n       1     3\r\n       1     4\r\n       1     5\r\n       2     3\r\n       2     4\r\n       2     5\r\n       3     4\r\n       3     5\r\n       4     5\u003c/pre\u003e\u003cp\u003eGood luck!!\u003c/p\u003e","function_template":"function output = your_fcn_name(n)\r\n  output = n;\r\nend","test_suite":"%%\r\nn = 3;\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\n% Prevents cheating \r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))\r\n\r\n%%\r\nn = 25;\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))\r\n\r\n%%\r\nn = 112;\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))\r\n\r\n%% \r\nn = 2\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":639,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":137,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-27T08:25:23.000Z","updated_at":"2026-02-08T19:33:07.000Z","published_at":"2012-06-27T08:25: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\":[],\"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\u003eYou have to generate a matrix with all possible combinations of n elements\u003c/w:t\u003e\u003c/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\u003etaken 2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e at a time,\u003c/w:t\u003e\u003c/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\u003ewithout using nchoosek(1:n,2)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e :\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eif n = 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\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[       1     2\\n       1     3\\n       2     3]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eif n = 5\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[output = \\n\\n       1     2\\n       1     3\\n       1     4\\n       1     5\\n       2     3\\n       2     4\\n       2     5\\n       3     4\\n       3     5\\n       4     5]]\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\u003eGood luck!!\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":1913,"title":"GJam 2013 Veterans: Ocean View (Small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2334486/dashboard#s=p2 GJam 2013 Veterans Ocean View\u003e. This is the Small data set witn N\u003c=50 and Q\u003c=4, guaranteed.\r\n\r\nThe GJam story goes that as Supreme Ruler you are annoyed by complaints of non-ocean views on a hillside. To resolve the issue a minimum number of homes will be removed to provide a maximum number of ocean view homes. The Elevation of the homes should monotonically increase, no equal values, from element 1 thru the end.\r\n\r\n*Succinct Challenge statement:* Given a vector create the maximum length monotonically increasing vector by removing values. Report the number of values removed.\r\n\r\n*Input:* V , Vector length N\u003c=50 with values 1 thru 1000.\r\n\r\n*Output:* Q , minimum quantity of removed values to produce a valid vector [0:4]\r\n\r\n*Examples:* [V] [Q]\r\n\r\n  [1 4 3 3] [2]  for [1 4] or [1 3]\r\n  [1 2 3 4 5] [0]\r\n  [4 3 2 1] [3]\r\n\r\n*Commentary:*\r\n\r\n  1) The GJam Small test suite is not robust\r\n  2) nchoosek(50,4) is too slow for Cody and the 100 cases\r\n  3) The Large test suite is N\u003c=1000 with some delete cases \u003e4\r\n  4) A Good Algorithm that solves the Large case is usually best to pursue\r\n  5) GJam Competition allows one Large submission within 10 minutes of download \r\n  6) \u003cLarge Suite Challenge\u003e","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2334486/dashboard#s=p2\"\u003eGJam 2013 Veterans Ocean View\u003c/a\u003e. This is the Small data set witn N\u0026lt;=50 and Q\u0026lt;=4, guaranteed.\u003c/p\u003e\u003cp\u003eThe GJam story goes that as Supreme Ruler you are annoyed by complaints of non-ocean views on a hillside. To resolve the issue a minimum number of homes will be removed to provide a maximum number of ocean view homes. The Elevation of the homes should monotonically increase, no equal values, from element 1 thru the end.\u003c/p\u003e\u003cp\u003e\u003cb\u003eSuccinct Challenge statement:\u003c/b\u003e Given a vector create the maximum length monotonically increasing vector by removing values. Report the number of values removed.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e V , Vector length N\u0026lt;=50 with values 1 thru 1000.\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Q , minimum quantity of removed values to produce a valid vector [0:4]\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e [V] [Q]\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 4 3 3] [2]  for [1 4] or [1 3]\r\n[1 2 3 4 5] [0]\r\n[4 3 2 1] [3]\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eCommentary:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) The GJam Small test suite is not robust\r\n2) nchoosek(50,4) is too slow for Cody and the 100 cases\r\n3) The Large test suite is N\u0026lt;=1000 with some delete cases \u003e4\r\n4) A Good Algorithm that solves the Large case is usually best to pursue\r\n5) GJam Competition allows one Large submission within 10 minutes of download \r\n6) \u0026lt;Large Suite Challenge\u003e\r\n\u003c/pre\u003e","function_template":"function Q = Monotonic_V(vin)\r\n  Q=0;\r\nend","test_suite":"%%\r\ntic\r\nvin=[4 33 36 47 63 79 146 159 176 191 178 215 226 228 261 262 291 295 322 368 456 461 465 473 479 500 512 527 570 572 613 639 641 654 667 684 699 701 746 751 763 767 786 819 872 925 932 959 965 972 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 33 63 78 82 85 92 101 113 125 138 175 183 196 211 224 250 287 345 368 388 426 447 477 491 504 524 575 579 581 621 694 712 720 737 745 747 784 793 802 813 827 829 853 858 919 924 929 939 960 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[19 19 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 35 63 72 76 122 103 171 185 221 238 294 318 325 341 355 350 359 365 407 409 438 467 514 548 592 585 599 606 636 646 652 697 708 737 770 773 798 819 832 835 849 881 879 893 904 907 932 967 983 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 72 94 114 136 147 177 185 199 216 214 230 243 252 264 417 285 426 428 445 450 463 465 467 482 485 495 531 537 547 575 558 598 654 677 678 692 685 785 853 891 894 897 905 906 910 918 933 963 979 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[21 18 33 53 158 179 200 225 230 259 261 262 280 319 338 368 369 376 423 449 481 505 517 531 545 588 598 614 607 615 647 655 657 684 702 706 734 756 768 791 806 792 834 889 895 896 957 960 971 995 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[52 53 66 83 119 129 132 145 202 237 274 281 284 296 298 326 442 386 451 456 475 476 486 493 499 520 523 525 589 605 612 626 630 638 694 718 740 763 791 798 800 801 811 839 868 874 895 891 971 984 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 9 21 43 89 106 117 141 150 211 158 220 233 282 296 311 324 353 372 376 407 452 414 455 482 494 503 522 527 531 545 548 552 563 568 586 593 629 673 691 682 703 724 738 787 822 861 882 907 937 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 51 80 105 109 114 129 154 175 167 188 198 227 266 270 437 345 446 459 469 470 478 479 520 582 587 591 611 618 619 658 677 670 683 686 689 710 758 728 815 821 852 870 912 937 946 960 969 985 998 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 34 65 81 83 91 105 114 125 127 132 162 154 176 198 201 222 269 272 296 297 321 345 355 377 402 403 407 444 454 450 493 517 533 546 589 592 593 639 698 700 729 764 798 785 850 909 917 950 988 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[30 94 106 118 125 136 151 161 162 176 233 240 272 290 320 337 347 352 370 433 412 499 504 510 513 572 593 621 629 640 646 710 712 721 735 741 750 786 804 812 814 817 822 844 893 932 944 945 954 972 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 5 6 1 7 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1000 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[25 37 40 56 62 81 86 136 95 140 225 228 274 236 297 332 417 516 545 549 573 582 583 595 600 601 603 624 673 699 714 716 719 720 746 737 762 790 802 814 821 835 852 868 860 871 899 910 923 984 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1000 1000 1000 1000 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 15 42 44 68 69 108 109 126 120 145 148 154 176 199 221 245 266 271 299 325 309 326 411 514 518 552 568 589 607 663 692 723 711 746 754 771 776 780 818 840 843 858 868 878 882 883 904 906 975 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[17 13 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 21 82 107 99 135 136 144 174 183 211 222 259 283 304 333 348 353 366 399 412 491 512 507 526 557 590 593 613 619 634 663 683 689 710 714 719 720 738 754 807 832 885 880 932 934 941 984 990 996 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[5 37 46 52 54 79 125 140 192 294 318 323 333 343 346 354 360 361 372 403 414 435 445 454 471 480 482 503 514 527 583 624 645 632 726 746 760 764 771 791 801 803 812 819 846 885 893 956 976 1000 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 12 36 45 50 101 113 119 131 168 237 250 254 261 281 324 343 401 421 437 442 499 500 501 512 522 523 529 532 545 561 585 586 590 623 679 695 782 798 823 830 843 852 878 891 902 923 922 972 981 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 23 111 61 127 138 144 147 174 194 261 262 279 272 288 318 350 356 396 425 439 441 454 466 473 487 482 590 615 617 632 637 662 688 699 704 734 780 800 803 814 808 828 843 868 922 943 985 987 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[49 73 118 140 194 202 218 249 261 342 272 347 355 403 438 462 466 469 473 488 499 511 514 515 525 532 538 545 588 665 610 707 714 719 716 723 739 751 763 789 809 868 874 899 916 937 939 947 979 994 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 14 67 76 98 107 125 150 151 194 244 248 251 270 289 271 309 354 434 453 468 454 484 487 507 523 526 569 578 601 624 684 690 696 725 752 765 800 813 815 826 906 888 948 963 970 984 993 996 1000 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[15 57 92 105 110 172 125 182 202 213 233 263 282 291 289 293 353 404 421 440 447 469 491 495 504 498 505 543 549 579 597 633 655 671 693 748 768 801 798 811 838 858 859 865 883 889 901 945 959 964 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[30 61 112 126 137 147 154 158 224 266 282 294 303 307 328 320 377 379 391 411 430 423 446 453 461 463 468 493 517 531 536 546 588 613 667 643 683 684 712 722 784 821 848 889 900 919 921 928 931 1000 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[34 18 92 103 108 110 143 200 248 283 284 297 326 365 369 400 439 470 489 498 526 593 596 605 631 684 720 687 754 770 781 793 803 826 811 855 863 886 888 901 916 928 943 954 968 972 982 983 984 987 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 24 74 48 137 172 199 209 224 227 234 293 297 305 324 336 338 377 418 395 432 437 446 474 505 510 529 536 541 568 613 641 645 695 677 735 792 797 805 830 853 869 882 883 888 925 910 970 982 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[25 39 54 55 57 101 117 124 142 143 185 161 196 210 214 237 243 267 282 288 304 394 435 427 458 491 509 519 550 557 582 607 608 634 652 640 681 705 695 753 785 840 871 889 903 912 918 921 966 987 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[30 75 123 160 156 176 202 215 254 264 310 318 354 368 390 435 453 457 474 476 479 510 529 532 603 623 635 637 644 671 686 706 723 725 726 730 732 767 806 807 829 852 869 902 897 912 927 957 994 996 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[40 44 45 46 121 89 141 155 167 179 207 226 263 265 327 337 338 364 373 453 456 478 512 537 543 561 568 577 637 604 641 648 672 687 697 709 701 737 789 808 813 819 820 828 835 911 921 938 947 964 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[40 42 43 60 63 70 78 124 103 131 133 149 161 164 170 227 232 260 266 275 316 323 368 335 372 377 413 418 420 441 553 463 574 576 643 656 665 678 733 741 743 815 762 883 908 928 930 968 974 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[16 78 79 134 151 219 224 240 251 280 295 388 406 483 489 505 507 534 538 539 549 554 555 564 573 583 609 660 672 681 687 711 732 738 745 746 783 792 812 834 837 841 887 866 908 957 961 978 987 994 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[18 20 33 34 35 54 94 123 140 162 169 220 205 250 258 278 299 320 349 362 397 434 492 449 499 504 508 515 531 552 606 647 652 678 695 703 714 735 763 785 836 799 854 858 863 864 929 933 960 984 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 17 37 50 66 96 99 155 107 184 218 257 260 279 285 327 332 337 354 369 398 430 423 437 574 631 656 660 668 676 680 700 709 750 747 761 789 774 813 857 860 886 898 904 949 952 964 976 984 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 78 23 90 101 106 132 141 146 191 206 222 244 270 304 325 332 379 383 392 401 412 417 436 454 465 487 551 499 553 557 562 570 581 613 650 682 691 732 781 782 789 814 816 844 890 965 971 986 998 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[20 65 69 128 131 157 173 175 211 194 216 229 266 278 286 292 320 335 377 358 423 424 463 472 529 531 545 553 557 576 589 585 601 613 657 672 699 711 725 786 789 810 897 923 936 960 996 969 997 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[19 54 61 67 119 131 153 167 178 199 197 246 256 273 329 321 348 350 353 392 394 402 413 486 511 530 515 539 569 582 586 594 686 763 819 821 829 840 832 848 858 864 870 904 933 944 947 952 967 998 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 40 106 68 118 132 148 162 180 182 200 207 246 283 287 288 320 295 321 325 338 343 349 362 364 371 378 418 503 535 554 562 568 571 577 587 682 699 760 709 769 844 920 938 941 948 960 973 977 983 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[19 38 43 45 67 75 150 154 173 178 184 189 254 227 278 282 289 315 297 365 373 396 403 505 509 513 521 555 580 583 600 614 643 649 667 678 695 722 732 761 801 824 805 841 879 894 915 926 930 975 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[56 65 94 119 149 165 157 166 198 220 297 302 305 316 321 327 351 347 359 368 380 386 387 403 431 447 448 449 463 528 533 556 562 590 634 610 640 658 693 750 786 759 792 800 825 842 864 889 911 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[5 11 40 95 110 134 138 160 187 208 228 210 240 278 352 354 381 390 414 503 440 507 513 526 528 534 540 543 570 604 609 613 625 632 647 653 658 661 668 708 718 780 846 855 862 860 891 910 936 949 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[6 57 71 73 100 112 134 165 173 189 190 194 197 227 239 229 246 252 278 288 316 319 371 393 450 462 521 585 567 620 625 636 654 689 675 694 701 716 720 741 743 746 820 868 873 879 935 938 979 989 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[5 50 77 74 113 128 129 169 173 179 201 210 228 236 242 251 255 262 279 283 301 369 373 387 380 412 417 441 444 459 476 492 493 532 541 574 644 646 665 720 728 773 802 810 821 853 849 860 912 964 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[10 21 84 97 107 109 123 120 128 137 143 161 254 266 278 301 307 315 361 389 395 408 492 517 549 584 551 597 602 603 618 648 653 657 658 682 723 753 790 799 820 824 831 844 855 866 858 894 916 918 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 4 3 3 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 43 49 54 80 84 104 107 149 171 180 197 210 226 312 340 347 356 363 387 407 420 439 463 478 465 485 499 568 590 598 627 646 654 656 675 693 707 760 761 776 798 840 853 856 909 929 947 951 984 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[49 60 70 76 80 96 144 161 203 269 274 296 343 346 400 359 401 428 430 451 454 455 477 480 500 506 522 591 573 598 653 655 657 733 748 736 763 771 784 813 835 855 869 894 920 932 948 956 981 986 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 4 6 7 10 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[26 37 95 122 117 149 183 194 195 239 245 253 272 285 287 330 300 335 349 371 380 390 401 421 489 426 519 521 538 598 626 640 645 665 685 698 704 712 723 791 822 834 859 860 920 900 960 977 986 997 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[70 76 80 97 102 105 113 157 141 161 163 217 251 295 310 320 323 350 355 357 390 391 397 422 428 460 486 472 487 536 570 579 631 665 666 676 681 683 690 693 705 726 813 819 821 850 874 916 935 999 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[51 58 63 80 90 120 157 164 172 190 208 259 278 336 324 348 368 374 379 383 426 436 446 506 536 553 569 589 591 596 637 607 645 708 716 725 735 741 745 764 773 831 884 853 902 905 956 978 982 997 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[33 40 65 72 122 84 130 137 156 227 255 314 333 335 343 345 350 372 373 374 387 417 404 422 433 469 470 495 499 532 571 580 603 630 622 653 660 681 698 752 801 808 816 836 859 889 909 931 961 962 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 42 34 53 59 87 98 141 143 158 188 221 317 319 324 351 346 359 374 390 393 407 430 458 485 488 502 514 559 567 595 598 596 610 629 631 647 719 699 759 769 782 803 805 907 928 934 943 983 987 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[59 61 82 96 100 160 176 194 242 223 259 266 275 282 318 328 357 349 367 370 376 409 416 442 447 475 489 504 507 553 598 603 637 616 684 710 722 712 756 776 783 784 806 814 833 847 879 922 973 992 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 87 98 120 173 139 184 187 214 222 276 310 333 348 356 364 376 382 401 461 422 475 501 509 524 575 579 588 594 596 622 624 652 683 699 751 737 781 827 831 844 863 868 875 892 909 910 975 977 980 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[119 152 207 221 215 245 250 257 269 327 336 345 370 371 382 404 408 440 443 448 458 492 498 509 609 580 614 620 623 653 692 709 713 723 743 760 770 812 784 814 830 862 875 877 916 926 932 947 963 984 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[6 25 46 48 85 102 114 126 179 223 233 238 243 294 276 330 338 386 349 387 418 423 434 463 470 474 487 523 546 559 591 634 667 671 681 696 739 752 772 791 808 830 840 873 862 882 959 965 978 995 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 35 39 58 88 73 89 108 143 186 196 243 253 270 297 271 349 358 368 369 402 420 453 459 464 489 499 568 607 646 653 705 710 712 717 716 721 780 743 793 826 849 916 918 947 950 958 959 961 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 57 88 92 162 186 187 268 297 307 310 342 332 368 391 402 408 422 435 487 447 522 530 535 546 558 571 574 594 628 631 648 651 660 664 675 693 707 715 738 718 762 794 851 853 854 870 902 935 980 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[16 36 61 88 110 205 120 230 243 264 265 270 297 313 316 317 342 346 391 368 401 411 441 472 574 584 587 591 605 645 618 670 675 693 695 736 741 796 804 801 811 824 829 884 915 929 934 984 989 990 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[27 41 59 70 96 145 149 175 274 264 278 297 298 358 361 392 403 413 432 444 480 498 520 542 544 622 626 631 636 641 692 704 715 736 740 805 818 823 828 856 865 875 890 891 913 931 941 966 977 991 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[39 44 48 56 62 94 105 109 195 210 199 211 223 272 311 317 419 435 446 448 467 472 492 483 536 540 609 610 646 638 710 719 740 781 795 798 814 835 858 861 869 876 903 913 936 931 948 965 968 999 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[17 19 42 49 88 94 130 149 215 250 251 288 297 326 334 335 344 372 377 411 406 425 429 436 440 478 488 496 550 554 560 578 585 594 603 607 608 610 631 796 813 820 850 901 937 979 955 989 990 997 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 5 7 21 26 52 128 154 168 192 195 209 225 282 227 284 352 355 363 395 406 432 443 478 501 513 553 577 625 624 658 672 696 699 733 739 750 760 768 817 822 861 869 870 883 913 978 931 993 994 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 18 20 78 110 111 114 117 123 126 138 180 198 214 235 250 286 316 335 409 422 475 476 525 527 593 615 634 657 672 664 682 711 727 729 740 761 781 790 820 837 840 842 853 868 896 971 981 986 995 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 17 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[8 4 42 77 104 141 158 169 192 217 234 244 340 356 343 367 374 393 427 430 433 468 475 477 481 483 507 526 549 557 609 616 611 644 645 678 695 704 758 745 772 794 803 806 825 836 841 858 885 943 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[15 49 77 101 107 140 129 151 156 158 185 219 224 235 236 243 264 271 302 304 329 335 346 435 436 453 472 479 480 496 563 568 571 591 633 673 651 712 718 741 765 775 782 815 859 893 912 918 935 988 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[26 69 77 115 121 141 151 217 243 244 275 293 301 309 313 341 345 366 365 372 391 398 510 516 518 520 542 522 553 572 652 657 660 661 674 705 717 723 789 799 810 849 856 859 876 900 906 942 996 1000 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[7 26 40 48 55 100 118 139 205 246 235 248 269 292 297 356 361 372 393 403 417 435 491 533 544 555 569 572 582 599 597 636 676 692 730 702 758 767 802 807 808 850 884 889 903 911 912 946 968 975 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 48 100 115 131 180 204 205 214 218 247 284 316 289 335 362 382 391 399 403 410 468 469 546 479 550 559 571 592 603 647 654 735 746 751 768 796 795 808 853 859 881 882 905 936 938 941 949 968 981 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[23 57 72 82 90 121 131 165 149 228 243 252 274 285 289 290 306 349 366 385 399 394 405 464 473 530 562 568 604 665 684 693 741 759 797 800 804 805 860 861 866 881 872 885 891 904 905 972 985 995 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[84 29 96 105 134 147 175 179 224 238 255 263 281 290 295 331 332 357 366 406 422 427 442 474 495 509 510 578 606 613 635 665 676 695 714 719 722 726 732 816 819 820 886 915 957 972 975 984 985 991 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 61 76 82 106 122 128 142 136 164 182 183 251 263 332 325 334 385 400 402 410 446 490 504 508 556 571 609 623 629 638 644 660 709 694 714 726 776 793 794 834 842 847 857 899 901 944 919 990 997 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 28 34 47 37 66 116 143 171 213 235 247 309 320 351 330 370 386 397 415 416 474 484 495 512 513 522 572 594 642 681 643 689 707 732 756 760 773 777 799 795 800 830 840 853 866 867 899 951 975 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 12 16 63 79 82 104 121 109 123 141 152 164 208 243 277 327 358 363 382 410 451 483 502 516 524 590 630 633 657 687 658 696 703 706 739 745 761 774 769 780 841 872 880 883 926 929 954 956 986 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 10 17 73 102 122 188 246 252 299 318 325 336 338 343 363 388 401 402 410 419 425 433 435 463 524 535 567 590 637 671 677 698 716 752 753 773 779 797 874 893 896 895 918 921 923 928 940 957 969 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[41 53 50 80 104 122 127 131 148 171 198 235 254 258 299 300 312 334 355 390 404 442 424 445 469 509 545 544 598 639 647 651 653 692 702 747 800 810 822 826 865 868 871 921 938 942 949 948 960 965 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[51 60 84 94 114 121 125 128 138 134 178 192 195 252 277 328 342 333 418 419 462 482 512 550 578 582 584 607 611 612 614 636 680 659 714 733 735 736 743 783 791 792 798 824 864 879 866 910 951 961 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 55 33 60 118 148 253 278 287 289 308 337 339 350 359 385 392 398 417 420 462 511 555 568 587 596 602 643 655 670 692 700 696 734 766 770 793 817 818 855 859 874 884 897 911 915 920 923 938 999 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[9 22 26 48 38 98 110 132 135 156 160 163 180 220 262 266 283 292 316 311 335 363 411 412 424 436 484 502 540 541 571 545 572 585 610 633 656 679 743 764 754 812 814 870 880 902 949 964 985 997 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 3 2 1 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[10 23 27 39 56 73 125 164 171 184 195 209 213 232 244 260 264 447 459 465 478 486 519 520 543 554 556 570 579 586 595 596 621 637 644 673 657 677 678 680 688 704 754 763 880 891 910 912 942 984 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[18 16 37 54 59 75 91 101 142 154 194 199 205 234 259 268 317 284 342 351 363 378 417 418 425 491 505 536 563 608 617 624 649 688 709 716 727 821 824 829 850 832 893 903 950 955 957 964 979 988 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[12 61 20 64 70 81 150 158 170 175 201 282 304 307 338 391 366 397 407 428 432 473 492 501 508 533 563 557 579 589 603 631 636 645 648 656 714 685 718 740 742 814 824 842 863 871 927 941 965 986 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[6 14 24 31 39 48 52 60 82 125 164 141 195 213 234 239 255 287 318 334 357 387 369 410 417 421 431 444 446 510 514 547 680 653 684 709 720 765 791 802 823 840 858 871 891 892 950 927 983 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[12 15 37 48 71 74 101 95 104 148 153 162 208 215 269 227 320 356 359 372 406 455 463 477 486 498 559 596 645 651 664 693 665 751 756 779 785 827 804 844 852 874 887 904 905 936 961 982 983 991 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 65 68 71 124 173 181 190 195 204 221 220 304 339 321 352 362 363 368 369 403 415 490 514 520 536 548 550 586 589 592 623 655 638 700 744 755 762 779 789 842 850 865 881 916 924 956 938 987 998 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[48 52 94 107 134 113 186 202 231 233 253 257 274 296 324 332 338 351 356 357 358 393 489 482 519 527 534 537 560 568 604 612 611 617 705 707 730 755 782 812 784 828 867 916 937 948 966 967 971 988 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[55 15 107 117 155 157 198 236 240 245 285 288 302 364 376 380 402 416 421 434 478 488 501 504 567 568 629 644 646 673 657 686 690 740 744 755 769 770 783 792 818 860 855 865 904 905 917 935 971 984 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[80 30 92 103 143 182 200 202 217 222 229 245 273 278 283 303 360 445 446 466 486 489 505 516 547 576 614 630 624 643 671 695 697 709 715 730 739 743 746 768 786 810 872 888 949 938 951 952 959 982 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[41 61 83 126 142 188 214 218 242 249 269 265 315 334 362 369 371 438 454 459 484 464 485 497 501 522 548 568 586 605 614 686 654 701 706 726 732 736 742 765 792 810 823 842 832 846 853 877 891 980 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[20 22 27 74 91 77 144 147 154 269 287 327 328 348 349 386 432 433 438 470 491 550 556 586 588 592 610 640 686 716 722 733 734 736 740 758 779 796 804 805 836 857 901 912 938 940 942 981 990 989 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 13 52 28 149 156 187 223 262 268 269 292 309 332 347 379 373 462 484 501 505 506 524 527 539 544 627 656 660 666 669 677 704 679 712 752 780 783 863 877 882 891 904 937 910 970 979 988 993 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[16 46 60 67 71 77 81 102 123 140 143 145 178 249 271 260 336 366 409 470 471 489 497 529 536 596 597 610 664 662 673 677 694 698 718 742 755 759 783 807 850 844 879 880 903 913 915 922 945 959 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[988 988 988 988 988 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[7 13 14 122 128 154 170 184 193 191 224 241 260 296 299 305 311 316 375 381 424 425 429 437 476 477 488 503 546 532 564 585 665 669 677 689 823 838 831 857 859 877 883 897 918 927 935 948 973 987 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\ntoc","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":18,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-10-05T02:13:07.000Z","updated_at":"2026-03-11T10:04:13.000Z","published_at":"2013-10-05T03:12:16.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/2334486/dashboard#s=p2\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2013 Veterans Ocean View\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. This is the Small data set witn N\u0026lt;=50 and Q\u0026lt;=4, guaranteed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe GJam story goes that as Supreme Ruler you are annoyed by complaints of non-ocean views on a hillside. To resolve the issue a minimum number of homes will be removed to provide a maximum number of ocean view homes. The Elevation of the homes should monotonically increase, no equal values, from element 1 thru the 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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSuccinct Challenge statement:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Given a vector create the maximum length monotonically increasing vector by removing values. Report the number of values removed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e V , Vector length N\u0026lt;=50 with values 1 thru 1000.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Q , minimum quantity of removed values to produce a valid vector [0:4]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [V] [Q]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 4 3 3] [2]  for [1 4] or [1 3]\\n[1 2 3 4 5] [0]\\n[4 3 2 1] [3]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eCommentary:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[1) The GJam Small test suite is not robust\\n2) nchoosek(50,4) is too slow for Cody and the 100 cases\\n3) The Large test suite is N\u003c=1000 with some delete cases \u003e4\\n4) A Good Algorithm that solves the Large case is usually best to pursue\\n5) GJam Competition allows one Large submission within 10 minutes of download \\n6) \u003cLarge Suite Challenge\u003e]]\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":42805,"title":"GJam 2016 Rd1A: Rank and File (small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/4304486/dashboard#s=p1 GJam Rd1A 2016 Rank and File\u003e. This is the small case with max N=10\r\n\r\nThe GJam story is a matrix H(NxN) which has every row and column increasing. Each row and column is recorded on strips. The strips get scrambled and one gets incinerated. The goal is to reconstruct the missing increasing vector strip. \r\n\r\n*Input:* [M], matrix of size [2*N-1,N] of all rows and columns of H except one\r\n\r\n*Output:* [V], the missing vector of H not included in M\r\n\r\n*Examples:* [M] [V] \r\n\r\n  [1 2 3;2 3 5;3 5 6;2 3 4;1 2 3] [3 4 6] \r\n  [22 222;2 22;2 22][22 222] \r\n \r\nGJam 2016 Rd1A Matlab results show three qualifiers for Rd2.\r\n\r\n*Theory:* With max N=10 it is possible to brute force the 50 puzzles. Persistent may be useful with the usage of nchoosek which may be the critical path. \u003chttps://www.go-hero.net/jam/16/solutions/1/2/MATLAB GJam Rank_file solutions\u003e. Writing the general solution for N=50 is better for the contest. The min corner or the max corner will always be available. Evolving solution, no guessing, is possible. OR one can observe an inherent mathematical result to create a 1-line solution.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/4304486/dashboard#s=p1\"\u003eGJam Rd1A 2016 Rank and File\u003c/a\u003e. This is the small case with max N=10\u003c/p\u003e\u003cp\u003eThe GJam story is a matrix H(NxN) which has every row and column increasing. Each row and column is recorded on strips. The strips get scrambled and one gets incinerated. The goal is to reconstruct the missing increasing vector strip.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [M], matrix of size [2*N-1,N] of all rows and columns of H except one\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [V], the missing vector of H not included in M\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e [M] [V]\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 2 3;2 3 5;3 5 6;2 3 4;1 2 3] [3 4 6] \r\n[22 222;2 22;2 22][22 222] \r\n\u003c/pre\u003e\u003cp\u003eGJam 2016 Rd1A Matlab results show three qualifiers for Rd2.\u003c/p\u003e\u003cp\u003e\u003cb\u003eTheory:\u003c/b\u003e With max N=10 it is possible to brute force the 50 puzzles. Persistent may be useful with the usage of nchoosek which may be the critical path. \u003ca href = \"https://www.go-hero.net/jam/16/solutions/1/2/MATLAB\"\u003eGJam Rank_file solutions\u003c/a\u003e. Writing the general solution for N=50 is better for the contest. The min corner or the max corner will always be available. Evolving solution, no guessing, is possible. OR one can observe an inherent mathematical result to create a 1-line solution.\u003c/p\u003e","function_template":"function v = rank_file(m)\r\n% H a rank/file array that has all columns and rows increasing\r\n% m  matrix [2*N-1,N] of scrambled rows/columns original H [NxN] array\r\n% v  missing vector of H\r\n v=0;\r\nend","test_suite":"%%\r\ntic\r\nm=[1 2 3 2 1 2 3 5 3 2 3 5 6 4 3 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 4 6 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[22 2 2 222 22 22 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[22 222 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 3 6 9 10 6 3 14 6 7 11 11 7 6 16 9 11 15 19 10 8 22 11 14 19 22 11 10 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[8 10 15 16 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 23 6 3 1 6 2 5 5 2 22 4 9 2 25 11 8 2 11 7 10 10 7 24 9 13 3 26 15 12 3 15 8 14 14 8 27 13 16 4 29 18 13 4 18 9 17 17 9 28 16 17 5 30 20 14 5 20 10 19 19 10 31 17 18 6 32 21 15 6 21 11 20 20 11 33 18 28 23 34 33 27 22 32 24 31 30 25 34 29 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[3 8 12 13 14 15 26 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 5 3 8 6 9 46 1 2 7 8 2 3 4 1 9 47 6 5 15 13 11 16 14 17 49 2 10 15 16 10 11 12 2 17 48 14 13 22 20 18 23 21 24 50 3 11 22 23 11 18 19 3 24 51 21 20 28 26 19 29 27 30 52 4 12 28 29 12 19 25 4 30 53 27 26 33 31 20 34 32 35 54 5 13 33 34 13 20 26 5 35 55 32 31 37 32 21 38 36 39 57 6 14 37 38 14 21 27 6 39 56 36 32 40 33 22 41 37 42 59 7 15 40 41 15 22 28 7 42 58 37 33 41 34 23 43 38 44 60 8 16 41 43 16 23 29 8 44 61 38 34 42 35 24 44 39 45 62 9 17 42 44 17 24 30 9 45 63 39 35 58 55 50 61 57 62 64 47 48 59 60 49 51 52 46 63 64 56 54 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[4 12 19 25 26 27 28 29 30 53 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[22 2 22 222 22 222 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[2 22 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 2 6 6 4 8 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[4 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 3 10 9 4 8 9 6 2 6 8 4 13 11 11 4 6 14 11 6 10 13 10 3 7 12 8 15 12 15 6 7 17 12 8 11 15 11 4 9 14 9 16 14 18 8 10 18 14 10 12 17 12 6 11 15 11 17 15 20 9 11 20 16 12 15 19 14 8 14 16 12 19 18 21 11 12 22 19 13 17 20 15 9 15 18 14 21 20 24 13 15 24 20 14 18 21 17 10 17 19 16 24 22 26 14 17 25 21 15 20 23 20 11 18 22 19 26 24 28 ];\r\nm=reshape(m,[],8);\r\nv=rank_file(m);\r\nvexp=[14 17 19 20 22 23 25 28 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 6 4 6 8 8 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[2 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 6 1 1 4 3 2 4 8 2 2 6 5 4 5 9 3 4 8 8 6 6 12 5 6 10 9 8 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[5 6 10 12 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 4 10 9 1 8 3 2 2 4 1 6 6 9 3 5 10 7 7 9 5 11 10 2 9 4 3 3 5 2 7 7 10 4 6 11 8 8 10 6 12 11 3 10 5 4 4 6 3 8 8 11 5 7 12 9 9 11 7 13 12 4 11 6 5 5 7 4 9 9 12 6 8 13 10 10 12 8 14 13 5 12 7 6 6 8 5 10 10 13 7 9 14 11 11 13 9 15 14 6 13 8 7 7 9 6 11 11 14 8 10 15 12 12 14 10 16 15 7 14 9 8 8 10 7 12 12 15 9 11 16 13 13 15 11 17 16 8 15 10 9 9 11 8 13 13 16 10 12 17 14 14 16 12 18 17 9 16 11 10 10 12 9 14 14 17 11 13 18 15 15 17 13 19 18 10 17 12 11 11 13 10 15 15 18 12 14 19 16 16 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[5 6 7 8 9 10 11 12 13 14 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 5 7 2 9 7 8 4 4 4 7 9 4 11 8 9 6 6 5 8 10 5 12 9 11 7 7 7 10 12 7 13 12 14 9 8 8 12 14 9 16 13 16 11 9 ];\r\nm=reshape(m,[],5);\r\nv=rank_file(m);\r\nvexp=[5 7 8 9 11 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 29 22 3 15 36 43 4 2 6 1 8 1 14 30 23 10 16 37 44 11 9 13 8 9 2 21 31 24 17 17 38 45 18 16 20 15 10 3 28 32 25 24 18 39 46 25 23 27 22 11 4 35 33 26 31 19 40 47 32 30 34 29 12 5 42 34 27 38 20 41 48 39 37 41 36 13 6 49 35 28 45 21 42 49 46 44 48 43 14 7 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[5 12 19 26 33 40 47 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 1 1 3 2 2 4 4 2 2 4 3 3 5 5 3 3 5 4 4 6 6 4 4 6 5 5 7 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[4 5 6 7 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 6 7 2 1 4 5 3 2 7 3 1 5 7 7 8 3 2 5 6 4 3 8 4 2 6 8 8 9 4 3 6 7 5 4 9 5 3 7 9 9 10 5 4 7 8 6 5 10 6 4 8 10 10 11 6 5 8 9 7 6 11 7 5 9 11 11 12 7 6 9 10 8 7 12 8 6 10 12 12 13 8 7 10 11 9 8 13 9 7 11 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[4 5 6 7 8 9 10 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 5 71 8 81 9 1 91 11 7 1 21 41 10 6 51 31 61 4 13 15 72 18 82 19 2 92 12 17 11 22 42 20 16 52 32 62 14 23 25 73 28 83 29 3 93 13 27 21 23 43 30 26 53 33 63 24 33 35 74 38 84 39 4 94 14 37 31 24 44 40 36 54 34 64 34 43 45 75 48 85 49 5 95 15 47 41 25 45 50 46 55 35 65 44 53 55 76 58 86 59 6 96 16 57 51 26 46 60 56 56 36 66 54 63 65 77 68 87 69 7 97 17 67 61 27 47 70 66 57 37 67 64 73 75 78 78 88 79 8 98 18 77 71 28 48 80 76 58 38 68 74 83 85 79 88 89 89 9 99 19 87 81 29 49 90 86 59 39 69 84 93 95 80 98 90 99 10 100 20 97 91 30 50 100 96 60 40 70 94 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[2 12 22 32 42 52 62 72 82 92 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 7 3 8 1 1 2 4 10 5 9 2 2 4 5 12 6 11 3 3 5 9 13 12 13 8 7 10 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[3 5 6 11 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 2 3 3 1 2 3 4 4 2 3 4 5 5 3 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[2 3 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 7 6 3 1 1 3 10 9 7 6 3 3 6 13 12 9 7 6 6 8 14 14 12 10 7 7 9 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[6 8 9 13 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[13 3 1 1 9 2 4 14 7 5 2 10 6 8 15 11 9 3 11 10 12 16 15 13 4 12 14 16 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[5 6 7 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 15 14 4 8 13 12 10 2 3 6 4 2 5 10 11 6 9 8 12 19 18 6 10 18 16 14 4 5 7 5 3 7 14 16 9 12 11 13 21 19 9 12 20 18 16 6 7 9 6 4 10 16 17 11 13 12 17 24 21 12 13 22 20 19 8 10 10 7 5 13 18 20 14 14 16 18 25 22 13 14 23 21 20 9 12 11 9 6 14 19 22 15 15 17 22 26 26 16 16 25 25 23 10 14 12 11 8 18 20 23 19 17 20 25 27 29 17 17 26 28 26 11 16 13 12 9 20 22 25 22 18 23 26 28 32 20 19 27 30 27 13 18 16 14 10 22 23 26 23 20 25 27 32 33 21 20 30 32 28 15 19 18 16 12 24 25 28 25 21 26 31 33 36 22 21 32 34 32 16 21 19 18 14 26 26 29 28 22 29 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[16 21 22 26 28 29 31 32 34 36 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 2 6 3 4 4 3 7 5 5 6 5 8 7 6 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[5 6 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[5 3 11 7 2 9 9 5 12 3 7 8 6 8 4 4 1 8 5 15 9 5 13 14 9 16 6 12 13 10 11 6 7 2 9 6 17 10 6 15 18 11 18 8 14 16 12 13 8 10 3 11 7 18 12 8 16 19 13 20 9 16 17 15 14 10 11 4 13 9 19 14 9 17 20 14 21 10 18 19 17 16 11 12 5 15 10 21 17 11 19 22 16 22 13 19 20 18 18 12 14 6 16 12 23 18 13 21 24 17 25 15 21 23 19 19 14 16 7 17 13 25 19 15 23 26 19 26 17 23 25 21 20 16 18 8 19 14 26 20 16 24 28 21 28 18 25 26 22 22 18 20 9 ];\r\nm=reshape(m,[],9);\r\nv=rank_file(m);\r\nvexp=[1 3 4 5 7 8 9 11 12 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 11 5 14 1 13 8 2 3 11 1 7 10 8 13 5 6 11 15 7 17 3 17 13 5 5 13 2 8 14 10 15 9 11 12 19 8 19 5 20 15 7 7 14 3 10 17 11 16 11 13 16 21 11 21 7 23 16 8 9 17 5 13 19 14 18 13 15 17 23 13 22 8 25 18 10 11 18 6 15 21 16 19 14 16 19 24 15 25 9 26 19 11 13 21 8 16 23 18 23 16 17 23 25 17 28 11 28 21 13 14 24 10 19 24 21 26 17 18 24 27 19 30 13 29 23 15 15 25 11 21 26 23 27 18 19 26 30 20 32 14 32 25 17 17 28 13 23 28 25 29 21 22 ];\r\nm=reshape(m,[],9);\r\nv=rank_file(m);\r\nvexp=[3 7 8 10 11 12 14 16 19 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[111 125 48 41 86 24 61 24 35 119 70 63 49 131 136 102 60 93 49 86 35 51 133 128 115 51 156 162 111 94 119 61 94 41 86 157 139 118 60 166 191 129 119 125 86 105 46 93 176 153 131 82 189 212 189 156 129 111 111 48 131 204 203 192 102 192 237 204 157 131 119 118 63 133 209 224 209 115 203 244 212 162 153 125 139 70 136 224 244 237 128 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[46 82 105 125 166 176 191 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 6 8 4 8 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[2 6 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 5 12 8 5 11 8 17 11 9 17 12 20 14 13 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[13 14 20 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 3 1 2 2 2 4 2 3 3 3 5 3 4 4 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 4 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 10 13 7 6 12 11 6 12 18 10 10 16 14 10 18 19 12 14 19 18 12 19 22 16 18 22 19 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[3 7 11 13 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[16 18 23 12 1 19 4 13 11 8 11 15 17 10 1 3 19 22 23 26 15 3 26 5 18 12 11 15 19 21 13 4 5 23 23 24 28 17 7 29 9 20 15 13 19 20 22 14 8 11 25 25 29 30 21 10 31 13 23 19 14 20 21 25 19 11 12 28 30 35 35 23 11 36 15 27 20 19 23 26 31 21 12 15 34 33 36 40 26 15 38 19 29 21 20 27 29 32 23 13 18 37 37 38 41 30 16 42 22 33 25 23 31 32 37 25 17 21 39 38 41 44 34 19 46 23 37 28 25 35 36 39 29 18 23 41 42 44 49 35 23 49 26 40 30 28 36 38 41 31 19 26 46 ];\r\nm=reshape(m,[],9);\r\nv=rank_file(m);\r\nvexp=[7 9 13 15 17 20 22 24 29 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 2 8 4 6 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[6 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 22 22 11 20 3 9 8 18 16 10 14 13 13 29 33 17 28 8 15 13 28 23 20 21 24 17 34 34 22 32 9 22 15 31 29 24 27 26 21 39 42 24 35 10 27 20 38 31 29 29 34 23 45 45 26 44 13 29 24 43 39 31 34 39 28 52 53 31 48 18 32 28 48 43 35 38 44 29 56 56 34 53 22 34 33 52 45 39 42 45 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[3 8 11 14 16 20 22 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[65 76 101 87 2 90 117 2 65 35 36 10 44 103 81 45 40 86 22 84 98 144 134 10 120 168 22 98 43 40 24 61 137 102 79 52 127 24 99 108 147 144 35 136 179 36 121 54 54 40 74 161 132 96 74 137 43 119 141 157 186 44 142 188 40 144 74 74 52 92 208 169 113 92 184 61 151 159 191 216 45 168 213 53 168 88 96 73 97 230 174 137 113 199 79 190 201 222 217 65 211 236 65 190 121 99 98 144 236 205 168 119 206 84 205 208 260 229 76 235 267 81 201 132 108 102 169 246 208 174 141 224 98 206 224 268 265 90 259 274 86 211 137 136 127 184 267 235 199 142 259 120 217 229 272 272 101 265 281 87 222 144 147 134 186 294 260 216 157 268 144 236 246 294 281 117 267 302 103 236 161 179 137 208 302 267 230 188 274 168 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[53 73 88 97 137 151 159 168 191 213 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[18 9 15 18 3 13 21 7 6 9 5 11 12 15 10 19 12 18 20 5 15 22 8 7 11 7 14 14 17 12 27 17 21 24 7 22 27 14 8 14 11 19 18 24 17 30 20 23 25 9 24 29 17 12 17 12 21 21 27 20 33 21 25 26 12 27 31 19 14 18 14 22 22 28 21 34 24 29 31 15 29 32 22 18 21 15 25 27 32 23 35 27 32 34 18 31 36 24 20 24 17 26 28 34 25 38 30 34 35 21 32 38 27 22 27 19 31 33 36 29 ];\r\nm=reshape(m,[],8);\r\nv=rank_file(m);\r\nvexp=[3 6 9 10 11 13 15 18 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 2 4 4 4 5 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[4 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 14 4 13 10 8 5 10 7 14 15 5 14 20 18 11 12 11 15 22 7 18 24 20 12 15 14 18 25 8 24 28 24 14 20 18 22 30 10 28 30 25 15 24 20 ];\r\nm=reshape(m,[],5);\r\nv=rank_file(m);\r\nvexp=[4 7 10 13 14 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 3 10 7 9 14 3 9 7 15 14 11 19 6 14 9 19 17 17 20 7 15 14 24 20 19 24 10 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[6 9 11 19 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[14 7 33 34 30 19 29 23 15 30 9 3 18 3 16 7 25 25 21 18 9 39 35 37 22 32 24 19 33 11 7 21 7 17 9 27 30 23 23 11 45 43 40 27 36 27 24 38 16 12 25 9 20 15 35 35 32 24 18 48 44 43 28 38 31 27 39 20 16 28 14 24 17 37 36 36 28 19 54 46 50 34 46 34 29 41 25 18 29 15 27 21 38 41 37 31 22 57 50 51 37 50 37 34 45 27 23 34 19 28 24 43 46 41 36 23 60 57 56 46 54 41 41 56 35 25 37 21 36 30 53 49 49 38 27 64 66 58 50 55 43 46 61 36 29 38 25 37 32 55 53 54 43 33 67 71 66 51 61 45 50 66 40 30 41 30 39 37 58 56 56 48 35 73 73 71 57 66 50 54 67 45 33 46 34 44 39 64 57 60 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[12 15 16 23 24 27 32 35 38 43 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 8 12 6 3 3 11 13 7 8 4 14 12 17 8 4 4 14 16 9 10 5 16 15 19 11 6 7 17 18 11 14 9 21 18 22 15 8 8 19 22 14 18 12 22 19 24 16 11 11 22 23 17 21 14 23 22 26 19 13 12 24 26 18 22 17 ];\r\nm=reshape(m,[],6);\r\nv=rank_file(m);\r\nvexp=[4 5 8 10 14 16 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 5 3 1 4 3 6 4 3 5 5 8 6 4 8 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 4 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[40 3 25 39 38 3 5 63 16 49 73 52 5 22 72 38 53 80 53 25 52 81 40 72 81 80 39 63 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[16 22 49 73 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 2 2 1 3 4 3 3 2 4 5 4 4 3 5 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[1 2 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 10 2 8 8 1 9 1 6 4 11 2 4 11 13 3 9 10 2 11 2 8 5 13 3 5 14 14 5 12 11 4 13 4 10 6 16 5 6 15 16 8 13 13 6 15 6 12 10 17 8 10 17 18 9 14 14 8 17 8 13 11 19 10 12 18 20 11 17 17 9 18 9 15 13 21 11 14 20 22 13 18 19 10 21 11 16 14 22 13 16 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[6 8 10 12 13 15 17 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 5 9 2 7 13 2 8 6 7 6 4 9 14 8 16 4 10 16 4 14 8 12 10 6 12 16 10 18 5 11 17 6 15 10 13 11 8 13 17 11 19 6 13 19 7 17 11 15 13 10 14 19 13 21 7 15 20 9 19 13 17 14 12 17 20 16 23 8 17 22 11 20 15 19 17 14 19 23 17 24 9 19 24 13 22 18 20 19 16 21 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[4 6 8 10 12 14 16 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 6 11 10 14 16 13 8 12 9 3 3 7 13 16 17 7 6 5 20 12 18 15 25 26 21 18 20 13 6 5 15 23 27 29 11 9 9 22 14 21 20 28 29 24 21 23 17 7 6 16 24 29 32 14 12 11 26 17 26 23 31 37 32 24 29 19 9 7 19 27 34 37 16 15 13 27 20 29 26 33 40 35 26 30 24 10 8 23 29 37 40 21 18 15 31 21 31 27 35 41 36 29 33 26 11 11 26 33 38 43 22 20 18 33 23 33 29 37 44 38 30 34 27 12 13 29 34 40 46 24 23 20 36 24 35 33 40 47 40 35 37 31 13 14 32 38 42 47 28 25 21 40 25 38 37 44 49 42 38 40 34 15 16 35 41 46 48 29 27 23 41 29 43 40 47 52 47 40 46 37 16 17 37 44 49 52 32 29 26 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[15 23 25 35 38 40 41 44 46 48 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[14 11 6 9 7 14 2 13 9 17 12 2 3 19 14 10 13 10 17 5 17 11 19 14 3 7 22 19 11 16 11 18 7 21 13 21 16 6 10 23 21 13 18 16 22 9 22 18 25 21 9 11 28 23 16 21 19 26 12 26 21 28 23 11 14 31 26 18 22 21 29 14 29 22 30 26 13 17 32 28 21 25 22 31 17 30 23 32 28 14 19 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[5 7 10 13 14 17 19 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[15 15 21 3 7 11 25 22 5 18 9 11 3 16 19 29 12 25 18 18 20 26 7 10 12 28 23 10 20 11 15 5 21 22 34 19 28 22 21 24 30 11 11 14 33 28 12 23 14 16 9 26 24 39 22 30 27 23 28 33 15 15 16 34 34 18 25 21 23 11 29 29 40 24 35 30 24 31 34 18 19 22 37 39 20 26 23 25 12 34 33 41 26 43 38 28 37 39 19 20 24 43 45 22 31 24 29 15 41 37 47 33 49 43 29 39 43 21 21 26 45 50 26 34 30 33 16 43 41 49 34 51 47 30 43 47 25 22 27 50 52 28 38 33 34 18 45 43 58 37 55 50 34 44 50 26 23 28 52 55 31 39 35 37 22 47 45 59 39 58 54 35 47 51 29 28 30 55 59 34 43 39 40 25 49 49 63 41 63 58 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[26 31 35 37 39 44 47 54 55 58 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 9 5 2 11 15 6 3 15 1 8 17 3 2 18 11 8 12 7 2 13 8 5 14 17 10 6 16 2 12 19 8 5 20 12 11 15 10 3 18 13 6 20 25 13 11 23 3 15 24 11 8 26 20 18 21 15 5 21 16 8 23 29 16 13 28 6 17 29 13 10 30 25 22 26 19 7 23 17 10 24 30 19 15 30 8 22 32 15 12 31 26 24 28 22 8 26 21 11 27 35 22 18 33 9 24 34 18 13 37 29 26 31 23 11 29 23 12 31 38 25 20 37 11 26 40 20 14 39 31 27 34 24 13 32 26 15 33 39 26 21 38 12 28 42 23 15 42 34 31 37 28 15 35 28 17 38 40 29 23 40 15 30 43 25 16 45 37 33 39 30 18 37 29 20 39 43 30 24 45 17 31 48 26 19 48 40 34 42 32 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[13 15 23 26 28 32 33 37 38 42 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[5 9 9 5 3 7 13 12 7 5 13 17 17 12 9 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 5 9 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[13 6 8 11 8 4 2 1 10 3 10 5 7 18 7 11 15 11 5 4 2 14 4 12 8 9 21 11 15 19 12 10 5 5 17 8 18 10 13 25 15 19 22 15 12 7 8 20 11 20 11 17 28 20 25 25 17 17 9 10 23 14 27 13 23 30 22 28 28 19 19 11 11 25 15 29 15 25 32 25 30 29 20 21 12 13 27 18 32 18 28 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[1 3 4 6 7 8 10 ];\r\nassert(isequal(vexp,v))\r\ntoc\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":11,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-04-18T02:50:28.000Z","updated_at":"2016-04-18T04:20:27.000Z","published_at":"2016-04-18T03:42:32.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/4304486/dashboard#s=p1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Rd1A 2016 Rank and File\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. This is the small case with max N=10\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe GJam story is a matrix H(NxN) which has every row and column increasing. Each row and column is recorded on strips. The strips get scrambled and one gets incinerated. The goal is to reconstruct the missing increasing vector strip.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M], matrix of size [2*N-1,N] of all rows and columns of H except one\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [V], the missing vector of H not included in M\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M] [V]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 2 3;2 3 5;3 5 6;2 3 4;1 2 3] [3 4 6] \\n[22 222;2 22;2 22][22 222]]]\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\u003eGJam 2016 Rd1A Matlab results show three qualifiers for Rd2.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eTheory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e With max N=10 it is possible to brute force the 50 puzzles. Persistent may be useful with the usage of nchoosek which may be the critical path.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.go-hero.net/jam/16/solutions/1/2/MATLAB\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Rank_file solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Writing the general solution for N=50 is better for the contest. The min corner or the max corner will always be available. Evolving solution, no guessing, is possible. OR one can observe an inherent mathematical result to create a 1-line solution.\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":1159,"title":"Coin Tossing: Probability of Same Heads for N tosses","description":"A pair of physicists toss a coin n times each.\r\nWhat is the probability that they tossed the same number of heads?\r\nInput: N % number of tosses\r\nOutput: P\r\nExamples:\r\nN=1 P=0.5;\r\nN=2 P=0.375\r\nTest Suite will round to 6 places","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: 231px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 115.5px; transform-origin: 407px 115.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; 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: 139px 8px; transform-origin: 139px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA pair of physicists toss a coin n times each.\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: 213px 8px; transform-origin: 213px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhat is the probability that they tossed the same number of heads?\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: 20px 8px; transform-origin: 20px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\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: 71px 8px; transform-origin: 71px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e N % number of tosses\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: 26px 8px; transform-origin: 26px 8px; 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: 6.5px 8px; transform-origin: 6.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e P\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: 35.5px 8px; transform-origin: 35.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExamples:\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: 35px 8px; transform-origin: 35px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eN=1 P=0.5;\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: 41px 8px; transform-origin: 41px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eN=2 P=0.375\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: 99px 8px; transform-origin: 99px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTest Suite will round to 6 places\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function P = coin_head_match(N)\r\n  P = 0;\r\nend","test_suite":"%%\r\nassert(isequal(.5, round(1e6*coin_head_match(1))/1e6))\r\n%%\r\nassert(isequal(.375, round(1e6*coin_head_match(2))/1e6))\r\n%%\r\nassert(isequal(.3125, round(1e6*coin_head_match(3))/1e6))\r\n%%\r\nassert(isequal(.273438, round(1e6*coin_head_match(4))/1e6))\r\n%%\r\nassert(isequal(.246094, round(1e6*coin_head_match(5))/1e6))\r\n%%\r\nassert(isequal(.225586, round(1e6*coin_head_match(6))/1e6))\r\n%%\r\nassert(isequal(.139950, round(1e6*coin_head_match(16))/1e6))\r\n%%\r\nassert(isequal(.125371, round(1e6*coin_head_match(20))/1e6))\r\n%%\r\nassert(isequal(.114567, round(1e6*coin_head_match(24))/1e6))\r\n%%\r\nassert(~isequal(0,coin_head_match(0)))\r\n%%\r\nassert(isequal(.099347, round(1e6*coin_head_match(32))/1e6))\r\n%%\r\nassert(isequal(.070386, round(1e6*coin_head_match(64))/1e6))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":223089,"edited_at":"2023-02-02T11:33:29.000Z","deleted_by":null,"deleted_at":null,"solvers_count":55,"test_suite_updated_at":"2023-02-02T11:33:29.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-01-01T19:48:56.000Z","updated_at":"2025-12-10T23:53:10.000Z","published_at":"2013-01-01T20:30:15.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\u003eA pair of physicists toss a coin n times 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the probability that they tossed the same number of heads?\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\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e N % number of tosses\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 P\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\u003eExamples:\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\u003eN=1 P=0.5;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eN=2 P=0.375\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\u003eTest Suite will round to 6 places\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":1855,"title":"Usage of java.math : N Choose K with unlimited precision","description":"Calculate the binomial coefficient nchoosek with full accuracy. This challenge may use the wonderful word of java.math that allows unlimited precision calculations.  The primary reference sites are \u003chttp://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html Java Math\u003e, \u003chttp://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html Java BigDecimal\u003e, and \u003chttp://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html Java BigInteger\u003e.\r\n\r\nThe usage of BigDecimal functions add, multiply, and divide may be required.\r\n\r\nJava Math:\r\n\r\n  vd-decimal value, vstr-string, vi-integer value \r\n  xBD=java.math.BigDecimal(vd);  % valid vd,vstr,vi creates xBD a BigDecimal variable\r\n  import java.math.*;  % simplifies statements\r\n  xBD=BigDecimal(vstr);\r\n  xplusyBD=xBD.add(BigDecimal(y)); % add input requires BD type\r\n  xmultiplyzBD=xBD.multiply(BigDecimal(z));  % multiply input requires BD type\r\n  xdividezBD=xBD.divide(BigDecimal(z));  % divide input requires BD type\r\n  xmultydivz=xBD.multiply(yBD).divide(zBD);  out=x*y/z\r\n  \r\n  To convert java to string of unlimited length can be achieved via java toString or Matlab char\r\n  \r\n  xstr=toString(xBD)  or xstr=char(xBD) \r\n\r\n*Input:* [N,K]  [ Inputs to nchoosek(N,K) 0\u003c=K\u003c=N\u003c200 ]\r\n\r\n*Output:* C  (char variable of C=nchoosek(n,k) or BigDecimal variable type )\r\n\r\n*Theory:*\r\n\r\n\u003chttp://en.wikipedia.org/wiki/Binomial_coefficient C(n,k)\u003e link shows multiple evaluation methods.\r\n\r\nC(n,k)= n!/(k!(n-k)!)\r\n\r\n\u003c\u003chttp://upload.wikimedia.org/math/b/1/a/b1a5828ee5ec18a1362999a76f3c63e6.png\u003e\u003e\r\n\r\nThe factorial method gives a direct solution while the multiplicative may require fewer operations. \r\n\r\n*Hint:* C(5,3)=(5/3)*(4/2)*(3/1)= (5/1)*(4/2)*(3/3); numerator has k terms\r\n\r\n*Future Challenges:*\r\n\r\n1. \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1833-usage-of-java-math-add-multiply-pow Usage of java.math\u003e\r\n\r\n  2. nchoosek_large (full precision)\r\n  3. Next Prime\r\n  4. factor_large\r\n\r\n5. \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1854-factorial-unlimited-size-java-math Factorial\u003e","description_html":"\u003cp\u003eCalculate the binomial coefficient nchoosek with full accuracy. This challenge may use the wonderful word of java.math that allows unlimited precision calculations.  The primary reference sites are \u003ca href = \"http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html\"\u003eJava Math\u003c/a\u003e, \u003ca href = \"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html\"\u003eJava BigDecimal\u003c/a\u003e, and \u003ca href = \"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html\"\u003eJava BigInteger\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe usage of BigDecimal functions add, multiply, and divide may be required.\u003c/p\u003e\u003cp\u003eJava Math:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003evd-decimal value, vstr-string, vi-integer value \r\nxBD=java.math.BigDecimal(vd);  % valid vd,vstr,vi creates xBD a BigDecimal variable\r\nimport java.math.*;  % simplifies statements\r\nxBD=BigDecimal(vstr);\r\nxplusyBD=xBD.add(BigDecimal(y)); % add input requires BD type\r\nxmultiplyzBD=xBD.multiply(BigDecimal(z));  % multiply input requires BD type\r\nxdividezBD=xBD.divide(BigDecimal(z));  % divide input requires BD type\r\nxmultydivz=xBD.multiply(yBD).divide(zBD);  out=x*y/z\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eTo convert java to string of unlimited length can be achieved via java toString or Matlab char\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003exstr=toString(xBD)  or xstr=char(xBD) \r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [N,K]  [ Inputs to nchoosek(N,K) 0\u0026lt;=K\u0026lt;=N\u0026lt;200 ]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e C  (char variable of C=nchoosek(n,k) or BigDecimal variable type )\u003c/p\u003e\u003cp\u003e\u003cb\u003eTheory:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Binomial_coefficient\"\u003eC(n,k)\u003c/a\u003e link shows multiple evaluation methods.\u003c/p\u003e\u003cp\u003eC(n,k)= n!/(k!(n-k)!)\u003c/p\u003e\u003cimg src = \"http://upload.wikimedia.org/math/b/1/a/b1a5828ee5ec18a1362999a76f3c63e6.png\"\u003e\u003cp\u003eThe factorial method gives a direct solution while the multiplicative may require fewer operations.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHint:\u003c/b\u003e C(5,3)=(5/3)*(4/2)*(3/1)= (5/1)*(4/2)*(3/3); numerator has k terms\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture Challenges:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e1. \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1833-usage-of-java-math-add-multiply-pow\"\u003eUsage of java.math\u003c/a\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e2. nchoosek_large (full precision)\r\n3. Next Prime\r\n4. factor_large\r\n\u003c/pre\u003e\u003cp\u003e5. \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1854-factorial-unlimited-size-java-math\"\u003eFactorial\u003c/a\u003e\u003c/p\u003e","function_template":"function y = nchoosekJava(N,K)\r\n  y = num2str(nchoosek(N,K));\r\nend","test_suite":"%%\r\ntic\r\nN=5;K=2;\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,num2str(nchoosek(N,K))))\r\n%%\r\ntic\r\nN=randi(10);\r\nK=randi(N);\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,num2str(nchoosek(N,K))))\r\n%%\r\ntic\r\nN=100;\r\nK=50;\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,'100891344545564193334812497256'))\r\n%%\r\ntic\r\nN=200;\r\nK=75;\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,'168849997346404286704489530268603459022868706883102845056'))\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":52,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-08-30T03:09:06.000Z","updated_at":"2026-02-08T19:48:26.000Z","published_at":"2013-08-30T03:48:17.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCalculate the binomial coefficient nchoosek with full accuracy. This challenge may use the wonderful word of java.math that allows unlimited precision calculations. The primary reference sites are\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://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eJava Math\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eJava BigDecimal\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eJava BigInteger\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\u003eThe usage of BigDecimal functions add, multiply, and divide may be required.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eJava Math:\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[vd-decimal value, vstr-string, vi-integer value \\nxBD=java.math.BigDecimal(vd);  % valid vd,vstr,vi creates xBD a BigDecimal variable\\nimport java.math.*;  % simplifies statements\\nxBD=BigDecimal(vstr);\\nxplusyBD=xBD.add(BigDecimal(y)); % add input requires BD type\\nxmultiplyzBD=xBD.multiply(BigDecimal(z));  % multiply input requires BD type\\nxdividezBD=xBD.divide(BigDecimal(z));  % divide input requires BD type\\nxmultydivz=xBD.multiply(yBD).divide(zBD);  out=x*y/z\\n\\nTo convert java to string of unlimited length can be achieved via java toString or Matlab char\\n\\nxstr=toString(xBD)  or xstr=char(xBD)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [N,K] [ Inputs to nchoosek(N,K) 0\u0026lt;=K\u0026lt;=N\u0026lt;200 ]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e C (char variable of C=nchoosek(n,k) or BigDecimal variable type )\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eTheory:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Binomial_coefficient\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eC(n,k)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e link shows multiple evaluation methods.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eC(n,k)= n!/(k!(n-k)!)\u003c/w:t\u003e\u003c/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 factorial method gives a direct solution while the multiplicative may require fewer operations.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eHint:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e C(5,3)=(5/3)*(4/2)*(3/1)= (5/1)*(4/2)*(3/3); numerator has k terms\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eFuture Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1.\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/1833-usage-of-java-math-add-multiply-pow\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eUsage of java.math\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[2. nchoosek_large (full precision)\\n3. Next Prime\\n4. factor_large]]\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\u003e5.\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/1854-factorial-unlimited-size-java-math\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eFactorial\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":1517,"title":"Put m balls into n boxes (again)","description":"According to Cody Problem 1516, if I put 3 balls into 2 boxes then\r\n     1     1     1\r\n     1     1     2\r\n     1     2     2\r\n     2     2     2\r\nThe columns stand for a ball, the number stands for a box, and the row stands for a case.\r\nNow we count the number of balls in each boxes.\r\nso we get\r\n     3     0\r\n     2     1\r\n     1     2\r\n     0     3\r\nthe 1-th row stand for the 1-th case,3 balls are put into the first boxes,the others is empty the 2-th row stand for the 2-th case,2 balls are put into the first boxes,1 balls is put into the second boxes\r\nYou should write a function, input m and n, m stand for the number of balls ,n stand for the number of boxes,output all the cases.\r\nExample\r\nIf m = 3,n = 4, you should output\r\n     3     0     0     0\r\n     2     1     0     0\r\n     2     0     1     0\r\n     2     0     0     1\r\n     1     2     0     0\r\n     1     1     1     0\r\n     1     1     0     1\r\n     1     0     2     0\r\n     1     0     1     1\r\n     1     0     0     2\r\n     0     3     0     0\r\n     0     2     1     0\r\n     0     2     0     1\r\n     0     1     2     0\r\n     0     1     1     1\r\n     0     1     0     2\r\n     0     0     3     0\r\n     0     0     2     1\r\n     0     0     1     2\r\n     0     0     0     3","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: 877.133px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 438.567px; transform-origin: 407px 438.567px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 39.5px 8px; transform-origin: 39.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAccording to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"/#null\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eCody Problem 1516\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: 101.5px 8px; transform-origin: 101.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, if I put 3 balls into 2 boxes then\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; 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 40.8667px; transform-origin: 404px 40.8667px; 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     1     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     1     2\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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     2     2\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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     2     2     2\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; 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: 281.5px 8px; transform-origin: 281.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe columns stand for a ball, the number stands for a box, and the row stands for a case.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 172px 8px; transform-origin: 172px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eNow we count the number of balls in each boxes.\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: 30px 8px; transform-origin: 30px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eso we get\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; 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 40.8667px; transform-origin: 404px 40.8667px; 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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     3     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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     2     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     2\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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0     3\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 377.5px 8px; transform-origin: 377.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ethe 1-th row stand for the 1-th case,3 balls are put into the first boxes,the others is empty the 2-th row stand for the 2-th case,2 balls are put into the first boxes,1 balls is put into the second boxes\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 383px 8px; transform-origin: 383px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou should write a function, input m and n, m stand for the number of balls ,n stand for the number of boxes,output all the cases.\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: 26.5px 8px; transform-origin: 26.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample\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: 101.5px 8px; transform-origin: 101.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf m = 3,n = 4, you should output\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 408.667px; 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 204.333px; transform-origin: 404px 204.333px; 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     3     0     0     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: 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     2     1     0     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: 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     2     0     1     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: 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     2     0     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     1     2     0     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: 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     1     1     1     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: 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     1     1     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     1     0     2     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: 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     1     0     1     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     1     0     0     2\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     0     3     0     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: 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     0     2     1     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: 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     0     2     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     0     1     2     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: 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     0     1     1     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     0     1     0     2\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     0     0     3     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: 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     0     0     2     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     0     0     1     2\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     0     0     0     3\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = putballs2(m,n)\r\n  y = [m*n];\r\nend","test_suite":"%% 1\r\nm = 3;\r\nn = 2;\r\ny_correct = [     3     0\r\n     2     1\r\n     1     2\r\n     0     3];\r\nassert(isequal(putballs2(m,n),y_correct))\r\n%% 2\r\nfiletext = fileread('putballs2.m');\r\nassert(isempty(strfind(filetext, 'fopen')));\r\nassert(isempty(strfind(filetext, 'assert')));\r\nassert(isempty(strfind(filetext, 'regexp')));\r\nassert(isempty(strfind(filetext, 'regexprep')));\r\nassert(isempty(strfind(filetext, 'str2num')));\r\nassert(isempty(strfind(filetext, 'if ')));\r\nassert(isempty(strfind(filetext, 'persistent')));\r\nassert(isempty(strfind(filetext, 'global')));\r\nassert(isempty(strfind(filetext, 'assignin')));\r\nassert(isempty(strfind(filetext, 'evalin')));\r\nassert(isempty(strfind(filetext, 'char')));\r\nassert(isempty(strfind(filetext, 'interp1')));\r\nassert(isempty(strfind(filetext, 'equal')));\r\n %% 3\r\nm = 3;\r\nn = 4;\r\ny_correct = [     3     0     0     0\r\n     2     1     0     0\r\n     2     0     1     0\r\n     2     0     0     1\r\n     1     2     0     0\r\n     1     1     1     0\r\n     1     1     0     1\r\n     1     0     2     0\r\n     1     0     1     1\r\n     1     0     0     2\r\n     0     3     0     0\r\n     0     2     1     0\r\n     0     2     0     1\r\n     0     1     2     0\r\n     0     1     1     1\r\n     0     1     0     2\r\n     0     0     3     0\r\n     0     0     2     1\r\n     0     0     1     2\r\n     0     0     0     3];\r\nassert(isequal(putballs2(m,n),y_correct))\r\n%% 4\r\nm = 5;\r\nn = 4;\r\ny_correct = [     5     0     0     0\r\n     4     1     0     0\r\n     4     0     1     0\r\n     4     0     0     1\r\n     3     2     0     0\r\n     3     1     1     0\r\n     3     1     0     1\r\n     3     0     2     0\r\n     3     0     1     1\r\n     3     0     0     2\r\n     2     3     0     0\r\n     2     2     1     0\r\n     2     2     0     1\r\n     2     1     2     0\r\n     2     1     1     1\r\n     2     1     0     2\r\n     2     0     3     0\r\n     2     0     2     1\r\n     2     0     1     2\r\n     2     0     0     3\r\n     1     4     0     0\r\n     1     3     1     0\r\n     1     3     0     1\r\n     1     2     2     0\r\n     1     2     1     1\r\n     1     2     0     2\r\n     1     1     3     0\r\n     1     1     2     1\r\n     1     1     1     2\r\n     1     1     0     3\r\n     1     0     4     0\r\n     1     0     3     1\r\n     1     0     2     2\r\n     1     0     1     3\r\n     1     0     0     4\r\n     0     5     0     0\r\n     0     4     1     0\r\n     0     4     0     1\r\n     0     3     2     0\r\n     0     3     1     1\r\n     0     3     0     2\r\n     0     2     3     0\r\n     0     2     2     1\r\n     0     2     1     2\r\n     0     2     0     3\r\n     0     1     4     0\r\n     0     1     3     1\r\n     0     1     2     2\r\n     0     1     1     3\r\n     0     1     0     4\r\n     0     0     5     0\r\n     0     0     4     1\r\n     0     0     3     2\r\n     0     0     2     3\r\n     0     0     1     4\r\n     0     0     0     5];\r\nassert(isequal(putballs2(m,n),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":2,"created_by":3668,"edited_by":223089,"edited_at":"2022-10-09T16:30:12.000Z","deleted_by":null,"deleted_at":null,"solvers_count":64,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-05-22T02:25:40.000Z","updated_at":"2026-02-08T20:12:31.000Z","published_at":"2013-05-22T02:25:57.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\u003eAccording 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=\\\"\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody Problem 1516\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, if I put 3 balls into 2 boxes then\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[     1     1     1\\n     1     1     2\\n     1     2     2\\n     2     2     2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe columns stand for a ball, the number stands for a box, and the row stands for a case.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNow we count the number of balls in each boxes.\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\u003eso we get\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[     3     0\\n     2     1\\n     1     2\\n     0     3]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethe 1-th row stand for the 1-th case,3 balls are put into the first boxes,the others is empty the 2-th row stand for the 2-th case,2 balls are put into the first boxes,1 balls is put into the second boxes\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 should write a function, input m and n, m stand for the number of balls ,n stand for the number of boxes,output all the cases.\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\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf m = 3,n = 4, you should output\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[     3     0     0     0\\n     2     1     0     0\\n     2     0     1     0\\n     2     0     0     1\\n     1     2     0     0\\n     1     1     1     0\\n     1     1     0     1\\n     1     0     2     0\\n     1     0     1     1\\n     1     0     0     2\\n     0     3     0     0\\n     0     2     1     0\\n     0     2     0     1\\n     0     1     2     0\\n     0     1     1     1\\n     0     1     0     2\\n     0     0     3     0\\n     0     0     2     1\\n     0     0     1     2\\n     0     0     0     3]]\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":2487,"title":"Create Combination","description":"Motivation: In many problems, we need to create combinations with the function nchoosek. In some cases, however, choices are limited in particular fields. This problem is an exercise based on this issue.\r\n\r\nProblem statement: Given a vector v, create a combination matrix where an element on i-th column can not exceed v(i). All values of input vector will be of single digit.\r\n\r\nExample:\r\n\r\n  v = [1 3 2];\r\n  Output =[\r\n       1     1     1\r\n       1     1     2\r\n       1     2     1\r\n       1     2     2\r\n       1     3     1\r\n       1     3     2 ];","description_html":"\u003cp\u003eMotivation: In many problems, we need to create combinations with the function nchoosek. In some cases, however, choices are limited in particular fields. This problem is an exercise based on this issue.\u003c/p\u003e\u003cp\u003eProblem statement: Given a vector v, create a combination matrix where an element on i-th column can not exceed v(i). All values of input vector will be of single digit.\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ev = [1 3 2];\r\nOutput =[\r\n     1     1     1\r\n     1     1     2\r\n     1     2     1\r\n     1     2     2\r\n     1     3     1\r\n     1     3     2 ];\r\n\u003c/pre\u003e","function_template":"function y = specialNchoosek(x)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = 1;\r\ny_correct = 1;\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [];\r\ny_correct = [];\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [2 8 2];\r\ny_correct=[1     1     1\r\n     1     1     2\r\n     1     2     1\r\n     1     2     2\r\n     1     3     1\r\n     1     3     2\r\n     1     4     1\r\n     1     4     2\r\n     1     5     1\r\n     1     5     2\r\n     1     6     1\r\n     1     6     2\r\n     1     7     1\r\n     1     7     2\r\n     1     8     1\r\n     1     8     2\r\n     2     1     1\r\n     2     1     2\r\n     2     2     1\r\n     2     2     2\r\n     2     3     1\r\n     2     3     2\r\n     2     4     1\r\n     2     4     2\r\n     2     5     1\r\n     2     5     2\r\n     2     6     1\r\n     2     6     2\r\n     2     7     1\r\n     2     7     2\r\n     2     8     1\r\n     2     8     2];\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [3 3 3];\r\ny_correct =[1     1     1\r\n     1     1     2\r\n     1     1     3\r\n     1     2     1\r\n     1     2     2\r\n     1     2     3\r\n     1     3     1\r\n     1     3     2\r\n     1     3     3\r\n     2     1     1\r\n     2     1     2\r\n     2     1     3\r\n     2     2     1\r\n     2     2     2\r\n     2     2     3\r\n     2     3     1\r\n     2     3     2\r\n     2     3     3\r\n     3     1     1\r\n     3     1     2\r\n     3     1     3\r\n     3     2     1\r\n     3     2     2\r\n     3     2     3\r\n     3     3     1\r\n     3     3     2\r\n     3     3     3];\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [1 1 1 1 1];\r\ny_correct = x;\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [1 1 1 3];\r\ny_correct =[1     1     1     1\r\n     1     1     1     2\r\n     1     1     1     3];\r\nassert(isequal(specialNchoosek(x),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":17203,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":67,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-08-07T04:08:53.000Z","updated_at":"2026-02-08T19:22:23.000Z","published_at":"2014-08-07T04:08:53.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\u003eMotivation: In many problems, we need to create combinations with the function nchoosek. In some cases, however, choices are limited in particular fields. This problem is an exercise based on this issue.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eProblem statement: Given a vector v, create a combination matrix where an element on i-th column can not exceed v(i). All values of input vector will be of single digit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[v = [1 3 2];\\nOutput =[\\n     1     1     1\\n     1     1     2\\n     1     2     1\\n     1     2     2\\n     1     3     1\\n     1     3     2 ];]]\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":52343,"title":"ICFP2021 Hole-In-Wall: Solve Score=0, where number of Figure Vertices = Hole Vertices + 1","description":"The ICFP held its annual 3-day contest in July 2021 with Hole-In-Wall. Contest Specification.\r\nThe contest folds the figure in Red to fit within the hole shown in light grey \r\nThis Challenge is to solve ICFP problems 12, 15, 20, 25, 26, and 39 according to the Specification when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. ICFP problem 47 is of this form but with 10 hole vertices a brute force method may take 180 seconds so this will be a separate challenge.\r\nValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u003c= epsilon/1000000.  Lsqr is length squared.\r\nScore is sum of minimum square distances to the figure from each unique hole vertex. \r\nnpxy=Solve_nPeqnH1(hxy, pxy, mseg, epsilon)  \r\nThis challenge set all have optimal Scores of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one.\r\nThe function template includes routines to read ICFP problem files and to write ICFP solution files.\r\nThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use Register Team. Anyone can select Problems Page and then click problem numbers to see the puzzles and to download problem files.","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: 672px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 336px; transform-origin: 407px 336px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 14px 8.05px; transform-origin: 14px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.icfpconference.org/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP\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: 146.65px 8.05px; transform-origin: 146.65px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e held its annual 3-day contest in July 2021 with \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eHole-In-Wall\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: 29.95px 8.05px; transform-origin: 29.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Contest \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 1.95px 8.05px; transform-origin: 1.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 201px; 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 100.5px; text-align: left; transform-origin: 384px 100.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: 230.267px 8.05px; transform-origin: 230.267px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest folds the figure in Red to fit within the hole shown in light grey \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 208px;height: 201px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"208\" height=\"201\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 263.717px 8.05px; transform-origin: 263.717px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to solve ICFP problems 12, 15, 20, 25, 26, and 39 according to the \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 66.1333px 8.05px; transform-origin: 66.1333px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. ICFP problem 47 is of this form but with 10 hole vertices a brute force method may take 180 seconds so this will be a separate challenge.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8.05px; transform-origin: 384px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52308\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eScore\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: 250.1px 8.05px; transform-origin: 250.1px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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: 155.5px 8.05px; transform-origin: 155.5px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003enpxy=Solve_nPeqnH1(hxy, pxy, mseg, epsilon)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 3.88333px 8.05px; transform-origin: 3.88333px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 383.017px 8.05px; transform-origin: 383.017px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge set all have optimal Scores of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one.\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: 303.4px 8.05px; transform-origin: 303.4px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.883px 8.05px; transform-origin: 375.883px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/register\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eRegister Team\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: 42.7833px 8.05px; transform-origin: 42.7833px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Anyone can select \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/problems\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblems Page\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: 256.35px 8.05px; transform-origin: 256.35px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function npxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon)\r\n%nH+1 equals nP and Score =0 optimally, nH is before repeating row 1\r\n%Create all nchoosek index set of np then try all permutations.\r\n%Check that all segments created have valid lengths\r\n%Create final point placement based upon segment constraints until sequence passes\r\n% npxy(pnckset(i),:)= hxy(1:end-1,:), width of pnckset is nP-1 so one node is TBD\r\n npxy=pxy;\r\n nseg=size(mseg,1);\r\n msegMM=calc_msegMM(pxy,mseg,epsilon,nseg); %Create Min and Max segment integer values\r\n \r\n hxy1=hxy(1:end-1,:); % speed up method\r\n np=size(npxy,1);\r\n vpn=zeros(np,1);\r\n % Note:  ***  Indicates line was changed from working program\r\n pnchk=nchoosek(1,1); % ***     Create nchoosek matrix of 1:np of np-1 points\r\n mperms=perms(1:np-1); % fast repetitve perms method, create a mapping array\r\n Lpnchk=size(pnchk,1);\r\n for ipnchk=1:Lpnchk % subset of figure vertices to place onto hole vertices\r\n  vpnchk=pnchk(ipnchk,:); % create a vector to use in perm set matrix\r\n  phset=vpnchk(mperms); % fast phset creation using perms matrix\r\n  nphset=size(phset,1);\r\n \r\n  for i=1:nphset %  This is the large loop over permutations\r\n   npxy=npxy*0; \r\n   vphset=phset(i,:); \r\n   npxy(vphset,:)=hxy1; % load hole vertices into figure vertex matrix, one row is [0 0] unset\r\n   vpn=0*vpn; \r\n   vpn(vphset)=1; % vpn is vector that indicates used figure vertices\r\n   fail=0;\r\n   for segptr=1:nseg\r\n    if prod(vpn([0 0])) % *** check if both figure vertices were set \r\n     L2seg=sum((npxy(mseg(segptr,1),:)-npxy(mseg(segptr,2),:)).^2);\r\n     if prod([0 0])\u003e0 % *** Verify L2seg is valid length squared\r\n      fail=1; % set flag to try next permutation\r\n      break; % break out of segment L2 checker\r\n     end\r\n    end\r\n   end\r\n   if fail,continue;end %length of subset placed vertices placed on hole vertices failed\r\n   \r\n   %Hole Points covered. Have 1 free point to place constrained by its segments\r\n   node=find(vpn==-1); % ***    Find unset node\r\n  \r\n   cptr=1; % Flag to enable first set of points for a segment containing unset vertex\r\n   for fseg=1:nseg\r\n    if prod(vpn([0 0])),continue;end % ***    Check if Both seg vertices set\r\n    MM=msegMM(fseg,:); % Create [Min Max] vector\r\n    Node2=mseg(fseg,:);\r\n    Node2(1)=[]; % ***  Reduce Node2 to a single value of the set vertex\r\n    \r\n    if cptr==1 % create an initial list of all in range and then inpolygon\r\n     Lmm=ceil(MM(2)^.5);\r\n     dmap=(0:Lmm).^2;\r\n     dmap=repmat(dmap,Lmm+1,1);\r\n     dmap=dmap+dmap'; % Create a 2D map of distance squared from [0,0]. dmap(1,1) is [0,0]\r\n     % This 2D map is of the Positive XY quadrant.  The goal will be to find  all valid [dx dy]\r\n     dmap(1,:)=0; % ***      Remove Points less than Min Seg length\r\n     dmap(1,:)=0; % ***      Remove Points greater than Max Seg length\r\n     [dx,dy]=find(dmap);\r\n     dx=dx-1; dy=dy-1; % remove 1,1 offset from grid\r\n     dxy=[dx dy;dx -dy;-dx dy;-dx -dy];  % Create all valid deltas by symmetry about [0,0]\r\n     mxy=dxy+npxy(Node2,:);  % Create matrix of all points in the valid region\r\n     % remove negatives from hole comparison as hole is all positive\r\n     mxy=mxy(1,:); % ***     Speed option remove all points with neg x values\r\n     mxy=mxy(1,:); % ***     Speed option remove all points with neg y values\r\n     in=inpolygon(mxy(:,1),mxy(:,2),hxy(:,1),hxy(:,2));  % Find all valid in-hole points\r\n     mxy=mxy(1,:); % ***   reduce to in-hole points\r\n     cptr=2; % set flag so next segment check only uses residual mxy points\r\n    else % test points from m for additional new fseg constraint and prune\r\n     Lmxy=size(mxy,1);\r\n     vmxy=ones(Lmxy,1); % Valid mxy vector\r\n     for ptrmxy=1:Lmxy\r\n      d2=sum(([0 0]).^2);  % *** Calc dist squared from mxy to Node2\r\n      if d2\u003cMM(1),vmxy(ptrmxy)=0;end % clear vmxy for too short\r\n      if d2\u003eMM(2),vmxy(ptrmxy)=0;end % clear vmxy for too long\r\n     end\r\n     mxy=mxy(vmxy\u003e0,:);\r\n     if isempty(mxy)    %If no points left in mxy then vertex could not reach from set nodes\r\n      fail=1;\r\n      break;\r\n     end\r\n    end % cptr==1\r\n   end % fseg 1:nseg\r\n   if fail,continue;end  % Try next permutation\r\n   \r\n   npxy(node,:)=mxy(1,:); % solution found\r\n   fprintf('Solution found\\n');\r\n   return;\r\n  end % i nhpset\r\n end %ipnchk Lpnchk\r\n \r\n fprintf('No solution found\\n');\r\nend %Solve_nPeqnH1\r\n\r\nfunction msegMM=calc_msegMM(pxy,mseg,epsilon,nseg)\r\n%determine Min and Max integer value of allowed length squared for each segment\r\n%abs(Lsqr(npxy,seg(i))/Lsqr(pxy,seg(i))-1)\u003c= epsilon/1000000.\r\n%mseg has indices of connected vertices [nseg,2].  The nseg may exceed number of vertices.\r\n msegMM=zeros(nseg,2);\r\n for i=1:nseg\r\n  Lseg=sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n  delta=floor(epsilon*Lseg/1000000);\r\n  msegMM(i,:)=[-delta delta]+Lseg;\r\n end\r\nend % calc_msegMM\r\n\r\n\r\n%These routines can be used to read ICFP problems, write ICFP text file, and visualize the data\r\n\r\n% function [epsilon,hxy,pxy,mseg]=read_problem(pid)\r\n%  fid=fopen([num2str(pid) '.problem'],'r');\r\n%   pstr=fgetl(fid);\r\n%  fclose(fid)\r\n%  \r\n%  Lpstr=length(pstr);\r\n%  holidx=findstr('\"hole\":[[',pstr); %starting location match\r\n%  epsidx=findstr('\"epsilon\":',pstr);\r\n%  figidx=findstr(',\"figure\"',pstr);\r\n%  edgidx=findstr('\"edges\":[[',pstr);\r\n%  veridx=findstr('\"vertices\":[[',pstr);\r\n%  epsilon=str2num(pstr(epsidx+10:figidx-1));\r\n%  \r\n%  hxy=reshape(str2num(pstr(holidx+8:epsidx-3)),2,[])';\r\n%  hxy=[hxy;hxy(1,:)]; %repeat row1 to close path\r\n%  \r\n%  pxy=reshape(str2num(pstr(veridx+12:Lpstr-3)),2,[])';\r\n%  \r\n%  mseg=reshape(str2num(pstr(edgidx+9:veridx-3)),2,[])'+1;\r\n% end % read_problem\r\n\r\n% function write_submission(npxy,pid)\r\n%  fname=['Solution_' num2str(pid) '_' datestr(now,'yyyymmdd_HHMMSS') '.txt'];\r\n%  fid=fopen(fname,'wt'); % t for notepad editing\r\n%  \r\n%  %Create ICFP submission\r\n%  fprintf('{\"vertices\": [');\r\n%  fprintf(fid,'{\"vertices\": [');\r\n%  for i=1:size(npxy,1)-1 \r\n%   fprintf('[%i,%i],',npxy(i,:));\r\n%   fprintf(fid,'[%i,%i],',npxy(i,:));\r\n%  end \r\n%  fprintf('[%i,%i]]}\\n',npxy(end,:));\r\n%  fprintf(fid,'[%i,%i]]}\\n',npxy(end,:));\r\n%  fclose(fid);\r\n% end\r\n\r\n\r\n% function hplot(vxy,qxy,mseg,Lmseg,id)\r\n% %Need check of segment crossing a hole segment but ignore endpoint\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1)%length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i),'FontSize',12);\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    if in(mseg(i,1))+in(mseg(i,2))\u003c2\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment to OOB pt\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-')\r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%    \r\n%   axis tight\r\n%   axis ij\r\n%   hold off  \r\n% end % hplot\r\n\r\n% function hplot3(vxy,qxy,mseg,Lmseg,id,segMM)\r\n%  segMNM=[segMM(:,1) segMM(:,1)+segMM(:,2) segMM(:,2)];\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1) %length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i));\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    d2seg=(qxy(mseg(i,1),1)-qxy(mseg(i,2),1))^2+(qxy(mseg(i,1),2)-qxy(mseg(i,2),2))^2;\r\n%    if d2seg\u003csegMNM(i,1)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-') % segment too short\r\n%    elseif d2seg\u003esegMNM(i,3)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment too long\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'g-') \r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%   \r\n%   axis tight\r\n%   axis ij\r\n%   hold off\r\n% end % hplot3","test_suite":"%%\r\ntic\r\n% ICFP Problem Id 12\r\nepsilon=0;\r\nhxy=[28 0;56 4;0 4;28 0];\r\npxy=[0 20;20 0;20 40;40 20];\r\nmseg=[1 2;1 3;2 4;3 4];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 15\r\nepsilon=1250;\r\nhxy=[15 0;35 20;20 44;0 24;15 0];\r\npxy=[0 20;20 0;20 40;40 20;49 45];\r\nmseg=[1 2;1 3;2 4;3 4;3 5;4 5];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 20\r\n% nh 5  np 6\r\nepsilon=4757;\r\nhxy=[20 0;62 39;41 56;20 40;0 20;20 0];\r\npxy=[20 12;0 32;46 1;26 21;67 17;46 0];\r\nmseg=[1 2;1 3;2 4;3 4;3 5;4 6;5 6];\r\n\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 25\r\n% nh 6  np 7\r\nepsilon=16310;\r\nhxy=[0 20;28 0;55 61;40 96;7 91;0 54;0 20];\r\npxy=[18 2;52 0;16 11;0 31;37 31;47 24;14 5];\r\nmseg=[1 2;1 4;1 5;2 3;2 5;3 6;4 5;5 7;6 7];\r\n\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 26\r\nepsilon=15671;\r\nhxy=[17 17;46 0;76 17;80 51;26 65;0 46;17 17];\r\npxy=[64 0;34 15;53 30;53 43;19 45;34 14;0 12];\r\nmseg=[1 2;1 3;2 4;2 5;3 5;3 7;4 5;4 6;5 6;5 7;6 7];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 39\r\nepsilon=20037;\r\nhxy=[5 7;39 0;59 33;56 76;45 110;6 111;0 73;0 39;5 7];\r\npxy=[4 8;6 42;23 34;37 19;35 23;16 0;5 42;38 56;0 35];\r\nmseg=[1 2;1 3;1 5;2 4;2 5;3 6;4 7;5 8;5 9;6 9;7 8;8 9];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 47  75% of hole edges not covered in solution. All hole vertices covered.\r\n% possible method force longest fig segment onto pair hole vertices then perms\r\n% brute force processing will take 180 seconds so not part of this cody challenge\r\nepsilon=41323;\r\nhxy=[6 14;36 19;40 17;69 0;79 21;41 36;36 33;16 44;7 34;0 28;6 14];\r\npxy=[0 11;1 85;8 56;11 0;14 45;14 59;14 88;30 37;30 56;56 85;67 64];\r\nmseg=[1 4;4 8;8 5;5 1;8 11;11 10;10 9;9 8;5 6;6 9;9 7;7 2;2 6;6 3;3 5];\r\ntoc","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2021-07-21T13:12:20.000Z","updated_at":"2021-07-21T19:14:23.000Z","published_at":"2021-07-21T19:14:23.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.icfpconference.org/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e held its annual 3-day contest in July 2021 with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eHole-In-Wall\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Contest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest folds the figure in Red to fit within the hole shown in light grey \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"201\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"208\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to solve ICFP problems 12, 15, 20, 25, 26, and 39 according to the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. ICFP problem 47 is of this form but with 10 hole vertices a brute force method may take 180 seconds so this will be a separate challenge.\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\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52308\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eScore\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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\u003enpxy=Solve_nPeqnH1(hxy, pxy, mseg, epsilon)\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:t\u003eThis challenge set all have optimal Scores of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/register\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRegister Team\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Anyone can select \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/problems\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblems Page\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":52355,"title":"ICFP2021 Hole-In-Wall: Solve Problem 47,   Score=0, Figure Vertices 11,  Hole Vertices 10","description":"The ICFP held its annual 3-day contest in July 2021 with Hole-In-Wall. Contest Specification.\r\nThe contest folds the figure in Red to fit within the hole shown in light grey. A final solution is shown to aid in programming. \r\nThis Challenge is to solve ICFP problems 47 according to the Specification when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. Brute force of  problem 47 may take 180 seconds due to the 10 hole vertices.\r\nValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u003c= epsilon/1000000.  Lsqr is length squared.\r\nScore is sum of minimum square distances to the figure from each unique hole vertex. \r\nnpxy=Solve_ICFP047(hxy, pxy, mseg, epsilon)  \r\nThis challenge requires a Score of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one. One method would be to reduce the nchoosek to force the longest figure segment to fit across a pair of hole vertices.  This problem with its solution shown shows that a recursive point to available hole vertices could be a more general solution.\r\nThe function template includes routines to read ICFP problem files and to write ICFP solution files.\r\nThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use Register Team. Anyone can select Problems Page and then click problem numbers to see the puzzles and to download problem files.","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: 775px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 387.5px; transform-origin: 407px 387.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; 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: 14px 8.05px; transform-origin: 14px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.icfpconference.org/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP\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: 146.65px 8.05px; transform-origin: 146.65px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e held its annual 3-day contest in July 2021 with \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eHole-In-Wall\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: 29.95px 8.05px; transform-origin: 29.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Contest \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 1.95px 8.05px; transform-origin: 1.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 283px; 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 141.5px; text-align: left; transform-origin: 384px 141.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: 379.9px 8.05px; transform-origin: 379.9px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest folds the figure in Red to fit within the hole shown in light grey. A final solution is shown to aid in programming. \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: top;width: 541px;height: 262px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"541\" height=\"262\"\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: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 63px; text-align: left; transform-origin: 384px 63px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 191.767px 8.05px; transform-origin: 191.767px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to solve ICFP problems 47 according to the \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 138.367px 8.05px; transform-origin: 138.367px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. Brute force of  problem 47 may take 180 seconds due to the 10 hole vertices.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8.05px; transform-origin: 384px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52308\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eScore\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: 250.1px 8.05px; transform-origin: 250.1px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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: 152.783px 8.05px; transform-origin: 152.783px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003enpxy=Solve_ICFP047(hxy, pxy, mseg, epsilon)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 3.88333px 8.05px; transform-origin: 3.88333px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8.05px; transform-origin: 384px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge requires a Score of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one. One method would be to reduce the nchoosek to force the longest figure segment to fit across a pair of hole vertices.  This problem with its solution shown shows that a recursive point to available hole vertices could be a more general solution.\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: 303.4px 8.05px; transform-origin: 303.4px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.883px 8.05px; transform-origin: 375.883px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/register\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eRegister Team\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: 42.7833px 8.05px; transform-origin: 42.7833px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Anyone can select \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/problems\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblems Page\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: 256.35px 8.05px; transform-origin: 256.35px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function npxy=Solve_ICFP047(hxy,pxy,mseg,epsilon)\r\n%Problem 47 shows potential for recursion but a brute force with reduction can quickly solve\r\n% nH equals nP-1 and Score=0 optimally, nH is before repeating row 1\r\n% Since Score=0 then all hole vertices are covered. \r\n% Know that only 1 figure vertex not on a hole vertex\r\n% Assume that the longest segment spans two hole vertices not necessarily sequential hole nodes\r\n% Identify longest segment and associated hole vertices\r\n% Try all permutations of nchoosek(1:nP,nP-1) after reduced by Long segment nodes and hole nodes \r\n% Verify segments where both nodes are in nck set are correct length\r\n% For unselected vertex find all segments containing and create valid pt sets\r\n% for each segment constraint.  Find point common to all constraint sets\r\n\r\n npxy=pxy;\r\n nseg=size(mseg,1);\r\n msegMM=calc_msegMM(pxy,mseg,epsilon,nseg); %Create Min and Max segment integer values\r\n %hplot(hxy,pxy,mseg,nseg,1);\r\n %hplot3(hxy,npxy,mseg,nseg,3,msegMM);\r\n %hplot4(hxy,npxy,mseg,nseg,4,msegMM);\r\n \r\n hxy1=hxy(1:end-1,:);\r\n np=size(npxy,1); %\r\n vpn=zeros(np,1);\r\n pnchk=nchoosek(1:np,np-1);\r\n \r\n % Note:  ***  Indicates line was changed from working program\r\n ptrLseg=find(msegMM(:,2)==0,1,'first'); % ***  Find max L segment\r\n nodesL=mseg(ptrLseg,:);  % figure nodes of longest figure segment\r\n nodesLMM=msegMM(ptrLseg,:); % Min and Max of selected long figure segment\r\n found=0;\r\n nh=size(hxy,1);\r\n for hi=1:nh-2  % search all hole vertices hi to hj that matches long figure segment\r\n  for hj=hi+1:nh-1\r\n   if prod([0 0])\u003c=0 % ***   Find pair of valid hole vertices\r\n    found=1;\r\n    break;\r\n   end\r\n  end %hj nh\r\n  if found,break;end\r\n end %hi nh\r\n % hi,hj Hole indices that are nodes that fit longest segment\r\n % that will need to be either of nodesL\r\n \r\n % remove nchoosek vectors that omit the long segment of nodesL\r\n pnchkval=sum([0 0],2)\u003e1; % ***\r\n pnchk=pnchk(pnchkval,:);\r\n Lpnchk=size(pnchk,1); % Length of final nchoosek matrix\r\n \r\n mperms=perms(1:np-1); % fast repetitve perms method, create a mapping array\r\n for ipnchk=1:Lpnchk %subset of figure vertices to place onto hole vertices\r\n  vpnchk=pnchk(ipnchk,:);\r\n  phset=vpnchk(mperms); \r\n  % remove matrix rows that lack nodesL in hi,hj columns\r\n  % Massive reduction in phset matrix \r\n  permvalid=phset(:,hi)==0 | phset(:,hi)==0; % ***   match nodesL\r\n  phset=phset(permvalid,:);\r\n  permvalid=phset(:,hj)==0 | phset(:,hj)==0; % ***   match nodesL\r\n  phset=phset(permvalid,:); % Final reduced permutation set that must have nodesL in cols hi,hj\r\n  \r\n  nphset=size(phset,1); % greatly reduced from 10! for each nchoosek vector\r\n \r\n  for i=1:nphset\r\n   npxy=npxy*0;\r\n   vphset=phset(i,:); \r\n   npxy(vphset,:)=hxy1; % load hole vertices into figure vertex matrix, one row is [0 0] unset\r\n   vpn=0*vpn;\r\n   vpn(vphset)=1; % vpn is vector that indicates used figure vertices\r\n   fail=0;\r\n   for segptr=1:nseg\r\n    if prod(vpn(mseg(segptr,:)))\r\n     L2seg=sum((npxy(mseg(segptr,1),:)-npxy(mseg(segptr,2),:)).^2);\r\n     if prod([0 0])\u003e0  % *** Verify L2seg is valid length squared\r\n      fail=1;\r\n      break;\r\n     end\r\n    end\r\n   end\r\n   if fail,continue;end %length of subset placed vertices placed on hole ver failed\r\n   %Hole Points covered. Have 1 free point to place constrained by its segments\r\n   node=find(vpn==0); % Free node to place\r\n  \r\n   cptr=1;\r\n   for fseg=1:nseg\r\n    if prod(vpn(mseg(fseg,:))),continue;end % Both seg vertices placed\r\n    MM=msegMM(fseg,:);  % Create [Min Max] vector\r\n    Node2=mseg(fseg,:);\r\n    Node2(Node2==node)=[]; % Reduce Node2 to a single value of the set vertex\r\n    \r\n    if cptr==1 % create an initial list of all in range and then inpolygon\r\n     Lmm=ceil(MM(2)^.5);\r\n     dmap=(0:Lmm).^2;\r\n     dmap=repmat(dmap,Lmm+1,1);\r\n     dmap=dmap+dmap'; % Create a 2D map of distance squared from [0,0]. dmap(1,1) is [0,0]\r\n     % This 2D map is of the Positive XY quadrant.  The goal will be to find  all valid [dx dy]\r\n     dmap(dmap\u003cMM(1))=0; % Remove Points less than Min Seg length\r\n     dmap(1,:)=0; % ***      Remove Points greater than Max Seg length\r\n     [dx,dy]=find(dmap);\r\n     dx=dx-1; dy=dy-1; % remove 1,1 offset from grid\r\n     dxy=[dx dy;dx -dy;-dx dy;-dx -dy];% Create all valid deltas by symmetry about [0,0]\r\n     mxy=dxy+npxy(Node2,:);% Create matrix of all points in the valid region\r\n     % remove negatives from hole comparison as hole is all positive\r\n     mxy=mxy(mxy(:,1)\u003e=0,:); %         Speed option remove all points with neg x values\r\n     mxy=mxy(1,:);           % ***     Speed option remove all points with neg y values\r\n     in=inpolygon(mxy(:,1),mxy(:,2),hxy(:,1),hxy(:,2));\r\n     mxy=mxy(in,:); %    reduce to in-hole points\r\n     cptr=2;\r\n    else % test points from m for additional new fseg constraint and prune\r\n     Lmxy=size(mxy,1);\r\n     vmxy=ones(Lmxy,1); % Valid mxy vector\r\n     for ptrmxy=1:Lmxy\r\n      d2=sum((mxy(ptrmxy,:)-npxy(Node2,:)).^2); % Calc dist squared from mxy to Node2\r\n      if d2\u003cMM(1),vmxy(ptrmxy)=0;end %   clear vmxy for too short\r\n      if d2\u003eMM(2),vmxy(ptrmxy)=0;end %   clear vmxy for too long\r\n     end\r\n     mxy=mxy(vmxy\u003e0,:);\r\n     if isempty(mxy) %If no points left in mxy then vertex could not reach from set nodes\r\n      fail=1;\r\n      break;\r\n     end\r\n    end % cptr==1\r\n   end % fseg 1:nseg\r\n   if fail,continue;end\r\n   \r\n   npxy(node,:)=mxy(1,:); % solution found  are all valid??? Possible seg fail\r\n   \r\n   fprintf('Solution found\\n');\r\n   %hplot4(hxy,npxy,mseg,nseg,4,msegMM);\r\n   return;\r\n       \r\n  end % nphset\r\n end % ipnchk\r\n \r\n fprintf('No solution found\\n');\r\nend %Solve_ICFP047\r\n\r\nfunction msegMM=calc_msegMM(pxy,mseg,epsilon,nseg)\r\n%determine Min and Max integer value of allowed length squared for each segment\r\n%abs(Lsqr(npxy,seg(i))/Lsqr(pxy,seg(i))-1)\u003c= epsilon/1000000.\r\n%mseg has indices of connected vertices [nseg,2].  The nseg may exceed number of vertices.\r\n msegMM=zeros(nseg,2);\r\n for i=1:nseg\r\n  Lseg=sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n  delta=floor(epsilon*Lseg/1000000);\r\n  msegMM(i,:)=[-delta delta]+Lseg;\r\n end\r\nend % calc_msegMM\r\n\r\n\r\n%These routines can be used to read ICFP problems, write ICFP text file, and visualize the data\r\n\r\n% function [epsilon,hxy,pxy,mseg]=read_problem(pid)\r\n%  fid=fopen([num2str(pid) '.problem'],'r');\r\n%   pstr=fgetl(fid);\r\n%  fclose(fid)\r\n%  \r\n%  Lpstr=length(pstr);\r\n%  holidx=findstr('\"hole\":[[',pstr); %starting location match\r\n%  epsidx=findstr('\"epsilon\":',pstr);\r\n%  figidx=findstr(',\"figure\"',pstr);\r\n%  edgidx=findstr('\"edges\":[[',pstr);\r\n%  veridx=findstr('\"vertices\":[[',pstr);\r\n%  epsilon=str2num(pstr(epsidx+10:figidx-1));\r\n%  \r\n%  hxy=reshape(str2num(pstr(holidx+8:epsidx-3)),2,[])';\r\n%  hxy=[hxy;hxy(1,:)]; %repeat row1 to close path\r\n%  \r\n%  pxy=reshape(str2num(pstr(veridx+12:Lpstr-3)),2,[])';\r\n%  \r\n%  mseg=reshape(str2num(pstr(edgidx+9:veridx-3)),2,[])'+1;\r\n% end % read_problem\r\n\r\n% function write_submission(npxy,pid)\r\n%  fname=['Solution_' num2str(pid) '_' datestr(now,'yyyymmdd_HHMMSS') '.txt'];\r\n%  fid=fopen(fname,'wt'); % t for notepad editing\r\n%  \r\n%  %Create ICFP submission\r\n%  fprintf('{\"vertices\": [');\r\n%  fprintf(fid,'{\"vertices\": [');\r\n%  for i=1:size(npxy,1)-1 \r\n%   fprintf('[%i,%i],',npxy(i,:));\r\n%   fprintf(fid,'[%i,%i],',npxy(i,:));\r\n%  end \r\n%  fprintf('[%i,%i]]}\\n',npxy(end,:));\r\n%  fprintf(fid,'[%i,%i]]}\\n',npxy(end,:));\r\n%  fclose(fid);\r\n% end\r\n\r\n\r\n% function hplot(vxy,qxy,mseg,Lmseg,id)\r\n% %Need check of segment crossing a hole segment but ignore endpoint\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1)%length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i),'FontSize',12);\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    if in(mseg(i,1))+in(mseg(i,2))\u003c2\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment to OOB pt\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-')\r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%    \r\n%   axis tight\r\n%   axis ij\r\n%   hold off  \r\n% end % hplot\r\n\r\n% function hplot3(vxy,qxy,mseg,Lmseg,id,segMM)\r\n%  segMNM=[segMM(:,1) segMM(:,1)+segMM(:,2) segMM(:,2)];\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1) %length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i));\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    d2seg=(qxy(mseg(i,1),1)-qxy(mseg(i,2),1))^2+(qxy(mseg(i,1),2)-qxy(mseg(i,2),2))^2;\r\n%    if d2seg\u003csegMNM(i,1)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-') % segment too short\r\n%    elseif d2seg\u003esegMNM(i,3)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment too long\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'g-') \r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%   \r\n%   axis tight\r\n%   axis ij\r\n%   hold off\r\n% end % hplot3\r\n\r\n\r\n","test_suite":"%%\r\n% ICFP Problem  47  \r\n% 75% of hole edges not covered in solution. All hole vertices covered.\r\n% possible method force longest fig segment onto pair hole vertices then perms\r\n% brute force processing will take 180 seconds so not part of this cody challenge\r\ntic\r\n% ICFP Problem Id 47\r\n% nh 10  np 11\r\nepsilon=41323;\r\nhxy=[6 14;36 19;40 17;69 0;79 21;41 36;36 33;16 44;7 34;0 28;6 14];\r\npxy=[0 11;1 85;8 56;11 0;14 45;14 59;14 88;30 37;30 56;56 85;67 64];\r\nmseg=[1 4;4 8;8 5;5 1;8 11;11 10;10 9;9 8;5 6;6 9;9 7;7 2;2 6;6 3;3 5];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_ICFP047(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\ntoc\r\nassert(isequal(valid,1))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2021-07-21T17:55:33.000Z","updated_at":"2021-07-22T01:54:06.000Z","published_at":"2021-07-22T01:54:06.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.icfpconference.org/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e held its annual 3-day contest in July 2021 with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eHole-In-Wall\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Contest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest folds the figure in Red to fit within the hole shown in light grey. A final solution is shown to aid in programming. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"262\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"541\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"top\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to solve ICFP problems 47 according to the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. Brute force of  problem 47 may take 180 seconds due to the 10 hole vertices.\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\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52308\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eScore\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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\u003enpxy=Solve_ICFP047(hxy, pxy, mseg, epsilon)\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:t\u003eThis challenge requires a Score of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one. One method would be to reduce the nchoosek to force the longest figure segment to fit across a pair of hole vertices.  This problem with its solution shown shows that a recursive point to available hole vertices could be a more general solution.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/register\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRegister Team\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Anyone can select \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/problems\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblems Page\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":42290,"title":"GJam 2015 Rd1B: Noisy Neighbors","description":"This Challenge is derived from \u003chttps://code.google.com/codejam/contest/8224486/dashboard#s=p1 GJam 2015 Rd 1B: Noisy Neighbors\u003e. Fastest completion - 8 minutes.\r\n\r\nDetermine minimum number of adjacencies for N placed people in an RxC hotel matrix\r\n\r\nInput: m, an RxC zeros array; N number of rooms to be filled\r\n\r\nOutput: NN, minimum number of common walls\r\n\r\nExamples: Small Case 1\u003c=R*C\u003c=16, 0\u003c=N\u003c=R*C\r\n\r\n  [1 1 1;1 0 1;1 1 1] has minimum 8 common walls vs [1 1 1;1 1 1;1 1 0] has 10 common\r\n  [1;0;0;1] has 0 common walls\r\n  ones(2,3) has 7 common walls\r\n\r\n\r\nTheory: The small case can be solved with brute force using vector set with nchoosek followed by processing of convolutions. The large case has 10000 rooms making brute force hopeless.\r\n\r\n\r\nAdditional GJam solutions can be found at \u003chttp://www.go-hero.net/jam/15 Example GJam Matlab solutions\u003e. Select Find Solutions, change Language to Matlab. The Test Suite, at the bottom, contains a full GJam Matlab solution.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"https://code.google.com/codejam/contest/8224486/dashboard#s=p1\"\u003eGJam 2015 Rd 1B: Noisy Neighbors\u003c/a\u003e. Fastest completion - 8 minutes.\u003c/p\u003e\u003cp\u003eDetermine minimum number of adjacencies for N placed people in an RxC hotel matrix\u003c/p\u003e\u003cp\u003eInput: m, an RxC zeros array; N number of rooms to be filled\u003c/p\u003e\u003cp\u003eOutput: NN, minimum number of common walls\u003c/p\u003e\u003cp\u003eExamples: Small Case 1\u0026lt;=R*C\u0026lt;=16, 0\u0026lt;=N\u0026lt;=R*C\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 1 1;1 0 1;1 1 1] has minimum 8 common walls vs [1 1 1;1 1 1;1 1 0] has 10 common\r\n[1;0;0;1] has 0 common walls\r\nones(2,3) has 7 common walls\r\n\u003c/pre\u003e\u003cp\u003eTheory: The small case can be solved with brute force using vector set with nchoosek followed by processing of convolutions. The large case has 10000 rooms making brute force hopeless.\u003c/p\u003e\u003cp\u003eAdditional GJam solutions can be found at \u003ca href = \"http://www.go-hero.net/jam/15\"\u003eExample GJam Matlab solutions\u003c/a\u003e. Select Find Solutions, change Language to Matlab. The Test Suite, at the bottom, contains a full GJam Matlab solution.\u003c/p\u003e","function_template":"function NN = Noisy_Neighbors(m,N)\r\n% m is an RxC zeros array\r\n% N is number of cells to be occupied\r\n% NN is number of edge adjacencies\r\n% Goal is to minimize NN\r\n\r\n  NN=0;\r\nend","test_suite":"tic\r\n%%\r\nm=zeros(5,2);N=8;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=14;\r\nNNexp=18;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(8,2);N=12;\r\nNNexp=10;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,3);N=6;\r\nNNexp=3;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,6);N=12;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=5;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=11;\r\nNNexp=8;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(7,2);N=13;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=15;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=9;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=12;\r\nNNexp=17;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=13;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,4);N=5;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=5;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=16;\r\nNNexp=15;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,5);N=8;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=10;\r\nNNexp=6;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=9;\r\nNNexp=3;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,2);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=15;\r\nNNexp=20;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,2);N=4;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=11;\r\nNNexp=8;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=9;\r\nNNexp=1;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=16;\r\nNNexp=24;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=9;\r\nNNexp=1;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=15;\r\nNNexp=22;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,5);N=9;\r\nNNexp=10;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=10;\r\nNNexp=6;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=15;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,2);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,2);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,7);N=13;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,3);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(7,2);N=11;\r\nNNexp=10;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,1);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,6);N=9;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=3;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=15;\r\nNNexp=22;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,2);N=6;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,4);N=12;\r\nNNexp=17;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,3);N=6;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,1);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=16;\r\nNNexp=15;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,2);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,3);N=9;\r\nNNexp=12;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(9,1);N=6;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=12;\r\nNNexp=11;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,2);N=3;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(7,2);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,3);N=4;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=9;\r\nNNexp=3;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,4);N=6;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=12;\r\nNNexp=11;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=3;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,13);N=9;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,9);N=6;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(6,2);N=12;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=8;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=5;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=14;\r\nNNexp=18;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=7;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(6,2);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=13;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\ntoc\r\n%%\r\n% function GJam_Rd1B_2015b\r\n%  fn='B-small-practice.in';\r\n%  [data] = read_file(fn); % \r\n%  fidG = fopen('B-small-practice.out', 'w');\r\n%  \r\n% tic\r\n% for i=1:size(data,2) % Cell array has N cols of cases\r\n%  NN = Noisy_Neighbors(data{i});\r\n%  fprintf(fidG,'Case #%i: %i\\n',i,NN);\r\n%  \r\n%  fprintf('Case #%i: %i\\n',i,NN);   \r\n% end\r\n% toc\r\n% fclose(fidG);\r\n% end\r\n% \r\n% function val=Noisy_Neighbors(v)\r\n%  r=v(1);c=v(2);N=v(3);\r\n%  m=zeros(r,c);\r\n%  if N==0\r\n%   val=0;\r\n%   return;\r\n%  end\r\n%  \r\n% ptrset=find(m==0);\r\n% \r\n% val=Inf;\r\n% tlocs=nchoosek(ptrset,N);\r\n% for i=1:size(tlocs,1)\r\n%  m=m*0;\r\n%  tlocv=tlocs(i,:);\r\n%  m(tlocv)=1;\r\n%  vchk=nnz(conv2(m,[1 1])==2)+nnz(conv2(m,[1;1])==2);\r\n%  \r\n%  if vchk\u003cval\r\n%   val=vchk;\r\n%  end\r\n%  if val==0,break;end;\r\n% end\r\n%  \r\n% end\r\n% \r\n% function [d] = read_file(fn)\r\n% d={};\r\n% fid=fopen(fn);\r\n% fgetl(fid); % Total Count ignore\r\n% ptr=0;\r\n% while ~feof(fid)\r\n%  ptr=ptr+1;\r\n%  v=str2num(fgetl(fid)); % r,c,N\r\n%  \r\n%  d{ptr}=v;\r\n%  \r\n% end % feof\r\n%  fclose(fid);\r\n% \r\n% end % read_file\r\n%%\r\ntoc\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":5,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":10,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-05-03T17:57:59.000Z","updated_at":"2015-05-03T18:31:40.000Z","published_at":"2015-05-03T18:31:40.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://code.google.com/codejam/contest/8224486/dashboard#s=p1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2015 Rd 1B: Noisy Neighbors\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Fastest completion - 8 minutes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine minimum number of adjacencies for N placed people in an RxC hotel matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: m, an RxC zeros array; N number of rooms to be filled\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: NN, minimum number of common walls\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples: Small Case 1\u0026lt;=R*C\u0026lt;=16, 0\u0026lt;=N\u0026lt;=R*C\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 1 1;1 0 1;1 1 1] has minimum 8 common walls vs [1 1 1;1 1 1;1 1 0] has 10 common\\n[1;0;0;1] has 0 common walls\\nones(2,3) has 7 common walls]]\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\u003eTheory: The small case can be solved with brute force using vector set with nchoosek followed by processing of convolutions. The large case has 10000 rooms making brute force hopeless.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAdditional GJam solutions can be found at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.go-hero.net/jam/15\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eExample GJam Matlab solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Select Find Solutions, change Language to Matlab. The Test Suite, at the bottom, contains a full GJam Matlab solution.\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":44779,"title":"Don't be mean.  Be nice!","description":"For this problem, you will be given a range of single digits R, and a separate number K.  You job is to calculate the mean of all K digit numbers that contain only distinct digits from the range R.\r\n\r\nFor example, if R=1:4 and K=2, you should calculate the mean of 12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, and 43, as these are all of the two digit numbers that contain two distinct numbers from the range 1:4.  The numbers 11, 22, 33 and 44 are not included, as they contain multiple copies of the same digit.\r\n\r\nIf 0 is included in R, it should not be a leading digit for any of the numbers, so an R of 0:2 and K=3 would include:\r\n\r\n* 120\r\n* 210\r\n* 201\r\n* 102\r\n\r\nbut not 012 or 021 for the purposes of this calculation.\r\n\r\nYou can assume that R will always have at least K digits, and there will be no repeating digits in R.","description_html":"\u003cp\u003eFor this problem, you will be given a range of single digits R, and a separate number K.  You job is to calculate the mean of all K digit numbers that contain only distinct digits from the range R.\u003c/p\u003e\u003cp\u003eFor example, if R=1:4 and K=2, you should calculate the mean of 12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, and 43, as these are all of the two digit numbers that contain two distinct numbers from the range 1:4.  The numbers 11, 22, 33 and 44 are not included, as they contain multiple copies of the same digit.\u003c/p\u003e\u003cp\u003eIf 0 is included in R, it should not be a leading digit for any of the numbers, so an R of 0:2 and K=3 would include:\u003c/p\u003e\u003cul\u003e\u003cli\u003e120\u003c/li\u003e\u003cli\u003e210\u003c/li\u003e\u003cli\u003e201\u003c/li\u003e\u003cli\u003e102\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ebut not 012 or 021 for the purposes of this calculation.\u003c/p\u003e\u003cp\u003eYou can assume that R will always have at least K digits, and there will be no repeating digits in R.\u003c/p\u003e","function_template":"function y = dont_be_mean(R,k)\r\n  y = k.^R;\r\nend","test_suite":"%%\r\nR=1:4;k=2;y_correct = 27.5;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=0:8;k=3;y_correct = 493.3125;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=[1 2 4 6 8];k=4;y_correct = 4666.2;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=[2 8 6 7 4 5];k=1;y_correct = 5.33333333333333;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=0:9;\r\ny=0;\r\nfor k=1:8\r\n    y=y+dont_be_mean(R,k);\r\nend\r\ny_correct=61042519.44444444;\r\nassert(abs(y-y_correct)\u003c1e-3)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":1615,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":37,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":68,"created_at":"2018-11-07T18:32:08.000Z","updated_at":"2026-03-07T15:13:39.000Z","published_at":"2018-11-07T18:32:08.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\u003eFor this problem, you will be given a range of single digits R, and a separate number K. You job is to calculate the mean of all K digit numbers that contain only distinct digits from the range R.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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, if R=1:4 and K=2, you should calculate the mean of 12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, and 43, as these are all of the two digit numbers that contain two distinct numbers from the range 1:4. The numbers 11, 22, 33 and 44 are not included, as they contain multiple copies of the same digit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf 0 is included in R, it should not be a leading digit for any of the numbers, so an R of 0:2 and K=3 would include:\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\u003e120\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\u003e210\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\u003e201\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\u003e102\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ebut not 012 or 021 for the purposes of this calculation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou can assume that R will always have at least K digits, and there will be no repeating digits in R.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42765,"title":"Maximize Non-Co-Planar Points in an N-Cube","description":"This Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\r\n\r\n  N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\n  N=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\r\nOutput is a Qx3 matrix of the non-co-planar points.\r\n\r\nReference: The \u003chttp://68.173.157.131/Contest/Tetrahedra March 2016 Al Zimmermann Non-Coplanar contest\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\r\n\r\nTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003chttp://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar Cody Co-Planar Check\u003e may improve speed. ","description_html":"\u003cp\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eN=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\u003c/pre\u003e\u003cp\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/p\u003e\u003cp\u003eReference: The \u003ca href = \"http://68.173.157.131/Contest/Tetrahedra\"\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/a\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/p\u003e\u003cp\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\"\u003eCody Co-Planar Check\u003c/a\u003e may improve speed.\u003c/p\u003e","function_template":"function m=MaxNonCoplanarPts(N,Q);\r\n% Place Q or more points in an 0:N-1 #D grid such that each plane created uses only 3 points from the set provided\r\n% N is Cube size\r\n% Q is expected number of points in solution\r\n% Hint: Point [0,0,0] can be assumed to be in the solution for N=2 and N=3\r\n% N=3 is the 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n  m=[];\r\nend","test_suite":"%%\r\nN=2;\r\nQ=5;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n%%\r\nN=3;\r\nQ=8;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-03-07T00:22:02.000Z","updated_at":"2016-03-07T01:01:33.000Z","published_at":"2016-03-07T01:01:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar. Given the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReference: The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://68.173.157.131/Contest/Tetrahedra\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody Co-Planar Check\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e may improve speed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":793,"title":"Combinations without using nchoosek","description":"You have to generate a matrix with all possible combinations of n elements *taken 2* at a time, *without using nchoosek(1:n,2)* :\r\n\r\nExamples\r\n\r\nif  n = 3\r\n\r\noutput =\r\n\r\n       1     2\r\n       1     3\r\n       2     3\r\n\r\n\r\nif n = 5\r\n\r\n  output = \r\n  \r\n       1     2\r\n       1     3\r\n       1     4\r\n       1     5\r\n       2     3\r\n       2     4\r\n       2     5\r\n       3     4\r\n       3     5\r\n       4     5\r\n\r\n\r\nGood luck!!","description_html":"\u003cp\u003eYou have to generate a matrix with all possible combinations of n elements \u003cb\u003etaken 2\u003c/b\u003e at a time, \u003cb\u003ewithout using nchoosek(1:n,2)\u003c/b\u003e :\u003c/p\u003e\u003cp\u003eExamples\u003c/p\u003e\u003cp\u003eif  n = 3\u003c/p\u003e\u003cp\u003eoutput =\u003c/p\u003e\u003cpre\u003e       1     2\r\n       1     3\r\n       2     3\u003c/pre\u003e\u003cp\u003eif n = 5\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eoutput = \r\n\u003c/pre\u003e\u003cpre\u003e       1     2\r\n       1     3\r\n       1     4\r\n       1     5\r\n       2     3\r\n       2     4\r\n       2     5\r\n       3     4\r\n       3     5\r\n       4     5\u003c/pre\u003e\u003cp\u003eGood luck!!\u003c/p\u003e","function_template":"function output = your_fcn_name(n)\r\n  output = n;\r\nend","test_suite":"%%\r\nn = 3;\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\n% Prevents cheating \r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))\r\n\r\n%%\r\nn = 25;\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))\r\n\r\n%%\r\nn = 112;\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))\r\n\r\n%% \r\nn = 2\r\ny_correct = nchoosek(1:n,2);\r\nassert(isequal(your_fcn_name(n),y_correct))\r\nfiletext = fileread('your_fcn_name.m')\r\nassert(isempty(strfind(filetext, 'nchoosek')))","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":639,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":137,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-27T08:25:23.000Z","updated_at":"2026-02-08T19:33:07.000Z","published_at":"2012-06-27T08:25: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\":[],\"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\u003eYou have to generate a matrix with all possible combinations of n elements\u003c/w:t\u003e\u003c/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\u003etaken 2\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e at a time,\u003c/w:t\u003e\u003c/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\u003ewithout using nchoosek(1:n,2)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e :\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eif n = 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\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[       1     2\\n       1     3\\n       2     3]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eif n = 5\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[output = \\n\\n       1     2\\n       1     3\\n       1     4\\n       1     5\\n       2     3\\n       2     4\\n       2     5\\n       3     4\\n       3     5\\n       4     5]]\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\u003eGood luck!!\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":1913,"title":"GJam 2013 Veterans: Ocean View (Small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/2334486/dashboard#s=p2 GJam 2013 Veterans Ocean View\u003e. This is the Small data set witn N\u003c=50 and Q\u003c=4, guaranteed.\r\n\r\nThe GJam story goes that as Supreme Ruler you are annoyed by complaints of non-ocean views on a hillside. To resolve the issue a minimum number of homes will be removed to provide a maximum number of ocean view homes. The Elevation of the homes should monotonically increase, no equal values, from element 1 thru the end.\r\n\r\n*Succinct Challenge statement:* Given a vector create the maximum length monotonically increasing vector by removing values. Report the number of values removed.\r\n\r\n*Input:* V , Vector length N\u003c=50 with values 1 thru 1000.\r\n\r\n*Output:* Q , minimum quantity of removed values to produce a valid vector [0:4]\r\n\r\n*Examples:* [V] [Q]\r\n\r\n  [1 4 3 3] [2]  for [1 4] or [1 3]\r\n  [1 2 3 4 5] [0]\r\n  [4 3 2 1] [3]\r\n\r\n*Commentary:*\r\n\r\n  1) The GJam Small test suite is not robust\r\n  2) nchoosek(50,4) is too slow for Cody and the 100 cases\r\n  3) The Large test suite is N\u003c=1000 with some delete cases \u003e4\r\n  4) A Good Algorithm that solves the Large case is usually best to pursue\r\n  5) GJam Competition allows one Large submission within 10 minutes of download \r\n  6) \u003cLarge Suite Challenge\u003e","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/2334486/dashboard#s=p2\"\u003eGJam 2013 Veterans Ocean View\u003c/a\u003e. This is the Small data set witn N\u0026lt;=50 and Q\u0026lt;=4, guaranteed.\u003c/p\u003e\u003cp\u003eThe GJam story goes that as Supreme Ruler you are annoyed by complaints of non-ocean views on a hillside. To resolve the issue a minimum number of homes will be removed to provide a maximum number of ocean view homes. The Elevation of the homes should monotonically increase, no equal values, from element 1 thru the end.\u003c/p\u003e\u003cp\u003e\u003cb\u003eSuccinct Challenge statement:\u003c/b\u003e Given a vector create the maximum length monotonically increasing vector by removing values. Report the number of values removed.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e V , Vector length N\u0026lt;=50 with values 1 thru 1000.\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Q , minimum quantity of removed values to produce a valid vector [0:4]\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e [V] [Q]\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 4 3 3] [2]  for [1 4] or [1 3]\r\n[1 2 3 4 5] [0]\r\n[4 3 2 1] [3]\r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eCommentary:\u003c/b\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) The GJam Small test suite is not robust\r\n2) nchoosek(50,4) is too slow for Cody and the 100 cases\r\n3) The Large test suite is N\u0026lt;=1000 with some delete cases \u003e4\r\n4) A Good Algorithm that solves the Large case is usually best to pursue\r\n5) GJam Competition allows one Large submission within 10 minutes of download \r\n6) \u0026lt;Large Suite Challenge\u003e\r\n\u003c/pre\u003e","function_template":"function Q = Monotonic_V(vin)\r\n  Q=0;\r\nend","test_suite":"%%\r\ntic\r\nvin=[4 33 36 47 63 79 146 159 176 191 178 215 226 228 261 262 291 295 322 368 456 461 465 473 479 500 512 527 570 572 613 639 641 654 667 684 699 701 746 751 763 767 786 819 872 925 932 959 965 972 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 33 63 78 82 85 92 101 113 125 138 175 183 196 211 224 250 287 345 368 388 426 447 477 491 504 524 575 579 581 621 694 712 720 737 745 747 784 793 802 813 827 829 853 858 919 924 929 939 960 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[19 19 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 35 63 72 76 122 103 171 185 221 238 294 318 325 341 355 350 359 365 407 409 438 467 514 548 592 585 599 606 636 646 652 697 708 737 770 773 798 819 832 835 849 881 879 893 904 907 932 967 983 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 72 94 114 136 147 177 185 199 216 214 230 243 252 264 417 285 426 428 445 450 463 465 467 482 485 495 531 537 547 575 558 598 654 677 678 692 685 785 853 891 894 897 905 906 910 918 933 963 979 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[21 18 33 53 158 179 200 225 230 259 261 262 280 319 338 368 369 376 423 449 481 505 517 531 545 588 598 614 607 615 647 655 657 684 702 706 734 756 768 791 806 792 834 889 895 896 957 960 971 995 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[52 53 66 83 119 129 132 145 202 237 274 281 284 296 298 326 442 386 451 456 475 476 486 493 499 520 523 525 589 605 612 626 630 638 694 718 740 763 791 798 800 801 811 839 868 874 895 891 971 984 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 9 21 43 89 106 117 141 150 211 158 220 233 282 296 311 324 353 372 376 407 452 414 455 482 494 503 522 527 531 545 548 552 563 568 586 593 629 673 691 682 703 724 738 787 822 861 882 907 937 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 51 80 105 109 114 129 154 175 167 188 198 227 266 270 437 345 446 459 469 470 478 479 520 582 587 591 611 618 619 658 677 670 683 686 689 710 758 728 815 821 852 870 912 937 946 960 969 985 998 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 34 65 81 83 91 105 114 125 127 132 162 154 176 198 201 222 269 272 296 297 321 345 355 377 402 403 407 444 454 450 493 517 533 546 589 592 593 639 698 700 729 764 798 785 850 909 917 950 988 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[30 94 106 118 125 136 151 161 162 176 233 240 272 290 320 337 347 352 370 433 412 499 504 510 513 572 593 621 629 640 646 710 712 721 735 741 750 786 804 812 814 817 822 844 893 932 944 945 954 972 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 5 6 1 7 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1000 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[25 37 40 56 62 81 86 136 95 140 225 228 274 236 297 332 417 516 545 549 573 582 583 595 600 601 603 624 673 699 714 716 719 720 746 737 762 790 802 814 821 835 852 868 860 871 899 910 923 984 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1000 1000 1000 1000 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 15 42 44 68 69 108 109 126 120 145 148 154 176 199 221 245 266 271 299 325 309 326 411 514 518 552 568 589 607 663 692 723 711 746 754 771 776 780 818 840 843 858 868 878 882 883 904 906 975 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[17 13 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 21 82 107 99 135 136 144 174 183 211 222 259 283 304 333 348 353 366 399 412 491 512 507 526 557 590 593 613 619 634 663 683 689 710 714 719 720 738 754 807 832 885 880 932 934 941 984 990 996 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[5 37 46 52 54 79 125 140 192 294 318 323 333 343 346 354 360 361 372 403 414 435 445 454 471 480 482 503 514 527 583 624 645 632 726 746 760 764 771 791 801 803 812 819 846 885 893 956 976 1000 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 12 36 45 50 101 113 119 131 168 237 250 254 261 281 324 343 401 421 437 442 499 500 501 512 522 523 529 532 545 561 585 586 590 623 679 695 782 798 823 830 843 852 878 891 902 923 922 972 981 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 23 111 61 127 138 144 147 174 194 261 262 279 272 288 318 350 356 396 425 439 441 454 466 473 487 482 590 615 617 632 637 662 688 699 704 734 780 800 803 814 808 828 843 868 922 943 985 987 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[49 73 118 140 194 202 218 249 261 342 272 347 355 403 438 462 466 469 473 488 499 511 514 515 525 532 538 545 588 665 610 707 714 719 716 723 739 751 763 789 809 868 874 899 916 937 939 947 979 994 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 14 67 76 98 107 125 150 151 194 244 248 251 270 289 271 309 354 434 453 468 454 484 487 507 523 526 569 578 601 624 684 690 696 725 752 765 800 813 815 826 906 888 948 963 970 984 993 996 1000 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[15 57 92 105 110 172 125 182 202 213 233 263 282 291 289 293 353 404 421 440 447 469 491 495 504 498 505 543 549 579 597 633 655 671 693 748 768 801 798 811 838 858 859 865 883 889 901 945 959 964 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[30 61 112 126 137 147 154 158 224 266 282 294 303 307 328 320 377 379 391 411 430 423 446 453 461 463 468 493 517 531 536 546 588 613 667 643 683 684 712 722 784 821 848 889 900 919 921 928 931 1000 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[34 18 92 103 108 110 143 200 248 283 284 297 326 365 369 400 439 470 489 498 526 593 596 605 631 684 720 687 754 770 781 793 803 826 811 855 863 886 888 901 916 928 943 954 968 972 982 983 984 987 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 24 74 48 137 172 199 209 224 227 234 293 297 305 324 336 338 377 418 395 432 437 446 474 505 510 529 536 541 568 613 641 645 695 677 735 792 797 805 830 853 869 882 883 888 925 910 970 982 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[25 39 54 55 57 101 117 124 142 143 185 161 196 210 214 237 243 267 282 288 304 394 435 427 458 491 509 519 550 557 582 607 608 634 652 640 681 705 695 753 785 840 871 889 903 912 918 921 966 987 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[30 75 123 160 156 176 202 215 254 264 310 318 354 368 390 435 453 457 474 476 479 510 529 532 603 623 635 637 644 671 686 706 723 725 726 730 732 767 806 807 829 852 869 902 897 912 927 957 994 996 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[40 44 45 46 121 89 141 155 167 179 207 226 263 265 327 337 338 364 373 453 456 478 512 537 543 561 568 577 637 604 641 648 672 687 697 709 701 737 789 808 813 819 820 828 835 911 921 938 947 964 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[40 42 43 60 63 70 78 124 103 131 133 149 161 164 170 227 232 260 266 275 316 323 368 335 372 377 413 418 420 441 553 463 574 576 643 656 665 678 733 741 743 815 762 883 908 928 930 968 974 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[16 78 79 134 151 219 224 240 251 280 295 388 406 483 489 505 507 534 538 539 549 554 555 564 573 583 609 660 672 681 687 711 732 738 745 746 783 792 812 834 837 841 887 866 908 957 961 978 987 994 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[18 20 33 34 35 54 94 123 140 162 169 220 205 250 258 278 299 320 349 362 397 434 492 449 499 504 508 515 531 552 606 647 652 678 695 703 714 735 763 785 836 799 854 858 863 864 929 933 960 984 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 17 37 50 66 96 99 155 107 184 218 257 260 279 285 327 332 337 354 369 398 430 423 437 574 631 656 660 668 676 680 700 709 750 747 761 789 774 813 857 860 886 898 904 949 952 964 976 984 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 78 23 90 101 106 132 141 146 191 206 222 244 270 304 325 332 379 383 392 401 412 417 436 454 465 487 551 499 553 557 562 570 581 613 650 682 691 732 781 782 789 814 816 844 890 965 971 986 998 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[20 65 69 128 131 157 173 175 211 194 216 229 266 278 286 292 320 335 377 358 423 424 463 472 529 531 545 553 557 576 589 585 601 613 657 672 699 711 725 786 789 810 897 923 936 960 996 969 997 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[19 54 61 67 119 131 153 167 178 199 197 246 256 273 329 321 348 350 353 392 394 402 413 486 511 530 515 539 569 582 586 594 686 763 819 821 829 840 832 848 858 864 870 904 933 944 947 952 967 998 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 40 106 68 118 132 148 162 180 182 200 207 246 283 287 288 320 295 321 325 338 343 349 362 364 371 378 418 503 535 554 562 568 571 577 587 682 699 760 709 769 844 920 938 941 948 960 973 977 983 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[19 38 43 45 67 75 150 154 173 178 184 189 254 227 278 282 289 315 297 365 373 396 403 505 509 513 521 555 580 583 600 614 643 649 667 678 695 722 732 761 801 824 805 841 879 894 915 926 930 975 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[56 65 94 119 149 165 157 166 198 220 297 302 305 316 321 327 351 347 359 368 380 386 387 403 431 447 448 449 463 528 533 556 562 590 634 610 640 658 693 750 786 759 792 800 825 842 864 889 911 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[5 11 40 95 110 134 138 160 187 208 228 210 240 278 352 354 381 390 414 503 440 507 513 526 528 534 540 543 570 604 609 613 625 632 647 653 658 661 668 708 718 780 846 855 862 860 891 910 936 949 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[6 57 71 73 100 112 134 165 173 189 190 194 197 227 239 229 246 252 278 288 316 319 371 393 450 462 521 585 567 620 625 636 654 689 675 694 701 716 720 741 743 746 820 868 873 879 935 938 979 989 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[5 50 77 74 113 128 129 169 173 179 201 210 228 236 242 251 255 262 279 283 301 369 373 387 380 412 417 441 444 459 476 492 493 532 541 574 644 646 665 720 728 773 802 810 821 853 849 860 912 964 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[10 21 84 97 107 109 123 120 128 137 143 161 254 266 278 301 307 315 361 389 395 408 492 517 549 584 551 597 602 603 618 648 653 657 658 682 723 753 790 799 820 824 831 844 855 866 858 894 916 918 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 4 3 3 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[22 43 49 54 80 84 104 107 149 171 180 197 210 226 312 340 347 356 363 387 407 420 439 463 478 465 485 499 568 590 598 627 646 654 656 675 693 707 760 761 776 798 840 853 856 909 929 947 951 984 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[49 60 70 76 80 96 144 161 203 269 274 296 343 346 400 359 401 428 430 451 454 455 477 480 500 506 522 591 573 598 653 655 657 733 748 736 763 771 784 813 835 855 869 894 920 932 948 956 981 986 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 4 6 7 10 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[26 37 95 122 117 149 183 194 195 239 245 253 272 285 287 330 300 335 349 371 380 390 401 421 489 426 519 521 538 598 626 640 645 665 685 698 704 712 723 791 822 834 859 860 920 900 960 977 986 997 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[70 76 80 97 102 105 113 157 141 161 163 217 251 295 310 320 323 350 355 357 390 391 397 422 428 460 486 472 487 536 570 579 631 665 666 676 681 683 690 693 705 726 813 819 821 850 874 916 935 999 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[51 58 63 80 90 120 157 164 172 190 208 259 278 336 324 348 368 374 379 383 426 436 446 506 536 553 569 589 591 596 637 607 645 708 716 725 735 741 745 764 773 831 884 853 902 905 956 978 982 997 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[33 40 65 72 122 84 130 137 156 227 255 314 333 335 343 345 350 372 373 374 387 417 404 422 433 469 470 495 499 532 571 580 603 630 622 653 660 681 698 752 801 808 816 836 859 889 909 931 961 962 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[28 42 34 53 59 87 98 141 143 158 188 221 317 319 324 351 346 359 374 390 393 407 430 458 485 488 502 514 559 567 595 598 596 610 629 631 647 719 699 759 769 782 803 805 907 928 934 943 983 987 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[59 61 82 96 100 160 176 194 242 223 259 266 275 282 318 328 357 349 367 370 376 409 416 442 447 475 489 504 507 553 598 603 637 616 684 710 722 712 756 776 783 784 806 814 833 847 879 922 973 992 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 87 98 120 173 139 184 187 214 222 276 310 333 348 356 364 376 382 401 461 422 475 501 509 524 575 579 588 594 596 622 624 652 683 699 751 737 781 827 831 844 863 868 875 892 909 910 975 977 980 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[119 152 207 221 215 245 250 257 269 327 336 345 370 371 382 404 408 440 443 448 458 492 498 509 609 580 614 620 623 653 692 709 713 723 743 760 770 812 784 814 830 862 875 877 916 926 932 947 963 984 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[6 25 46 48 85 102 114 126 179 223 233 238 243 294 276 330 338 386 349 387 418 423 434 463 470 474 487 523 546 559 591 634 667 671 681 696 739 752 772 791 808 830 840 873 862 882 959 965 978 995 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 35 39 58 88 73 89 108 143 186 196 243 253 270 297 271 349 358 368 369 402 420 453 459 464 489 499 568 607 646 653 705 710 712 717 716 721 780 743 793 826 849 916 918 947 950 958 959 961 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 57 88 92 162 186 187 268 297 307 310 342 332 368 391 402 408 422 435 487 447 522 530 535 546 558 571 574 594 628 631 648 651 660 664 675 693 707 715 738 718 762 794 851 853 854 870 902 935 980 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[16 36 61 88 110 205 120 230 243 264 265 270 297 313 316 317 342 346 391 368 401 411 441 472 574 584 587 591 605 645 618 670 675 693 695 736 741 796 804 801 811 824 829 884 915 929 934 984 989 990 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[27 41 59 70 96 145 149 175 274 264 278 297 298 358 361 392 403 413 432 444 480 498 520 542 544 622 626 631 636 641 692 704 715 736 740 805 818 823 828 856 865 875 890 891 913 931 941 966 977 991 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[39 44 48 56 62 94 105 109 195 210 199 211 223 272 311 317 419 435 446 448 467 472 492 483 536 540 609 610 646 638 710 719 740 781 795 798 814 835 858 861 869 876 903 913 936 931 948 965 968 999 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[17 19 42 49 88 94 130 149 215 250 251 288 297 326 334 335 344 372 377 411 406 425 429 436 440 478 488 496 550 554 560 578 585 594 603 607 608 610 631 796 813 820 850 901 937 979 955 989 990 997 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 5 7 21 26 52 128 154 168 192 195 209 225 282 227 284 352 355 363 395 406 432 443 478 501 513 553 577 625 624 658 672 696 699 733 739 750 760 768 817 822 861 869 870 883 913 978 931 993 994 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 18 20 78 110 111 114 117 123 126 138 180 198 214 235 250 286 316 335 409 422 475 476 525 527 593 615 634 657 672 664 682 711 727 729 740 761 781 790 820 837 840 842 853 868 896 971 981 986 995 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 17 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[8 4 42 77 104 141 158 169 192 217 234 244 340 356 343 367 374 393 427 430 433 468 475 477 481 483 507 526 549 557 609 616 611 644 645 678 695 704 758 745 772 794 803 806 825 836 841 858 885 943 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[15 49 77 101 107 140 129 151 156 158 185 219 224 235 236 243 264 271 302 304 329 335 346 435 436 453 472 479 480 496 563 568 571 591 633 673 651 712 718 741 765 775 782 815 859 893 912 918 935 988 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[26 69 77 115 121 141 151 217 243 244 275 293 301 309 313 341 345 366 365 372 391 398 510 516 518 520 542 522 553 572 652 657 660 661 674 705 717 723 789 799 810 849 856 859 876 900 906 942 996 1000 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[7 26 40 48 55 100 118 139 205 246 235 248 269 292 297 356 361 372 393 403 417 435 491 533 544 555 569 572 582 599 597 636 676 692 730 702 758 767 802 807 808 850 884 889 903 911 912 946 968 975 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[13 48 100 115 131 180 204 205 214 218 247 284 316 289 335 362 382 391 399 403 410 468 469 546 479 550 559 571 592 603 647 654 735 746 751 768 796 795 808 853 859 881 882 905 936 938 941 949 968 981 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[23 57 72 82 90 121 131 165 149 228 243 252 274 285 289 290 306 349 366 385 399 394 405 464 473 530 562 568 604 665 684 693 741 759 797 800 804 805 860 861 866 881 872 885 891 904 905 972 985 995 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[84 29 96 105 134 147 175 179 224 238 255 263 281 290 295 331 332 357 366 406 422 427 442 474 495 509 510 578 606 613 635 665 676 695 714 719 722 726 732 816 819 820 886 915 957 972 975 984 985 991 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 61 76 82 106 122 128 142 136 164 182 183 251 263 332 325 334 385 400 402 410 446 490 504 508 556 571 609 623 629 638 644 660 709 694 714 726 776 793 794 834 842 847 857 899 901 944 919 990 997 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[3 28 34 47 37 66 116 143 171 213 235 247 309 320 351 330 370 386 397 415 416 474 484 495 512 513 522 572 594 642 681 643 689 707 732 756 760 773 777 799 795 800 830 840 853 866 867 899 951 975 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 12 16 63 79 82 104 121 109 123 141 152 164 208 243 277 327 358 363 382 410 451 483 502 516 524 590 630 633 657 687 658 696 703 706 739 745 761 774 769 780 841 872 880 883 926 929 954 956 986 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 10 17 73 102 122 188 246 252 299 318 325 336 338 343 363 388 401 402 410 419 425 433 435 463 524 535 567 590 637 671 677 698 716 752 753 773 779 797 874 893 896 895 918 921 923 928 940 957 969 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[41 53 50 80 104 122 127 131 148 171 198 235 254 258 299 300 312 334 355 390 404 442 424 445 469 509 545 544 598 639 647 651 653 692 702 747 800 810 822 826 865 868 871 921 938 942 949 948 960 965 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[51 60 84 94 114 121 125 128 138 134 178 192 195 252 277 328 342 333 418 419 462 482 512 550 578 582 584 607 611 612 614 636 680 659 714 733 735 736 743 783 791 792 798 824 864 879 866 910 951 961 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 ];\r\nvexp=[0 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[29 55 33 60 118 148 253 278 287 289 308 337 339 350 359 385 392 398 417 420 462 511 555 568 587 596 602 643 655 670 692 700 696 734 766 770 793 817 818 855 859 874 884 897 911 915 920 923 938 999 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[9 22 26 48 38 98 110 132 135 156 160 163 180 220 262 266 283 292 316 311 335 363 411 412 424 436 484 502 540 541 571 545 572 585 610 633 656 679 743 764 754 812 814 870 880 902 949 964 985 997 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[4 3 2 1 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[10 23 27 39 56 73 125 164 171 184 195 209 213 232 244 260 264 447 459 465 478 486 519 520 543 554 556 570 579 586 595 596 621 637 644 673 657 677 678 680 688 704 754 763 880 891 910 912 942 984 ];\r\nvexp=[1 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[18 16 37 54 59 75 91 101 142 154 194 199 205 234 259 268 317 284 342 351 363 378 417 418 425 491 505 536 563 608 617 624 649 688 709 716 727 821 824 829 850 832 893 903 950 955 957 964 979 988 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[12 61 20 64 70 81 150 158 170 175 201 282 304 307 338 391 366 397 407 428 432 473 492 501 508 533 563 557 579 589 603 631 636 645 648 656 714 685 718 740 742 814 824 842 863 871 927 941 965 986 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[6 14 24 31 39 48 52 60 82 125 164 141 195 213 234 239 255 287 318 334 357 387 369 410 417 421 431 444 446 510 514 547 680 653 684 709 720 765 791 802 823 840 858 871 891 892 950 927 983 1000 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[12 15 37 48 71 74 101 95 104 148 153 162 208 215 269 227 320 356 359 372 406 455 463 477 486 498 559 596 645 651 664 693 665 751 756 779 785 827 804 844 852 874 887 904 905 936 961 982 983 991 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[1 65 68 71 124 173 181 190 195 204 221 220 304 339 321 352 362 363 368 369 403 415 490 514 520 536 548 550 586 589 592 623 655 638 700 744 755 762 779 789 842 850 865 881 916 924 956 938 987 998 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[48 52 94 107 134 113 186 202 231 233 253 257 274 296 324 332 338 351 356 357 358 393 489 482 519 527 534 537 560 568 604 612 611 617 705 707 730 755 782 812 784 828 867 916 937 948 966 967 971 988 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[55 15 107 117 155 157 198 236 240 245 285 288 302 364 376 380 402 416 421 434 478 488 501 504 567 568 629 644 646 673 657 686 690 740 744 755 769 770 783 792 818 860 855 865 904 905 917 935 971 984 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[80 30 92 103 143 182 200 202 217 222 229 245 273 278 283 303 360 445 446 466 486 489 505 516 547 576 614 630 624 643 671 695 697 709 715 730 739 743 746 768 786 810 872 888 949 938 951 952 959 982 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[41 61 83 126 142 188 214 218 242 249 269 265 315 334 362 369 371 438 454 459 484 464 485 497 501 522 548 568 586 605 614 686 654 701 706 726 732 736 742 765 792 810 823 842 832 846 853 877 891 980 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[20 22 27 74 91 77 144 147 154 269 287 327 328 348 349 386 432 433 438 470 491 550 556 586 588 592 610 640 686 716 722 733 734 736 740 758 779 796 804 805 836 857 901 912 938 940 942 981 990 989 ];\r\nvexp=[2 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[11 13 52 28 149 156 187 223 262 268 269 292 309 332 347 379 373 462 484 501 505 506 524 527 539 544 627 656 660 666 669 677 704 679 712 752 780 783 863 877 882 891 904 937 910 970 979 988 993 994 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[16 46 60 67 71 77 81 102 123 140 143 145 178 249 271 260 336 366 409 470 471 489 497 529 536 596 597 610 664 662 673 677 694 698 718 742 755 759 783 807 850 844 879 880 903 913 915 922 945 959 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[988 988 988 988 988 ];\r\nvexp=[4 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\n%%\r\nvin=[7 13 14 122 128 154 170 184 193 191 224 241 260 296 299 305 311 316 375 381 424 425 429 437 476 477 488 503 546 532 564 585 665 669 677 689 823 838 831 857 859 877 883 897 918 927 935 948 973 987 ];\r\nvexp=[3 ];\r\nvout=Monotonic_V(vin);\r\nassert(isequal(vout,vexp))\r\ntoc","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":18,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-10-05T02:13:07.000Z","updated_at":"2026-03-11T10:04:13.000Z","published_at":"2013-10-05T03:12:16.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/2334486/dashboard#s=p2\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2013 Veterans Ocean View\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. This is the Small data set witn N\u0026lt;=50 and Q\u0026lt;=4, guaranteed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe GJam story goes that as Supreme Ruler you are annoyed by complaints of non-ocean views on a hillside. To resolve the issue a minimum number of homes will be removed to provide a maximum number of ocean view homes. The Elevation of the homes should monotonically increase, no equal values, from element 1 thru the 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:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eSuccinct Challenge statement:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Given a vector create the maximum length monotonically increasing vector by removing values. Report the number of values removed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e V , Vector length N\u0026lt;=50 with values 1 thru 1000.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Q , minimum quantity of removed values to produce a valid vector [0:4]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [V] [Q]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 4 3 3] [2]  for [1 4] or [1 3]\\n[1 2 3 4 5] [0]\\n[4 3 2 1] [3]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eCommentary:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[1) The GJam Small test suite is not robust\\n2) nchoosek(50,4) is too slow for Cody and the 100 cases\\n3) The Large test suite is N\u003c=1000 with some delete cases \u003e4\\n4) A Good Algorithm that solves the Large case is usually best to pursue\\n5) GJam Competition allows one Large submission within 10 minutes of download \\n6) \u003cLarge Suite Challenge\u003e]]\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":42805,"title":"GJam 2016 Rd1A: Rank and File (small)","description":"This Challenge is derived from \u003chttp://code.google.com/codejam/contest/4304486/dashboard#s=p1 GJam Rd1A 2016 Rank and File\u003e. This is the small case with max N=10\r\n\r\nThe GJam story is a matrix H(NxN) which has every row and column increasing. Each row and column is recorded on strips. The strips get scrambled and one gets incinerated. The goal is to reconstruct the missing increasing vector strip. \r\n\r\n*Input:* [M], matrix of size [2*N-1,N] of all rows and columns of H except one\r\n\r\n*Output:* [V], the missing vector of H not included in M\r\n\r\n*Examples:* [M] [V] \r\n\r\n  [1 2 3;2 3 5;3 5 6;2 3 4;1 2 3] [3 4 6] \r\n  [22 222;2 22;2 22][22 222] \r\n \r\nGJam 2016 Rd1A Matlab results show three qualifiers for Rd2.\r\n\r\n*Theory:* With max N=10 it is possible to brute force the 50 puzzles. Persistent may be useful with the usage of nchoosek which may be the critical path. \u003chttps://www.go-hero.net/jam/16/solutions/1/2/MATLAB GJam Rank_file solutions\u003e. Writing the general solution for N=50 is better for the contest. The min corner or the max corner will always be available. Evolving solution, no guessing, is possible. OR one can observe an inherent mathematical result to create a 1-line solution.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"http://code.google.com/codejam/contest/4304486/dashboard#s=p1\"\u003eGJam Rd1A 2016 Rank and File\u003c/a\u003e. This is the small case with max N=10\u003c/p\u003e\u003cp\u003eThe GJam story is a matrix H(NxN) which has every row and column increasing. Each row and column is recorded on strips. The strips get scrambled and one gets incinerated. The goal is to reconstruct the missing increasing vector strip.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [M], matrix of size [2*N-1,N] of all rows and columns of H except one\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [V], the missing vector of H not included in M\u003c/p\u003e\u003cp\u003e\u003cb\u003eExamples:\u003c/b\u003e [M] [V]\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 2 3;2 3 5;3 5 6;2 3 4;1 2 3] [3 4 6] \r\n[22 222;2 22;2 22][22 222] \r\n\u003c/pre\u003e\u003cp\u003eGJam 2016 Rd1A Matlab results show three qualifiers for Rd2.\u003c/p\u003e\u003cp\u003e\u003cb\u003eTheory:\u003c/b\u003e With max N=10 it is possible to brute force the 50 puzzles. Persistent may be useful with the usage of nchoosek which may be the critical path. \u003ca href = \"https://www.go-hero.net/jam/16/solutions/1/2/MATLAB\"\u003eGJam Rank_file solutions\u003c/a\u003e. Writing the general solution for N=50 is better for the contest. The min corner or the max corner will always be available. Evolving solution, no guessing, is possible. OR one can observe an inherent mathematical result to create a 1-line solution.\u003c/p\u003e","function_template":"function v = rank_file(m)\r\n% H a rank/file array that has all columns and rows increasing\r\n% m  matrix [2*N-1,N] of scrambled rows/columns original H [NxN] array\r\n% v  missing vector of H\r\n v=0;\r\nend","test_suite":"%%\r\ntic\r\nm=[1 2 3 2 1 2 3 5 3 2 3 5 6 4 3 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 4 6 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[22 2 2 222 22 22 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[22 222 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 3 6 9 10 6 3 14 6 7 11 11 7 6 16 9 11 15 19 10 8 22 11 14 19 22 11 10 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[8 10 15 16 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 1 23 6 3 1 6 2 5 5 2 22 4 9 2 25 11 8 2 11 7 10 10 7 24 9 13 3 26 15 12 3 15 8 14 14 8 27 13 16 4 29 18 13 4 18 9 17 17 9 28 16 17 5 30 20 14 5 20 10 19 19 10 31 17 18 6 32 21 15 6 21 11 20 20 11 33 18 28 23 34 33 27 22 32 24 31 30 25 34 29 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[3 8 12 13 14 15 26 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 5 3 8 6 9 46 1 2 7 8 2 3 4 1 9 47 6 5 15 13 11 16 14 17 49 2 10 15 16 10 11 12 2 17 48 14 13 22 20 18 23 21 24 50 3 11 22 23 11 18 19 3 24 51 21 20 28 26 19 29 27 30 52 4 12 28 29 12 19 25 4 30 53 27 26 33 31 20 34 32 35 54 5 13 33 34 13 20 26 5 35 55 32 31 37 32 21 38 36 39 57 6 14 37 38 14 21 27 6 39 56 36 32 40 33 22 41 37 42 59 7 15 40 41 15 22 28 7 42 58 37 33 41 34 23 43 38 44 60 8 16 41 43 16 23 29 8 44 61 38 34 42 35 24 44 39 45 62 9 17 42 44 17 24 30 9 45 63 39 35 58 55 50 61 57 62 64 47 48 59 60 49 51 52 46 63 64 56 54 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[4 12 19 25 26 27 28 29 30 53 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[22 2 22 222 22 222 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[2 22 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 2 6 6 4 8 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[4 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 3 10 9 4 8 9 6 2 6 8 4 13 11 11 4 6 14 11 6 10 13 10 3 7 12 8 15 12 15 6 7 17 12 8 11 15 11 4 9 14 9 16 14 18 8 10 18 14 10 12 17 12 6 11 15 11 17 15 20 9 11 20 16 12 15 19 14 8 14 16 12 19 18 21 11 12 22 19 13 17 20 15 9 15 18 14 21 20 24 13 15 24 20 14 18 21 17 10 17 19 16 24 22 26 14 17 25 21 15 20 23 20 11 18 22 19 26 24 28 ];\r\nm=reshape(m,[],8);\r\nv=rank_file(m);\r\nvexp=[14 17 19 20 22 23 25 28 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 6 4 6 8 8 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[2 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 6 1 1 4 3 2 4 8 2 2 6 5 4 5 9 3 4 8 8 6 6 12 5 6 10 9 8 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[5 6 10 12 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 4 10 9 1 8 3 2 2 4 1 6 6 9 3 5 10 7 7 9 5 11 10 2 9 4 3 3 5 2 7 7 10 4 6 11 8 8 10 6 12 11 3 10 5 4 4 6 3 8 8 11 5 7 12 9 9 11 7 13 12 4 11 6 5 5 7 4 9 9 12 6 8 13 10 10 12 8 14 13 5 12 7 6 6 8 5 10 10 13 7 9 14 11 11 13 9 15 14 6 13 8 7 7 9 6 11 11 14 8 10 15 12 12 14 10 16 15 7 14 9 8 8 10 7 12 12 15 9 11 16 13 13 15 11 17 16 8 15 10 9 9 11 8 13 13 16 10 12 17 14 14 16 12 18 17 9 16 11 10 10 12 9 14 14 17 11 13 18 15 15 17 13 19 18 10 17 12 11 11 13 10 15 15 18 12 14 19 16 16 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[5 6 7 8 9 10 11 12 13 14 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 5 7 2 9 7 8 4 4 4 7 9 4 11 8 9 6 6 5 8 10 5 12 9 11 7 7 7 10 12 7 13 12 14 9 8 8 12 14 9 16 13 16 11 9 ];\r\nm=reshape(m,[],5);\r\nv=rank_file(m);\r\nvexp=[5 7 8 9 11 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 29 22 3 15 36 43 4 2 6 1 8 1 14 30 23 10 16 37 44 11 9 13 8 9 2 21 31 24 17 17 38 45 18 16 20 15 10 3 28 32 25 24 18 39 46 25 23 27 22 11 4 35 33 26 31 19 40 47 32 30 34 29 12 5 42 34 27 38 20 41 48 39 37 41 36 13 6 49 35 28 45 21 42 49 46 44 48 43 14 7 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[5 12 19 26 33 40 47 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 1 1 3 2 2 4 4 2 2 4 3 3 5 5 3 3 5 4 4 6 6 4 4 6 5 5 7 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[4 5 6 7 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[6 6 7 2 1 4 5 3 2 7 3 1 5 7 7 8 3 2 5 6 4 3 8 4 2 6 8 8 9 4 3 6 7 5 4 9 5 3 7 9 9 10 5 4 7 8 6 5 10 6 4 8 10 10 11 6 5 8 9 7 6 11 7 5 9 11 11 12 7 6 9 10 8 7 12 8 6 10 12 12 13 8 7 10 11 9 8 13 9 7 11 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[4 5 6 7 8 9 10 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 5 71 8 81 9 1 91 11 7 1 21 41 10 6 51 31 61 4 13 15 72 18 82 19 2 92 12 17 11 22 42 20 16 52 32 62 14 23 25 73 28 83 29 3 93 13 27 21 23 43 30 26 53 33 63 24 33 35 74 38 84 39 4 94 14 37 31 24 44 40 36 54 34 64 34 43 45 75 48 85 49 5 95 15 47 41 25 45 50 46 55 35 65 44 53 55 76 58 86 59 6 96 16 57 51 26 46 60 56 56 36 66 54 63 65 77 68 87 69 7 97 17 67 61 27 47 70 66 57 37 67 64 73 75 78 78 88 79 8 98 18 77 71 28 48 80 76 58 38 68 74 83 85 79 88 89 89 9 99 19 87 81 29 49 90 86 59 39 69 84 93 95 80 98 90 99 10 100 20 97 91 30 50 100 96 60 40 70 94 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[2 12 22 32 42 52 62 72 82 92 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 7 3 8 1 1 2 4 10 5 9 2 2 4 5 12 6 11 3 3 5 9 13 12 13 8 7 10 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[3 5 6 11 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 2 3 3 1 2 3 4 4 2 3 4 5 5 3 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[2 3 4 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 7 6 3 1 1 3 10 9 7 6 3 3 6 13 12 9 7 6 6 8 14 14 12 10 7 7 9 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[6 8 9 13 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[13 3 1 1 9 2 4 14 7 5 2 10 6 8 15 11 9 3 11 10 12 16 15 13 4 12 14 16 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[5 6 7 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 15 14 4 8 13 12 10 2 3 6 4 2 5 10 11 6 9 8 12 19 18 6 10 18 16 14 4 5 7 5 3 7 14 16 9 12 11 13 21 19 9 12 20 18 16 6 7 9 6 4 10 16 17 11 13 12 17 24 21 12 13 22 20 19 8 10 10 7 5 13 18 20 14 14 16 18 25 22 13 14 23 21 20 9 12 11 9 6 14 19 22 15 15 17 22 26 26 16 16 25 25 23 10 14 12 11 8 18 20 23 19 17 20 25 27 29 17 17 26 28 26 11 16 13 12 9 20 22 25 22 18 23 26 28 32 20 19 27 30 27 13 18 16 14 10 22 23 26 23 20 25 27 32 33 21 20 30 32 28 15 19 18 16 12 24 25 28 25 21 26 31 33 36 22 21 32 34 32 16 21 19 18 14 26 26 29 28 22 29 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[16 21 22 26 28 29 31 32 34 36 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 2 6 3 4 4 3 7 5 5 6 5 8 7 6 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[5 6 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[5 3 11 7 2 9 9 5 12 3 7 8 6 8 4 4 1 8 5 15 9 5 13 14 9 16 6 12 13 10 11 6 7 2 9 6 17 10 6 15 18 11 18 8 14 16 12 13 8 10 3 11 7 18 12 8 16 19 13 20 9 16 17 15 14 10 11 4 13 9 19 14 9 17 20 14 21 10 18 19 17 16 11 12 5 15 10 21 17 11 19 22 16 22 13 19 20 18 18 12 14 6 16 12 23 18 13 21 24 17 25 15 21 23 19 19 14 16 7 17 13 25 19 15 23 26 19 26 17 23 25 21 20 16 18 8 19 14 26 20 16 24 28 21 28 18 25 26 22 22 18 20 9 ];\r\nm=reshape(m,[],9);\r\nv=rank_file(m);\r\nvexp=[1 3 4 5 7 8 9 11 12 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 11 5 14 1 13 8 2 3 11 1 7 10 8 13 5 6 11 15 7 17 3 17 13 5 5 13 2 8 14 10 15 9 11 12 19 8 19 5 20 15 7 7 14 3 10 17 11 16 11 13 16 21 11 21 7 23 16 8 9 17 5 13 19 14 18 13 15 17 23 13 22 8 25 18 10 11 18 6 15 21 16 19 14 16 19 24 15 25 9 26 19 11 13 21 8 16 23 18 23 16 17 23 25 17 28 11 28 21 13 14 24 10 19 24 21 26 17 18 24 27 19 30 13 29 23 15 15 25 11 21 26 23 27 18 19 26 30 20 32 14 32 25 17 17 28 13 23 28 25 29 21 22 ];\r\nm=reshape(m,[],9);\r\nv=rank_file(m);\r\nvexp=[3 7 8 10 11 12 14 16 19 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[111 125 48 41 86 24 61 24 35 119 70 63 49 131 136 102 60 93 49 86 35 51 133 128 115 51 156 162 111 94 119 61 94 41 86 157 139 118 60 166 191 129 119 125 86 105 46 93 176 153 131 82 189 212 189 156 129 111 111 48 131 204 203 192 102 192 237 204 157 131 119 118 63 133 209 224 209 115 203 244 212 162 153 125 139 70 136 224 244 237 128 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[46 82 105 125 166 176 191 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 6 8 4 8 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[2 6 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 5 12 8 5 11 8 17 11 9 17 12 20 14 13 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[13 14 20 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 3 1 2 2 2 4 2 3 3 3 5 3 4 4 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 4 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 10 13 7 6 12 11 6 12 18 10 10 16 14 10 18 19 12 14 19 18 12 19 22 16 18 22 19 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[3 7 11 13 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[16 18 23 12 1 19 4 13 11 8 11 15 17 10 1 3 19 22 23 26 15 3 26 5 18 12 11 15 19 21 13 4 5 23 23 24 28 17 7 29 9 20 15 13 19 20 22 14 8 11 25 25 29 30 21 10 31 13 23 19 14 20 21 25 19 11 12 28 30 35 35 23 11 36 15 27 20 19 23 26 31 21 12 15 34 33 36 40 26 15 38 19 29 21 20 27 29 32 23 13 18 37 37 38 41 30 16 42 22 33 25 23 31 32 37 25 17 21 39 38 41 44 34 19 46 23 37 28 25 35 36 39 29 18 23 41 42 44 49 35 23 49 26 40 30 28 36 38 41 31 19 26 46 ];\r\nm=reshape(m,[],9);\r\nv=rank_file(m);\r\nvexp=[7 9 13 15 17 20 22 24 29 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[4 2 2 8 4 6 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[6 8 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[8 22 22 11 20 3 9 8 18 16 10 14 13 13 29 33 17 28 8 15 13 28 23 20 21 24 17 34 34 22 32 9 22 15 31 29 24 27 26 21 39 42 24 35 10 27 20 38 31 29 29 34 23 45 45 26 44 13 29 24 43 39 31 34 39 28 52 53 31 48 18 32 28 48 43 35 38 44 29 56 56 34 53 22 34 33 52 45 39 42 45 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[3 8 11 14 16 20 22 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[65 76 101 87 2 90 117 2 65 35 36 10 44 103 81 45 40 86 22 84 98 144 134 10 120 168 22 98 43 40 24 61 137 102 79 52 127 24 99 108 147 144 35 136 179 36 121 54 54 40 74 161 132 96 74 137 43 119 141 157 186 44 142 188 40 144 74 74 52 92 208 169 113 92 184 61 151 159 191 216 45 168 213 53 168 88 96 73 97 230 174 137 113 199 79 190 201 222 217 65 211 236 65 190 121 99 98 144 236 205 168 119 206 84 205 208 260 229 76 235 267 81 201 132 108 102 169 246 208 174 141 224 98 206 224 268 265 90 259 274 86 211 137 136 127 184 267 235 199 142 259 120 217 229 272 272 101 265 281 87 222 144 147 134 186 294 260 216 157 268 144 236 246 294 281 117 267 302 103 236 161 179 137 208 302 267 230 188 274 168 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[53 73 88 97 137 151 159 168 191 213 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[18 9 15 18 3 13 21 7 6 9 5 11 12 15 10 19 12 18 20 5 15 22 8 7 11 7 14 14 17 12 27 17 21 24 7 22 27 14 8 14 11 19 18 24 17 30 20 23 25 9 24 29 17 12 17 12 21 21 27 20 33 21 25 26 12 27 31 19 14 18 14 22 22 28 21 34 24 29 31 15 29 32 22 18 21 15 25 27 32 23 35 27 32 34 18 31 36 24 20 24 17 26 28 34 25 38 30 34 35 21 32 38 27 22 27 19 31 33 36 29 ];\r\nm=reshape(m,[],8);\r\nv=rank_file(m);\r\nvexp=[3 6 9 10 11 13 15 18 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[2 2 4 4 4 5 ];\r\nm=reshape(m,[],2);\r\nv=rank_file(m);\r\nvexp=[4 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 14 4 13 10 8 5 10 7 14 15 5 14 20 18 11 12 11 15 22 7 18 24 20 12 15 14 18 25 8 24 28 24 14 20 18 22 30 10 28 30 25 15 24 20 ];\r\nm=reshape(m,[],5);\r\nv=rank_file(m);\r\nvexp=[4 7 10 13 14 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[7 3 10 7 9 14 3 9 7 15 14 11 19 6 14 9 19 17 17 20 7 15 14 24 20 19 24 10 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[6 9 11 19 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[14 7 33 34 30 19 29 23 15 30 9 3 18 3 16 7 25 25 21 18 9 39 35 37 22 32 24 19 33 11 7 21 7 17 9 27 30 23 23 11 45 43 40 27 36 27 24 38 16 12 25 9 20 15 35 35 32 24 18 48 44 43 28 38 31 27 39 20 16 28 14 24 17 37 36 36 28 19 54 46 50 34 46 34 29 41 25 18 29 15 27 21 38 41 37 31 22 57 50 51 37 50 37 34 45 27 23 34 19 28 24 43 46 41 36 23 60 57 56 46 54 41 41 56 35 25 37 21 36 30 53 49 49 38 27 64 66 58 50 55 43 46 61 36 29 38 25 37 32 55 53 54 43 33 67 71 66 51 61 45 50 66 40 30 41 30 39 37 58 56 56 48 35 73 73 71 57 66 50 54 67 45 33 46 34 44 39 64 57 60 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[12 15 16 23 24 27 32 35 38 43 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 8 12 6 3 3 11 13 7 8 4 14 12 17 8 4 4 14 16 9 10 5 16 15 19 11 6 7 17 18 11 14 9 21 18 22 15 8 8 19 22 14 18 12 22 19 24 16 11 11 22 23 17 21 14 23 22 26 19 13 12 24 26 18 22 17 ];\r\nm=reshape(m,[],6);\r\nv=rank_file(m);\r\nvexp=[4 5 8 10 14 16 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 5 3 1 4 3 6 4 3 5 5 8 6 4 8 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 4 5 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[40 3 25 39 38 3 5 63 16 49 73 52 5 22 72 38 53 80 53 25 52 81 40 72 81 80 39 63 ];\r\nm=reshape(m,[],4);\r\nv=rank_file(m);\r\nvexp=[16 22 49 73 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[3 2 2 1 3 4 3 3 2 4 5 4 4 3 5 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[1 2 3 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[9 10 2 8 8 1 9 1 6 4 11 2 4 11 13 3 9 10 2 11 2 8 5 13 3 5 14 14 5 12 11 4 13 4 10 6 16 5 6 15 16 8 13 13 6 15 6 12 10 17 8 10 17 18 9 14 14 8 17 8 13 11 19 10 12 18 20 11 17 17 9 18 9 15 13 21 11 14 20 22 13 18 19 10 21 11 16 14 22 13 16 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[6 8 10 12 13 15 17 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 5 9 2 7 13 2 8 6 7 6 4 9 14 8 16 4 10 16 4 14 8 12 10 6 12 16 10 18 5 11 17 6 15 10 13 11 8 13 17 11 19 6 13 19 7 17 11 15 13 10 14 19 13 21 7 15 20 9 19 13 17 14 12 17 20 16 23 8 17 22 11 20 15 19 17 14 19 23 17 24 9 19 24 13 22 18 20 19 16 21 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[4 6 8 10 12 14 16 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[11 6 11 10 14 16 13 8 12 9 3 3 7 13 16 17 7 6 5 20 12 18 15 25 26 21 18 20 13 6 5 15 23 27 29 11 9 9 22 14 21 20 28 29 24 21 23 17 7 6 16 24 29 32 14 12 11 26 17 26 23 31 37 32 24 29 19 9 7 19 27 34 37 16 15 13 27 20 29 26 33 40 35 26 30 24 10 8 23 29 37 40 21 18 15 31 21 31 27 35 41 36 29 33 26 11 11 26 33 38 43 22 20 18 33 23 33 29 37 44 38 30 34 27 12 13 29 34 40 46 24 23 20 36 24 35 33 40 47 40 35 37 31 13 14 32 38 42 47 28 25 21 40 25 38 37 44 49 42 38 40 34 15 16 35 41 46 48 29 27 23 41 29 43 40 47 52 47 40 46 37 16 17 37 44 49 52 32 29 26 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[15 23 25 35 38 40 41 44 46 48 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[14 11 6 9 7 14 2 13 9 17 12 2 3 19 14 10 13 10 17 5 17 11 19 14 3 7 22 19 11 16 11 18 7 21 13 21 16 6 10 23 21 13 18 16 22 9 22 18 25 21 9 11 28 23 16 21 19 26 12 26 21 28 23 11 14 31 26 18 22 21 29 14 29 22 30 26 13 17 32 28 21 25 22 31 17 30 23 32 28 14 19 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[5 7 10 13 14 17 19 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[15 15 21 3 7 11 25 22 5 18 9 11 3 16 19 29 12 25 18 18 20 26 7 10 12 28 23 10 20 11 15 5 21 22 34 19 28 22 21 24 30 11 11 14 33 28 12 23 14 16 9 26 24 39 22 30 27 23 28 33 15 15 16 34 34 18 25 21 23 11 29 29 40 24 35 30 24 31 34 18 19 22 37 39 20 26 23 25 12 34 33 41 26 43 38 28 37 39 19 20 24 43 45 22 31 24 29 15 41 37 47 33 49 43 29 39 43 21 21 26 45 50 26 34 30 33 16 43 41 49 34 51 47 30 43 47 25 22 27 50 52 28 38 33 34 18 45 43 58 37 55 50 34 44 50 26 23 28 52 55 31 39 35 37 22 47 45 59 39 58 54 35 47 51 29 28 30 55 59 34 43 39 40 25 49 49 63 41 63 58 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[26 31 35 37 39 44 47 54 55 58 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[1 9 5 2 11 15 6 3 15 1 8 17 3 2 18 11 8 12 7 2 13 8 5 14 17 10 6 16 2 12 19 8 5 20 12 11 15 10 3 18 13 6 20 25 13 11 23 3 15 24 11 8 26 20 18 21 15 5 21 16 8 23 29 16 13 28 6 17 29 13 10 30 25 22 26 19 7 23 17 10 24 30 19 15 30 8 22 32 15 12 31 26 24 28 22 8 26 21 11 27 35 22 18 33 9 24 34 18 13 37 29 26 31 23 11 29 23 12 31 38 25 20 37 11 26 40 20 14 39 31 27 34 24 13 32 26 15 33 39 26 21 38 12 28 42 23 15 42 34 31 37 28 15 35 28 17 38 40 29 23 40 15 30 43 25 16 45 37 33 39 30 18 37 29 20 39 43 30 24 45 17 31 48 26 19 48 40 34 42 32 ];\r\nm=reshape(m,[],10);\r\nv=rank_file(m);\r\nvexp=[13 15 23 26 28 32 33 37 38 42 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[5 9 9 5 3 7 13 12 7 5 13 17 17 12 9 ];\r\nm=reshape(m,[],3);\r\nv=rank_file(m);\r\nvexp=[3 5 9 ];\r\nassert(isequal(vexp,v))\r\n%%\r\nm=[13 6 8 11 8 4 2 1 10 3 10 5 7 18 7 11 15 11 5 4 2 14 4 12 8 9 21 11 15 19 12 10 5 5 17 8 18 10 13 25 15 19 22 15 12 7 8 20 11 20 11 17 28 20 25 25 17 17 9 10 23 14 27 13 23 30 22 28 28 19 19 11 11 25 15 29 15 25 32 25 30 29 20 21 12 13 27 18 32 18 28 ];\r\nm=reshape(m,[],7);\r\nv=rank_file(m);\r\nvexp=[1 3 4 6 7 8 10 ];\r\nassert(isequal(vexp,v))\r\ntoc\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":11,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-04-18T02:50:28.000Z","updated_at":"2016-04-18T04:20:27.000Z","published_at":"2016-04-18T03:42:32.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://code.google.com/codejam/contest/4304486/dashboard#s=p1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Rd1A 2016 Rank and File\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. This is the small case with max N=10\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe GJam story is a matrix H(NxN) which has every row and column increasing. Each row and column is recorded on strips. The strips get scrambled and one gets incinerated. The goal is to reconstruct the missing increasing vector strip.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M], matrix of size [2*N-1,N] of all rows and columns of H except one\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [V], the missing vector of H not included in M\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [M] [V]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 2 3;2 3 5;3 5 6;2 3 4;1 2 3] [3 4 6] \\n[22 222;2 22;2 22][22 222]]]\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\u003eGJam 2016 Rd1A Matlab results show three qualifiers for Rd2.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eTheory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e With max N=10 it is possible to brute force the 50 puzzles. Persistent may be useful with the usage of nchoosek which may be the critical path.\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.go-hero.net/jam/16/solutions/1/2/MATLAB\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam Rank_file solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Writing the general solution for N=50 is better for the contest. The min corner or the max corner will always be available. Evolving solution, no guessing, is possible. OR one can observe an inherent mathematical result to create a 1-line solution.\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":1159,"title":"Coin Tossing: Probability of Same Heads for N tosses","description":"A pair of physicists toss a coin n times each.\r\nWhat is the probability that they tossed the same number of heads?\r\nInput: N % number of tosses\r\nOutput: P\r\nExamples:\r\nN=1 P=0.5;\r\nN=2 P=0.375\r\nTest Suite will round to 6 places","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: 231px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 115.5px; transform-origin: 407px 115.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; 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: 139px 8px; transform-origin: 139px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eA pair of physicists toss a coin n times each.\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: 213px 8px; transform-origin: 213px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWhat is the probability that they tossed the same number of heads?\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: 20px 8px; transform-origin: 20px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\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: 71px 8px; transform-origin: 71px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e N % number of tosses\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: 26px 8px; transform-origin: 26px 8px; 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: 6.5px 8px; transform-origin: 6.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e P\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: 35.5px 8px; transform-origin: 35.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExamples:\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: 35px 8px; transform-origin: 35px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eN=1 P=0.5;\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: 41px 8px; transform-origin: 41px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eN=2 P=0.375\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: 99px 8px; transform-origin: 99px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTest Suite will round to 6 places\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function P = coin_head_match(N)\r\n  P = 0;\r\nend","test_suite":"%%\r\nassert(isequal(.5, round(1e6*coin_head_match(1))/1e6))\r\n%%\r\nassert(isequal(.375, round(1e6*coin_head_match(2))/1e6))\r\n%%\r\nassert(isequal(.3125, round(1e6*coin_head_match(3))/1e6))\r\n%%\r\nassert(isequal(.273438, round(1e6*coin_head_match(4))/1e6))\r\n%%\r\nassert(isequal(.246094, round(1e6*coin_head_match(5))/1e6))\r\n%%\r\nassert(isequal(.225586, round(1e6*coin_head_match(6))/1e6))\r\n%%\r\nassert(isequal(.139950, round(1e6*coin_head_match(16))/1e6))\r\n%%\r\nassert(isequal(.125371, round(1e6*coin_head_match(20))/1e6))\r\n%%\r\nassert(isequal(.114567, round(1e6*coin_head_match(24))/1e6))\r\n%%\r\nassert(~isequal(0,coin_head_match(0)))\r\n%%\r\nassert(isequal(.099347, round(1e6*coin_head_match(32))/1e6))\r\n%%\r\nassert(isequal(.070386, round(1e6*coin_head_match(64))/1e6))\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":223089,"edited_at":"2023-02-02T11:33:29.000Z","deleted_by":null,"deleted_at":null,"solvers_count":55,"test_suite_updated_at":"2023-02-02T11:33:29.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-01-01T19:48:56.000Z","updated_at":"2025-12-10T23:53:10.000Z","published_at":"2013-01-01T20:30:15.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\u003eA pair of physicists toss a coin n times 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWhat is the probability that they tossed the same number of heads?\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\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e N % number of tosses\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 P\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\u003eExamples:\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\u003eN=1 P=0.5;\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eN=2 P=0.375\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\u003eTest Suite will round to 6 places\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":1855,"title":"Usage of java.math : N Choose K with unlimited precision","description":"Calculate the binomial coefficient nchoosek with full accuracy. This challenge may use the wonderful word of java.math that allows unlimited precision calculations.  The primary reference sites are \u003chttp://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html Java Math\u003e, \u003chttp://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html Java BigDecimal\u003e, and \u003chttp://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html Java BigInteger\u003e.\r\n\r\nThe usage of BigDecimal functions add, multiply, and divide may be required.\r\n\r\nJava Math:\r\n\r\n  vd-decimal value, vstr-string, vi-integer value \r\n  xBD=java.math.BigDecimal(vd);  % valid vd,vstr,vi creates xBD a BigDecimal variable\r\n  import java.math.*;  % simplifies statements\r\n  xBD=BigDecimal(vstr);\r\n  xplusyBD=xBD.add(BigDecimal(y)); % add input requires BD type\r\n  xmultiplyzBD=xBD.multiply(BigDecimal(z));  % multiply input requires BD type\r\n  xdividezBD=xBD.divide(BigDecimal(z));  % divide input requires BD type\r\n  xmultydivz=xBD.multiply(yBD).divide(zBD);  out=x*y/z\r\n  \r\n  To convert java to string of unlimited length can be achieved via java toString or Matlab char\r\n  \r\n  xstr=toString(xBD)  or xstr=char(xBD) \r\n\r\n*Input:* [N,K]  [ Inputs to nchoosek(N,K) 0\u003c=K\u003c=N\u003c200 ]\r\n\r\n*Output:* C  (char variable of C=nchoosek(n,k) or BigDecimal variable type )\r\n\r\n*Theory:*\r\n\r\n\u003chttp://en.wikipedia.org/wiki/Binomial_coefficient C(n,k)\u003e link shows multiple evaluation methods.\r\n\r\nC(n,k)= n!/(k!(n-k)!)\r\n\r\n\u003c\u003chttp://upload.wikimedia.org/math/b/1/a/b1a5828ee5ec18a1362999a76f3c63e6.png\u003e\u003e\r\n\r\nThe factorial method gives a direct solution while the multiplicative may require fewer operations. \r\n\r\n*Hint:* C(5,3)=(5/3)*(4/2)*(3/1)= (5/1)*(4/2)*(3/3); numerator has k terms\r\n\r\n*Future Challenges:*\r\n\r\n1. \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1833-usage-of-java-math-add-multiply-pow Usage of java.math\u003e\r\n\r\n  2. nchoosek_large (full precision)\r\n  3. Next Prime\r\n  4. factor_large\r\n\r\n5. \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1854-factorial-unlimited-size-java-math Factorial\u003e","description_html":"\u003cp\u003eCalculate the binomial coefficient nchoosek with full accuracy. This challenge may use the wonderful word of java.math that allows unlimited precision calculations.  The primary reference sites are \u003ca href = \"http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html\"\u003eJava Math\u003c/a\u003e, \u003ca href = \"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html\"\u003eJava BigDecimal\u003c/a\u003e, and \u003ca href = \"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html\"\u003eJava BigInteger\u003c/a\u003e.\u003c/p\u003e\u003cp\u003eThe usage of BigDecimal functions add, multiply, and divide may be required.\u003c/p\u003e\u003cp\u003eJava Math:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003evd-decimal value, vstr-string, vi-integer value \r\nxBD=java.math.BigDecimal(vd);  % valid vd,vstr,vi creates xBD a BigDecimal variable\r\nimport java.math.*;  % simplifies statements\r\nxBD=BigDecimal(vstr);\r\nxplusyBD=xBD.add(BigDecimal(y)); % add input requires BD type\r\nxmultiplyzBD=xBD.multiply(BigDecimal(z));  % multiply input requires BD type\r\nxdividezBD=xBD.divide(BigDecimal(z));  % divide input requires BD type\r\nxmultydivz=xBD.multiply(yBD).divide(zBD);  out=x*y/z\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eTo convert java to string of unlimited length can be achieved via java toString or Matlab char\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003exstr=toString(xBD)  or xstr=char(xBD) \r\n\u003c/pre\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [N,K]  [ Inputs to nchoosek(N,K) 0\u0026lt;=K\u0026lt;=N\u0026lt;200 ]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e C  (char variable of C=nchoosek(n,k) or BigDecimal variable type )\u003c/p\u003e\u003cp\u003e\u003cb\u003eTheory:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Binomial_coefficient\"\u003eC(n,k)\u003c/a\u003e link shows multiple evaluation methods.\u003c/p\u003e\u003cp\u003eC(n,k)= n!/(k!(n-k)!)\u003c/p\u003e\u003cimg src = \"http://upload.wikimedia.org/math/b/1/a/b1a5828ee5ec18a1362999a76f3c63e6.png\"\u003e\u003cp\u003eThe factorial method gives a direct solution while the multiplicative may require fewer operations.\u003c/p\u003e\u003cp\u003e\u003cb\u003eHint:\u003c/b\u003e C(5,3)=(5/3)*(4/2)*(3/1)= (5/1)*(4/2)*(3/3); numerator has k terms\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture Challenges:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e1. \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1833-usage-of-java-math-add-multiply-pow\"\u003eUsage of java.math\u003c/a\u003e\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e2. nchoosek_large (full precision)\r\n3. Next Prime\r\n4. factor_large\r\n\u003c/pre\u003e\u003cp\u003e5. \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1854-factorial-unlimited-size-java-math\"\u003eFactorial\u003c/a\u003e\u003c/p\u003e","function_template":"function y = nchoosekJava(N,K)\r\n  y = num2str(nchoosek(N,K));\r\nend","test_suite":"%%\r\ntic\r\nN=5;K=2;\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,num2str(nchoosek(N,K))))\r\n%%\r\ntic\r\nN=randi(10);\r\nK=randi(N);\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,num2str(nchoosek(N,K))))\r\n%%\r\ntic\r\nN=100;\r\nK=50;\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,'100891344545564193334812497256'))\r\n%%\r\ntic\r\nN=200;\r\nK=75;\r\nNK=nchoosekJava(N,K);\r\ntoc\r\nassert(strcmp(NK,'168849997346404286704489530268603459022868706883102845056'))\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":52,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-08-30T03:09:06.000Z","updated_at":"2026-02-08T19:48:26.000Z","published_at":"2013-08-30T03:48:17.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCalculate the binomial coefficient nchoosek with full accuracy. This challenge may use the wonderful word of java.math that allows unlimited precision calculations. The primary reference sites are\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://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Number.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eJava Math\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigDecimal.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eJava BigDecimal\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eJava BigInteger\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\u003eThe usage of BigDecimal functions add, multiply, and divide may be required.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eJava Math:\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[vd-decimal value, vstr-string, vi-integer value \\nxBD=java.math.BigDecimal(vd);  % valid vd,vstr,vi creates xBD a BigDecimal variable\\nimport java.math.*;  % simplifies statements\\nxBD=BigDecimal(vstr);\\nxplusyBD=xBD.add(BigDecimal(y)); % add input requires BD type\\nxmultiplyzBD=xBD.multiply(BigDecimal(z));  % multiply input requires BD type\\nxdividezBD=xBD.divide(BigDecimal(z));  % divide input requires BD type\\nxmultydivz=xBD.multiply(yBD).divide(zBD);  out=x*y/z\\n\\nTo convert java to string of unlimited length can be achieved via java toString or Matlab char\\n\\nxstr=toString(xBD)  or xstr=char(xBD)]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [N,K] [ Inputs to nchoosek(N,K) 0\u0026lt;=K\u0026lt;=N\u0026lt;200 ]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e C (char variable of C=nchoosek(n,k) or BigDecimal variable type )\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eTheory:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Binomial_coefficient\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eC(n,k)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e link shows multiple evaluation methods.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eC(n,k)= n!/(k!(n-k)!)\u003c/w:t\u003e\u003c/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 factorial method gives a direct solution while the multiplicative may require fewer operations.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eHint:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e C(5,3)=(5/3)*(4/2)*(3/1)= (5/1)*(4/2)*(3/3); numerator has k terms\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eFuture Challenges:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1.\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/1833-usage-of-java-math-add-multiply-pow\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eUsage of java.math\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[2. nchoosek_large (full precision)\\n3. Next Prime\\n4. factor_large]]\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\u003e5.\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/1854-factorial-unlimited-size-java-math\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eFactorial\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"}]}"},{"id":1517,"title":"Put m balls into n boxes (again)","description":"According to Cody Problem 1516, if I put 3 balls into 2 boxes then\r\n     1     1     1\r\n     1     1     2\r\n     1     2     2\r\n     2     2     2\r\nThe columns stand for a ball, the number stands for a box, and the row stands for a case.\r\nNow we count the number of balls in each boxes.\r\nso we get\r\n     3     0\r\n     2     1\r\n     1     2\r\n     0     3\r\nthe 1-th row stand for the 1-th case,3 balls are put into the first boxes,the others is empty the 2-th row stand for the 2-th case,2 balls are put into the first boxes,1 balls is put into the second boxes\r\nYou should write a function, input m and n, m stand for the number of balls ,n stand for the number of boxes,output all the cases.\r\nExample\r\nIf m = 3,n = 4, you should output\r\n     3     0     0     0\r\n     2     1     0     0\r\n     2     0     1     0\r\n     2     0     0     1\r\n     1     2     0     0\r\n     1     1     1     0\r\n     1     1     0     1\r\n     1     0     2     0\r\n     1     0     1     1\r\n     1     0     0     2\r\n     0     3     0     0\r\n     0     2     1     0\r\n     0     2     0     1\r\n     0     1     2     0\r\n     0     1     1     1\r\n     0     1     0     2\r\n     0     0     3     0\r\n     0     0     2     1\r\n     0     0     1     2\r\n     0     0     0     3","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: 877.133px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 438.567px; transform-origin: 407px 438.567px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 39.5px 8px; transform-origin: 39.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eAccording to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 2px 8px; transform-origin: 2px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"/#null\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eCody Problem 1516\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: 101.5px 8px; transform-origin: 101.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, if I put 3 balls into 2 boxes then\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; 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 40.8667px; transform-origin: 404px 40.8667px; 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     1     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     1     2\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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     2     2\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: 72px 8.5px; tab-size: 4; transform-origin: 72px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     2     2     2\u003c/span\u003e\u003c/span\u003e\u003c/div\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: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; 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: 281.5px 8px; transform-origin: 281.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe columns stand for a ball, the number stands for a box, and the row stands for a case.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 172px 8px; transform-origin: 172px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eNow we count the number of balls in each boxes.\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: 30px 8px; transform-origin: 30px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eso we get\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 81.7333px; 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 40.8667px; transform-origin: 404px 40.8667px; 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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     3     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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     2     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     1     2\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: 48px 8.5px; tab-size: 4; transform-origin: 48px 8.5px; unicode-bidi: normal; white-space: pre; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e     0     3\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 377.5px 8px; transform-origin: 377.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ethe 1-th row stand for the 1-th case,3 balls are put into the first boxes,the others is empty the 2-th row stand for the 2-th case,2 balls are put into the first boxes,1 balls is put into the second boxes\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 383px 8px; transform-origin: 383px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYou should write a function, input m and n, m stand for the number of balls ,n stand for the number of boxes,output all the cases.\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: 26.5px 8px; transform-origin: 26.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eExample\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: 101.5px 8px; transform-origin: 101.5px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf m = 3,n = 4, you should output\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 408.667px; 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 204.333px; transform-origin: 404px 204.333px; 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     3     0     0     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: 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     2     1     0     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: 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     2     0     1     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: 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     2     0     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     1     2     0     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: 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     1     1     1     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: 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     1     1     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     1     0     2     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: 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     1     0     1     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     1     0     0     2\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     0     3     0     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: 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     0     2     1     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: 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     0     2     0     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     0     1     2     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: 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     0     1     1     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     0     1     0     2\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     0     0     3     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: 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     0     0     2     1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4333px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 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     0     0     1     2\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     0     0     0     3\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = putballs2(m,n)\r\n  y = [m*n];\r\nend","test_suite":"%% 1\r\nm = 3;\r\nn = 2;\r\ny_correct = [     3     0\r\n     2     1\r\n     1     2\r\n     0     3];\r\nassert(isequal(putballs2(m,n),y_correct))\r\n%% 2\r\nfiletext = fileread('putballs2.m');\r\nassert(isempty(strfind(filetext, 'fopen')));\r\nassert(isempty(strfind(filetext, 'assert')));\r\nassert(isempty(strfind(filetext, 'regexp')));\r\nassert(isempty(strfind(filetext, 'regexprep')));\r\nassert(isempty(strfind(filetext, 'str2num')));\r\nassert(isempty(strfind(filetext, 'if ')));\r\nassert(isempty(strfind(filetext, 'persistent')));\r\nassert(isempty(strfind(filetext, 'global')));\r\nassert(isempty(strfind(filetext, 'assignin')));\r\nassert(isempty(strfind(filetext, 'evalin')));\r\nassert(isempty(strfind(filetext, 'char')));\r\nassert(isempty(strfind(filetext, 'interp1')));\r\nassert(isempty(strfind(filetext, 'equal')));\r\n %% 3\r\nm = 3;\r\nn = 4;\r\ny_correct = [     3     0     0     0\r\n     2     1     0     0\r\n     2     0     1     0\r\n     2     0     0     1\r\n     1     2     0     0\r\n     1     1     1     0\r\n     1     1     0     1\r\n     1     0     2     0\r\n     1     0     1     1\r\n     1     0     0     2\r\n     0     3     0     0\r\n     0     2     1     0\r\n     0     2     0     1\r\n     0     1     2     0\r\n     0     1     1     1\r\n     0     1     0     2\r\n     0     0     3     0\r\n     0     0     2     1\r\n     0     0     1     2\r\n     0     0     0     3];\r\nassert(isequal(putballs2(m,n),y_correct))\r\n%% 4\r\nm = 5;\r\nn = 4;\r\ny_correct = [     5     0     0     0\r\n     4     1     0     0\r\n     4     0     1     0\r\n     4     0     0     1\r\n     3     2     0     0\r\n     3     1     1     0\r\n     3     1     0     1\r\n     3     0     2     0\r\n     3     0     1     1\r\n     3     0     0     2\r\n     2     3     0     0\r\n     2     2     1     0\r\n     2     2     0     1\r\n     2     1     2     0\r\n     2     1     1     1\r\n     2     1     0     2\r\n     2     0     3     0\r\n     2     0     2     1\r\n     2     0     1     2\r\n     2     0     0     3\r\n     1     4     0     0\r\n     1     3     1     0\r\n     1     3     0     1\r\n     1     2     2     0\r\n     1     2     1     1\r\n     1     2     0     2\r\n     1     1     3     0\r\n     1     1     2     1\r\n     1     1     1     2\r\n     1     1     0     3\r\n     1     0     4     0\r\n     1     0     3     1\r\n     1     0     2     2\r\n     1     0     1     3\r\n     1     0     0     4\r\n     0     5     0     0\r\n     0     4     1     0\r\n     0     4     0     1\r\n     0     3     2     0\r\n     0     3     1     1\r\n     0     3     0     2\r\n     0     2     3     0\r\n     0     2     2     1\r\n     0     2     1     2\r\n     0     2     0     3\r\n     0     1     4     0\r\n     0     1     3     1\r\n     0     1     2     2\r\n     0     1     1     3\r\n     0     1     0     4\r\n     0     0     5     0\r\n     0     0     4     1\r\n     0     0     3     2\r\n     0     0     2     3\r\n     0     0     1     4\r\n     0     0     0     5];\r\nassert(isequal(putballs2(m,n),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":2,"created_by":3668,"edited_by":223089,"edited_at":"2022-10-09T16:30:12.000Z","deleted_by":null,"deleted_at":null,"solvers_count":64,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-05-22T02:25:40.000Z","updated_at":"2026-02-08T20:12:31.000Z","published_at":"2013-05-22T02:25:57.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\u003eAccording 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=\\\"\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody Problem 1516\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, if I put 3 balls into 2 boxes then\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[     1     1     1\\n     1     1     2\\n     1     2     2\\n     2     2     2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe columns stand for a ball, the number stands for a box, and the row stands for a case.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNow we count the number of balls in each boxes.\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\u003eso we get\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[     3     0\\n     2     1\\n     1     2\\n     0     3]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethe 1-th row stand for the 1-th case,3 balls are put into the first boxes,the others is empty the 2-th row stand for the 2-th case,2 balls are put into the first boxes,1 balls is put into the second boxes\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 should write a function, input m and n, m stand for the number of balls ,n stand for the number of boxes,output all the cases.\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\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf m = 3,n = 4, you should output\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[     3     0     0     0\\n     2     1     0     0\\n     2     0     1     0\\n     2     0     0     1\\n     1     2     0     0\\n     1     1     1     0\\n     1     1     0     1\\n     1     0     2     0\\n     1     0     1     1\\n     1     0     0     2\\n     0     3     0     0\\n     0     2     1     0\\n     0     2     0     1\\n     0     1     2     0\\n     0     1     1     1\\n     0     1     0     2\\n     0     0     3     0\\n     0     0     2     1\\n     0     0     1     2\\n     0     0     0     3]]\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":2487,"title":"Create Combination","description":"Motivation: In many problems, we need to create combinations with the function nchoosek. In some cases, however, choices are limited in particular fields. This problem is an exercise based on this issue.\r\n\r\nProblem statement: Given a vector v, create a combination matrix where an element on i-th column can not exceed v(i). All values of input vector will be of single digit.\r\n\r\nExample:\r\n\r\n  v = [1 3 2];\r\n  Output =[\r\n       1     1     1\r\n       1     1     2\r\n       1     2     1\r\n       1     2     2\r\n       1     3     1\r\n       1     3     2 ];","description_html":"\u003cp\u003eMotivation: In many problems, we need to create combinations with the function nchoosek. In some cases, however, choices are limited in particular fields. This problem is an exercise based on this issue.\u003c/p\u003e\u003cp\u003eProblem statement: Given a vector v, create a combination matrix where an element on i-th column can not exceed v(i). All values of input vector will be of single digit.\u003c/p\u003e\u003cp\u003eExample:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ev = [1 3 2];\r\nOutput =[\r\n     1     1     1\r\n     1     1     2\r\n     1     2     1\r\n     1     2     2\r\n     1     3     1\r\n     1     3     2 ];\r\n\u003c/pre\u003e","function_template":"function y = specialNchoosek(x)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = 1;\r\ny_correct = 1;\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [];\r\ny_correct = [];\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [2 8 2];\r\ny_correct=[1     1     1\r\n     1     1     2\r\n     1     2     1\r\n     1     2     2\r\n     1     3     1\r\n     1     3     2\r\n     1     4     1\r\n     1     4     2\r\n     1     5     1\r\n     1     5     2\r\n     1     6     1\r\n     1     6     2\r\n     1     7     1\r\n     1     7     2\r\n     1     8     1\r\n     1     8     2\r\n     2     1     1\r\n     2     1     2\r\n     2     2     1\r\n     2     2     2\r\n     2     3     1\r\n     2     3     2\r\n     2     4     1\r\n     2     4     2\r\n     2     5     1\r\n     2     5     2\r\n     2     6     1\r\n     2     6     2\r\n     2     7     1\r\n     2     7     2\r\n     2     8     1\r\n     2     8     2];\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [3 3 3];\r\ny_correct =[1     1     1\r\n     1     1     2\r\n     1     1     3\r\n     1     2     1\r\n     1     2     2\r\n     1     2     3\r\n     1     3     1\r\n     1     3     2\r\n     1     3     3\r\n     2     1     1\r\n     2     1     2\r\n     2     1     3\r\n     2     2     1\r\n     2     2     2\r\n     2     2     3\r\n     2     3     1\r\n     2     3     2\r\n     2     3     3\r\n     3     1     1\r\n     3     1     2\r\n     3     1     3\r\n     3     2     1\r\n     3     2     2\r\n     3     2     3\r\n     3     3     1\r\n     3     3     2\r\n     3     3     3];\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [1 1 1 1 1];\r\ny_correct = x;\r\nassert(isequal(specialNchoosek(x),y_correct))\r\n\r\n%%\r\nx = [1 1 1 3];\r\ny_correct =[1     1     1     1\r\n     1     1     1     2\r\n     1     1     1     3];\r\nassert(isequal(specialNchoosek(x),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":17203,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":67,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-08-07T04:08:53.000Z","updated_at":"2026-02-08T19:22:23.000Z","published_at":"2014-08-07T04:08:53.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\u003eMotivation: In many problems, we need to create combinations with the function nchoosek. In some cases, however, choices are limited in particular fields. This problem is an exercise based on this issue.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eProblem statement: Given a vector v, create a combination matrix where an element on i-th column can not exceed v(i). All values of input vector will be of single digit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[v = [1 3 2];\\nOutput =[\\n     1     1     1\\n     1     1     2\\n     1     2     1\\n     1     2     2\\n     1     3     1\\n     1     3     2 ];]]\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":52343,"title":"ICFP2021 Hole-In-Wall: Solve Score=0, where number of Figure Vertices = Hole Vertices + 1","description":"The ICFP held its annual 3-day contest in July 2021 with Hole-In-Wall. Contest Specification.\r\nThe contest folds the figure in Red to fit within the hole shown in light grey \r\nThis Challenge is to solve ICFP problems 12, 15, 20, 25, 26, and 39 according to the Specification when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. ICFP problem 47 is of this form but with 10 hole vertices a brute force method may take 180 seconds so this will be a separate challenge.\r\nValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u003c= epsilon/1000000.  Lsqr is length squared.\r\nScore is sum of minimum square distances to the figure from each unique hole vertex. \r\nnpxy=Solve_nPeqnH1(hxy, pxy, mseg, epsilon)  \r\nThis challenge set all have optimal Scores of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one.\r\nThe function template includes routines to read ICFP problem files and to write ICFP solution files.\r\nThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use Register Team. Anyone can select Problems Page and then click problem numbers to see the puzzles and to download problem files.","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: 672px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 336px; transform-origin: 407px 336px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 14px 8.05px; transform-origin: 14px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.icfpconference.org/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP\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: 146.65px 8.05px; transform-origin: 146.65px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e held its annual 3-day contest in July 2021 with \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eHole-In-Wall\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: 29.95px 8.05px; transform-origin: 29.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Contest \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 1.95px 8.05px; transform-origin: 1.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 201px; 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 100.5px; text-align: left; transform-origin: 384px 100.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: 230.267px 8.05px; transform-origin: 230.267px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest folds the figure in Red to fit within the hole shown in light grey \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: middle;width: 208px;height: 201px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"208\" height=\"201\"\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 147px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 73.5px; text-align: left; transform-origin: 384px 73.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 263.717px 8.05px; transform-origin: 263.717px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to solve ICFP problems 12, 15, 20, 25, 26, and 39 according to the \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 66.1333px 8.05px; transform-origin: 66.1333px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. ICFP problem 47 is of this form but with 10 hole vertices a brute force method may take 180 seconds so this will be a separate challenge.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8.05px; transform-origin: 384px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52308\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eScore\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: 250.1px 8.05px; transform-origin: 250.1px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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: 155.5px 8.05px; transform-origin: 155.5px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003enpxy=Solve_nPeqnH1(hxy, pxy, mseg, epsilon)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 3.88333px 8.05px; transform-origin: 3.88333px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 383.017px 8.05px; transform-origin: 383.017px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge set all have optimal Scores of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one.\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: 303.4px 8.05px; transform-origin: 303.4px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.883px 8.05px; transform-origin: 375.883px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/register\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eRegister Team\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: 42.7833px 8.05px; transform-origin: 42.7833px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Anyone can select \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/problems\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblems Page\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: 256.35px 8.05px; transform-origin: 256.35px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function npxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon)\r\n%nH+1 equals nP and Score =0 optimally, nH is before repeating row 1\r\n%Create all nchoosek index set of np then try all permutations.\r\n%Check that all segments created have valid lengths\r\n%Create final point placement based upon segment constraints until sequence passes\r\n% npxy(pnckset(i),:)= hxy(1:end-1,:), width of pnckset is nP-1 so one node is TBD\r\n npxy=pxy;\r\n nseg=size(mseg,1);\r\n msegMM=calc_msegMM(pxy,mseg,epsilon,nseg); %Create Min and Max segment integer values\r\n \r\n hxy1=hxy(1:end-1,:); % speed up method\r\n np=size(npxy,1);\r\n vpn=zeros(np,1);\r\n % Note:  ***  Indicates line was changed from working program\r\n pnchk=nchoosek(1,1); % ***     Create nchoosek matrix of 1:np of np-1 points\r\n mperms=perms(1:np-1); % fast repetitve perms method, create a mapping array\r\n Lpnchk=size(pnchk,1);\r\n for ipnchk=1:Lpnchk % subset of figure vertices to place onto hole vertices\r\n  vpnchk=pnchk(ipnchk,:); % create a vector to use in perm set matrix\r\n  phset=vpnchk(mperms); % fast phset creation using perms matrix\r\n  nphset=size(phset,1);\r\n \r\n  for i=1:nphset %  This is the large loop over permutations\r\n   npxy=npxy*0; \r\n   vphset=phset(i,:); \r\n   npxy(vphset,:)=hxy1; % load hole vertices into figure vertex matrix, one row is [0 0] unset\r\n   vpn=0*vpn; \r\n   vpn(vphset)=1; % vpn is vector that indicates used figure vertices\r\n   fail=0;\r\n   for segptr=1:nseg\r\n    if prod(vpn([0 0])) % *** check if both figure vertices were set \r\n     L2seg=sum((npxy(mseg(segptr,1),:)-npxy(mseg(segptr,2),:)).^2);\r\n     if prod([0 0])\u003e0 % *** Verify L2seg is valid length squared\r\n      fail=1; % set flag to try next permutation\r\n      break; % break out of segment L2 checker\r\n     end\r\n    end\r\n   end\r\n   if fail,continue;end %length of subset placed vertices placed on hole vertices failed\r\n   \r\n   %Hole Points covered. Have 1 free point to place constrained by its segments\r\n   node=find(vpn==-1); % ***    Find unset node\r\n  \r\n   cptr=1; % Flag to enable first set of points for a segment containing unset vertex\r\n   for fseg=1:nseg\r\n    if prod(vpn([0 0])),continue;end % ***    Check if Both seg vertices set\r\n    MM=msegMM(fseg,:); % Create [Min Max] vector\r\n    Node2=mseg(fseg,:);\r\n    Node2(1)=[]; % ***  Reduce Node2 to a single value of the set vertex\r\n    \r\n    if cptr==1 % create an initial list of all in range and then inpolygon\r\n     Lmm=ceil(MM(2)^.5);\r\n     dmap=(0:Lmm).^2;\r\n     dmap=repmat(dmap,Lmm+1,1);\r\n     dmap=dmap+dmap'; % Create a 2D map of distance squared from [0,0]. dmap(1,1) is [0,0]\r\n     % This 2D map is of the Positive XY quadrant.  The goal will be to find  all valid [dx dy]\r\n     dmap(1,:)=0; % ***      Remove Points less than Min Seg length\r\n     dmap(1,:)=0; % ***      Remove Points greater than Max Seg length\r\n     [dx,dy]=find(dmap);\r\n     dx=dx-1; dy=dy-1; % remove 1,1 offset from grid\r\n     dxy=[dx dy;dx -dy;-dx dy;-dx -dy];  % Create all valid deltas by symmetry about [0,0]\r\n     mxy=dxy+npxy(Node2,:);  % Create matrix of all points in the valid region\r\n     % remove negatives from hole comparison as hole is all positive\r\n     mxy=mxy(1,:); % ***     Speed option remove all points with neg x values\r\n     mxy=mxy(1,:); % ***     Speed option remove all points with neg y values\r\n     in=inpolygon(mxy(:,1),mxy(:,2),hxy(:,1),hxy(:,2));  % Find all valid in-hole points\r\n     mxy=mxy(1,:); % ***   reduce to in-hole points\r\n     cptr=2; % set flag so next segment check only uses residual mxy points\r\n    else % test points from m for additional new fseg constraint and prune\r\n     Lmxy=size(mxy,1);\r\n     vmxy=ones(Lmxy,1); % Valid mxy vector\r\n     for ptrmxy=1:Lmxy\r\n      d2=sum(([0 0]).^2);  % *** Calc dist squared from mxy to Node2\r\n      if d2\u003cMM(1),vmxy(ptrmxy)=0;end % clear vmxy for too short\r\n      if d2\u003eMM(2),vmxy(ptrmxy)=0;end % clear vmxy for too long\r\n     end\r\n     mxy=mxy(vmxy\u003e0,:);\r\n     if isempty(mxy)    %If no points left in mxy then vertex could not reach from set nodes\r\n      fail=1;\r\n      break;\r\n     end\r\n    end % cptr==1\r\n   end % fseg 1:nseg\r\n   if fail,continue;end  % Try next permutation\r\n   \r\n   npxy(node,:)=mxy(1,:); % solution found\r\n   fprintf('Solution found\\n');\r\n   return;\r\n  end % i nhpset\r\n end %ipnchk Lpnchk\r\n \r\n fprintf('No solution found\\n');\r\nend %Solve_nPeqnH1\r\n\r\nfunction msegMM=calc_msegMM(pxy,mseg,epsilon,nseg)\r\n%determine Min and Max integer value of allowed length squared for each segment\r\n%abs(Lsqr(npxy,seg(i))/Lsqr(pxy,seg(i))-1)\u003c= epsilon/1000000.\r\n%mseg has indices of connected vertices [nseg,2].  The nseg may exceed number of vertices.\r\n msegMM=zeros(nseg,2);\r\n for i=1:nseg\r\n  Lseg=sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n  delta=floor(epsilon*Lseg/1000000);\r\n  msegMM(i,:)=[-delta delta]+Lseg;\r\n end\r\nend % calc_msegMM\r\n\r\n\r\n%These routines can be used to read ICFP problems, write ICFP text file, and visualize the data\r\n\r\n% function [epsilon,hxy,pxy,mseg]=read_problem(pid)\r\n%  fid=fopen([num2str(pid) '.problem'],'r');\r\n%   pstr=fgetl(fid);\r\n%  fclose(fid)\r\n%  \r\n%  Lpstr=length(pstr);\r\n%  holidx=findstr('\"hole\":[[',pstr); %starting location match\r\n%  epsidx=findstr('\"epsilon\":',pstr);\r\n%  figidx=findstr(',\"figure\"',pstr);\r\n%  edgidx=findstr('\"edges\":[[',pstr);\r\n%  veridx=findstr('\"vertices\":[[',pstr);\r\n%  epsilon=str2num(pstr(epsidx+10:figidx-1));\r\n%  \r\n%  hxy=reshape(str2num(pstr(holidx+8:epsidx-3)),2,[])';\r\n%  hxy=[hxy;hxy(1,:)]; %repeat row1 to close path\r\n%  \r\n%  pxy=reshape(str2num(pstr(veridx+12:Lpstr-3)),2,[])';\r\n%  \r\n%  mseg=reshape(str2num(pstr(edgidx+9:veridx-3)),2,[])'+1;\r\n% end % read_problem\r\n\r\n% function write_submission(npxy,pid)\r\n%  fname=['Solution_' num2str(pid) '_' datestr(now,'yyyymmdd_HHMMSS') '.txt'];\r\n%  fid=fopen(fname,'wt'); % t for notepad editing\r\n%  \r\n%  %Create ICFP submission\r\n%  fprintf('{\"vertices\": [');\r\n%  fprintf(fid,'{\"vertices\": [');\r\n%  for i=1:size(npxy,1)-1 \r\n%   fprintf('[%i,%i],',npxy(i,:));\r\n%   fprintf(fid,'[%i,%i],',npxy(i,:));\r\n%  end \r\n%  fprintf('[%i,%i]]}\\n',npxy(end,:));\r\n%  fprintf(fid,'[%i,%i]]}\\n',npxy(end,:));\r\n%  fclose(fid);\r\n% end\r\n\r\n\r\n% function hplot(vxy,qxy,mseg,Lmseg,id)\r\n% %Need check of segment crossing a hole segment but ignore endpoint\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1)%length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i),'FontSize',12);\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    if in(mseg(i,1))+in(mseg(i,2))\u003c2\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment to OOB pt\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-')\r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%    \r\n%   axis tight\r\n%   axis ij\r\n%   hold off  \r\n% end % hplot\r\n\r\n% function hplot3(vxy,qxy,mseg,Lmseg,id,segMM)\r\n%  segMNM=[segMM(:,1) segMM(:,1)+segMM(:,2) segMM(:,2)];\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1) %length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i));\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    d2seg=(qxy(mseg(i,1),1)-qxy(mseg(i,2),1))^2+(qxy(mseg(i,1),2)-qxy(mseg(i,2),2))^2;\r\n%    if d2seg\u003csegMNM(i,1)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-') % segment too short\r\n%    elseif d2seg\u003esegMNM(i,3)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment too long\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'g-') \r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%   \r\n%   axis tight\r\n%   axis ij\r\n%   hold off\r\n% end % hplot3","test_suite":"%%\r\ntic\r\n% ICFP Problem Id 12\r\nepsilon=0;\r\nhxy=[28 0;56 4;0 4;28 0];\r\npxy=[0 20;20 0;20 40;40 20];\r\nmseg=[1 2;1 3;2 4;3 4];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 15\r\nepsilon=1250;\r\nhxy=[15 0;35 20;20 44;0 24;15 0];\r\npxy=[0 20;20 0;20 40;40 20;49 45];\r\nmseg=[1 2;1 3;2 4;3 4;3 5;4 5];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 20\r\n% nh 5  np 6\r\nepsilon=4757;\r\nhxy=[20 0;62 39;41 56;20 40;0 20;20 0];\r\npxy=[20 12;0 32;46 1;26 21;67 17;46 0];\r\nmseg=[1 2;1 3;2 4;3 4;3 5;4 6;5 6];\r\n\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 25\r\n% nh 6  np 7\r\nepsilon=16310;\r\nhxy=[0 20;28 0;55 61;40 96;7 91;0 54;0 20];\r\npxy=[18 2;52 0;16 11;0 31;37 31;47 24;14 5];\r\nmseg=[1 2;1 4;1 5;2 3;2 5;3 6;4 5;5 7;6 7];\r\n\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 26\r\nepsilon=15671;\r\nhxy=[17 17;46 0;76 17;80 51;26 65;0 46;17 17];\r\npxy=[64 0;34 15;53 30;53 43;19 45;34 14;0 12];\r\nmseg=[1 2;1 3;2 4;2 5;3 5;3 7;4 5;4 6;5 6;5 7;6 7];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 39\r\nepsilon=20037;\r\nhxy=[5 7;39 0;59 33;56 76;45 110;6 111;0 73;0 39;5 7];\r\npxy=[4 8;6 42;23 34;37 19;35 23;16 0;5 42;38 56;0 35];\r\nmseg=[1 2;1 3;1 5;2 4;2 5;3 6;4 7;5 8;5 9;6 9;7 8;8 9];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_nPeqnH1(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\nassert(isequal(valid,1))\r\n%%\r\n% ICFP Problem Id 47  75% of hole edges not covered in solution. All hole vertices covered.\r\n% possible method force longest fig segment onto pair hole vertices then perms\r\n% brute force processing will take 180 seconds so not part of this cody challenge\r\nepsilon=41323;\r\nhxy=[6 14;36 19;40 17;69 0;79 21;41 36;36 33;16 44;7 34;0 28;6 14];\r\npxy=[0 11;1 85;8 56;11 0;14 45;14 59;14 88;30 37;30 56;56 85;67 64];\r\nmseg=[1 4;4 8;8 5;5 1;8 11;11 10;10 9;9 8;5 6;6 9;9 7;7 2;2 6;6 3;3 5];\r\ntoc","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2021-07-21T13:12:20.000Z","updated_at":"2021-07-21T19:14:23.000Z","published_at":"2021-07-21T19:14:23.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.icfpconference.org/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e held its annual 3-day contest in July 2021 with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eHole-In-Wall\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Contest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest folds the figure in Red to fit within the hole shown in light grey \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"201\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"208\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"middle\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to solve ICFP problems 12, 15, 20, 25, 26, and 39 according to the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. ICFP problem 47 is of this form but with 10 hole vertices a brute force method may take 180 seconds so this will be a separate challenge.\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\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52308\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eScore\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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\u003enpxy=Solve_nPeqnH1(hxy, pxy, mseg, epsilon)\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:t\u003eThis challenge set all have optimal Scores of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/register\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRegister Team\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Anyone can select \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/problems\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblems Page\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":52355,"title":"ICFP2021 Hole-In-Wall: Solve Problem 47,   Score=0, Figure Vertices 11,  Hole Vertices 10","description":"The ICFP held its annual 3-day contest in July 2021 with Hole-In-Wall. Contest Specification.\r\nThe contest folds the figure in Red to fit within the hole shown in light grey. A final solution is shown to aid in programming. \r\nThis Challenge is to solve ICFP problems 47 according to the Specification when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. Brute force of  problem 47 may take 180 seconds due to the 10 hole vertices.\r\nValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u003c= epsilon/1000000.  Lsqr is length squared.\r\nScore is sum of minimum square distances to the figure from each unique hole vertex. \r\nnpxy=Solve_ICFP047(hxy, pxy, mseg, epsilon)  \r\nThis challenge requires a Score of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one. One method would be to reduce the nchoosek to force the longest figure segment to fit across a pair of hole vertices.  This problem with its solution shown shows that a recursive point to available hole vertices could be a more general solution.\r\nThe function template includes routines to read ICFP problem files and to write ICFP solution files.\r\nThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use Register Team. Anyone can select Problems Page and then click problem numbers to see the puzzles and to download problem files.","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: 775px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 387.5px; transform-origin: 407px 387.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; 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: 14px 8.05px; transform-origin: 14px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://www.icfpconference.org/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eICFP\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: 146.65px 8.05px; transform-origin: 146.65px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e held its annual 3-day contest in July 2021 with \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eHole-In-Wall\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: 29.95px 8.05px; transform-origin: 29.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Contest \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 1.95px 8.05px; transform-origin: 1.95px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 283px; 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 141.5px; text-align: left; transform-origin: 384px 141.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: 379.9px 8.05px; transform-origin: 379.9px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe contest folds the figure in Red to fit within the hole shown in light grey. A final solution is shown to aid in programming. \u003c/span\u003e\u003c/span\u003e\u003cimg class=\"imageNode\" style=\"vertical-align: top;width: 541px;height: 262px\" src=\"data:image/png;base64,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\" data-image-state=\"image-loaded\" width=\"541\" height=\"262\"\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: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 63px; text-align: left; transform-origin: 384px 63px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 191.767px 8.05px; transform-origin: 191.767px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis Challenge is to solve ICFP problems 47 according to the \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://icfpcontest2021.github.io/spec-v4.1.pdf\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eSpecification\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: 138.367px 8.05px; transform-origin: 138.367px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. Brute force of  problem 47 may take 180 seconds due to the 10 hole vertices.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8.05px; transform-origin: 384px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52308\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eScore\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: 250.1px 8.05px; transform-origin: 250.1px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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: 152.783px 8.05px; transform-origin: 152.783px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003enpxy=Solve_ICFP047(hxy, pxy, mseg, epsilon)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 3.88333px 8.05px; transform-origin: 3.88333px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 384px 8.05px; transform-origin: 384px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThis challenge requires a Score of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one. One method would be to reduce the nchoosek to force the longest figure segment to fit across a pair of hole vertices.  This problem with its solution shown shows that a recursive point to available hole vertices could be a more general solution.\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: 303.4px 8.05px; transform-origin: 303.4px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 375.883px 8.05px; transform-origin: 375.883px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/register\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eRegister Team\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: 42.7833px 8.05px; transform-origin: 42.7833px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. Anyone can select \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://poses.live/problems\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblems Page\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: 256.35px 8.05px; transform-origin: 256.35px 8.05px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function npxy=Solve_ICFP047(hxy,pxy,mseg,epsilon)\r\n%Problem 47 shows potential for recursion but a brute force with reduction can quickly solve\r\n% nH equals nP-1 and Score=0 optimally, nH is before repeating row 1\r\n% Since Score=0 then all hole vertices are covered. \r\n% Know that only 1 figure vertex not on a hole vertex\r\n% Assume that the longest segment spans two hole vertices not necessarily sequential hole nodes\r\n% Identify longest segment and associated hole vertices\r\n% Try all permutations of nchoosek(1:nP,nP-1) after reduced by Long segment nodes and hole nodes \r\n% Verify segments where both nodes are in nck set are correct length\r\n% For unselected vertex find all segments containing and create valid pt sets\r\n% for each segment constraint.  Find point common to all constraint sets\r\n\r\n npxy=pxy;\r\n nseg=size(mseg,1);\r\n msegMM=calc_msegMM(pxy,mseg,epsilon,nseg); %Create Min and Max segment integer values\r\n %hplot(hxy,pxy,mseg,nseg,1);\r\n %hplot3(hxy,npxy,mseg,nseg,3,msegMM);\r\n %hplot4(hxy,npxy,mseg,nseg,4,msegMM);\r\n \r\n hxy1=hxy(1:end-1,:);\r\n np=size(npxy,1); %\r\n vpn=zeros(np,1);\r\n pnchk=nchoosek(1:np,np-1);\r\n \r\n % Note:  ***  Indicates line was changed from working program\r\n ptrLseg=find(msegMM(:,2)==0,1,'first'); % ***  Find max L segment\r\n nodesL=mseg(ptrLseg,:);  % figure nodes of longest figure segment\r\n nodesLMM=msegMM(ptrLseg,:); % Min and Max of selected long figure segment\r\n found=0;\r\n nh=size(hxy,1);\r\n for hi=1:nh-2  % search all hole vertices hi to hj that matches long figure segment\r\n  for hj=hi+1:nh-1\r\n   if prod([0 0])\u003c=0 % ***   Find pair of valid hole vertices\r\n    found=1;\r\n    break;\r\n   end\r\n  end %hj nh\r\n  if found,break;end\r\n end %hi nh\r\n % hi,hj Hole indices that are nodes that fit longest segment\r\n % that will need to be either of nodesL\r\n \r\n % remove nchoosek vectors that omit the long segment of nodesL\r\n pnchkval=sum([0 0],2)\u003e1; % ***\r\n pnchk=pnchk(pnchkval,:);\r\n Lpnchk=size(pnchk,1); % Length of final nchoosek matrix\r\n \r\n mperms=perms(1:np-1); % fast repetitve perms method, create a mapping array\r\n for ipnchk=1:Lpnchk %subset of figure vertices to place onto hole vertices\r\n  vpnchk=pnchk(ipnchk,:);\r\n  phset=vpnchk(mperms); \r\n  % remove matrix rows that lack nodesL in hi,hj columns\r\n  % Massive reduction in phset matrix \r\n  permvalid=phset(:,hi)==0 | phset(:,hi)==0; % ***   match nodesL\r\n  phset=phset(permvalid,:);\r\n  permvalid=phset(:,hj)==0 | phset(:,hj)==0; % ***   match nodesL\r\n  phset=phset(permvalid,:); % Final reduced permutation set that must have nodesL in cols hi,hj\r\n  \r\n  nphset=size(phset,1); % greatly reduced from 10! for each nchoosek vector\r\n \r\n  for i=1:nphset\r\n   npxy=npxy*0;\r\n   vphset=phset(i,:); \r\n   npxy(vphset,:)=hxy1; % load hole vertices into figure vertex matrix, one row is [0 0] unset\r\n   vpn=0*vpn;\r\n   vpn(vphset)=1; % vpn is vector that indicates used figure vertices\r\n   fail=0;\r\n   for segptr=1:nseg\r\n    if prod(vpn(mseg(segptr,:)))\r\n     L2seg=sum((npxy(mseg(segptr,1),:)-npxy(mseg(segptr,2),:)).^2);\r\n     if prod([0 0])\u003e0  % *** Verify L2seg is valid length squared\r\n      fail=1;\r\n      break;\r\n     end\r\n    end\r\n   end\r\n   if fail,continue;end %length of subset placed vertices placed on hole ver failed\r\n   %Hole Points covered. Have 1 free point to place constrained by its segments\r\n   node=find(vpn==0); % Free node to place\r\n  \r\n   cptr=1;\r\n   for fseg=1:nseg\r\n    if prod(vpn(mseg(fseg,:))),continue;end % Both seg vertices placed\r\n    MM=msegMM(fseg,:);  % Create [Min Max] vector\r\n    Node2=mseg(fseg,:);\r\n    Node2(Node2==node)=[]; % Reduce Node2 to a single value of the set vertex\r\n    \r\n    if cptr==1 % create an initial list of all in range and then inpolygon\r\n     Lmm=ceil(MM(2)^.5);\r\n     dmap=(0:Lmm).^2;\r\n     dmap=repmat(dmap,Lmm+1,1);\r\n     dmap=dmap+dmap'; % Create a 2D map of distance squared from [0,0]. dmap(1,1) is [0,0]\r\n     % This 2D map is of the Positive XY quadrant.  The goal will be to find  all valid [dx dy]\r\n     dmap(dmap\u003cMM(1))=0; % Remove Points less than Min Seg length\r\n     dmap(1,:)=0; % ***      Remove Points greater than Max Seg length\r\n     [dx,dy]=find(dmap);\r\n     dx=dx-1; dy=dy-1; % remove 1,1 offset from grid\r\n     dxy=[dx dy;dx -dy;-dx dy;-dx -dy];% Create all valid deltas by symmetry about [0,0]\r\n     mxy=dxy+npxy(Node2,:);% Create matrix of all points in the valid region\r\n     % remove negatives from hole comparison as hole is all positive\r\n     mxy=mxy(mxy(:,1)\u003e=0,:); %         Speed option remove all points with neg x values\r\n     mxy=mxy(1,:);           % ***     Speed option remove all points with neg y values\r\n     in=inpolygon(mxy(:,1),mxy(:,2),hxy(:,1),hxy(:,2));\r\n     mxy=mxy(in,:); %    reduce to in-hole points\r\n     cptr=2;\r\n    else % test points from m for additional new fseg constraint and prune\r\n     Lmxy=size(mxy,1);\r\n     vmxy=ones(Lmxy,1); % Valid mxy vector\r\n     for ptrmxy=1:Lmxy\r\n      d2=sum((mxy(ptrmxy,:)-npxy(Node2,:)).^2); % Calc dist squared from mxy to Node2\r\n      if d2\u003cMM(1),vmxy(ptrmxy)=0;end %   clear vmxy for too short\r\n      if d2\u003eMM(2),vmxy(ptrmxy)=0;end %   clear vmxy for too long\r\n     end\r\n     mxy=mxy(vmxy\u003e0,:);\r\n     if isempty(mxy) %If no points left in mxy then vertex could not reach from set nodes\r\n      fail=1;\r\n      break;\r\n     end\r\n    end % cptr==1\r\n   end % fseg 1:nseg\r\n   if fail,continue;end\r\n   \r\n   npxy(node,:)=mxy(1,:); % solution found  are all valid??? Possible seg fail\r\n   \r\n   fprintf('Solution found\\n');\r\n   %hplot4(hxy,npxy,mseg,nseg,4,msegMM);\r\n   return;\r\n       \r\n  end % nphset\r\n end % ipnchk\r\n \r\n fprintf('No solution found\\n');\r\nend %Solve_ICFP047\r\n\r\nfunction msegMM=calc_msegMM(pxy,mseg,epsilon,nseg)\r\n%determine Min and Max integer value of allowed length squared for each segment\r\n%abs(Lsqr(npxy,seg(i))/Lsqr(pxy,seg(i))-1)\u003c= epsilon/1000000.\r\n%mseg has indices of connected vertices [nseg,2].  The nseg may exceed number of vertices.\r\n msegMM=zeros(nseg,2);\r\n for i=1:nseg\r\n  Lseg=sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n  delta=floor(epsilon*Lseg/1000000);\r\n  msegMM(i,:)=[-delta delta]+Lseg;\r\n end\r\nend % calc_msegMM\r\n\r\n\r\n%These routines can be used to read ICFP problems, write ICFP text file, and visualize the data\r\n\r\n% function [epsilon,hxy,pxy,mseg]=read_problem(pid)\r\n%  fid=fopen([num2str(pid) '.problem'],'r');\r\n%   pstr=fgetl(fid);\r\n%  fclose(fid)\r\n%  \r\n%  Lpstr=length(pstr);\r\n%  holidx=findstr('\"hole\":[[',pstr); %starting location match\r\n%  epsidx=findstr('\"epsilon\":',pstr);\r\n%  figidx=findstr(',\"figure\"',pstr);\r\n%  edgidx=findstr('\"edges\":[[',pstr);\r\n%  veridx=findstr('\"vertices\":[[',pstr);\r\n%  epsilon=str2num(pstr(epsidx+10:figidx-1));\r\n%  \r\n%  hxy=reshape(str2num(pstr(holidx+8:epsidx-3)),2,[])';\r\n%  hxy=[hxy;hxy(1,:)]; %repeat row1 to close path\r\n%  \r\n%  pxy=reshape(str2num(pstr(veridx+12:Lpstr-3)),2,[])';\r\n%  \r\n%  mseg=reshape(str2num(pstr(edgidx+9:veridx-3)),2,[])'+1;\r\n% end % read_problem\r\n\r\n% function write_submission(npxy,pid)\r\n%  fname=['Solution_' num2str(pid) '_' datestr(now,'yyyymmdd_HHMMSS') '.txt'];\r\n%  fid=fopen(fname,'wt'); % t for notepad editing\r\n%  \r\n%  %Create ICFP submission\r\n%  fprintf('{\"vertices\": [');\r\n%  fprintf(fid,'{\"vertices\": [');\r\n%  for i=1:size(npxy,1)-1 \r\n%   fprintf('[%i,%i],',npxy(i,:));\r\n%   fprintf(fid,'[%i,%i],',npxy(i,:));\r\n%  end \r\n%  fprintf('[%i,%i]]}\\n',npxy(end,:));\r\n%  fprintf(fid,'[%i,%i]]}\\n',npxy(end,:));\r\n%  fclose(fid);\r\n% end\r\n\r\n\r\n% function hplot(vxy,qxy,mseg,Lmseg,id)\r\n% %Need check of segment crossing a hole segment but ignore endpoint\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1)%length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i),'FontSize',12);\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    if in(mseg(i,1))+in(mseg(i,2))\u003c2\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment to OOB pt\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-')\r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%    \r\n%   axis tight\r\n%   axis ij\r\n%   hold off  \r\n% end % hplot\r\n\r\n% function hplot3(vxy,qxy,mseg,Lmseg,id,segMM)\r\n%  segMNM=[segMM(:,1) segMM(:,1)+segMM(:,2) segMM(:,2)];\r\n%  [in] = inpolygon(qxy(:,1),qxy(:,2),vxy(:,1),vxy(:,2)); % inside or on edge\r\n%  figure(id)\r\n%   plot(vxy(:,1),vxy(:,2),'k.-') % hole polygon\r\n%   hold on\r\n%   plot(qxy(in,1),qxy(in,2),'b*') % points inside\r\n%   plot(qxy(~in,1),qxy(~in,2),'ro') % points outside\r\n%   for i=1:size(qxy,1) %length(xq)\r\n%    text(qxy(i,1)+.75,qxy(i,2)-1.5,num2str(i));\r\n%   end\r\n%   \r\n%   for i=1:Lmseg\r\n%    d2seg=(qxy(mseg(i,1),1)-qxy(mseg(i,2),1))^2+(qxy(mseg(i,1),2)-qxy(mseg(i,2),2))^2;\r\n%    if d2seg\u003csegMNM(i,1)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'b-') % segment too short\r\n%    elseif d2seg\u003esegMNM(i,3)\r\n%      plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'r-') % segment too long\r\n%    else\r\n%     plot(qxy(mseg(i,:),1),qxy(mseg(i,:),2),'g-') \r\n%    end\r\n%    text(sum(qxy(mseg(i,:),1))/2,sum(qxy(mseg(i,:),2))/2,num2str(i),'Color','b');\r\n%   end\r\n%   \r\n%   %o+*.x_|sd^v\u003e\u003cph\r\n%   %colors ymcrgbwk\r\n%   \r\n%   axis tight\r\n%   axis ij\r\n%   hold off\r\n% end % hplot3\r\n\r\n\r\n","test_suite":"%%\r\n% ICFP Problem  47  \r\n% 75% of hole edges not covered in solution. All hole vertices covered.\r\n% possible method force longest fig segment onto pair hole vertices then perms\r\n% brute force processing will take 180 seconds so not part of this cody challenge\r\ntic\r\n% ICFP Problem Id 47\r\n% nh 10  np 11\r\nepsilon=41323;\r\nhxy=[6 14;36 19;40 17;69 0;79 21;41 36;36 33;16 44;7 34;0 28;6 14];\r\npxy=[0 11;1 85;8 56;11 0;14 45;14 59;14 88;30 37;30 56;56 85;67 64];\r\nmseg=[1 4;4 8;8 5;5 1;8 11;11 10;10 9;9 8;5 6;6 9;9 7;7 2;2 6;6 3;3 5];\r\nnseg=size(mseg,1);\r\nnpxy=Solve_ICFP047(hxy,pxy,mseg,epsilon);\r\nvalid=isequal(npxy,round(npxy));\r\nvalid=valid*isequal(size(npxy),size(pxy));\r\nfor i=1:size(hxy,1) % verify all holes covered\r\n valid=valid*(min(sum(abs(npxy-hxy(i,:)),2))==0);\r\nend\r\nin=inpolygon(npxy(:,1),npxy(:,2),hxy(:,1),hxy(:,2));\r\nvalid=valid*(nnz(in==0)==0);\r\nfor i=1:nseg\r\n L2pxyseg =  sum((pxy(mseg(i,1),:)-pxy(mseg(i,2),:)).^2);\r\n L2npxyseg = sum((npxy(mseg(i,1),:)-npxy(mseg(i,2),:)).^2);\r\n if abs(L2npxyseg/L2pxyseg-1)*1000000 \u003e epsilon\r\n  valid = 0;\r\n  break;\r\n end\r\nend\r\nfprintf('%i %i\\n',npxy');\r\ntoc\r\nassert(isequal(valid,1))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2021-07-21T17:55:33.000Z","updated_at":"2021-07-22T01:54:06.000Z","published_at":"2021-07-22T01:54:06.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.icfpconference.org/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eICFP\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e held its annual 3-day contest in July 2021 with \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eHole-In-Wall\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Contest \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest folds the figure in Red to fit within the hole shown in light grey. A final solution is shown to aid in programming. \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"262\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"541\\\"/\u003e\u003cw:attr w:name=\\\"verticalAlign\\\" w:val=\\\"top\\\"/\u003e\u003cw:attr w:name=\\\"altText\\\" w:val=\\\"\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to solve ICFP problems 47 according to the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://icfpcontest2021.github.io/spec-v4.1.pdf\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpecification\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e when given the hole vertices in hxy, original figure vertices in pxy, segment matrix mseg, and epsilon. The hxy matrix is [N+1,2] where N is number of hole vertices. A repeat of the first vertex occurs for drawing the hole.  The pxy(original) and npxy(final) matrices are [P,2] where P is the number of figure vertices. The mseg indicates connected vertices that must maintain a length as a function of epsilon from the original length. The final figure vertices must be integer thus the allowed fuzziness of segment lengths. Brute force of  problem 47 may take 180 seconds due to the 10 hole vertices.\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\u003eValid is 1) all npxy vertices on or inside the hole, hxy 2) all lengths squared of npxy segments must match the pxy segments within an allowed epsilon, abs(Lsqr(npxy,seg(i,:))/Lsqr(pxy,seg(i,:))-1)\u0026lt;= epsilon/1000000.  Lsqr is length squared.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52308\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eScore\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is sum of minimum square distances to the figure from each unique hole vertex. \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\u003enpxy=Solve_ICFP047(hxy, pxy, mseg, epsilon)\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:t\u003eThis challenge requires a Score of zero. The npxy vertices set must contain an nchoosek(1:nP,nP-1) permutation of the hole vertices as number of figure vertices,nP, equals hole vertices, nH, plus one. One method would be to reduce the nchoosek to force the longest figure segment to fit across a pair of hole vertices.  This problem with its solution shown shows that a recursive point to available hole vertices could be a more general solution.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function template includes routines to read ICFP problem files and to write ICFP solution files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe ICFP 2021 Hole In Wall contest site has enabled a public user login to allow submissions. A login must be created to access all the problems and to submit solutions. Solutions are simple text files. Other challenges will show reading files, drawing figures, and producing submission files. To fully access the ICFP/Problems site use \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/register\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRegister Team\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Anyone can select \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://poses.live/problems\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblems Page\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and then click problem numbers to see the puzzles and to download problem files.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"target\":\"/media/image1.png\",\"relationshipId\":\"rId1\"}]},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}"},{"id":42290,"title":"GJam 2015 Rd1B: Noisy Neighbors","description":"This Challenge is derived from \u003chttps://code.google.com/codejam/contest/8224486/dashboard#s=p1 GJam 2015 Rd 1B: Noisy Neighbors\u003e. Fastest completion - 8 minutes.\r\n\r\nDetermine minimum number of adjacencies for N placed people in an RxC hotel matrix\r\n\r\nInput: m, an RxC zeros array; N number of rooms to be filled\r\n\r\nOutput: NN, minimum number of common walls\r\n\r\nExamples: Small Case 1\u003c=R*C\u003c=16, 0\u003c=N\u003c=R*C\r\n\r\n  [1 1 1;1 0 1;1 1 1] has minimum 8 common walls vs [1 1 1;1 1 1;1 1 0] has 10 common\r\n  [1;0;0;1] has 0 common walls\r\n  ones(2,3) has 7 common walls\r\n\r\n\r\nTheory: The small case can be solved with brute force using vector set with nchoosek followed by processing of convolutions. The large case has 10000 rooms making brute force hopeless.\r\n\r\n\r\nAdditional GJam solutions can be found at \u003chttp://www.go-hero.net/jam/15 Example GJam Matlab solutions\u003e. Select Find Solutions, change Language to Matlab. The Test Suite, at the bottom, contains a full GJam Matlab solution.","description_html":"\u003cp\u003eThis Challenge is derived from \u003ca href = \"https://code.google.com/codejam/contest/8224486/dashboard#s=p1\"\u003eGJam 2015 Rd 1B: Noisy Neighbors\u003c/a\u003e. Fastest completion - 8 minutes.\u003c/p\u003e\u003cp\u003eDetermine minimum number of adjacencies for N placed people in an RxC hotel matrix\u003c/p\u003e\u003cp\u003eInput: m, an RxC zeros array; N number of rooms to be filled\u003c/p\u003e\u003cp\u003eOutput: NN, minimum number of common walls\u003c/p\u003e\u003cp\u003eExamples: Small Case 1\u0026lt;=R*C\u0026lt;=16, 0\u0026lt;=N\u0026lt;=R*C\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[1 1 1;1 0 1;1 1 1] has minimum 8 common walls vs [1 1 1;1 1 1;1 1 0] has 10 common\r\n[1;0;0;1] has 0 common walls\r\nones(2,3) has 7 common walls\r\n\u003c/pre\u003e\u003cp\u003eTheory: The small case can be solved with brute force using vector set with nchoosek followed by processing of convolutions. The large case has 10000 rooms making brute force hopeless.\u003c/p\u003e\u003cp\u003eAdditional GJam solutions can be found at \u003ca href = \"http://www.go-hero.net/jam/15\"\u003eExample GJam Matlab solutions\u003c/a\u003e. Select Find Solutions, change Language to Matlab. The Test Suite, at the bottom, contains a full GJam Matlab solution.\u003c/p\u003e","function_template":"function NN = Noisy_Neighbors(m,N)\r\n% m is an RxC zeros array\r\n% N is number of cells to be occupied\r\n% NN is number of edge adjacencies\r\n% Goal is to minimize NN\r\n\r\n  NN=0;\r\nend","test_suite":"tic\r\n%%\r\nm=zeros(5,2);N=8;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=14;\r\nNNexp=18;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(8,2);N=12;\r\nNNexp=10;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,3);N=6;\r\nNNexp=3;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,6);N=12;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=5;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=11;\r\nNNexp=8;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(7,2);N=13;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=15;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=9;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=12;\r\nNNexp=17;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=13;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,4);N=5;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=5;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=16;\r\nNNexp=15;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,5);N=8;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=10;\r\nNNexp=6;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=9;\r\nNNexp=3;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,2);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=15;\r\nNNexp=20;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,2);N=4;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=11;\r\nNNexp=8;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=9;\r\nNNexp=1;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=16;\r\nNNexp=24;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=9;\r\nNNexp=1;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=15;\r\nNNexp=22;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,5);N=9;\r\nNNexp=10;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=10;\r\nNNexp=6;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=15;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,2);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,2);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,7);N=13;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,3);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(7,2);N=11;\r\nNNexp=10;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,1);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,6);N=9;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=3;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=15;\r\nNNexp=22;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,2);N=6;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,4);N=12;\r\nNNexp=17;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,3);N=6;\r\nNNexp=7;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,1);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=16;\r\nNNexp=15;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,2);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,3);N=9;\r\nNNexp=12;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(9,1);N=6;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=12;\r\nNNexp=11;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,2);N=3;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(7,2);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=6;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,3);N=4;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,15);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(16,1);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=9;\r\nNNexp=3;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(15,1);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(2,4);N=6;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=7;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=12;\r\nNNexp=11;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,4);N=1;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=8;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,16);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=3;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=0;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,13);N=9;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=2;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(1,9);N=6;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(6,2);N=12;\r\nNNexp=16;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=8;\r\nNNexp=4;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=5;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(5,3);N=14;\r\nNNexp=18;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(4,3);N=7;\r\nNNexp=2;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(6,2);N=4;\r\nNNexp=0;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\nm=zeros(3,5);N=13;\r\nNNexp=14;\r\nNN=Noisy_Neighbors(m,N);\r\nassert(isequal(NNexp,NN))\r\n%%\r\ntoc\r\n%%\r\n% function GJam_Rd1B_2015b\r\n%  fn='B-small-practice.in';\r\n%  [data] = read_file(fn); % \r\n%  fidG = fopen('B-small-practice.out', 'w');\r\n%  \r\n% tic\r\n% for i=1:size(data,2) % Cell array has N cols of cases\r\n%  NN = Noisy_Neighbors(data{i});\r\n%  fprintf(fidG,'Case #%i: %i\\n',i,NN);\r\n%  \r\n%  fprintf('Case #%i: %i\\n',i,NN);   \r\n% end\r\n% toc\r\n% fclose(fidG);\r\n% end\r\n% \r\n% function val=Noisy_Neighbors(v)\r\n%  r=v(1);c=v(2);N=v(3);\r\n%  m=zeros(r,c);\r\n%  if N==0\r\n%   val=0;\r\n%   return;\r\n%  end\r\n%  \r\n% ptrset=find(m==0);\r\n% \r\n% val=Inf;\r\n% tlocs=nchoosek(ptrset,N);\r\n% for i=1:size(tlocs,1)\r\n%  m=m*0;\r\n%  tlocv=tlocs(i,:);\r\n%  m(tlocv)=1;\r\n%  vchk=nnz(conv2(m,[1 1])==2)+nnz(conv2(m,[1;1])==2);\r\n%  \r\n%  if vchk\u003cval\r\n%   val=vchk;\r\n%  end\r\n%  if val==0,break;end;\r\n% end\r\n%  \r\n% end\r\n% \r\n% function [d] = read_file(fn)\r\n% d={};\r\n% fid=fopen(fn);\r\n% fgetl(fid); % Total Count ignore\r\n% ptr=0;\r\n% while ~feof(fid)\r\n%  ptr=ptr+1;\r\n%  v=str2num(fgetl(fid)); % r,c,N\r\n%  \r\n%  d{ptr}=v;\r\n%  \r\n% end % feof\r\n%  fclose(fid);\r\n% \r\n% end % read_file\r\n%%\r\ntoc\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":5,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":10,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-05-03T17:57:59.000Z","updated_at":"2015-05-03T18:31:40.000Z","published_at":"2015-05-03T18:31:40.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is derived from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://code.google.com/codejam/contest/8224486/dashboard#s=p1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGJam 2015 Rd 1B: Noisy Neighbors\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Fastest completion - 8 minutes.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eDetermine minimum number of adjacencies for N placed people in an RxC hotel matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: m, an RxC zeros array; N number of rooms to be filled\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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: NN, minimum number of common walls\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples: Small Case 1\u0026lt;=R*C\u0026lt;=16, 0\u0026lt;=N\u0026lt;=R*C\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[[1 1 1;1 0 1;1 1 1] has minimum 8 common walls vs [1 1 1;1 1 1;1 1 0] has 10 common\\n[1;0;0;1] has 0 common walls\\nones(2,3) has 7 common walls]]\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\u003eTheory: The small case can be solved with brute force using vector set with nchoosek followed by processing of convolutions. The large case has 10000 rooms making brute force hopeless.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAdditional GJam solutions can be found at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.go-hero.net/jam/15\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eExample GJam Matlab solutions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. Select Find Solutions, change Language to Matlab. The Test Suite, at the bottom, contains a full GJam Matlab solution.\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":44779,"title":"Don't be mean.  Be nice!","description":"For this problem, you will be given a range of single digits R, and a separate number K.  You job is to calculate the mean of all K digit numbers that contain only distinct digits from the range R.\r\n\r\nFor example, if R=1:4 and K=2, you should calculate the mean of 12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, and 43, as these are all of the two digit numbers that contain two distinct numbers from the range 1:4.  The numbers 11, 22, 33 and 44 are not included, as they contain multiple copies of the same digit.\r\n\r\nIf 0 is included in R, it should not be a leading digit for any of the numbers, so an R of 0:2 and K=3 would include:\r\n\r\n* 120\r\n* 210\r\n* 201\r\n* 102\r\n\r\nbut not 012 or 021 for the purposes of this calculation.\r\n\r\nYou can assume that R will always have at least K digits, and there will be no repeating digits in R.","description_html":"\u003cp\u003eFor this problem, you will be given a range of single digits R, and a separate number K.  You job is to calculate the mean of all K digit numbers that contain only distinct digits from the range R.\u003c/p\u003e\u003cp\u003eFor example, if R=1:4 and K=2, you should calculate the mean of 12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, and 43, as these are all of the two digit numbers that contain two distinct numbers from the range 1:4.  The numbers 11, 22, 33 and 44 are not included, as they contain multiple copies of the same digit.\u003c/p\u003e\u003cp\u003eIf 0 is included in R, it should not be a leading digit for any of the numbers, so an R of 0:2 and K=3 would include:\u003c/p\u003e\u003cul\u003e\u003cli\u003e120\u003c/li\u003e\u003cli\u003e210\u003c/li\u003e\u003cli\u003e201\u003c/li\u003e\u003cli\u003e102\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ebut not 012 or 021 for the purposes of this calculation.\u003c/p\u003e\u003cp\u003eYou can assume that R will always have at least K digits, and there will be no repeating digits in R.\u003c/p\u003e","function_template":"function y = dont_be_mean(R,k)\r\n  y = k.^R;\r\nend","test_suite":"%%\r\nR=1:4;k=2;y_correct = 27.5;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=0:8;k=3;y_correct = 493.3125;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=[1 2 4 6 8];k=4;y_correct = 4666.2;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=[2 8 6 7 4 5];k=1;y_correct = 5.33333333333333;\r\na=dont_be_mean(R,k)\r\nassert(abs(a-y_correct)\u003c1e-10)\r\n%%\r\nR=0:9;\r\ny=0;\r\nfor k=1:8\r\n    y=y+dont_be_mean(R,k);\r\nend\r\ny_correct=61042519.44444444;\r\nassert(abs(y-y_correct)\u003c1e-3)\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":1,"created_by":1615,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":37,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":68,"created_at":"2018-11-07T18:32:08.000Z","updated_at":"2026-03-07T15:13:39.000Z","published_at":"2018-11-07T18:32:08.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\u003eFor this problem, you will be given a range of single digits R, and a separate number K. You job is to calculate the mean of all K digit numbers that contain only distinct digits from the range R.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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, if R=1:4 and K=2, you should calculate the mean of 12, 13, 14, 21, 23, 24, 31, 32, 34, 41, 42, and 43, as these are all of the two digit numbers that contain two distinct numbers from the range 1:4. The numbers 11, 22, 33 and 44 are not included, as they contain multiple copies of the same digit.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf 0 is included in R, it should not be a leading digit for any of the numbers, so an R of 0:2 and K=3 would include:\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\u003e120\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\u003e210\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\u003e201\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\u003e102\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ebut not 012 or 021 for the purposes of this calculation.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou can assume that R will always have at least K digits, and there will be no repeating digits in R.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":42765,"title":"Maximize Non-Co-Planar Points in an N-Cube","description":"This Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\r\n\r\n  N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\n  N=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\r\nOutput is a Qx3 matrix of the non-co-planar points.\r\n\r\nReference: The \u003chttp://68.173.157.131/Contest/Tetrahedra March 2016 Al Zimmermann Non-Coplanar contest\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\r\n\r\nTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003chttp://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar Cody Co-Planar Check\u003e may improve speed. ","description_html":"\u003cp\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar.\r\nGiven the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eN=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\r\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n\u003c/pre\u003e\u003cp\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/p\u003e\u003cp\u003eReference: The \u003ca href = \"http://68.173.157.131/Contest/Tetrahedra\"\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/a\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/p\u003e\u003cp\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\"\u003eCody Co-Planar Check\u003c/a\u003e may improve speed.\u003c/p\u003e","function_template":"function m=MaxNonCoplanarPts(N,Q);\r\n% Place Q or more points in an 0:N-1 #D grid such that each plane created uses only 3 points from the set provided\r\n% N is Cube size\r\n% Q is expected number of points in solution\r\n% Hint: Point [0,0,0] can be assumed to be in the solution for N=2 and N=3\r\n% N=3 is the 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]\r\n  m=[];\r\nend","test_suite":"%%\r\nN=2;\r\nQ=5;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n%%\r\nN=3;\r\nQ=8;\r\nm=MaxNonCoplanarPts(N,Q);\r\nm=floor(abs(m))\r\n% Perform m check\r\nvalid=1;\r\nif size(m,1)\u003cQ,valid=0;end % Must be Q pts or more\r\nif max(m(:))\u003eN-1,valid=0;end\r\npset=nchoosek(1:size(m,1),4);\r\nfor i=1:length(pset)\r\n m4=m(pset(i,:),:);\r\n% Coplanar check method courtesy of Tim\r\n if ~det([m4 ones(4,1)]) % coplanar det=0\r\n  valid=0;\r\n  break\r\n end\r\nend\r\nassert(isequal(1,valid))\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-03-07T00:22:02.000Z","updated_at":"2016-03-07T01:01:33.000Z","published_at":"2016-03-07T01:01:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis Challenge is to find a set with the maximum number of integer points that create planar surfaces with a maximum of three points from the set. No four points may be co-planar. Given the size N and the number of expected points Q find a set of Q points. Only N=2/Q=5 and N=3/Q=8 will be tested. N=4/Q=10 or N=5/Q=13 are too large to process.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[N=2 contains 8 points [0,0,0;0,1,0;1,0,0;1,1,0;0,0,1;0,1,1;1,0,1;1,1,1]\\nN=3 contains 27 points [0,0,0;0,0,1;0,0,2;...2,2,2]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput is a Qx3 matrix of the non-co-planar points.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eReference: The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://68.173.157.131/Contest/Tetrahedra\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMarch 2016 Al Zimmermann Non-Coplanar contest\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is N=primes less than 100. Maximize the number of points in an NxNxN cube with no 4 points in a common plane.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The N=2 and N=3 cases can be processed by brute force if care is taken. Assumption of [0,0,0] greatly reduces number of cases. Solving\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/42762-is-3d-point-set-co-planar\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody Co-Planar Check\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e may improve speed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"nchoosek\"","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:\"nchoosek\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"nchoosek\"","","\"","nchoosek","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f77280e47e0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f77280e4740\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f772812e570\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f77280e4b00\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f77280e4a60\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f77280e4920\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f77280e4880\u003e":"tag:\"nchoosek\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f77280e4880\u003e":"tag:\"nchoosek\""},"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:\"nchoosek\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"nchoosek\"","","\"","nchoosek","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f77280e47e0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f77280e4740\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f772812e570\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f77280e4b00\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f77280e4a60\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f77280e4920\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f77280e4880\u003e":"tag:\"nchoosek\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f77280e4880\u003e":"tag:\"nchoosek\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":793,"difficulty_rating":"easy"},{"id":1913,"difficulty_rating":"easy-medium"},{"id":42805,"difficulty_rating":"easy-medium"},{"id":1159,"difficulty_rating":"easy-medium"},{"id":1855,"difficulty_rating":"medium"},{"id":1517,"difficulty_rating":"medium"},{"id":2487,"difficulty_rating":"medium"},{"id":52343,"difficulty_rating":"medium"},{"id":52355,"difficulty_rating":"medium"},{"id":42290,"difficulty_rating":"medium"},{"id":44779,"difficulty_rating":"medium"},{"id":42765,"difficulty_rating":"unrated"}]}}