RosettaCodeData/Task/Number-reversal-game/Lua/number-reversal-game.lua

66 lines
1.4 KiB
Lua
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
-- Initialisation
math.randomseed(os.time())
2015-11-18 06:14:39 +00:00
numList = {values = {}}
2017-09-23 10:01:46 +02:00
-- 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
2015-11-18 06:14:39 +00:00
end
2017-09-23 10:01:46 +02:00
-- 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
2015-11-18 06:14:39 +00:00
end
2017-09-23 10:01:46 +02:00
-- 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()
2015-11-18 06:14:39 +00:00
end
2017-09-23 10:01:46 +02:00
-- 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")
2015-11-18 06:14:39 +00:00
end
2017-09-23 10:01:46 +02:00
-- 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
2015-11-18 06:14:39 +00:00
end
2017-09-23 10:01:46 +02:00
-- Main procedure
local score = 0
2015-11-18 06:14:39 +00:00
print("\nRosetta Code Number Reversal Game in Lua")
print("========================================\n")
numList:build()
repeat
2017-09-23 10:01:46 +02:00
numList:show()
numList:reverse(tonumber(io.read()))
score = score + 1
2015-11-18 06:14:39 +00:00
until numList:inOrder()
numList:show()
2017-09-23 10:01:46 +02:00
print("\n\nW00t! You scored:", score)