-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathex24.2.lua
43 lines (33 loc) · 1.13 KB
/
ex24.2.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
local function print_result(list, n)
for i = 1, n do io.write(list[i], " ") end
io.write("\n")
io.flush()
end
local function helper(list, total_num, working_num, require_num)
working_num = working_num or #list
require_num = require_num or total_num
if working_num == require_num or require_num == 0 then
-- print_result(list, total_num)
coroutine.yield(list, total_num)
return
end
if require_num > working_num then
return
end
-- for i = 1, working_num do
list[1], list[require_num] = list[require_num], list[1]
helper(list, total_num, working_num - 1, require_num - 1)
list[1], list[require_num] = list[require_num], list[1]
list[1], list[working_num] = list[working_num], list[1]
helper(list, total_num, working_num - 1, require_num)
list[1], list[working_num] = list[working_num], list[1]
-- end
end
local function combinations(list, num)
return coroutine.wrap(function () helper(list, num) end)
end
local list = { 1, 2, 3 }
for combination, length in combinations(list, 2) do
print_result(combination, length)
end
-- helper(list, 3)