It's a pity the test set does not include a case such that the largest running sum is not also the largest running product. Some solutions, including my solution of size 23, should fail because they take the sum, not the product.
I would suggest adding '9909911111' as a test case. That would weed out all people who took a shortcut by using a moving sum, instead of a moving product.
function i = running_product(s)
L=length(s);
L1=L-4;
tmp=0;
i=0;
for j=1:L1
m=str2num(s(j))*str2num(s(j+1))*str2num(s(j+2))*str2num(s(j+3))*str2num(s(j+4));
if m>tmp
tmp=m;
i=j;
end
end
end
Moving sum of logarithm gives the moving product. Also, to reduce the code size, simply convolves log(+s) with any positive
constant, such as 32 (the ASCII code of space).
By taking log, the moving sum computed via convolution is indeed the moving product.
It's a very good idea!
nice
Goodddd
Interesting idea. But the code can be simplified, as demonstrated in Solution 1373422, which cuts the size by 13.
A case of not enough tests in the Test Suite?
This solution also computes the running sum instead the product. The interesting thing to show here is that convn also works with char input
That's interesting. The documentation says it works only for double and single.
It's only because the test set is inadequate that this solution, which uses the running sum not the running product, works. My size-23 solution exploits the same loophole, but to see it done properly using convolution see my solution 19416, of size 25.
This should not be a solution, because it takes the sum, not the product. It's a pity the test set does not include a case such that the largest running sum is not also the largest running product.
This should use prod, not sum. As for my own solution 19425, the test cases fail to detect this error (at the time of writing).
Renaming a field in a structure array
836 Solvers
208 Solvers
397 Solvers
Area of an equilateral triangle
3461 Solvers
270 Solvers
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!