{"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":44896,"title":"Parsing Expressions - Binary Arithmetic Operators I","description":"Parse and evaluate expressions like these:\r\n\r\n  '1 + 2'\r\n  '51 - 78'\r\n  '42 * 9'\r\n\r\nThe only operators are +, -, *.\r\n\r\nBoth arguments will be integers between -50 and 50.","description_html":"\u003cp\u003eParse and evaluate expressions like these:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e'1 + 2'\r\n'51 - 78'\r\n'42 * 9'\r\n\u003c/pre\u003e\u003cp\u003eThe only operators are +, -, *.\u003c/p\u003e\u003cp\u003eBoth arguments will be integers between -50 and 50.\u003c/p\u003e","function_template":"function y = parse_binary_expression(expr)\r\n    y = eval(expr);\r\nend","test_suite":"%%\r\n\r\n% Generate and test 100 random binary expressions.\r\noperators = '+-*';\r\nfor k = 1:100\r\n    a = randi(101) - 51;\r\n    b = randi(101) - 51;\r\n    op = operators(randi(numel(operators)));\r\n    expr = sprintf('%d %1s %d', a, op, b);\r\n    y_correct = eval(expr);\r\n    assert(isequal(parse_binary_expression(expr),y_correct))\r\nend","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":8780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2019-04-23T19:24:32.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-04-23T18:03:27.000Z","updated_at":"2026-01-03T16:14:38.000Z","published_at":"2019-04-23T19:24: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\u003eParse and evaluate expressions like these:\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'51 - 78'\\n'42 * 9']]\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 only operators are +, -,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e *\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw: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\u003eBoth arguments will be integers between -50 and 50.\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":51793,"title":"List the titles of Cody problems","description":"Cody has several ways to list problems, but I have not yet found an easy way to list them by their numbers. Listing by date created is close, but if someone starts a problem one day and finishes it much later, the numbers will be out of order. Even when the numbers are in order, finding a particular number can take some scrolling. One can type a URL with the problem number, but waiting for the page to load and being redirected to the main problems page gets cumbersome. \r\nWrite a function that takes a number or vector of numbers as input and returns a cell array of the titles of the problems. If the problem does not exist, return an empty vector in place of the title. ","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: 135px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 408px 67.5px; transform-origin: 408px 67.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; 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.608px 8px; transform-origin: 379.608px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCody has several ways to list problems, but I have not yet found an easy way to list them by their numbers. Listing by date created is close, but if someone starts a problem one day and finishes it much later, the numbers will be out of order. Even when the numbers are in order, finding a particular number can take some scrolling. One can type a URL with the problem number, but waiting for the page to load and being redirected to the main problems page gets cumbersome. \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: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; 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: 385px 8px; transform-origin: 385px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function that takes a number or vector of numbers as input and returns a cell array of the titles of the problems. If the problem does not exist, return an empty vector in place of the title. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = CPtitle(n)\r\n  y = isCodyProblem(n);\r\nend","test_suite":"%%\r\nn = 60;\r\ny = CPtitle(n);\r\ny_correct = {'The Goldbach Conjecture'};\r\nassert(isequal(y,y_correct))\r\n\r\n%% \r\nn = 97;\r\ny = CPtitle(n);\r\nassert(isempty(y{1}))\r\n\r\n%%\r\nn = [1319 1515];\r\ny = CPtitle(n);\r\ny_correct = {'Leap years on other planets', 'Procrustean bed'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [45193 45196];\r\ny = CPtitle(n);\r\ny_correct = {'Fun with permutations', 'Determine whether a given point is inside or outside a polygon'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [45180 46898 47864];\r\ny = CPtitle(n);\r\ny_correct = {'All flights lead to Idaho Falls', 'Sum of all the divisors of n', 'Calculate the Surface Area of an Ellipsoid'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [44341 47673 47803];\r\ny = CPtitle(n);\r\ny_correct = {'Hexagonal numbers on a spiral matrix', 'Area under standard normal curve', 'Check if the input is a strong prime'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [42383 42415];\r\ny = CPtitle(n);\r\ny_correct = {['Combined Ages 3 - Non-symmetric, n ' char(8805) ' 3'], 'Divisible by 13'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [1215 2869];\r\ny = CPtitle(n);\r\ny_correct = {'Diophantine Equations (Inspired by Project Euler, problem 66)', 'There are 10 types of people in the world'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [44067 44068 44071];\r\ny = CPtitle(n);\r\ny_correct = {'The last non-zero digit of a factorial', 'The number of trailing zero digit of a factorial', 'Smallest n, for n! to have m trailing zero digits'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [45272 45302 45339];\r\ny = CPtitle(n);\r\ny_correct = {'Pseudo-vampire number ', 'Ugly numbers - 03', 'XOR fibonacci'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = 46072;\r\ny = CPtitle(n);\r\ny_correct = {'Rock Paper Scissors Lizard Spock'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [51630 51640];\r\ny = CPtitle(n);\r\ny_correct = {'Highest building', 'Similar triangles'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = 1012:1015;\r\ny = CPtitle(n);\r\ny_correct = {'Determine if input is a perfect number', [], [], 'Polynomial Interpolation'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = 42240:42250;\r\ny = CPtitle(n(randi(11,1,2)));\r\nassert(all(arrayfun(@(k) isempty(y{k}),1:2)))\r\n\r\n%%\r\nn = 8047+randi(8);\r\ny1 = CPtitle(n);\r\ns = y1{1};\r\nc = split(CPtitle(sum(double(s(1:13)))));\r\nassert(isequal(c{4},'Awesome'))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":1,"created_by":46909,"edited_by":46909,"edited_at":"2025-07-16T16:53:28.000Z","deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2021-05-18T05:40:12.000Z","updated_at":"2025-07-16T16:53:28.000Z","published_at":"2021-05-18T05:44:30.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\u003eCody has several ways to list problems, but I have not yet found an easy way to list them by their numbers. Listing by date created is close, but if someone starts a problem one day and finishes it much later, the numbers will be out of order. Even when the numbers are in order, finding a particular number can take some scrolling. One can type a URL with the problem number, but waiting for the page to load and being redirected to the main problems page gets cumbersome. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function that takes a number or vector of numbers as input and returns a cell array of the titles of the problems. If the problem does not exist, return an empty vector in place of the title. \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":1949,"title":"Get top 5 Cody Player Emails Automatically","description":"Yes, this is a little scary and also entirely possible to do in MATLAB, so let's do it!\r\n\r\nLooking at the list of the players \u003chttp://www.mathworks.com/matlabcentral/cody/players\u003e automatically sorts them in order according to rank. For times sake, let's say we only want to get the emails from the first 5 people. This is relatively easy to do by hand, just click on the persons name, click on \"View Profile Information\" and you have the email but if you wanted to do say the first 1,000 people instead, that would be not very fun to do by hand. \r\n\r\nFor this program, let's say we want the top 5 profiles that give a \"real\" email address (not a contact form) to be in a cell array. This means that if one of the top 5 people have removed their email address, your returned cell array will have less than 5 emails in it. \r\n\r\nIf you are not sure where to start, check out the urlread command, it allows you to put the web page source code into a string. From there, you are able to parse through that to get the URLs for the top 5 players web profile. From there, look for a \"mailto:\" and if it is there, the email address is immediately following it. If the string \"mailto:\" does not exist, there is no email address on that webpage. Put the emails in a cell array when you find them and you are good to go!\r\n\r\nAs an example, I have poorly written MATLAB code that works in the test case since I want the test case to always be accurate. 98% of the execution time is spent reading the webpages, and at least on my computer, that takes quite a while to do (about 2.5 seconds per profile page).\r\n\r\n*I am definitely not collecting emails for anything, and you should not either! This is designed solely as a learning example and should in no way be used for anything unethical. All information obtained here is easily obtained by anyone in the world who knows how to program.*\r\n\r\n*If this scares you and you want to remove your email address from your profile, it's easy. All you have to do is click \"My Community Profile\" (underneath the search bar at very top of screen) and then edit your preferences to not display your email address.* ","description_html":"\u003cp\u003eYes, this is a little scary and also entirely possible to do in MATLAB, so let's do it!\u003c/p\u003e\u003cp\u003eLooking at the list of the players \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/players\"\u003ehttp://www.mathworks.com/matlabcentral/cody/players\u003c/a\u003e automatically sorts them in order according to rank. For times sake, let's say we only want to get the emails from the first 5 people. This is relatively easy to do by hand, just click on the persons name, click on \"View Profile Information\" and you have the email but if you wanted to do say the first 1,000 people instead, that would be not very fun to do by hand.\u003c/p\u003e\u003cp\u003eFor this program, let's say we want the top 5 profiles that give a \"real\" email address (not a contact form) to be in a cell array. This means that if one of the top 5 people have removed their email address, your returned cell array will have less than 5 emails in it.\u003c/p\u003e\u003cp\u003eIf you are not sure where to start, check out the urlread command, it allows you to put the web page source code into a string. From there, you are able to parse through that to get the URLs for the top 5 players web profile. From there, look for a \"mailto:\" and if it is there, the email address is immediately following it. If the string \"mailto:\" does not exist, there is no email address on that webpage. Put the emails in a cell array when you find them and you are good to go!\u003c/p\u003e\u003cp\u003eAs an example, I have poorly written MATLAB code that works in the test case since I want the test case to always be accurate. 98% of the execution time is spent reading the webpages, and at least on my computer, that takes quite a while to do (about 2.5 seconds per profile page).\u003c/p\u003e\u003cp\u003e\u003cb\u003eI am definitely not collecting emails for anything, and you should not either! This is designed solely as a learning example and should in no way be used for anything unethical. All information obtained here is easily obtained by anyone in the world who knows how to program.\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eIf this scares you and you want to remove your email address from your profile, it's easy. All you have to do is click \"My Community Profile\" (underneath the search bar at very top of screen) and then edit your preferences to not display your email address.\u003c/b\u003e\u003c/p\u003e","function_template":"function emails = getCodyEmails()\r\n  emails = {};\r\nend","test_suite":"%%\r\n% My code is below, it's used to generate the expected result.\r\n\r\n%Read in the player page\r\nplayerPage=urlread('http://www.mathworks.com/matlabcentral/cody/players');\r\n\r\n%Find where the web address for each profile starts\r\nstartIdx=strfind(playerPage,'\u003cdiv class=\"grid_53 push_3\"\u003e')+104; \r\n\r\n%Initialize output array\r\nemails={};\r\n\r\n%Get top 5 only\r\nfor i=1:5\r\n    % Get the profile page link\r\n   tempStr=playerPage(startIdx(i):startIdx(i)+100);\r\n   quoteIdx=strfind(tempStr,'\"')-1;\r\n   profilePageLink=['http://www.mathworks.com' tempStr(1:quoteIdx(1))];\r\n   \r\n   profilePage=urlread(profilePageLink);\r\n   % Try and find mailto link\r\n   tStartIdx=strfind(profilePage,'mailto');\r\n   \r\n   %If you could find it\r\n   if ~isempty(tStartIdx)\r\n       % Get the email\r\n       tEndIdx=strfind(profilePage(tStartIdx:tStartIdx+100),'\"')+tStartIdx;\r\n       \r\n       % Add it to our cell array\r\n       emails{length(emails)+1}=profilePage(tStartIdx+7:tEndIdx-2);\r\n   end\r\n    \r\nend\r\n\r\n\r\ntic\r\nyourResponse=getCodyEmails()\r\ntimeElapsed=toc\r\n\r\n\r\nassert(isequal(yourResponse,emails))\r\nassert(isequal(1,timeElapsed\u003e3))","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3743,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-10-20T05:40:10.000Z","updated_at":"2025-07-31T17:14:24.000Z","published_at":"2013-10-20T05:40:10.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\u003eYes, this is a little scary and also entirely possible to do in MATLAB, so let's do it!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLooking at the list of the players\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/players\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.mathworks.com/matlabcentral/cody/players\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e automatically sorts them in order according to rank. For times sake, let's say we only want to get the emails from the first 5 people. This is relatively easy to do by hand, just click on the persons name, click on \\\"View Profile Information\\\" and you have the email but if you wanted to do say the first 1,000 people instead, that would be not very fun to do by hand.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this program, let's say we want the top 5 profiles that give a \\\"real\\\" email address (not a contact form) to be in a cell array. This means that if one of the top 5 people have removed their email address, your returned cell array will have less than 5 emails in it.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf you are not sure where to start, check out the urlread command, it allows you to put the web page source code into a string. From there, you are able to parse through that to get the URLs for the top 5 players web profile. From there, look for a \\\"mailto:\\\" and if it is there, the email address is immediately following it. If the string \\\"mailto:\\\" does not exist, there is no email address on that webpage. Put the emails in a cell array when you find them and you are good to go!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs an example, I have poorly written MATLAB code that works in the test case since I want the test case to always be accurate. 98% of the execution time is spent reading the webpages, and at least on my computer, that takes quite a while to do (about 2.5 seconds per profile page).\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eI am definitely not collecting emails for anything, and you should not either! This is designed solely as a learning example and should in no way be used for anything unethical. All information obtained here is easily obtained by anyone in the world who knows how to program.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eIf this scares you and you want to remove your email address from your profile, it's easy. All you have to do is click \\\"My Community Profile\\\" (underneath the search bar at very top of screen) and then edit your preferences to not display your email address.\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":44896,"title":"Parsing Expressions - Binary Arithmetic Operators I","description":"Parse and evaluate expressions like these:\r\n\r\n  '1 + 2'\r\n  '51 - 78'\r\n  '42 * 9'\r\n\r\nThe only operators are +, -, *.\r\n\r\nBoth arguments will be integers between -50 and 50.","description_html":"\u003cp\u003eParse and evaluate expressions like these:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e'1 + 2'\r\n'51 - 78'\r\n'42 * 9'\r\n\u003c/pre\u003e\u003cp\u003eThe only operators are +, -, *.\u003c/p\u003e\u003cp\u003eBoth arguments will be integers between -50 and 50.\u003c/p\u003e","function_template":"function y = parse_binary_expression(expr)\r\n    y = eval(expr);\r\nend","test_suite":"%%\r\n\r\n% Generate and test 100 random binary expressions.\r\noperators = '+-*';\r\nfor k = 1:100\r\n    a = randi(101) - 51;\r\n    b = randi(101) - 51;\r\n    op = operators(randi(numel(operators)));\r\n    expr = sprintf('%d %1s %d', a, op, b);\r\n    y_correct = eval(expr);\r\n    assert(isequal(parse_binary_expression(expr),y_correct))\r\nend","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":8780,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2019-04-23T19:24:32.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2019-04-23T18:03:27.000Z","updated_at":"2026-01-03T16:14:38.000Z","published_at":"2019-04-23T19:24: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\u003eParse and evaluate expressions like these:\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'51 - 78'\\n'42 * 9']]\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 only operators are +, -,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e *\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw: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\u003eBoth arguments will be integers between -50 and 50.\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":51793,"title":"List the titles of Cody problems","description":"Cody has several ways to list problems, but I have not yet found an easy way to list them by their numbers. Listing by date created is close, but if someone starts a problem one day and finishes it much later, the numbers will be out of order. Even when the numbers are in order, finding a particular number can take some scrolling. One can type a URL with the problem number, but waiting for the page to load and being redirected to the main problems page gets cumbersome. \r\nWrite a function that takes a number or vector of numbers as input and returns a cell array of the titles of the problems. If the problem does not exist, return an empty vector in place of the title. ","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: 135px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 408px 67.5px; transform-origin: 408px 67.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; 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.608px 8px; transform-origin: 379.608px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eCody has several ways to list problems, but I have not yet found an easy way to list them by their numbers. Listing by date created is close, but if someone starts a problem one day and finishes it much later, the numbers will be out of order. Even when the numbers are in order, finding a particular number can take some scrolling. One can type a URL with the problem number, but waiting for the page to load and being redirected to the main problems page gets cumbersome. \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: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; 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: 385px 8px; transform-origin: 385px 8px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWrite a function that takes a number or vector of numbers as input and returns a cell array of the titles of the problems. If the problem does not exist, return an empty vector in place of the title. \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = CPtitle(n)\r\n  y = isCodyProblem(n);\r\nend","test_suite":"%%\r\nn = 60;\r\ny = CPtitle(n);\r\ny_correct = {'The Goldbach Conjecture'};\r\nassert(isequal(y,y_correct))\r\n\r\n%% \r\nn = 97;\r\ny = CPtitle(n);\r\nassert(isempty(y{1}))\r\n\r\n%%\r\nn = [1319 1515];\r\ny = CPtitle(n);\r\ny_correct = {'Leap years on other planets', 'Procrustean bed'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [45193 45196];\r\ny = CPtitle(n);\r\ny_correct = {'Fun with permutations', 'Determine whether a given point is inside or outside a polygon'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [45180 46898 47864];\r\ny = CPtitle(n);\r\ny_correct = {'All flights lead to Idaho Falls', 'Sum of all the divisors of n', 'Calculate the Surface Area of an Ellipsoid'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [44341 47673 47803];\r\ny = CPtitle(n);\r\ny_correct = {'Hexagonal numbers on a spiral matrix', 'Area under standard normal curve', 'Check if the input is a strong prime'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [42383 42415];\r\ny = CPtitle(n);\r\ny_correct = {['Combined Ages 3 - Non-symmetric, n ' char(8805) ' 3'], 'Divisible by 13'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [1215 2869];\r\ny = CPtitle(n);\r\ny_correct = {'Diophantine Equations (Inspired by Project Euler, problem 66)', 'There are 10 types of people in the world'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [44067 44068 44071];\r\ny = CPtitle(n);\r\ny_correct = {'The last non-zero digit of a factorial', 'The number of trailing zero digit of a factorial', 'Smallest n, for n! to have m trailing zero digits'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [45272 45302 45339];\r\ny = CPtitle(n);\r\ny_correct = {'Pseudo-vampire number ', 'Ugly numbers - 03', 'XOR fibonacci'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = 46072;\r\ny = CPtitle(n);\r\ny_correct = {'Rock Paper Scissors Lizard Spock'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = [51630 51640];\r\ny = CPtitle(n);\r\ny_correct = {'Highest building', 'Similar triangles'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = 1012:1015;\r\ny = CPtitle(n);\r\ny_correct = {'Determine if input is a perfect number', [], [], 'Polynomial Interpolation'};\r\nassert(isequal(y,y_correct))\r\n\r\n%%\r\nn = 42240:42250;\r\ny = CPtitle(n(randi(11,1,2)));\r\nassert(all(arrayfun(@(k) isempty(y{k}),1:2)))\r\n\r\n%%\r\nn = 8047+randi(8);\r\ny1 = CPtitle(n);\r\ns = y1{1};\r\nc = split(CPtitle(sum(double(s(1:13)))));\r\nassert(isequal(c{4},'Awesome'))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":1,"created_by":46909,"edited_by":46909,"edited_at":"2025-07-16T16:53:28.000Z","deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2021-05-18T05:40:12.000Z","updated_at":"2025-07-16T16:53:28.000Z","published_at":"2021-05-18T05:44:30.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\u003eCody has several ways to list problems, but I have not yet found an easy way to list them by their numbers. Listing by date created is close, but if someone starts a problem one day and finishes it much later, the numbers will be out of order. Even when the numbers are in order, finding a particular number can take some scrolling. One can type a URL with the problem number, but waiting for the page to load and being redirected to the main problems page gets cumbersome. \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function that takes a number or vector of numbers as input and returns a cell array of the titles of the problems. If the problem does not exist, return an empty vector in place of the title. \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":1949,"title":"Get top 5 Cody Player Emails Automatically","description":"Yes, this is a little scary and also entirely possible to do in MATLAB, so let's do it!\r\n\r\nLooking at the list of the players \u003chttp://www.mathworks.com/matlabcentral/cody/players\u003e automatically sorts them in order according to rank. For times sake, let's say we only want to get the emails from the first 5 people. This is relatively easy to do by hand, just click on the persons name, click on \"View Profile Information\" and you have the email but if you wanted to do say the first 1,000 people instead, that would be not very fun to do by hand. \r\n\r\nFor this program, let's say we want the top 5 profiles that give a \"real\" email address (not a contact form) to be in a cell array. This means that if one of the top 5 people have removed their email address, your returned cell array will have less than 5 emails in it. \r\n\r\nIf you are not sure where to start, check out the urlread command, it allows you to put the web page source code into a string. From there, you are able to parse through that to get the URLs for the top 5 players web profile. From there, look for a \"mailto:\" and if it is there, the email address is immediately following it. If the string \"mailto:\" does not exist, there is no email address on that webpage. Put the emails in a cell array when you find them and you are good to go!\r\n\r\nAs an example, I have poorly written MATLAB code that works in the test case since I want the test case to always be accurate. 98% of the execution time is spent reading the webpages, and at least on my computer, that takes quite a while to do (about 2.5 seconds per profile page).\r\n\r\n*I am definitely not collecting emails for anything, and you should not either! This is designed solely as a learning example and should in no way be used for anything unethical. All information obtained here is easily obtained by anyone in the world who knows how to program.*\r\n\r\n*If this scares you and you want to remove your email address from your profile, it's easy. All you have to do is click \"My Community Profile\" (underneath the search bar at very top of screen) and then edit your preferences to not display your email address.* ","description_html":"\u003cp\u003eYes, this is a little scary and also entirely possible to do in MATLAB, so let's do it!\u003c/p\u003e\u003cp\u003eLooking at the list of the players \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/players\"\u003ehttp://www.mathworks.com/matlabcentral/cody/players\u003c/a\u003e automatically sorts them in order according to rank. For times sake, let's say we only want to get the emails from the first 5 people. This is relatively easy to do by hand, just click on the persons name, click on \"View Profile Information\" and you have the email but if you wanted to do say the first 1,000 people instead, that would be not very fun to do by hand.\u003c/p\u003e\u003cp\u003eFor this program, let's say we want the top 5 profiles that give a \"real\" email address (not a contact form) to be in a cell array. This means that if one of the top 5 people have removed their email address, your returned cell array will have less than 5 emails in it.\u003c/p\u003e\u003cp\u003eIf you are not sure where to start, check out the urlread command, it allows you to put the web page source code into a string. From there, you are able to parse through that to get the URLs for the top 5 players web profile. From there, look for a \"mailto:\" and if it is there, the email address is immediately following it. If the string \"mailto:\" does not exist, there is no email address on that webpage. Put the emails in a cell array when you find them and you are good to go!\u003c/p\u003e\u003cp\u003eAs an example, I have poorly written MATLAB code that works in the test case since I want the test case to always be accurate. 98% of the execution time is spent reading the webpages, and at least on my computer, that takes quite a while to do (about 2.5 seconds per profile page).\u003c/p\u003e\u003cp\u003e\u003cb\u003eI am definitely not collecting emails for anything, and you should not either! This is designed solely as a learning example and should in no way be used for anything unethical. All information obtained here is easily obtained by anyone in the world who knows how to program.\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003cb\u003eIf this scares you and you want to remove your email address from your profile, it's easy. All you have to do is click \"My Community Profile\" (underneath the search bar at very top of screen) and then edit your preferences to not display your email address.\u003c/b\u003e\u003c/p\u003e","function_template":"function emails = getCodyEmails()\r\n  emails = {};\r\nend","test_suite":"%%\r\n% My code is below, it's used to generate the expected result.\r\n\r\n%Read in the player page\r\nplayerPage=urlread('http://www.mathworks.com/matlabcentral/cody/players');\r\n\r\n%Find where the web address for each profile starts\r\nstartIdx=strfind(playerPage,'\u003cdiv class=\"grid_53 push_3\"\u003e')+104; \r\n\r\n%Initialize output array\r\nemails={};\r\n\r\n%Get top 5 only\r\nfor i=1:5\r\n    % Get the profile page link\r\n   tempStr=playerPage(startIdx(i):startIdx(i)+100);\r\n   quoteIdx=strfind(tempStr,'\"')-1;\r\n   profilePageLink=['http://www.mathworks.com' tempStr(1:quoteIdx(1))];\r\n   \r\n   profilePage=urlread(profilePageLink);\r\n   % Try and find mailto link\r\n   tStartIdx=strfind(profilePage,'mailto');\r\n   \r\n   %If you could find it\r\n   if ~isempty(tStartIdx)\r\n       % Get the email\r\n       tEndIdx=strfind(profilePage(tStartIdx:tStartIdx+100),'\"')+tStartIdx;\r\n       \r\n       % Add it to our cell array\r\n       emails{length(emails)+1}=profilePage(tStartIdx+7:tEndIdx-2);\r\n   end\r\n    \r\nend\r\n\r\n\r\ntic\r\nyourResponse=getCodyEmails()\r\ntimeElapsed=toc\r\n\r\n\r\nassert(isequal(yourResponse,emails))\r\nassert(isequal(1,timeElapsed\u003e3))","published":true,"deleted":false,"likes_count":0,"comments_count":1,"created_by":3743,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-10-20T05:40:10.000Z","updated_at":"2025-07-31T17:14:24.000Z","published_at":"2013-10-20T05:40:10.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\u003eYes, this is a little scary and also entirely possible to do in MATLAB, so let's do it!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eLooking at the list of the players\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/players\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ehttp://www.mathworks.com/matlabcentral/cody/players\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e automatically sorts them in order according to rank. For times sake, let's say we only want to get the emails from the first 5 people. This is relatively easy to do by hand, just click on the persons name, click on \\\"View Profile Information\\\" and you have the email but if you wanted to do say the first 1,000 people instead, that would be not very fun to do by hand.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this program, let's say we want the top 5 profiles that give a \\\"real\\\" email address (not a contact form) to be in a cell array. This means that if one of the top 5 people have removed their email address, your returned cell array will have less than 5 emails in it.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf you are not sure where to start, check out the urlread command, it allows you to put the web page source code into a string. From there, you are able to parse through that to get the URLs for the top 5 players web profile. From there, look for a \\\"mailto:\\\" and if it is there, the email address is immediately following it. If the string \\\"mailto:\\\" does not exist, there is no email address on that webpage. Put the emails in a cell array when you find them and you are good to go!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAs an example, I have poorly written MATLAB code that works in the test case since I want the test case to always be accurate. 98% of the execution time is spent reading the webpages, and at least on my computer, that takes quite a while to do (about 2.5 seconds per profile page).\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eI am definitely not collecting emails for anything, and you should not either! This is designed solely as a learning example and should in no way be used for anything unethical. All information obtained here is easily obtained by anyone in the world who knows how to program.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eIf this scares you and you want to remove your email address from your profile, it's easy. All you have to do is click \\\"My Community Profile\\\" (underneath the search bar at very top of screen) and then edit your preferences to not display your email address.\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:\"parsing\"","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:\"parsing\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"parsing\"","","\"","parsing","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f5349041908\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f5349041868\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f5349040fa8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f5349041b88\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f5349041ae8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f5349041a48\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f53490419a8\u003e":"tag:\"parsing\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f53490419a8\u003e":"tag:\"parsing\""},"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:\"parsing\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"parsing\"","","\"","parsing","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f5349041908\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f5349041868\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f5349040fa8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f5349041b88\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f5349041ae8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f5349041a48\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f53490419a8\u003e":"tag:\"parsing\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f53490419a8\u003e":"tag:\"parsing\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":44896,"difficulty_rating":"easy"},{"id":51793,"difficulty_rating":"medium"},{"id":1949,"difficulty_rating":"medium-hard"}]}}