{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-16T00:12:35.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-16T00: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":958,"title":"ismember: Enhanced Performance for 'rows'  and width - Speed Scoring (66% savings)","description":"The Challenge is to perform very fast the 'ismember' function for a long and wide array.  The width of the array is expanded from 16 to 48.\r\n\r\nFast methods can reduce time by 66%.\r\n\r\nThe data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.\r\n\r\n*Input:* Array of uint8 of dimensions (m, 48) with values 0:3\r\n\r\n*Output:* Array Equivalent to ismember(A,B,'rows')\r\n\r\n*Hints:*\r\n\r\n1) Columns can be merged to form a reduced number of columns\r\n2) Unique has the option to provide an Array and a sorting Index\r\n\r\nNote: Enhancements to speed usually improve memory allocation issues.","description_html":"\u003cp\u003eThe Challenge is to perform very fast the 'ismember' function for a long and wide array.  The width of the array is expanded from 16 to 48.\u003c/p\u003e\u003cp\u003eFast methods can reduce time by 66%.\u003c/p\u003e\u003cp\u003eThe data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Array of uint8 of dimensions (m, 48) with values 0:3\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Array Equivalent to ismember(A,B,'rows')\u003c/p\u003e\u003cp\u003e\u003cb\u003eHints:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e1) Columns can be merged to form a reduced number of columns\r\n2) Unique has the option to provide an Array and a sorting Index\u003c/p\u003e\u003cp\u003eNote: Enhancements to speed usually improve memory allocation issues.\u003c/p\u003e","function_template":"function idx = ismember_fast_rows(a,b)\r\n idx=ismember(a,b,'rows');\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',20000);\r\n%%\r\n% Functionality Tests\r\nL=128;\r\na=randi(4,L,48,'uint8')-1;\r\nb=randi(4,L,48,'uint8')-1;\r\nassert(isequal(ismember(a,b,'rows'),ismember_fast_rows(a,b)))\r\n\r\nb=a;\r\nassert(isequal(ismember(a,b,'rows'),ismember_fast_rows(a,b)))\r\n\r\nL=256;\r\na=randi(4,L,48,'uint8')-1;\r\nb=randi(4,L,48,'uint8')-1;\r\na(16:32,:)=b(32:48,:);\r\nassert(isequal(ismember(a,b,'rows'),ismember_fast_rows(a,b)))\r\n\r\n%%\r\n% 2M has a crash for 2x ismember\r\nL=1900000;  % ismember 19.6    fast  C 8.3 2M\r\ntic\r\na=randi(4,L,48,'uint8')-1;\r\nb=randi(4,L,48,'uint8')-1;\r\na(100:200,:)=b(400:500,:); % Put in some matching data\r\ntoc\r\n\r\n\r\nta=clock;\r\nidx = ismember_fast_rows(a,b);\r\nt1=etime(clock,ta)*1000;\r\n\r\nfprintf('Elapsed time = %.0f msec\\n',t1)\r\n\r\nassert(isequal(ismember(a,b,'rows'),idx))\r\n\r\nt2=min(20000,t1); % ismember 1.9M x 48 scores 19000 msec\r\nfeval(@assignin,'caller','score',floor(t2));\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-24T05:10:17.000Z","updated_at":"2026-01-21T12:28:29.000Z","published_at":"2012-09-24T05:37:58.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to perform very fast the 'ismember' function for a long and wide array. The width of the array is expanded from 16 to 48.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFast methods can reduce time by 66%.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.\u003c/w:t\u003e\u003c/w:r\u003e\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 Array of uint8 of dimensions (m, 48) with values 0: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: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 Array Equivalent to ismember(A,B,'rows')\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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) Columns can be merged to form a reduced number of columns 2) Unique has the option to provide an Array and a sorting Index\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNote: Enhancements to speed usually improve memory allocation issues.\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":934,"title":"Find: Faster Alternatives for Large Sorted/Unique Vectors","description":"The Challenge is to create faster Find methods for large unique ascending vectors.\r\n\r\nMethods exist that are 1000 times faster than Find.\r\n\r\nMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\r\n\r\n*Input:* [a,val]\r\n\r\n*   a: vector [N large,1] of type uint32 that is unique and sorted ascending\r\n*   val: The value to find in the \"a\" vector. Val will exist in \"a\".\r\n\r\n*Output:* [ptr]\r\n\r\n*   ptr: The index in array \"a\" where a(ptr) is val\r\n\r\n*Score:* Time in msec to find 200 random values in a 12,000,000 long vector\r\n\r\n\r\nThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\r\n\r\nHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\r\n\r\nFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\r\n\r\nHints:\r\n\r\n* There are  multiple methods that significantly outperform find.\r\n* Bisect searches\r\n* Predictive searches\r\n* Combining Bisect/Predictive with a Linear Chaser\r\n* \r\n\r\nA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\r\n","description_html":"\u003cp\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/p\u003e\u003cp\u003eMethods exist that are 1000 times faster than Find.\u003c/p\u003e\u003cp\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [a,val]\u003c/p\u003e\u003cul\u003e\u003cli\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\u003c/li\u003e\u003cli\u003eval: The value to find in the \"a\" vector. Val will exist in \"a\".\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [ptr]\u003c/p\u003e\u003cul\u003e\u003cli\u003eptr: The index in array \"a\" where a(ptr) is val\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/p\u003e\u003cp\u003eThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\u003c/p\u003e\u003cp\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/p\u003e\u003cp\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/p\u003e\u003cp\u003eHints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThere are  multiple methods that significantly outperform find.\u003c/li\u003e\u003cli\u003eBisect searches\u003c/li\u003e\u003cli\u003ePredictive searches\u003c/li\u003e\u003cli\u003eCombining Bisect/Predictive with a Linear Chaser\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\u003c/p\u003e","function_template":"function ptr = find_fast(a,val)\r\n  ptr = find(a==val,1,'first');\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nL=1000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\n% Warm-Up Test cases\r\nfor i=1:5:1000\r\n assert(isequal(find_fast(a,a(i)),i))\r\nend\r\n%%\r\n% Timing Performance Case\r\nL=12000000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\nq=200;\r\n\r\nval=zeros(q,1);\r\nfor i=1:q\r\n val(i)=a(randi(L));\r\nend\r\n\r\nt0=clock;\r\nfor i=1:q\r\n ptr=find_fast(a,val(i));\r\nend\r\ndt=etime(clock,t0)*1000;\r\n\r\n\r\nassert(isequal(find_fast(a,val(1)),find(a==val(1),1,'first')))\r\n\r\nfprintf('Your Time = %i msec\\n',floor(dt))\r\n\r\nfeval(@assignin,'caller','score',min(200,floor(dt)));\r\n%   Performance Score\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"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":1,"created_at":"2012-09-07T01:12:34.000Z","updated_at":"2025-12-08T15:39:06.000Z","published_at":"2012-09-07T03:26:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods exist that are 1000 times faster than Find.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [a,val]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\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\u003eval: The value to find in the \\\"a\\\" vector. Val will exist in \\\"a\\\".\u003c/w:t\u003e\u003c/w:r\u003e\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 [ptr]\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\u003eptr: The index in array \\\"a\\\" where a(ptr) is val\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are multiple methods that significantly outperform find.\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\u003eBisect searches\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\u003ePredictive searches\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\u003eCombining Bisect/Predictive with a Linear Chaser\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\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":958,"title":"ismember: Enhanced Performance for 'rows'  and width - Speed Scoring (66% savings)","description":"The Challenge is to perform very fast the 'ismember' function for a long and wide array.  The width of the array is expanded from 16 to 48.\r\n\r\nFast methods can reduce time by 66%.\r\n\r\nThe data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.\r\n\r\n*Input:* Array of uint8 of dimensions (m, 48) with values 0:3\r\n\r\n*Output:* Array Equivalent to ismember(A,B,'rows')\r\n\r\n*Hints:*\r\n\r\n1) Columns can be merged to form a reduced number of columns\r\n2) Unique has the option to provide an Array and a sorting Index\r\n\r\nNote: Enhancements to speed usually improve memory allocation issues.","description_html":"\u003cp\u003eThe Challenge is to perform very fast the 'ismember' function for a long and wide array.  The width of the array is expanded from 16 to 48.\u003c/p\u003e\u003cp\u003eFast methods can reduce time by 66%.\u003c/p\u003e\u003cp\u003eThe data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Array of uint8 of dimensions (m, 48) with values 0:3\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Array Equivalent to ismember(A,B,'rows')\u003c/p\u003e\u003cp\u003e\u003cb\u003eHints:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e1) Columns can be merged to form a reduced number of columns\r\n2) Unique has the option to provide an Array and a sorting Index\u003c/p\u003e\u003cp\u003eNote: Enhancements to speed usually improve memory allocation issues.\u003c/p\u003e","function_template":"function idx = ismember_fast_rows(a,b)\r\n idx=ismember(a,b,'rows');\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',20000);\r\n%%\r\n% Functionality Tests\r\nL=128;\r\na=randi(4,L,48,'uint8')-1;\r\nb=randi(4,L,48,'uint8')-1;\r\nassert(isequal(ismember(a,b,'rows'),ismember_fast_rows(a,b)))\r\n\r\nb=a;\r\nassert(isequal(ismember(a,b,'rows'),ismember_fast_rows(a,b)))\r\n\r\nL=256;\r\na=randi(4,L,48,'uint8')-1;\r\nb=randi(4,L,48,'uint8')-1;\r\na(16:32,:)=b(32:48,:);\r\nassert(isequal(ismember(a,b,'rows'),ismember_fast_rows(a,b)))\r\n\r\n%%\r\n% 2M has a crash for 2x ismember\r\nL=1900000;  % ismember 19.6    fast  C 8.3 2M\r\ntic\r\na=randi(4,L,48,'uint8')-1;\r\nb=randi(4,L,48,'uint8')-1;\r\na(100:200,:)=b(400:500,:); % Put in some matching data\r\ntoc\r\n\r\n\r\nta=clock;\r\nidx = ismember_fast_rows(a,b);\r\nt1=etime(clock,ta)*1000;\r\n\r\nfprintf('Elapsed time = %.0f msec\\n',t1)\r\n\r\nassert(isequal(ismember(a,b,'rows'),idx))\r\n\r\nt2=min(20000,t1); % ismember 1.9M x 48 scores 19000 msec\r\nfeval(@assignin,'caller','score',floor(t2));\r\n\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-24T05:10:17.000Z","updated_at":"2026-01-21T12:28:29.000Z","published_at":"2012-09-24T05:37:58.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to perform very fast the 'ismember' function for a long and wide array. The width of the array is expanded from 16 to 48.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFast methods can reduce time by 66%.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 data is small integer representing data permutations of items like DNA and Rubik's cube faces and orientations.\u003c/w:t\u003e\u003c/w:r\u003e\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 Array of uint8 of dimensions (m, 48) with values 0: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: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 Array Equivalent to ismember(A,B,'rows')\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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) Columns can be merged to form a reduced number of columns 2) Unique has the option to provide an Array and a sorting Index\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNote: Enhancements to speed usually improve memory allocation issues.\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":934,"title":"Find: Faster Alternatives for Large Sorted/Unique Vectors","description":"The Challenge is to create faster Find methods for large unique ascending vectors.\r\n\r\nMethods exist that are 1000 times faster than Find.\r\n\r\nMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\r\n\r\n*Input:* [a,val]\r\n\r\n*   a: vector [N large,1] of type uint32 that is unique and sorted ascending\r\n*   val: The value to find in the \"a\" vector. Val will exist in \"a\".\r\n\r\n*Output:* [ptr]\r\n\r\n*   ptr: The index in array \"a\" where a(ptr) is val\r\n\r\n*Score:* Time in msec to find 200 random values in a 12,000,000 long vector\r\n\r\n\r\nThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\r\n\r\nHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\r\n\r\nFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\r\n\r\nHints:\r\n\r\n* There are  multiple methods that significantly outperform find.\r\n* Bisect searches\r\n* Predictive searches\r\n* Combining Bisect/Predictive with a Linear Chaser\r\n* \r\n\r\nA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\r\n","description_html":"\u003cp\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/p\u003e\u003cp\u003eMethods exist that are 1000 times faster than Find.\u003c/p\u003e\u003cp\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e [a,val]\u003c/p\u003e\u003cul\u003e\u003cli\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\u003c/li\u003e\u003cli\u003eval: The value to find in the \"a\" vector. Val will exist in \"a\".\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e [ptr]\u003c/p\u003e\u003cul\u003e\u003cli\u003eptr: The index in array \"a\" where a(ptr) is val\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/p\u003e\u003cp\u003eThe basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 cases).\u003c/p\u003e\u003cp\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/p\u003e\u003cp\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/p\u003e\u003cp\u003eHints:\u003c/p\u003e\u003cul\u003e\u003cli\u003eThere are  multiple methods that significantly outperform find.\u003c/li\u003e\u003cli\u003eBisect searches\u003c/li\u003e\u003cli\u003ePredictive searches\u003c/li\u003e\u003cli\u003eCombining Bisect/Predictive with a Linear Chaser\u003c/li\u003e\u003cli\u003e\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\u003c/p\u003e","function_template":"function ptr = find_fast(a,val)\r\n  ptr = find(a==val,1,'first');\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nL=1000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\n% Warm-Up Test cases\r\nfor i=1:5:1000\r\n assert(isequal(find_fast(a,a(i)),i))\r\nend\r\n%%\r\n% Timing Performance Case\r\nL=12000000;\r\na=randi(2^32-1,L*1.2,1,'uint32');\r\na=unique(a,'R2012a');\r\na=a(1:L);\r\n\r\nq=200;\r\n\r\nval=zeros(q,1);\r\nfor i=1:q\r\n val(i)=a(randi(L));\r\nend\r\n\r\nt0=clock;\r\nfor i=1:q\r\n ptr=find_fast(a,val(i));\r\nend\r\ndt=etime(clock,t0)*1000;\r\n\r\n\r\nassert(isequal(find_fast(a,val(1)),find(a==val(1),1,'first')))\r\n\r\nfprintf('Your Time = %i msec\\n',floor(dt))\r\n\r\nfeval(@assignin,'caller','score',min(200,floor(dt)));\r\n%   Performance Score\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"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":1,"created_at":"2012-09-07T01:12:34.000Z","updated_at":"2025-12-08T15:39:06.000Z","published_at":"2012-09-07T03:26:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Challenge is to create faster Find methods for large unique ascending vectors.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods exist that are 1000 times faster than Find.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMethods have applications where data files are loaded for multiple searches(Rubik's Mini Cube, DNA).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e [a,val]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ea: vector [N large,1] of type uint32 that is unique and sorted ascending\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\u003eval: The value to find in the \\\"a\\\" vector. Val will exist in \\\"a\\\".\u003c/w:t\u003e\u003c/w:r\u003e\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 [ptr]\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\u003eptr: The index in array \\\"a\\\" where a(ptr) is val\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Time in msec to find 200 random values in a 12,000,000 long vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 basic find(a==val,1,'first') takes approximately 14 seconds (12M, 200 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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHigh performance find_fast can find 200 values in 4 to 12 milli-seconds for a 12M vector.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFind time increases linearly with the array size. High performance methods don't appear to incur any increased processing time.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eHints:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThere are multiple methods that significantly outperform find.\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\u003eBisect searches\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\u003ePredictive searches\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\u003eCombining Bisect/Predictive with a Linear Chaser\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\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA static goal vector find time could be enhanced by a Pre-Index array. Not applicable to this challenge.\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:\"alternate enhancement\"","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:\"alternate enhancement\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"alternate enhancement\"","","\"","alternate enhancement","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f3564c996b8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f3564c99618\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f3564c98d58\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f3564c99938\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f3564c99898\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f3564c997f8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f3564c99758\u003e":"tag:\"alternate enhancement\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f3564c99758\u003e":"tag:\"alternate enhancement\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"cody-search","password":"78X075ddcV44","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"alternate enhancement\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"alternate enhancement\"","","\"","alternate enhancement","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f3564c996b8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f3564c99618\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f3564c98d58\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f3564c99938\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f3564c99898\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f3564c997f8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f3564c99758\u003e":"tag:\"alternate enhancement\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f3564c99758\u003e":"tag:\"alternate enhancement\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":958,"difficulty_rating":"easy-medium"},{"id":934,"difficulty_rating":"easy-medium"}]}}