fork(3) download
  1. --[[
  2. Требуется найти минимально возможную последовательность цифр из системы счисления по основанию M, содержащую все N-значные числа включая числа с нулем в начале
  3. http://w...content-available-to-author-only...m.ru/algorithms/thread1647320.html#post8670711
  4. ]]
  5.  
  6. -- основание
  7. local m=3
  8. -- количество
  9. local n=3
  10.  
  11. -- результат
  12. local row={}
  13.  
  14. local minL=m^n+n-1
  15.  
  16. -- использованные числа по их началам
  17. local usedNumbers={}
  18.  
  19. local build
  20. build=function(start,i)
  21. table.insert(row,i-1)
  22. if #row==minL then
  23. print('Result!!!',table.concat(row))
  24. return true
  25. end
  26. start=start..i
  27. start=start:sub(2)
  28. --print('try',table.concat(row))
  29. local un=usedNumbers[start]
  30. if not un then
  31. un={}
  32. usedNumbers[start]=un
  33. end
  34. for i=1,n do
  35. if not un[i] then
  36. un[i]=true
  37. if build(start,i) then
  38. return true
  39. end
  40. un[i]=false
  41. else
  42. --print('!')
  43. end
  44. end
  45. row[#row]=nil
  46. end
  47.  
  48. for j=1,n-2 do table.insert(row,0) end
  49. build( string.rep('1', n-1), 1)
  50.  
  51.  
Success #stdin #stdout 0s 2788KB
stdin
Standard input is empty
stdout
Result!!!	00010020110120210221112122200