Last active
January 15, 2023 21:24
-
-
Save serradura/2d9cab9a1f0975ba1e0a0bbd53ea8fa9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AssemblyLine | |
CARS_PRODUCED_PER_HOUR = 221.0 | |
def self.calculate_cars_per_hour(speed) | |
speed * CARS_PRODUCED_PER_HOUR | |
end | |
def self.calculate_success_rate(speed) | |
case speed | |
when 1..4 then 1 | |
when 5..8 then 0.9 | |
when 9 then 0.8 | |
when 10 then 0.77 | |
end | |
end | |
def self.calculate_production_rate_per_hour(speed) | |
calculate_cars_per_hour(speed) * calculate_success_rate(speed) | |
end | |
def initialize(speed) | |
@speed = speed | |
end | |
def production_rate_per_hour | |
self.class.calculate_production_rate_per_hour(@speed) | |
end | |
ONE_HOUR_IN_MINUTES = 60 | |
def working_items_per_minute | |
(production_rate_per_hour / ONE_HOUR_IN_MINUTES).to_i | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AssemblyLine | |
module Calculate | |
def self.cars_per_hour(speed) | |
speed * 221.0 | |
end | |
def self.success_rate(speed) | |
case speed | |
when 1..4 then 1 | |
when 5..8 then 0.9 | |
when 9 then 0.8 | |
when 10 then 0.77 | |
end | |
end | |
def self.production_rate_per_hour(speed) | |
cars_per_hour(speed) * success_rate(speed) | |
end | |
end | |
attr_reader :production_rate_per_hour | |
def initialize(speed) | |
@production_rate_per_hour = Calculate.production_rate_per_hour(speed) | |
end | |
ONE_HOUR_IN_MINUTES = 60 | |
def working_items_per_minute | |
@working_items_per_minute ||= (production_rate_per_hour / ONE_HOUR_IN_MINUTES).to_i | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AssemblyLine | |
SuccessRate = Struct.new(:speed, :percentage, keyword_init: true) do | |
@options = [ | |
{ speed: 1..4, percentage: 1.00 }, | |
{ speed: 5..8, percentage: 0.90 }, | |
{ speed: 9, percentage: 0.80 }, | |
{ speed: 10, percentage: 0.77 } | |
].map! { |config| new(**config).freeze }.freeze | |
def self.detect_for(speed) | |
@options.find { |rate| rate.speed === speed } | |
end | |
end | |
attr_reader :speed, :success_rate | |
def initialize(speed) | |
@speed = speed | |
@success_rate = SuccessRate.detect_for(speed) | |
end | |
CARS_PRODUCED_PER_HOUR = 221.0 | |
def production_rate_per_hour | |
@production_rate_per_hour ||= (CARS_PRODUCED_PER_HOUR * speed) * success_rate.percentage | |
end | |
ONE_HOUR_IN_MINUTES = 60 | |
def working_items_per_minute | |
@working_items_per_minute ||= (production_rate_per_hour / ONE_HOUR_IN_MINUTES).to_i | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AssemblyLine | |
SuccessRate = Struct.new(:speed, :percentage, keyword_init: true) do | |
@options = [ | |
new(speed: 1..4, percentage: 1.00), | |
new(speed: 5..8, percentage: 0.90), | |
new(speed: 9, percentage: 0.80), | |
new(speed: 10, percentage: 0.77) | |
].map!(&:freeze).freeze | |
def self.detect_for(speed) | |
@options.detect { |rate| rate.speed === speed } | |
end | |
end | |
attr_reader :speed, :success_rate | |
def initialize(speed) | |
@speed = speed | |
@success_rate = SuccessRate.detect_for(speed) | |
end | |
CARS_PRODUCED_PER_HOUR = 221.0 | |
def production_rate_per_hour | |
@production_rate_per_hour ||= (CARS_PRODUCED_PER_HOUR * speed) * success_rate.percentage | |
end | |
ONE_HOUR_IN_MINUTES = 60 | |
def working_items_per_minute | |
@working_items_per_minute ||= (production_rate_per_hour / ONE_HOUR_IN_MINUTES).to_i | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class AssemblyLine | |
SuccessRate = Struct.new(:speed, :percentage, keyword_init: true) do | |
private_class_method :new | |
@options = [ | |
new(speed: 1..4, percentage: 1.00), | |
new(speed: 5..8, percentage: 0.90), | |
new(speed: 9, percentage: 0.80), | |
new(speed: 10, percentage: 0.77) | |
].map!(&:freeze).freeze | |
def self.detect_for(speed) | |
@options.detect { |rate| rate.speed === speed } | |
end | |
end | |
attr_reader :speed, :success_rate | |
def initialize(speed) | |
@speed = speed | |
@success_rate = SuccessRate.detect_for(speed) | |
end | |
CARS_PRODUCED_PER_HOUR = 221.0 | |
def production_rate_per_hour | |
@production_rate_per_hour ||= (CARS_PRODUCED_PER_HOUR * speed) * success_rate.percentage | |
end | |
ONE_HOUR_IN_MINUTES = 60 | |
def working_items_per_minute | |
@working_items_per_minute ||= (production_rate_per_hour / ONE_HOUR_IN_MINUTES).to_i | |
end | |
end |
Author
serradura
commented
Jan 15, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment