ulvis.paste.net

Paste Search Dynamic
Recent pastes
candidates
  1. #!/usr/bin/env ruby
  2.  
  3. # Скрипт для выбора места обеда с учетом весов и исключением повторного посещения одного заведения в течение 1 или 2 дней в зависимости от веса
  4.  
  5. candidates = { 'Чурки' => { :weight =>7 },
  6.                                 'Торогриль' => { :weight => 5 },
  7.                                 'Тэйсти' => { :weight => 9 },
  8.                                 'Пироги' => { :weight => 9 },
  9.                                 'Березка' => {:weight => 11 },
  10.                                 'Свой круг' => {:weight => 8 },
  11.                                 'Гурман' => {:weight => 9}
  12.                         }
  13.  
  14. avg_weight = candidates.map {|k,v| v[:weight]}.inject(0.0) { |sum, el| sum + el } / candidates.size
  15. candidates.each do |k,v|
  16.         v[:weight] <= avg_weight ? v[:ignore_days] = 2 : v[:ignore_days] = 1
  17. end
  18.  
  19. prev = file.new('food.dat').readlines.map {|e| e.chomp}
  20. candidates.delete_if { |k,v| prev.include?(k) and v[:ignore_days] >= (prev.index(k) + 1)  }
  21.  
  22. total_weight = candidates.inject(0) { |sum,(c,props)| sum+props[:weight] }
  23.  
  24. running_weight = 0
  25. n = rand*total_weight
  26. candidates.each do |c,props|
  27.         if n > running_weight && n <= running_weight+props[:weight]
  28.                 file.open('food.dat','w') do |f|
  29.                         f.puts c
  30.                         f.puts prev[0]
  31.                 end
  32.                 puts c
  33.                 exit 0
  34.         end
  35.         running_weight += props[:weight]
  36. end
  37.  
Parsed in 0.014 seconds