Re: Get all combinations of n digits among m digits
- Posted by jmduro 1 week ago
- 170 views
Without testing nr=1 I got following error:
C:\Data\Euphoria\v4\Sudoku\tinTrainer\tinTrainer.ex:344 in procedure recurse()
subscript value 1 is out of bounds, reading from a sequence of length 0 - in subscript #1 of '<no-name>'
<no-name> = {}
However, the test was not at the right place. Here is the corrected code.
sequence combis = {} procedure recurse(sequence remaining, /* digits remaining to compute */ integer ne, /* number of digits expected for a valid combination */ sequence selected = {}) /* digits already selected for a potential combination */ integer nr = length(remaining) -- number of digits remaining to compute integer ns = length(selected) -- number of digits already selected for a potential combination if (nr = 1) or (ns+nr = ne) then combis = append(combis, selected & remaining) return elsif ns = ne then combis = append(combis, selected) return else integer r1 = remaining[1] remaining = remove(remaining, 1) -- select next recurse(remaining, ne, append(selected, r1)) -- skip next recurse(remaining, ne, selected) end if end procedure function combinations(sequence s, integer lg) combis = {} recurse(s, lg) return combis end function
Jean-Marc

