Problem 44345. MATLAB Counter
Write a function f = counter(x0,b) to construct a counter handle f that counts with an initial value x0 and a step size b.
E.g.,
>> f = counter(0,1)  % Initialize a counter f() with initial_count = 0 and step_size = 1
>> f()
ans =
     0
>> f()
ans =
     1
>> f()
ans =
     2
			Solution Stats
Problem Comments
- 
		9 Comments
 
My function works directly as described - but does not manage to pass the test suite ... what is wrong?
%%
function varargout = counter(varargin)
persistent add base
    if isempty(varargin)
            base = base + add;
            varargout{1} = base;            
    end
    if numel(varargin) > 1
        add  = varargin{2};
        base = varargin{1}-add;
    end
end
For anyone needing a gentle refresher (like I did) on nested anonymous functions: 
https://www.mathworks.com/matlabcentral/cody/problems/24-function-iterator
Cody's Problem 24 might be of relevance, but note that so far very few of the correct solutions to the present problem (Problem 44345) have used anonymous functions, whereas all of the correct solutions have used named functions (some nested, some not).
Correction: there is a solution here (Solution 1308690) which only uses an anonymous function, without calling a named user function.
Either (or both) of the following pages may be of interest in tackling this problem: https://mathworks.com/help/matlab/matlab_prog/nested-functions.html and https://mathworks.com/help/matlab/matlab_prog/share-data-between-workspaces.html .
It's the best problem in Cody:Easy
You can also use class definition to solve it, amazing!
the tests can be strengthened a bit, to allow multiple counters
g = counter(1,2);
h = counter(3,5);
assert(isequal([1 3 5 3 8 13], [g() g() g() h() h() h()]));
:
One way to solve this problem:
https://paste.ubuntu.com/p/nCFk9p7XNM/
Solution Comments
Show commentsProblem Recent Solvers285
Suggested Problems
- 
         
         
1363 Solvers
 - 
         
Project Euler: Problem 5, Smallest multiple
1538 Solvers
 - 
         
Project Euler: Problem 8, Find largest product in a large string of numbers
1229 Solvers
 - 
         
Flip the main diagonal of a matrix
879 Solvers
 - 
         
Split a string into chunks of specified length
1964 Solvers
 
More from this Author29
Problem Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!