--[[
Требуется найти минимально возможную последовательность цифр из системы счисления по основанию M, содержащую все N-значные числа включая числа с нулем в начале
http://w...content-available-to-author-only...m.ru/algorithms/thread1647320.html#post8670711
]]
-- основание
local m= 3
-- количество
local n= 3
-- результат
local row= { }
local minL= m^ n+ n- 1
-- использованные числа по их началам
local usedNumbers= { }
local build
build= function ( start, i)
table.insert ( row, i- 1 )
if # row== minL then
print ( 'Result!!!' , table.concat ( row) )
return true
end
start= start.. i
start= start: sub( 2 )
--print('try',table.concat(row))
local un= usedNumbers[ start]
if not un then
un= { }
usedNumbers[ start] = un
end
for i= 1 , n do
if not un[ i] then
un[ i] = true
if build( start, i) then
return true
end
un[ i] = false
else
--print('!')
end
end
row[ # row] = nil
end
for j= 1 , n- 2 do table.insert ( row, 0 ) end
build( string.rep ( '1' , n- 1 ) , 1 )
LS1bWwrQotGA0LXQsdGD0LXRgtGB0Y8g0L3QsNC50YLQuCDQvNC40L3QuNC80LDQu9GM0L3QviDQstC+0LfQvNC+0LbQvdGD0Y4g0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMINGG0LjRhNGAINC40Lcg0YHQuNGB0YLQtdC80Ysg0YHRh9C40YHQu9C10L3QuNGPINC/0L4g0L7RgdC90L7QstCw0L3QuNGOIE0sINGB0L7QtNC10YDQttCw0YnRg9GOINCy0YHQtSBOLdC30L3QsNGH0L3Ri9C1INGH0LjRgdC70LAg0LLQutC70Y7Rh9Cw0Y8g0YfQuNGB0LvQsCDRgSDQvdGD0LvQtdC8INCyINC90LDRh9Cw0LvQtQpodHRwOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4ubS5ydS9hbGdvcml0aG1zL3RocmVhZDE2NDczMjAuaHRtbCNwb3N0ODY3MDcxMQpdXQogCi0tICDQvtGB0L3QvtCy0LDQvdC40LUKbG9jYWwgbT0zCi0tICDQutC+0LvQuNGH0LXRgdGC0LLQvgpsb2NhbCBuPTMKIAotLSAg0YDQtdC30YPQu9GM0YLQsNGCCmxvY2FsIHJvdz17fQogCmxvY2FsIG1pbkw9bV5uK24tMQogCi0tICDQuNGB0L/QvtC70YzQt9C+0LLQsNC90L3Ri9C1INGH0LjRgdC70LAg0L/QviDQuNGFINC90LDRh9Cw0LvQsNC8CmxvY2FsIHVzZWROdW1iZXJzPXt9Cgpsb2NhbCBidWlsZApidWlsZD1mdW5jdGlvbihzdGFydCxpKQogICAgdGFibGUuaW5zZXJ0KHJvdyxpLTEpCiAgICBpZiAjcm93PT1taW5MIHRoZW4KICAgICAgICBwcmludCgnUmVzdWx0ISEhJyx0YWJsZS5jb25jYXQocm93KSkKICAgICAgICByZXR1cm4gdHJ1ZQogICAgZW5kCiAgICBzdGFydD1zdGFydC4uaQogICAgc3RhcnQ9c3RhcnQ6c3ViKDIpCiAgICAtLXByaW50KCd0cnknLHRhYmxlLmNvbmNhdChyb3cpKQogICAgbG9jYWwgdW49dXNlZE51bWJlcnNbc3RhcnRdCiAgICBpZiBub3QgdW4gdGhlbgogICAgICAgIHVuPXt9CiAgICAgICAgdXNlZE51bWJlcnNbc3RhcnRdPXVuCiAgICBlbmQKICAgIGZvciBpPTEsbiBkbwogICAgICAgIGlmIG5vdCB1bltpXSB0aGVuCiAgICAgICAgICAgIHVuW2ldPXRydWUKICAgICAgICAgICAgaWYgYnVpbGQoc3RhcnQsaSkgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIHVuW2ldPWZhbHNlCiAgICAgICAgZWxzZQogICAgICAgIAktLXByaW50KCchJykKICAgICAgICBlbmQKICAgIGVuZAogICAgcm93WyNyb3ddPW5pbAplbmQKCmZvciBqPTEsbi0yIGRvIHRhYmxlLmluc2VydChyb3csMCkgZW5kIApidWlsZCggc3RyaW5nLnJlcCgnMScsIG4tMSksIDEpCgo=