יחידה:משתמש אנדרסן/כדורגל
ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:משתמש אנדרסן/כדורגל/תיעוד
-- fields
local p = {}
-- default
local NUMBER_OF_TEAMS = 16
local WINNER = 1
local QUALIFY = 2
local QUALIFY2 = 0
local RELEGATED = 2
local RELEGATED2 = 1 -- playoffs
local COLOR_GOLD = [[bgcolor="#FFD700"]]
local COLOR_BRIGHT_BLUE = [[bgcolor="#0386E9"]]
local COLOR_BLUE = [[bgcolor="#b2d4cd"]]
local COLOR_BRIGHT_RED = [[bgcolor="#F59E79"]]
local COLOR_RED = [[bgcolor="#ff7373"]]
local prefix = [[
{| class="wikitable sortable" style="text-align: center;"
! rowspan="2"| מיקום
! rowspan="2" | קבוצה
! rowspan="2" | משחקים
! rowspan="2" | נצחונות
! rowspan="2" | תיקו
! rowspan="2" | הפסדים
! colspan="3" | שערים
! rowspan="2" | נקודות
|-
! זכות
! חובה
! הפרש
]]
local suffix = [[
|-
|}
]]
-- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+END fields-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-- *****************************************************************************
-- main
p.main = function ( frame )
local i = 1
local teamsList = {}
local teamsListSize = 0
-- get all teams
while (true)
do
if frame.args[i] == nil then break end
teamsListSize = teamsListSize + 1
teamsList[teamsListSize] = newTeam(frame.args[i], frame.args[i+1], frame.args[i+2], frame.args[i+3], frame.args[i+4], frame.args[i+5])
i = i + 6
end
-- sort teams
teamsList = sortTeams(teamsList, teamsListSize) -- O(BOOOM!) .. but who cares, right?
return printTable(teamsList, teamsListSize)
end
-- *****************************************************************************
-- +-+-+-+-+-+-+-+-+-+-+-+-+-+-TABLE FUNCTIONS-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-- print table
function printTable( teams, size )
local mytable = prefix
local currentBest
for position=1, size, 1 do
mytable = mytable .. addTableLine(teams[position], position, teams[1])
end
mytable = mytable .. suffix
return mytable
end
-- addTableLine
function addTableLine( team, position, first_place_team )
if team.gd < 0 then team.gd = math.abs(team.gf - team.ga) .. "-" end
local str = "\n|-"
str = str .. painting(position) -- draw/paint color
str = str .. "\n|" .. position
str = str .. "\n|" .. team.name
str = str .. "\n|" .. team.matchs
str = str .. "\n|" .. team.wins
str = str .. "\n|" .. team.draws
str = str .. "\n|" .. team.loses
str = str .. "\n|" .. team.gf
str = str .. "\n|" .. team.ga
str = str .. "\n| " .. team.gd
str = str .. "\n|" .. team.points
str = str .. "\n"
return str
end
function painting(position)
if position == WINNER then
return COLOR_GOLD
elseif position <= WINNER + QUALIFY then
return COLOR_BLUE
elseif position <= WINNER + QUALIFY + QUALIFY2 then
return COLOR_BRIGHT_BLUE
elseif position > NUMBER_OF_TEAMS - RELEGATED then
return COLOR_RED
elseif position > NUMBER_OF_TEAMS - RELEGATED - RELEGATED2 then
return COLOR_BRIGHT_RED
end
return ""
end
-- +-+-+-+-+-+-+-+-+-+-+-+-+-END TABLE FUNCTIONS-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-- *****************************************************************************
-- +-+-+-+-+-+-+-+-+-+-+-+-+-+-TEAMS FUNCTIONS-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-- add new team
function newTeam ( name, wins, draws, loses, gf, ga )
local team = {}
team.name = name
team.matchs = wins + draws + loses
team.wins = wins
team.draws = draws
team.loses = loses
team.gf = gf
team.ga = ga
team.gd = gf - ga
team.points = 3*wins + draws
return team
end
function sortTeams(teams, size)
local newTeamsList = {}
local currentBest
local i = 1
while (size>0) do
currentBest = getBestTeam(teams, size)
newTeamsList[i] = currentBest[1]
teams = primitiveRemoving(teams, size, currentBest[2])
size = size - 1
i = i + 1
end
return newTeamsList
end
function getBestTeam( teams, size )
local returnValue = {}
local bestTeam = teams[1]
local position = 1
for i=1, size, 1 do
if teams[i].points > bestTeam.points
then
bestTeam = teams[i]
position = i
elseif teams[i].points == bestTeam.points
then
if teams[i].gd > bestTeam.gd
then
bestTeam = teams[i]
position = i
elseif teams[i].gd == bestTeam.gd
then
if teams[i].gf > bestTeam.gf
then
bestTeam = teams[i]
position = i
end -- end better gf
end -- end better gd
end -- end better points
end -- end for
returnValue[1] = bestTeam
returnValue[2] = position
return returnValue
end
function primitiveRemoving( array, size, index )
local newArray = {}
for i=1, index-1, 1 do
newArray[i] = array[i]
end
if index+1 > size then return newArray end
for i=index+1, size, 1 do
newArray[i-1] = array[i]
end
return newArray
end
-- +-+-+-+-+-+-+-+-+-+-+-+-+-END TEAMS FUNCTIONS-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-- *****************************************************************************
-- *****************************************************************************
return p
-- *****************************************************************************
-- *****************************************************************************