יחידה:משתמש אנדרסן/כדורגל

מתוך ויקיפדיה, האנציקלופדיה החופשית

ניתן ליצור תיעוד על היחידה הזאת בדף יחידה:משתמש אנדרסן/כדורגל/תיעוד

-- 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
-- *****************************************************************************
-- *****************************************************************************