Guest User

Untitled

a guest
Sep 20th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.26 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. # IEM Hannover March 2012
  4. RESULTS = [
  5. { 'aAa' => [ :leona, :mundo, :wukong, :karth, :corki ],
  6. 'SK' => [ :sona, :lee, :shyv, :kog, :galio ],
  7. :winner => 'aAa' },
  8. { 'aAa' => [ :corki, :leona, :shen, :malz, :maokai ],
  9. 'SK' => [ :janna, :lee, :graves, :udyr, :cass ],
  10. :winner => 'SK' },
  11. { 'aAa' => [ :udyr, :leona, :corki, :fizz, :ken ],
  12. 'SK' => [ :janna, :shyv, :graves, :cass, :renek ],
  13. :winner => 'aAa' },
  14. { 'CLG' => [ :shen, :vayne, :ali, :udyr, :ahri ],
  15. 'Curse' => [ :morg, :shyv, :janna, :irelia, :cait ],
  16. :winner => 'CLG' },
  17. { 'CLG' => [ :ez, :janna, :mundo, :zil, :swain ],
  18. 'Curse' => [ :veig, :trist, :udyr, :ali, :lee ],
  19. :winner => 'CLG' },
  20. { 'M5' => [ :janna, :lee, :trynd, :ken, :mf ],
  21. 'Sypher' => [ :morg, :shen, :nid, :ez, :blitz ],
  22. :winner => 'M5' },
  23. { 'Curse' => [ :kog, :mundo, :nunu, :malph, :cait ],
  24. 'eHome' => [ :shyv, :janna, :ez, :trynd, :singed ],
  25. :winner => 'eHome' },
  26. { 'TSM' => [ :cass, :irelia, :shen, :graves, :soraka ],
  27. 'SK' => [ :janna, :kog, :noct, :udyr, :galio ],
  28. :winner => 'SK' },
  29. { 'M5' => [ :kog, :nunu, :lee, :wukong, :galio ],
  30. 'SK' => [ :vlad, :ez, :sona, :amumu, :morg ],
  31. :winner => 'M5' },
  32. { 'Sypher' => [ :kog, :janna, :nunu, :anivia, :riven ],
  33. 'Curse' => [ :morg, :irelia, :ali, :trist, :naut ],
  34. :winner => 'Curse' },
  35. { 'TSM' => [ :lee, :janna, :cass, :mf, :trynd ],
  36. 'eHome' => [ :shyv, :corki, :ahri, :sona, :cho ],
  37. :winner => 'TSM' },
  38. { 'TSM' => [ :kog, :udyr, :irelia, :nunu, :ahri ],
  39. 'M5' => [ :lee, :janna, :vlad, :ashe, :ken ],
  40. :winner => 'M5' },
  41. { 'Curse' => [ :ryze, :shen, :udyr, :yorick, :cait ],
  42. 'SK' => [ :morg, :maokai, :janna, :kog, :renek ],
  43. :winner => 'SK' },
  44. { 'eHome' => [ :brand, :noct, :ww, :ez, :taric ],
  45. 'Sypher' => [ :morg, :kog, :riven, :janna, :lee ],
  46. :winner => 'Sypher' },
  47. { 'SK' => [ :shyv, :morg, :ashe, :janna, :lee ],
  48. 'eHome' => [ :shen, :karth, :corki, :akali, :sona ],
  49. :winner => 'SK' },
  50. { 'TSM' => [ :kog, :ryze, :janna, :lee, :corki ],
  51. 'Sypher' => [ :nunu, :shyv, :ramm, :karth, :vayne ],
  52. :winner => 'TSM' },
  53. { 'M5' => [ :ryze, :urgot, :taric, :irelia, :lee ],
  54. 'Curse' => [ :kog, :shen, :mundo, :morg, :soraka ],
  55. :winner => 'M5' },
  56. { 'M5' => [ :shyv, :janna, :tf, :gp, :mf ],
  57. 'eHome' => [ :ryze, :vlad, :blitz, :corki, :ww ],
  58. :winner => 'M5' },
  59. { 'TSM' => [ :irelia, :maokai, :sivir, :sona, :gragas ],
  60. 'Curse' => [ :kog, :shyv, :nunu, :morg, :mundo ],
  61. :winner => 'Curse' },
  62. { 'aAa' => [ :ali, :karth, :ashe, :trundle, :ken ],
  63. 'Dignitas' => [ :corki, :morg, :janna, :shyv, :irelia ],
  64. :winner => 'Dignitas' },
  65. { 'ALTERNATE' => [ :tf, :ali, :udyr, :irelia, :corki ],
  66. 'Millenium' => [ :ori, :janna, :maokai, :vayne, :riven ],
  67. :winner => 'ALTERNATE' },
  68. { 'FnaticRC' => [ :noct, :janna, :ez, :talon, :vlad ],
  69. 'CLG' => [ :galio, :cait, :mundo, :irelia, :ahri ],
  70. :winner => 'CLG' },
  71. { 'aAa' => [ :morg, :shyv, :ali, :corki, :yorick ],
  72. 'CLG' => [ :shen, :janna, :udyr, :ahri, :vayne ],
  73. :winner => 'CLG' },
  74. { 'ALTERNATE' => [ :tf, :ali, :udyr, :irelia, :corki ],
  75. 'FnaticRC' => [ :ori, :janna, :maokai, :vayne, :riven ],
  76. :winner => 'ALTERNATE' },
  77. { 'Dignitas' => [ :janna, :maokai, :corki, :morde, :lee ],
  78. 'Millenium' => [ :shyv, :sona, :ahri, :graves, :udyr ],
  79. :winner => 'Dignitas' },
  80. { 'FnaticRC' => [ :tf, :ali, :udyr, :irelia, :corki ],
  81. 'aAa' => [ :ori, :janna, :maokai, :vayne, :riven ],
  82. :winner => 'aAa' },
  83. { 'CLG' => [ :irelia, :leona, :shen, :ryze, :ez ],
  84. 'Millenium' => [ :taric, :ahri, :riven, :ziggs, :ali ],
  85. :winner => 'CLG' },
  86. { 'Dignitas' => [ :janna, :corki, :naut, :ryze, :lee ],
  87. 'ALTERNATE' => [ :sivir, :noct, :taric, :wukong, :brand ],
  88. :winner => 'Dignitas' },
  89. { 'FnaticRC' => [ :janna, :noct, :ken, :ashe, :tf ],
  90. 'Dignitas' => [ :corki, :naut, :cass, :lee, :nunu ],
  91. :winner => 'FnaticRC' },
  92. { 'Millenium' => [ :janna, :shyv, :irelia, :cass, :corki ],
  93. 'aAa' => [ :udyr, :wukong, :ali, :ahri, :ashe ],
  94. :winner => 'aAa' },
  95. { 'CLG' => [ :tf, :ali, :udyr, :irelia, :corki ],
  96. 'ALTERNATE' => [ :ori, :janna, :maokai, :vayne, :riven ],
  97. :winner => 'CLG' },
  98. { 'aAa' => [ :ken, :janna, :ali, :morg, :corki ],
  99. 'ALTERNATE' => [ :riven, :fid, :skarner, :sivir, :anivia ],
  100. :winner => 'aAa' },
  101. { 'FnaticRC' => [ :shyv, :ashe, :ken, :nunu, :talon ],
  102. 'Millenium' => [ :janna, :galio, :skarner, :corki, :wukong ],
  103. :winner => 'FnaticRC' },
  104. { 'CLG' => [ :mundo, :ali, :blitz, :swain, :urgot ],
  105. 'Dignitas' => [ :janna, :shyv, :corki, :nid, :morde ],
  106. :winner => 'Dignitas' },
  107. { 'Dignitas' => [ :shyv, :corki, :janna, :morde, :naut ],
  108. 'M5' => [ :irelia, :lee, :ali, :karth, :urgot ],
  109. :winner => 'M5' },
  110. { 'Dignitas' => [ :shyv, :irelia, :corki, :soraka, :morg ],
  111. 'M5' => [ :ryze, :janna, :shen, :udyr, :kog ],
  112. :winner => 'M5' },
  113. { 'aAa' => [ :janna, :shyv, :sion, :kog, :nid ],
  114. 'CLG' => [ :shen, :mundo, :ez, :cass, :sona ],
  115. :winner => 'aAa' },
  116. { 'aAa' => [ :udyr, :corki, :sona, :karth, :lee ],
  117. 'CLG' => [ :ez, :janna, :ahri, :maokai, :olaf ],
  118. :winner => 'CLG' },
  119. { 'aAa' => [ :kog, :sona, :mundo, :ahri, :wukong ],
  120. 'CLG' => [ :janna, :maokai, :ez, :irelia, :veig ],
  121. :winner => 'CLG' },
  122. { 'M5' => [ :udyr, :tf, :ali, :swain, :vayne ],
  123. 'CLG' => [ :ryze, :irelia, :janna, :noct, :urgot ],
  124. :winner => 'M5' },
  125. { 'M5' => [ :ken, :janna, :ashe, :nunu, :cho ],
  126. 'CLG' => [ :udyr, :cait, :ahri, :noct, :vlad ],
  127. :winner => 'M5' },
  128. { 'Dignitas' => [ :lee, :morde, :janna, :ez, :shyv ],
  129. 'aAa' => [ :leona, :morg, :riven, :mundo, :corki ],
  130. :winner => 'Dignitas' },
  131. { 'Dignitas' => [ :shyv, :taric, :lee, :ryze, :corki ],
  132. 'aAa' => [ :ali, :graves, :ken, :mundo, :galio ],
  133. :winner => 'Dignitas' },
  134. ]
  135.  
  136. CHAMPS = {
  137. :ahri => { :name => 'Ahri', :sex => :f },
  138. :akali => { :name => 'Akali', :sex => :f },
  139. :ali => { :name => 'Alistar', :sex => :m },
  140. :amumu => { :name => 'Amumu', :sex => :m },
  141. :anivia => { :name => 'Anivia', :sex => :f },
  142. :annie => { :name => 'Annie', :sex => :f },
  143. :ashe => { :name => 'Ashe', :sex => :f },
  144. :blitz => { :name => 'Blitzcrank', :sex => :m },
  145. :brand => { :name => 'Brand', :sex => :m },
  146. :cait => { :name => 'Caitlyn', :sex => :f },
  147. :cass => { :name => 'Cassiopeia', :sex => :f },
  148. :cho => { :name => "Cho'Gath", :sex => :m },
  149. :corki => { :name => 'Corki', :sex => :m },
  150. :mundo => { :name => 'Dr. Mundo', :sex => :m },
  151. :eve => { :name => 'Evelynn', :sex => :f },
  152. :ez => { :name => 'Ezreal', :sex => :m },
  153. :fid => { :name => 'Fiddlesticks', :sex => :m },
  154. # :fiora => { :name => 'Fiora', :sex => :f },
  155. :fizz => { :name => 'Fizz', :sex => :m },
  156. :galio => { :name => 'Galio', :sex => :m },
  157. :gp => { :name => 'Gangplank', :sex => :m },
  158. :garen => { :name => 'Garen', :sex => :m },
  159. :gragas => { :name => 'Gragas', :sex => :m },
  160. :graves => { :name => 'Graves', :sex => :m },
  161. :heimer => { :name => 'Heimerdinger', :sex => :m },
  162. :irelia => { :name => 'Irelia', :sex => :f },
  163. :janna => { :name => 'Janna', :sex => :f },
  164. :j4 => { :name => 'Jarvan IV', :sex => :m },
  165. :jax => { :name => 'Jax', :sex => :m },
  166. :karma => { :name => 'Karma', :sex => :f },
  167. :karth => { :name => 'Karthus', :sex => :m },
  168. :kass => { :name => 'Kassadin', :sex => :m },
  169. :kat => { :name => 'Katarina', :sex => :f },
  170. :kayle => { :name => 'Kayle', :sex => :f },
  171. :ken => { :name => 'Kennen', :sex => :m },
  172. :kog => { :name => "Kog'Maw", :sex => :m },
  173. :lb => { :name => 'LeBlanc', :sex => :f },
  174. :lee => { :name => 'Lee Sin', :sex => :m },
  175. :leona => { :name => 'Leona', :sex => :f },
  176. # :lulu => { :name => 'Lulu', :sex => :f },
  177. :lux => { :name => 'Lux', :sex => :f },
  178. :malph => { :name => 'Malphite', :sex => :m },
  179. :malz => { :name => 'Malzahar', :sex => :m },
  180. :maokai => { :name => 'Maokai', :sex => :m },
  181. :yi => { :name => 'Master Yi', :sex => :m },
  182. :mf => { :name => 'Miss Fortune', :sex => :f },
  183. :morde => { :name => 'Mordekaiser', :sex => :m },
  184. :morg => { :name => 'Morgana', :sex => :f },
  185. :nasus => { :name => 'Nasus', :sex => :m },
  186. :naut => { :name => 'Naut', :sex => :m },
  187. :nid => { :name => 'Nidalee', :sex => :f },
  188. :noct => { :name => 'Nocturne', :sex => :m },
  189. :nunu => { :name => 'Nunu', :sex => :m },
  190. :olaf => { :name => 'Olaf', :sex => :m },
  191. :ori => { :name => 'Orianna', :sex => :f },
  192. :panth => { :name => 'Pantheon', :sex => :m },
  193. :pop => { :name => 'Poppy', :sex => :f },
  194. :ramm => { :name => 'Rammus', :sex => :m },
  195. :renek => { :name => 'Renekton', :sex => :m },
  196. :riven => { :name => 'Riven', :sex => :m },
  197. :rumble => { :name => 'Rumble', :sex => :m },
  198. :ryze => { :name => 'Ryze', :sex => :m },
  199. :sej => { :name => 'Sejuani', :sex => :f },
  200. :shaco => { :name => 'Shaco', :sex => :m },
  201. :shen => { :name => 'Shen', :sex => :m },
  202. :shyv => { :name => 'Shyvana', :sex => :f },
  203. :singed => { :name => 'Singed', :sex => :m },
  204. :sion => { :name => 'Sion', :sex => :m },
  205. :sivir => { :name => 'Sivir', :sex => :f },
  206. :skarner => { :name => 'Skarner', :sex => :m },
  207. :sona => { :name => 'Sona', :sex => :f },
  208. :soraka => { :name => 'Soraka', :sex => :f },
  209. :swain => { :name => 'Swain', :sex => :m },
  210. :talon => { :name => 'Talon', :sex => :m },
  211. :taric => { :name => 'Taric', :sex => :m },
  212. :teemo => { :name => 'Teemo', :sex => :m },
  213. :trist => { :name => 'Tristana', :sex => :f },
  214. :trundle => { :name => 'Trundle', :sex => :m },
  215. :trynd => { :name => 'Tryndamere', :sex => :m },
  216. :tf => { :name => 'Twisted Fate', :sex => :m },
  217. :twitch => { :name => 'Twitch', :sex => :m },
  218. :udyr => { :name => 'Udyr', :sex => :m },
  219. :urgot => { :name => 'Urgot', :sex => :m },
  220. :vayne => { :name => 'Vayne', :sex => :m },
  221. :veig => { :name => 'Veigar', :sex => :m },
  222. :viktor => { :name => 'Viktor', :sex => :m },
  223. :vlad => { :name => 'Vladimir', :sex => :m },
  224. :voli => { :name => 'Volibear', :sex => :m },
  225. :ww => { :name => 'Warwick', :sex => :m },
  226. :wukong => { :name => 'Wukong', :sex => :m },
  227. :xer => { :name => 'Xerath', :sex => :m },
  228. :xin => { :name => 'Xin Zhao', :sex => :m },
  229. :yorick => { :name => 'Yorick', :sex => :m },
  230. :ziggs => { :name => 'Ziggs', :sex => :m },
  231. :zil => { :name => 'Zilean', :sex => :m },
  232. }
  233.  
  234. class Array
  235. def unzip
  236. result = []
  237. self.each_with_index do |a, i|
  238. a.each_with_index do |e, j|
  239. result[j] ||= []
  240. result[j][i] = e
  241. end
  242. end
  243. result
  244. end
  245. end
  246.  
  247. def tabulate(strings, numbers)
  248. column_width = 2 + strings.map { |s| s.length }.max + if numbers then 1 + numbers.map { |n| n.to_s.length }.max else 0 end
  249. if column_width > 80 then column_width = 80 end
  250. n_cols = 80 / column_width
  251. n_rows = (strings.length / n_cols) + if strings.length % n_cols == 0 then 0 else 1 end
  252. rows = [''] * n_rows
  253. strings.zip(if numbers then numbers else [''] * strings.length end).each_with_index do |pair, i|
  254. s = pair[0]
  255. n = pair[1].to_s
  256. spaces = column_width - 2 - s.length - n.length
  257. rows[i % n_rows] += s + ' ' * spaces + n + ' '
  258. end
  259. return rows.join("\n")
  260. end
  261.  
  262. $champ_counts = {}
  263. $sex_plays = { :m => 0, :f => 0 }
  264. $champ_wins = {}
  265. $sex_wins = { :m => 0, :f => 0 }
  266. RESULTS.each do |match|
  267. match.each do |k, v|
  268. next if k == :winner
  269. v.each do |champ|
  270. $champ_counts[champ] ||= 0
  271. $champ_counts[champ] += 1
  272. $sex_plays[CHAMPS[champ][:sex]] += 1
  273. $champ_wins[champ] ||= 0
  274. if match[:winner] == k then
  275. $champ_wins[champ] += 1
  276. $sex_wins[CHAMPS[champ][:sex]] += 1
  277. end
  278. end
  279. end
  280. end
  281. $sex_totals = CHAMPS.map { |k, v| v[:sex] }.partition { |s| s == :m }.map { |a| a.length }
  282. $total_plays = $champ_counts.values.reduce(0, :+)
  283.  
  284. puts "#{CHAMPS.length}\tChampions"
  285. puts "#{tabulate(['Male', 'Female'], $sex_totals.map { |n| sprintf("%d (%0.0f%%)", n, 100.0 * n / $sex_totals.reduce(0, :+))})}"
  286. puts "#{RESULTS.length}\tGames"
  287. puts "#{$champ_counts.length}\tChampions Played (#{sprintf("%0.0f", 100.0 * $champ_counts.length / CHAMPS.length)}%)"
  288. 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) })}"
  289. puts
  290.  
  291. puts "Unplayed Champions:"
  292. puts tabulate(CHAMPS.keys.find_all { |c| !$champ_counts[c] }.map { |c| CHAMPS[c][:name] }.sort, nil)
  293. puts
  294.  
  295. puts "Most Played Champions:"
  296. puts tabulate(*($champ_counts.to_a.sort { |a, b| b[1] <=> a[1] }[0...15].map { |c, n| [CHAMPS[c][:name], n]}.unzip))
  297. puts
  298.  
  299. puts "Plays by Champion Sex"
  300. puts tabulate(['Male', 'Female'], [$sex_plays[:m], $sex_plays[:f]])
  301. puts
  302.  
  303. puts "Least Played Champions:"
  304. puts tabulate(*($champ_counts.to_a.sort { |a, b| a[1] <=> b[1] }[0...15].map { |c, n| [CHAMPS[c][:name], n]}.unzip))
  305. puts
  306.  
  307. puts "Most Winning Champions (%)"
  308. 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))
  309. puts
  310.  
  311. puts "Wins by Champion Sex"
  312. 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])])
  313. puts
  314.  
  315. puts "Least Winning Champions (%)"
  316. 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))
  317. puts
Add Comment
Please, Sign In to add comment