Last active
January 15, 2023 21:24
-
-
Save serradura/2d9cab9a1f0975ba1e0a0bbd53ea8fa9 to your computer and use it in GitHub Desktop.
Revisions
-
serradura revised this gist
Jan 15, 2023 . 1 changed file with 35 additions and 0 deletions.There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,35 @@ 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 -
serradura created this gist
Jan 14, 2023 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,34 @@ 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,32 @@ 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,33 @@ 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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,33 @@ 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