Sha256: cbd28dc9480b52673d32a01b2b201f8febd861666a1a4c6c44c0052160cbe80d

Contents?: true

Size: 1.78 KB

Versions: 347

Compression:

Stored size: 1.78 KB

Contents

local function pad_right(s, width)
  return s .. (' '):rep(width - #s)
end

local function parse(results)
  local stats = {}

  for _, result in ipairs(results) do
    local t1, t2, outcome = result:match('^([^;]+);([^;]+);([^;]+)$')

    if t1 and t2 and outcome then
      stats[t1] = stats[t1] or { w = 0, l = 0, d = 0 }
      stats[t2] = stats[t2] or { w = 0, l = 0, d = 0 }

      if outcome == 'win' then
        stats[t1].w = stats[t1].w + 1
        stats[t2].l = stats[t2].l + 1
      elseif outcome == 'loss' then
        stats[t1].l = stats[t1].l + 1
        stats[t2].w = stats[t2].w + 1
      elseif outcome == 'draw' then
        stats[t1].d = stats[t1].d + 1
        stats[t2].d = stats[t2].d + 1
      end
    end
  end

  return stats
end

local function finalize(stats)
  for _, team_stats in pairs(stats) do
    team_stats.mp = team_stats.w + team_stats.l + team_stats.d
    team_stats.p = team_stats.w * 3 + team_stats.d
  end
end

local function sorted_stats(stats)
  local sorted = {}

  for name, stats in pairs(stats) do
    table.insert(sorted, { name = name, stats = stats })
  end

  table.sort(sorted, function(x, y)
    if x.stats.p == y.stats.p then
      return x.name < y.name
    else
      return x.stats.p > y.stats.p
    end
  end)

  return sorted
end

local function format(stats)
  local sorted = sorted_stats(stats)
  local formatted = {}

  table.insert(formatted, pad_right('Team', 31) .. '| MP |  W |  D |  L |  P')
  for _, b in ipairs(sorted) do
    table.insert(formatted, string.format(
      '%s| %2d | %2d | %2d | %2d | %2d',
      pad_right(b.name, 31),
      b.stats.mp,
      b.stats.w,
      b.stats.d,
      b.stats.l,
      b.stats.p
    ))
  end

  return formatted
end

return function(results)
  local stats = parse(results)
  finalize(stats)
  return format(stats)
end

Version data entries

347 entries across 347 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.179 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.178 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.177 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.176 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.175 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.174 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.173 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.172 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.171 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.170 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.169 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.167 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.166 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.165 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.164 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.163 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.162 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.161 tracks/lua/exercises/tournament/example.lua
trackler-2.2.1.160 tracks/lua/exercises/tournament/example.lua