Pogledajte određenu poruku
Staro 10. 03. 2011.   #5
jablan
VD IT Direktora
Invented the damn thing
 
Avatar jablan
 
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
jablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamen
Default

Ako ti nisu bitne performanse, uvek ostaje brute force:

Kôd:
# trazi redosled ucenika za koji je moguce napraviti raspored
def rasporedi ucenici, profa, cas
  ucenici.keys.permutation.map{|redosled|
    poredjaj ucenici, profa, cas, redosled
  }.find{|e| e}
end

# za zadati redosled ucenika, odredjuje pocetak i kraj casa
def poredjaj ucenici, profa, cas, redosled
  poc = profa.first
  redosled.inject({}) do |acc, ime|
    poc = [ucenici[ime].first, poc].max
    return nil if poc+cas > [profa.last, ucenici[ime].last].min
    acc[ime] = [poc, poc+cas]
    poc += cas
    acc
  end
end

ucenici = {
  pera: [6,8], # slobodan od 6 do 8
  zika: [2,5], # slobodan od 2 do 5
  mika: [1,3]  # slobodan od 1 do 3
}

profa = [1,8] # slobodan od 1 do 8

p rasporedi ucenici, profa, 1
#=> {:mika=>[1, 2], :zika=>[2, 3], :pera=>[6, 7]}

p rasporedi ucenici, profa, 2
#=> {:mika=>[1, 3], :zika=>[3, 5], :pera=>[6, 8]}
__________________
blog
jablan je offline   Odgovorite uz citat
3 članova zahvaljuje jablan za poruku: