Skip to content

Instantly share code, notes, and snippets.

@yswallow
Created July 14, 2015 08:23
Show Gist options
  • Select an option

  • Save yswallow/39342c369837d9c9a52e to your computer and use it in GitHub Desktop.

Select an option

Save yswallow/39342c369837d9c9a52e to your computer and use it in GitHub Desktop.
ミシュナ分配
module Mishuna
def self.mishuna(_isan, ary)
isan = _isan
size = ary.size
half_min = ary.min / 2
sum = ary.inject(&:+)
if isan <= half_min * size
return [ isan/size ]*size
elsif isan <= sum - half_min * size
new_ary = []
ary_hikisu = []
min = ary.min
ary.each_with_index do |item,i|
if item == min
new_ary[i] = half_min
isan -= half_min
else
ary_hikisu << item
end
end
_ary = mishuna(isan, ary_hikisu)
new_ary.map! { |item| item || _ary.shift }
return new_ary + _ary
elsif isan <= sum
sub = (sum - isan)/size
return ary.map { |item| item - sub }
else
return ary
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment