MATLAB: Contiguous Number Checking and Verification

contiguous

Suppose, I have a variable, a.
a={ 18 5 1 3
14 2 1 2
4 2 5 9
2 1 5 7
1 5 6 7
3 3 6 1
3 7 6 5
16 6 6 3
5 3 6 6};
Based on column 3 value, I would like to check whether the values in COLUMN 4 are contiguous or not. The eg below is elaborated to clarify my goal.
Column 3 contains unique values of 1,5 and 6:
18 5 1 3
14 2 1 2
- The values in column 4 are contiguous
4 2 5 9
2 1 5 7
- The values in column 4 are NOT contiguous. (Missing '8' in Col 4)
1 5 6 7
3 3 6 1
3 7 6 5
16 6 6 3
5 3 6 6
- The values in column 4 are NOT contiguous. (Missing '2','4' in Col 4)
Result: [0 1 2]
How can I perform this complex computation? Ideally, the results should be stored using just 1 variable (if possible). My code at the moment is way too complicated and not efficient. Any help would be greatly appreciated.

Best Answer

OK, just change the function slightly...
MATL
>> [~,~,c] = unique(a(:,3));
>> nmiss=accumarray(c,a(:,4),[],@(x) length([min(x):max(x)])-length(x))
nmiss =
0
1
2
>>
And, to anticipate the next wishes/needs (*) ...
MATL
>> [u,~,c] = unique(a(:,3));
>> groups = accumarray(c,a(:,4), [length(u) 1], @(x) {x})
groups =
[2x1 double]
[2x1 double]
[5x1 double]
>> groups{:}
ans =
3
2
ans =
9
7
ans =
7
1
5
3
6
>> missing = accumarray(c,a(:,4), [length(u) 1], ...
@(x) {setdiff(min(x):max(x), x)})
missing =
[1x0 double]
[ 8]
[1x2 double]
>> missing{:}
ans =
Empty matrix: 1-by-0
ans =
8
ans =
2 4
>>
(*) And credit to Kelly Kearney at cs-sm who showed the "trick" to getting the SZ argument correct for the cell array addressing for the last two. Thanks, Kelly!!! :)