65 lines
1.4 KiB
Lua
65 lines
1.4 KiB
Lua
-- Initialisation
|
|
math.randomseed(os.time())
|
|
numList = {values = {}}
|
|
|
|
-- Check whether list contains n
|
|
function numList:contains (n)
|
|
for k, v in pairs(self.values) do
|
|
if v == n then return true end
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Check whether list is in order
|
|
function numList:inOrder ()
|
|
for k, v in pairs(self.values) do
|
|
if k ~=v then return false end
|
|
end
|
|
return true
|
|
end
|
|
|
|
-- Create necessarily out-of-order list
|
|
function numList:build ()
|
|
local newNum
|
|
repeat
|
|
for i = 1, 9 do
|
|
repeat
|
|
newNum = math.random(1, 9)
|
|
until not numList:contains(newNum)
|
|
table.insert(self.values, newNum)
|
|
end
|
|
until not numList:inOrder()
|
|
end
|
|
|
|
-- Display list of numbers on one line
|
|
function numList:show ()
|
|
for k, v in pairs(self.values) do
|
|
io.write(v .. " ")
|
|
end
|
|
io.write(":\t")
|
|
end
|
|
|
|
-- Reverse n values from left
|
|
function numList:reverse (n)
|
|
local swapList = {}
|
|
for k, v in pairs(self.values) do
|
|
table.insert(swapList, v)
|
|
end
|
|
for i = 1, n do
|
|
swapList[i] = self.values[n + 1 - i]
|
|
end
|
|
self.values = swapList
|
|
end
|
|
|
|
-- Main procedure
|
|
local score = 0
|
|
print("\nRosetta Code Number Reversal Game in Lua")
|
|
print("========================================\n")
|
|
numList:build()
|
|
repeat
|
|
numList:show()
|
|
numList:reverse(tonumber(io.read()))
|
|
score = score + 1
|
|
until numList:inOrder()
|
|
numList:show()
|
|
print("\n\nW00t! You scored:", score)
|