From d068f0b3c11348a50c18af1ee3b0d2e5f38c4faf Mon Sep 17 00:00:00 2001 From: Matthew Sotoudeh Date: Fri, 17 May 2024 15:57:30 -0700 Subject: lua benchmarks --- lua_benchmark/tests/Lua-Benchmarks/queen.lua | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 lua_benchmark/tests/Lua-Benchmarks/queen.lua (limited to 'lua_benchmark/tests/Lua-Benchmarks/queen.lua') diff --git a/lua_benchmark/tests/Lua-Benchmarks/queen.lua b/lua_benchmark/tests/Lua-Benchmarks/queen.lua new file mode 100644 index 0000000..9071406 --- /dev/null +++ b/lua_benchmark/tests/Lua-Benchmarks/queen.lua @@ -0,0 +1,46 @@ +local N = tonumber(arg[1] or 8) -- board size + + +-- check whether position (n,c) is free from attacks +local function isplaceok (a, n, c) + for i = 1, n - 1 do -- for each queen already placed + if (a[i] == c) or -- same column? + (a[i] - i == c - n) or -- same diagonal? + (a[i] + i == c + n) then -- same diagonal? + return false -- place can be attacked + end + end + return true -- no attacks; place is OK +end + + +-- print a board +local function printsolution (a) + for i = 1, N do + for j = 1, N do + io.write(a[i] == j and "X" or "-", " ") + end + io.write("\n") + end + io.write("\n") +end + + +-- add to board 'a' all queens from 'n' to 'N' +local function addqueen (a, n) + if n > N then -- all queens have been placed? + printsolution(a) + else -- try to place n-th queen + for c = 1, N do + if isplaceok(a, n, c) then + a[n] = c -- place n-th queen at column 'c' + addqueen(a, n + 1) + end + end + end +end + + +-- run the program +addqueen({}, 1) + -- cgit v1.2.3