Re: Get all combinations of n digits among m digits

new topic     » goto parent     » topic index » view thread      » older message » newer message

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

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu