Ruby - Štatistiky hokeja
Ukážkový program Štatistiky hokeja. Príklady využitia funkcií, čítanie zo súboru a ďalších konštrukcií. Vrátane zdrojových kódov v jazyku Ruby.
class Match attr_reader :datum, :cislo_kola, :domaci, :hoste, :vysledek_domaci, :vysledek_hoste, :penalty, :prodlouzeni def initialize(datum, cislo_kola, domaci, hoste, vysledek_domaci, vysledek_hoste, prodlouzeni, penalty) @datum = datum @cislo_kola = cislo_kola.to_i @domaci = domaci @hoste = hoste @vysledek_domaci = vysledek_domaci.to_i @vysledek_hoste = vysledek_hoste.to_i @prodlouzeni = prodlouzeni @penalty = penalty end def get_body_domaci return 3 if ((@vysledek_domaci > @vysledek_hoste) && (not @penalty) && (not @prodlouzeni)) return 2 if ((@vysledek_domaci > @vysledek_hoste) && ((@penalty == true) || (@prodlouzeni == true))) return 1 if ((@vysledek_domaci < @vysledek_hoste) && ((@penalty) || (@prodlouzeni))) return 0 end def get_body_hoste return 3 if (@vysledek_domaci < @vysledek_hoste) && (not @penalty) && (not @prodlouzeni) return 2 if (@vysledek_domaci < @vysledek_hoste) && ((@penalty) || (@prodlouzeni)) return 1 if (@vysledek_domaci > @vysledek_hoste) && ((@penalty) || (@prodlouzeni)) return 0 end end class Team attr_reader :jmeno, :body, :branky_obdrzene, :branky_strelene, :branky_domaci attr_writer :jmeno, :body, :branky_obdrzene, :branky_strelene, :branky_domaci def initialize(jmeno, body, branky_strelene, branky_domaci, branky_obdrzene) @jmeno = jmeno @branky_obdrzene = branky_obdrzene.to_i @branky_strelene = branky_strelene.to_i @branky_domaci = branky_domaci.to_i @body = body.to_i end end # naplneni matches matches = [] begin File.open(ARGV[0], "r") do |f| f.each_line do |line| parameters = line.strip.split("\t") # dekodovani vysledku penalty = (parameters[4].include?("(SN)")) prodlouzeni = (parameters[4].include?("(PP)")) domacihoste = parameters[4].split(":") domaci = domacihoste[0].to_i hoste = domacihoste[1].to_i matches << Match.new(parameters[0], parameters[1], parameters[2], parameters[3], domaci, hoste, prodlouzeni, penalty) end end rescue puts "Wrong filename, please run me again with correct parameters" exit end # naplneni teams teams = [] matches.each do |match| #domaci if (teams.find { |team| team.jmeno == match.domaci } == nil) team = Team.new(match.domaci, match.get_body_domaci, match.vysledek_domaci, match.vysledek_domaci, match.vysledek_hoste) teams << team else existing = teams.find { |team| (team.jmeno == match.domaci) } existing.body += match.get_body_domaci existing.branky_strelene += match.vysledek_domaci existing.branky_obdrzene += match.vysledek_hoste existing.branky_domaci += match.vysledek_domaci end #hoste if (teams.find { |team| team.jmeno == match.hoste } == nil) team = Team.new(match.hoste, match.get_body_hoste, match.vysledek_hoste, 0, match.vysledek_domaci) teams << team else existing = teams.find { |team| (team.jmeno == match.hoste) } existing.body += match.get_body_hoste existing.branky_strelene += match.vysledek_hoste existing.branky_obdrzene += match.vysledek_domaci end end puts "5 tymu s nejvyssim poctem bodu" tm = teams.sort { |team1, team2| team1.body <=> team2.body } 5.times do |i| puts tm[-(i + 1)].jmeno + " - " + tm[-(i + 1)].body.to_s end puts puts "3 tymy s nejmensim poctem bodu" tm = teams.sort { |team1, team2| team1.body <=> team2.body } 3.times do |i| puts tm[i].jmeno + " - " + tm[i].body.to_s end puts puts "4 tymy s nejlepsim utokem" tm = teams.sort { |team1, team2| team1.branky_strelene <=> team2.branky_strelene } 4.times do |i| puts tm[-(i + 1)].jmeno + " - " + tm[-(i + 1)].branky_strelene.to_s end puts puts "4 tymy s nejlepsi obranou" tm = teams.sort { |team1, team2| team1.branky_obdrzene <=> team2.branky_obdrzene } 4.times do |i| puts tm[i].jmeno + " - " + tm[i].branky_obdrzene.to_s end puts puts "3 tymy s nejlepsim utokem v domacich utkanich" tm = teams.sort { |team1, team2| team1.branky_domaci <=> team2.branky_domaci } 3.times do |i| puts tm[-(i + 1)].jmeno + " - " + tm[-(i + 1)].branky_domaci.to_s end puts puts "Prumerny pocet branek za jedno utkani" average = 0 matches.each { |match| average += match.vysledek_domaci + match.vysledek_hoste } puts (average / matches.length.to_f) puts puts "Extraligove kolo, ve kterem padlo nejvice branek" kolo = 0 max = 0 suma = 0 vkolo = 0; matches.each do |match| if (kolo != match.cislo_kola) if (suma > max) max = suma vkolo = kolo end kolo += 1 suma = 0 end suma += match.vysledek_domaci + match.vysledek_hoste end puts vkolo
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 332x (2.87 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Ruby