Ruby - Statistiky hokeje

Ostatní jazyky Ruby Ruby - Statistiky hokeje

Ukázkový program Statistiky hokeje. Příklady využití funkcí, čtení ze souboru a dalších konstrukcí. Včetně zdrojových kódů v jazyce 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


 

Stáhnout

Staženo 327x (2.87 kB)
Aplikace je včetně zdrojových kódů v jazyce Ruby

 

  Aktivity (1)

Program pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Všechny články v sekci
Ruby
Miniatura
Následující článek
Ruby v Linuxu - GTK

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!