Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/ruby
- # IEM Hannover March 2012
- RESULTS = [
- { 'aAa' => [ :leona, :mundo, :wukong, :karth, :corki ],
- 'SK' => [ :sona, :lee, :shyv, :kog, :galio ],
- :winner => 'aAa' },
- { 'aAa' => [ :corki, :leona, :shen, :malz, :maokai ],
- 'SK' => [ :janna, :lee, :graves, :udyr, :cass ],
- :winner => 'SK' },
- { 'aAa' => [ :udyr, :leona, :corki, :fizz, :ken ],
- 'SK' => [ :janna, :shyv, :graves, :cass, :renek ],
- :winner => 'aAa' },
- { 'CLG' => [ :shen, :vayne, :ali, :udyr, :ahri ],
- 'Curse' => [ :morg, :shyv, :janna, :irelia, :cait ],
- :winner => 'CLG' },
- { 'CLG' => [ :ez, :janna, :mundo, :zil, :swain ],
- 'Curse' => [ :veig, :trist, :udyr, :ali, :lee ],
- :winner => 'CLG' },
- { 'M5' => [ :janna, :lee, :trynd, :ken, :mf ],
- 'Sypher' => [ :morg, :shen, :nid, :ez, :blitz ],
- :winner => 'M5' },
- { 'Curse' => [ :kog, :mundo, :nunu, :malph, :cait ],
- 'eHome' => [ :shyv, :janna, :ez, :trynd, :singed ],
- :winner => 'eHome' },
- { 'TSM' => [ :cass, :irelia, :shen, :graves, :soraka ],
- 'SK' => [ :janna, :kog, :noct, :udyr, :galio ],
- :winner => 'SK' },
- { 'M5' => [ :kog, :nunu, :lee, :wukong, :galio ],
- 'SK' => [ :vlad, :ez, :sona, :amumu, :morg ],
- :winner => 'M5' },
- { 'Sypher' => [ :kog, :janna, :nunu, :anivia, :riven ],
- 'Curse' => [ :morg, :irelia, :ali, :trist, :naut ],
- :winner => 'Curse' },
- { 'TSM' => [ :lee, :janna, :cass, :mf, :trynd ],
- 'eHome' => [ :shyv, :corki, :ahri, :sona, :cho ],
- :winner => 'TSM' },
- { 'TSM' => [ :kog, :udyr, :irelia, :nunu, :ahri ],
- 'M5' => [ :lee, :janna, :vlad, :ashe, :ken ],
- :winner => 'M5' },
- { 'Curse' => [ :ryze, :shen, :udyr, :yorick, :cait ],
- 'SK' => [ :morg, :maokai, :janna, :kog, :renek ],
- :winner => 'SK' },
- { 'eHome' => [ :brand, :noct, :ww, :ez, :taric ],
- 'Sypher' => [ :morg, :kog, :riven, :janna, :lee ],
- :winner => 'Sypher' },
- { 'SK' => [ :shyv, :morg, :ashe, :janna, :lee ],
- 'eHome' => [ :shen, :karth, :corki, :akali, :sona ],
- :winner => 'SK' },
- { 'TSM' => [ :kog, :ryze, :janna, :lee, :corki ],
- 'Sypher' => [ :nunu, :shyv, :ramm, :karth, :vayne ],
- :winner => 'TSM' },
- { 'M5' => [ :ryze, :urgot, :taric, :irelia, :lee ],
- 'Curse' => [ :kog, :shen, :mundo, :morg, :soraka ],
- :winner => 'M5' },
- { 'M5' => [ :shyv, :janna, :tf, :gp, :mf ],
- 'eHome' => [ :ryze, :vlad, :blitz, :corki, :ww ],
- :winner => 'M5' },
- { 'TSM' => [ :irelia, :maokai, :sivir, :sona, :gragas ],
- 'Curse' => [ :kog, :shyv, :nunu, :morg, :mundo ],
- :winner => 'Curse' },
- { 'aAa' => [ :ali, :karth, :ashe, :trundle, :ken ],
- 'Dignitas' => [ :corki, :morg, :janna, :shyv, :irelia ],
- :winner => 'Dignitas' },
- { 'ALTERNATE' => [ :tf, :ali, :udyr, :irelia, :corki ],
- 'Millenium' => [ :ori, :janna, :maokai, :vayne, :riven ],
- :winner => 'ALTERNATE' },
- { 'FnaticRC' => [ :noct, :janna, :ez, :talon, :vlad ],
- 'CLG' => [ :galio, :cait, :mundo, :irelia, :ahri ],
- :winner => 'CLG' },
- { 'aAa' => [ :morg, :shyv, :ali, :corki, :yorick ],
- 'CLG' => [ :shen, :janna, :udyr, :ahri, :vayne ],
- :winner => 'CLG' },
- { 'ALTERNATE' => [ :tf, :ali, :udyr, :irelia, :corki ],
- 'FnaticRC' => [ :ori, :janna, :maokai, :vayne, :riven ],
- :winner => 'ALTERNATE' },
- { 'Dignitas' => [ :janna, :maokai, :corki, :morde, :lee ],
- 'Millenium' => [ :shyv, :sona, :ahri, :graves, :udyr ],
- :winner => 'Dignitas' },
- { 'FnaticRC' => [ :tf, :ali, :udyr, :irelia, :corki ],
- 'aAa' => [ :ori, :janna, :maokai, :vayne, :riven ],
- :winner => 'aAa' },
- { 'CLG' => [ :irelia, :leona, :shen, :ryze, :ez ],
- 'Millenium' => [ :taric, :ahri, :riven, :ziggs, :ali ],
- :winner => 'CLG' },
- { 'Dignitas' => [ :janna, :corki, :naut, :ryze, :lee ],
- 'ALTERNATE' => [ :sivir, :noct, :taric, :wukong, :brand ],
- :winner => 'Dignitas' },
- { 'FnaticRC' => [ :janna, :noct, :ken, :ashe, :tf ],
- 'Dignitas' => [ :corki, :naut, :cass, :lee, :nunu ],
- :winner => 'FnaticRC' },
- { 'Millenium' => [ :janna, :shyv, :irelia, :cass, :corki ],
- 'aAa' => [ :udyr, :wukong, :ali, :ahri, :ashe ],
- :winner => 'aAa' },
- { 'CLG' => [ :tf, :ali, :udyr, :irelia, :corki ],
- 'ALTERNATE' => [ :ori, :janna, :maokai, :vayne, :riven ],
- :winner => 'CLG' },
- { 'aAa' => [ :ken, :janna, :ali, :morg, :corki ],
- 'ALTERNATE' => [ :riven, :fid, :skarner, :sivir, :anivia ],
- :winner => 'aAa' },
- { 'FnaticRC' => [ :shyv, :ashe, :ken, :nunu, :talon ],
- 'Millenium' => [ :janna, :galio, :skarner, :corki, :wukong ],
- :winner => 'FnaticRC' },
- { 'CLG' => [ :mundo, :ali, :blitz, :swain, :urgot ],
- 'Dignitas' => [ :janna, :shyv, :corki, :nid, :morde ],
- :winner => 'Dignitas' },
- { 'Dignitas' => [ :shyv, :corki, :janna, :morde, :naut ],
- 'M5' => [ :irelia, :lee, :ali, :karth, :urgot ],
- :winner => 'M5' },
- { 'Dignitas' => [ :shyv, :irelia, :corki, :soraka, :morg ],
- 'M5' => [ :ryze, :janna, :shen, :udyr, :kog ],
- :winner => 'M5' },
- { 'aAa' => [ :janna, :shyv, :sion, :kog, :nid ],
- 'CLG' => [ :shen, :mundo, :ez, :cass, :sona ],
- :winner => 'aAa' },
- { 'aAa' => [ :udyr, :corki, :sona, :karth, :lee ],
- 'CLG' => [ :ez, :janna, :ahri, :maokai, :olaf ],
- :winner => 'CLG' },
- { 'aAa' => [ :kog, :sona, :mundo, :ahri, :wukong ],
- 'CLG' => [ :janna, :maokai, :ez, :irelia, :veig ],
- :winner => 'CLG' },
- { 'M5' => [ :udyr, :tf, :ali, :swain, :vayne ],
- 'CLG' => [ :ryze, :irelia, :janna, :noct, :urgot ],
- :winner => 'M5' },
- { 'M5' => [ :ken, :janna, :ashe, :nunu, :cho ],
- 'CLG' => [ :udyr, :cait, :ahri, :noct, :vlad ],
- :winner => 'M5' },
- { 'Dignitas' => [ :lee, :morde, :janna, :ez, :shyv ],
- 'aAa' => [ :leona, :morg, :riven, :mundo, :corki ],
- :winner => 'Dignitas' },
- { 'Dignitas' => [ :shyv, :taric, :lee, :ryze, :corki ],
- 'aAa' => [ :ali, :graves, :ken, :mundo, :galio ],
- :winner => 'Dignitas' },
- ]
- CHAMPS = {
- :ahri => { :name => 'Ahri', :sex => :f },
- :akali => { :name => 'Akali', :sex => :f },
- :ali => { :name => 'Alistar', :sex => :m },
- :amumu => { :name => 'Amumu', :sex => :m },
- :anivia => { :name => 'Anivia', :sex => :f },
- :annie => { :name => 'Annie', :sex => :f },
- :ashe => { :name => 'Ashe', :sex => :f },
- :blitz => { :name => 'Blitzcrank', :sex => :m },
- :brand => { :name => 'Brand', :sex => :m },
- :cait => { :name => 'Caitlyn', :sex => :f },
- :cass => { :name => 'Cassiopeia', :sex => :f },
- :cho => { :name => "Cho'Gath", :sex => :m },
- :corki => { :name => 'Corki', :sex => :m },
- :mundo => { :name => 'Dr. Mundo', :sex => :m },
- :eve => { :name => 'Evelynn', :sex => :f },
- :ez => { :name => 'Ezreal', :sex => :m },
- :fid => { :name => 'Fiddlesticks', :sex => :m },
- # :fiora => { :name => 'Fiora', :sex => :f },
- :fizz => { :name => 'Fizz', :sex => :m },
- :galio => { :name => 'Galio', :sex => :m },
- :gp => { :name => 'Gangplank', :sex => :m },
- :garen => { :name => 'Garen', :sex => :m },
- :gragas => { :name => 'Gragas', :sex => :m },
- :graves => { :name => 'Graves', :sex => :m },
- :heimer => { :name => 'Heimerdinger', :sex => :m },
- :irelia => { :name => 'Irelia', :sex => :f },
- :janna => { :name => 'Janna', :sex => :f },
- :j4 => { :name => 'Jarvan IV', :sex => :m },
- :jax => { :name => 'Jax', :sex => :m },
- :karma => { :name => 'Karma', :sex => :f },
- :karth => { :name => 'Karthus', :sex => :m },
- :kass => { :name => 'Kassadin', :sex => :m },
- :kat => { :name => 'Katarina', :sex => :f },
- :kayle => { :name => 'Kayle', :sex => :f },
- :ken => { :name => 'Kennen', :sex => :m },
- :kog => { :name => "Kog'Maw", :sex => :m },
- :lb => { :name => 'LeBlanc', :sex => :f },
- :lee => { :name => 'Lee Sin', :sex => :m },
- :leona => { :name => 'Leona', :sex => :f },
- # :lulu => { :name => 'Lulu', :sex => :f },
- :lux => { :name => 'Lux', :sex => :f },
- :malph => { :name => 'Malphite', :sex => :m },
- :malz => { :name => 'Malzahar', :sex => :m },
- :maokai => { :name => 'Maokai', :sex => :m },
- :yi => { :name => 'Master Yi', :sex => :m },
- :mf => { :name => 'Miss Fortune', :sex => :f },
- :morde => { :name => 'Mordekaiser', :sex => :m },
- :morg => { :name => 'Morgana', :sex => :f },
- :nasus => { :name => 'Nasus', :sex => :m },
- :naut => { :name => 'Naut', :sex => :m },
- :nid => { :name => 'Nidalee', :sex => :f },
- :noct => { :name => 'Nocturne', :sex => :m },
- :nunu => { :name => 'Nunu', :sex => :m },
- :olaf => { :name => 'Olaf', :sex => :m },
- :ori => { :name => 'Orianna', :sex => :f },
- :panth => { :name => 'Pantheon', :sex => :m },
- :pop => { :name => 'Poppy', :sex => :f },
- :ramm => { :name => 'Rammus', :sex => :m },
- :renek => { :name => 'Renekton', :sex => :m },
- :riven => { :name => 'Riven', :sex => :m },
- :rumble => { :name => 'Rumble', :sex => :m },
- :ryze => { :name => 'Ryze', :sex => :m },
- :sej => { :name => 'Sejuani', :sex => :f },
- :shaco => { :name => 'Shaco', :sex => :m },
- :shen => { :name => 'Shen', :sex => :m },
- :shyv => { :name => 'Shyvana', :sex => :f },
- :singed => { :name => 'Singed', :sex => :m },
- :sion => { :name => 'Sion', :sex => :m },
- :sivir => { :name => 'Sivir', :sex => :f },
- :skarner => { :name => 'Skarner', :sex => :m },
- :sona => { :name => 'Sona', :sex => :f },
- :soraka => { :name => 'Soraka', :sex => :f },
- :swain => { :name => 'Swain', :sex => :m },
- :talon => { :name => 'Talon', :sex => :m },
- :taric => { :name => 'Taric', :sex => :m },
- :teemo => { :name => 'Teemo', :sex => :m },
- :trist => { :name => 'Tristana', :sex => :f },
- :trundle => { :name => 'Trundle', :sex => :m },
- :trynd => { :name => 'Tryndamere', :sex => :m },
- :tf => { :name => 'Twisted Fate', :sex => :m },
- :twitch => { :name => 'Twitch', :sex => :m },
- :udyr => { :name => 'Udyr', :sex => :m },
- :urgot => { :name => 'Urgot', :sex => :m },
- :vayne => { :name => 'Vayne', :sex => :m },
- :veig => { :name => 'Veigar', :sex => :m },
- :viktor => { :name => 'Viktor', :sex => :m },
- :vlad => { :name => 'Vladimir', :sex => :m },
- :voli => { :name => 'Volibear', :sex => :m },
- :ww => { :name => 'Warwick', :sex => :m },
- :wukong => { :name => 'Wukong', :sex => :m },
- :xer => { :name => 'Xerath', :sex => :m },
- :xin => { :name => 'Xin Zhao', :sex => :m },
- :yorick => { :name => 'Yorick', :sex => :m },
- :ziggs => { :name => 'Ziggs', :sex => :m },
- :zil => { :name => 'Zilean', :sex => :m },
- }
- class Array
- def unzip
- result = []
- self.each_with_index do |a, i|
- a.each_with_index do |e, j|
- result[j] ||= []
- result[j][i] = e
- end
- end
- result
- end
- end
- def tabulate(strings, numbers)
- column_width = 2 + strings.map { |s| s.length }.max + if numbers then 1 + numbers.map { |n| n.to_s.length }.max else 0 end
- if column_width > 80 then column_width = 80 end
- n_cols = 80 / column_width
- n_rows = (strings.length / n_cols) + if strings.length % n_cols == 0 then 0 else 1 end
- rows = [''] * n_rows
- strings.zip(if numbers then numbers else [''] * strings.length end).each_with_index do |pair, i|
- s = pair[0]
- n = pair[1].to_s
- spaces = column_width - 2 - s.length - n.length
- rows[i % n_rows] += s + ' ' * spaces + n + ' '
- end
- return rows.join("\n")
- end
- $champ_counts = {}
- $sex_plays = { :m => 0, :f => 0 }
- $champ_wins = {}
- $sex_wins = { :m => 0, :f => 0 }
- RESULTS.each do |match|
- match.each do |k, v|
- next if k == :winner
- v.each do |champ|
- $champ_counts[champ] ||= 0
- $champ_counts[champ] += 1
- $sex_plays[CHAMPS[champ][:sex]] += 1
- $champ_wins[champ] ||= 0
- if match[:winner] == k then
- $champ_wins[champ] += 1
- $sex_wins[CHAMPS[champ][:sex]] += 1
- end
- end
- end
- end
- $sex_totals = CHAMPS.map { |k, v| v[:sex] }.partition { |s| s == :m }.map { |a| a.length }
- $total_plays = $champ_counts.values.reduce(0, :+)
- puts "#{CHAMPS.length}\tChampions"
- puts "#{tabulate(['Male', 'Female'], $sex_totals.map { |n| sprintf("%d (%0.0f%%)", n, 100.0 * n / $sex_totals.reduce(0, :+))})}"
- puts "#{RESULTS.length}\tGames"
- puts "#{$champ_counts.length}\tChampions Played (#{sprintf("%0.0f", 100.0 * $champ_counts.length / CHAMPS.length)}%)"
- puts "#{tabulate(['Male', 'Female'], $champ_counts.map { |k, v| CHAMPS[k][:sex] }.partition { |s| s == :m }.each_with_index.map { |a, i| sprintf("%d (%0.0f%% of avail, %0.0f%% of total)", a.length, 100.0 * a.length / $sex_totals[i], 100.0 * a.length / $champ_counts.length) })}"
- puts
- puts "Unplayed Champions:"
- puts tabulate(CHAMPS.keys.find_all { |c| !$champ_counts[c] }.map { |c| CHAMPS[c][:name] }.sort, nil)
- puts
- puts "Most Played Champions:"
- puts tabulate(*($champ_counts.to_a.sort { |a, b| b[1] <=> a[1] }[0...15].map { |c, n| [CHAMPS[c][:name], n]}.unzip))
- puts
- puts "Plays by Champion Sex"
- puts tabulate(['Male', 'Female'], [$sex_plays[:m], $sex_plays[:f]])
- puts
- puts "Least Played Champions:"
- puts tabulate(*($champ_counts.to_a.sort { |a, b| a[1] <=> b[1] }[0...15].map { |c, n| [CHAMPS[c][:name], n]}.unzip))
- puts
- puts "Most Winning Champions (%)"
- puts tabulate(*($champ_counts.keys.sort { |a, b| a_p = ($champ_wins[a].to_f / $champ_counts[a].to_f); b_p = ($champ_wins[b].to_f / $champ_counts[b].to_f); if a_p == b_p then $champ_counts[b] <=> $champ_counts[a] else b_p <=> a_p end }[0...16].map { |c| [CHAMPS[c][:name], sprintf("%0.0f%% (of %2d)", 100.0 * $champ_wins[c] / $champ_counts[c], $champ_counts[c])] }.unzip))
- puts
- puts "Wins by Champion Sex"
- puts tabulate(['Male', 'Female'], [sprintf("%d (%0.0f%% of plays)", $sex_wins[:m], 100.0 * $sex_wins[:m] / $sex_plays[:m]), sprintf("%d (%0.0f%% of plays)", $sex_wins[:f], 100.0 * $sex_wins[:f] / $sex_plays[:f])])
- puts
- puts "Least Winning Champions (%)"
- puts tabulate(*($champ_counts.keys.sort { |a, b| a_p = ($champ_wins[a].to_f / $champ_counts[a].to_f); b_p = ($champ_wins[b].to_f / $champ_counts[b].to_f); if a_p == b_p then $champ_counts[b] <=> $champ_counts[a] else a_p <=> b_p end }[0...27].map { |c| [CHAMPS[c][:name], sprintf("%0.0f%% (of %2d)", 100.0 * $champ_wins[c] / $champ_counts[c], $champ_counts[c])] }.unzip))
- puts
Add Comment
Please, Sign In to add comment