# Ruby 1.8에서 테스트
# shoemaker 문제
# 2개의 일을 놓고 비교한다면 (1번 작업날짜 * 2번 벌금)금액과
# (2번 작업 날짜 * 1번 벌금)금액을 비교해 봐서 적은쪽을 먼저 한다
# 이렇게 전체작업을 끝까지 정렬하면은 저 순서대로
# 정렬되어 있게 된다
class Job
def initialize(job_num, day, fine)
@job_num = job_num
@day = day
@fine = fine
end
attr_reader :job_num, :day, :fine
def <=>(obj)
return (self.day * obj.fine <=> self.fine * obj.day)
end
end
def shoemaker(jobs)
return (jobs.sort).map! {|x| x = x.job_num}
end
require 'test/unit'
class TestShoemaker < Test::Unit::TestCase
def test_method
ans = [2, 1, 3, 4]
input = [Job.new(1, 3, 4), Job.new(2, 1, 1000), Job.new(3, 2, 2), Job.new(4, 5, 5)]
assert_equal(ans, shoemaker(input))
end
end
# 2개의 일을 놓고 비교한다면 (1번 작업날짜 * 2번 벌금)금액과
# (2번 작업 날짜 * 1번 벌금)금액을 비교해 봐서 적은쪽을 먼저 한다
# 이렇게 전체작업을 끝까지 정렬하면은 저 순서대로
# 정렬되어 있게 된다
class Job
def initialize(job_num, day, fine)
@job_num = job_num
@day = day
@fine = fine
end
attr_reader :job_num, :day, :fine
def <=>(obj)
return (self.day * obj.fine <=> self.fine * obj.day)
end
end
def shoemaker(jobs)
return (jobs.sort).map! {|x| x = x.job_num}
end
require 'test/unit'
class TestShoemaker < Test::Unit::TestCase
def test_method
ans = [2, 1, 3, 4]
input = [Job.new(1, 3, 4), Job.new(2, 1, 1000), Job.new(3, 2, 2), Job.new(4, 5, 5)]
assert_equal(ans, shoemaker(input))
end
end

