03/02/13 18:50
panthe
Ciao,
purtroppo questo round è capitato a cavallo di un week end pieno di impegni e non sono riuscito a dedicargli il tempo necessario e quindi nulla di fatto.
Il primo problema, Card Game (lo si può leggere qui facebook.com/hackercup/…), era fattibile ma ho usato Ruby che penso abbia dei limiti nello stack e non ho avuto tempo di ottimizzarlo. I risultati dovrebbero essere giusti, ecco il mio codice a chi può interessare..
Penso che per passare il test con l'enorme mole di dati in input di FB avrei dovuto trasformare la funzione ricorsiva che calcola il binomiale in una funzione procedurale e al posto dell'ordinamento scandire una volta l'array memorizzando i k elementi maggiori.
purtroppo questo round è capitato a cavallo di un week end pieno di impegni e non sono riuscito a dedicargli il tempo necessario e quindi nulla di fatto.
Il primo problema, Card Game (lo si può leggere qui facebook.com/hackercup/…), era fattibile ma ho usato Ruby che penso abbia dei limiti nello stack e non ho avuto tempo di ottimizzarlo. I risultati dovrebbero essere giusti, ecco il mio codice a chi può interessare..
Penso che per passare il test con l'enorme mole di dati in input di FB avrei dovuto trasformare la funzione ricorsiva che calcola il binomiale in una funzione procedurale e al posto dell'ordinamento scandire una volta l'array memorizzando i k elementi maggiori.
# Cards output='' nline=0 m=0 n=0 k=0 t=0 def binomial(n,k) return 1 if n == k return n if k == 1 return 1 if n == 0 binomial(n-1,k) + binomial(n-1,k-1) end File.open('./input', 'r') do |f1| while line = f1.gets t2 = Time.now if (nline > 0) if ((nline % 2)==0) m = line.split(" ").map(&:to_i) m.sort! value=0 for i in 0..(n-k) value=value+binomial(n-i-1,k-1)*m[m.length-i-1] end output = output + "Case #" + (nline/2).to_s + ": " + value.to_s + "\n" else linesplitter =line.split(' ') n,k = linesplitter[0].to_i, linesplitter[1].to_i end else t=line end nline=nline+1 end f1.close end File.open('./output',File::WRONLY|File::APPEND|File::CREAT) do |f| f.puts output f.close end
aaa