「ノート:Tournament」の版間の差分
(早速あきらめの境地) |
|||
行1: | 行1: | ||
local p = {} | local p = {} | ||
+ | |||
+ | local wBorder = '4px solid red' | ||
+ | local lBorder = '2px solid gray' | ||
+ | |||
+ | function td2(x, round) | ||
+ | local t = {} | ||
+ | local z | ||
+ | if x.z == 0 then | ||
+ | z = lBorder | ||
+ | else | ||
+ | z = wBorder | ||
+ | end | ||
+ | t[1] = '<td rowspan="'..x.e..'" colspan="4" style="border-bottom:'..z..'"></td>' | ||
+ | t[2] = '<td rowspan="'..x.f..'" colspan="4"></td>' | ||
+ | return t | ||
+ | end | ||
function p.main(frame) | function p.main(frame) | ||
行11: | 行27: | ||
team[i] = args[i] | team[i] = args[i] | ||
data[0][i] = {a = 1, b = 1} | data[0][i] = {a = 1, b = 1} | ||
+ | line[2*i-1] = "" | ||
+ | line[2*i] = "" | ||
i = i + 1 | i = i + 1 | ||
end | end | ||
行60: | 行78: | ||
end | end | ||
round = round - 1 | round = round - 1 | ||
+ | local nRound = round | ||
+ | while round > 0 do | ||
+ | row = 0 | ||
+ | prev = 1 | ||
+ | for curr = 1, #data[round] do | ||
+ | data[round][curr].z = data[round][curr].z or round | ||
+ | if data[round][curr].a == nil then | ||
+ | data[round][prev].z = data[round][curr].z | ||
+ | prev = prev + 1 | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | else | ||
+ | if data[round][curr][2] == ">" then | ||
+ | data[round][curr].x = data[round][curr].z | ||
+ | data[round][curr].y = round - 1 | ||
+ | elseif data[round][curr][2] == "<" then | ||
+ | data[round][curr].x = round - 1 | ||
+ | data[round][curr].y = data[round][curr].z | ||
+ | else | ||
+ | data[round][curr].x = round - 1 | ||
+ | data[round][curr].y = round - 1 | ||
+ | end | ||
+ | data[round][prev].z = data[round][curr].x | ||
+ | data[round][prev+1].z = data[round][curr].y | ||
+ | prev = prev + 2 | ||
+ | end | ||
+ | round = round - 1 | ||
+ | end | ||
+ | end | ||
+ | |||
+ | for round = 1, nRound do | ||
− | + | end | |
− | + | ||
− | + | ||
− | + | ||
return "" | return "" | ||
end | end | ||
return p | return p |
2017年10月27日 (金) 22:23時点における版
local p = {}
local wBorder = '4px solid red' local lBorder = '2px solid gray'
function td2(x, round) local t = {} local z if x.z == 0 then z = lBorder else z = wBorder end t[1] = '<td rowspan="'..x.e..'" colspan="4" style="border-bottom:'..z..'"></td>' t[2] = '<td rowspan="'..x.f..'" colspan="4"></td>' return t end
function p.main(frame) local args = frame.args local team = {} local nRow = { [0] = {} } local line = {}
local i = 1 while args[i] ~= "result" do team[i] = args[i] data[0][i] = {a = 1, b = 1} line[2*i-1] = "" line[2*i] = "" i = i + 1 end local nTeam = i - 1 i = i + 1
local round = 1 local curr = 1 local prev = 1 local row = 0 data[1] = {} while args[i] ~= nil and row == 0 do data[round][curr] = {} data[round][curr].e = data[round-1][prev].e data[round][curr].f = data[round-1][prev].f
if args[i] == "bye" then i = i + 1 elseif data[round-1][prev+1] ~= nil then local prev1 = data[round-1][prev].e local prev2 = data[round-1][prev].f local prev3 = data[round-1][prev+1].e local prev4 = data[round-1][prev+1].f local curr1 if prev2 > prev3 then curr1 = (prev2 + prev3 + (curr1 % 2)) / 2 else curr1 = (prev2 + prev3 - (curr1 % 2)) / 2 end local curr2 = (prev2 + prev3) - curr1 data[round][curr] = { a = prev1, b = prev2, c = prev3, d = prev4, e = curr1, f = curr2, args[i], args[i+1], args[i+2], args[i+3] } i = i + 4 end
prev = prev + 1 row = row + data[round][curr].e + data[round][curr].f if row == nTeam then round = round + 1 curr = 1 prev = 1 row = 0 data[round] = {} else curr = curr + 1 end end round = round - 1 local nRound = round
while round > 0 do row = 0 prev = 1 for curr = 1, #data[round] do data[round][curr].z = data[round][curr].z or round if data[round][curr].a == nil then data[round][prev].z = data[round][curr].z prev = prev + 1
else
if data[round][curr][2] == ">" then
data[round][curr].x = data[round][curr].z
data[round][curr].y = round - 1
elseif data[round][curr][2] == "<" then
data[round][curr].x = round - 1
data[round][curr].y = data[round][curr].z
else
data[round][curr].x = round - 1
data[round][curr].y = round - 1
end
data[round][prev].z = data[round][curr].x
data[round][prev+1].z = data[round][curr].y
prev = prev + 2
end
round = round - 1
end
end
for round = 1, nRound do
end return "" end
return p