From 5830c59de7bfb590a73393db1234a238228f03d5 Mon Sep 17 00:00:00 2001 From: meatball <69751659+meatball133@users.noreply.github.com> Date: Tue, 30 Sep 2025 12:48:06 +0200 Subject: [PATCH] Update resistor-color-trio --- .../resistor-color-trio/.meta/example.rb | 12 +++- .../resistor_color_trio_test.rb | 55 +++++++++++++++++-- 2 files changed, 59 insertions(+), 8 deletions(-) diff --git a/exercises/practice/resistor-color-trio/.meta/example.rb b/exercises/practice/resistor-color-trio/.meta/example.rb index 1860c0b976..b388f76397 100644 --- a/exercises/practice/resistor-color-trio/.meta/example.rb +++ b/exercises/practice/resistor-color-trio/.meta/example.rb @@ -1,5 +1,6 @@ class ResistorColorTrio COLOR_CODES = %i[black brown red orange yellow green blue violet grey white].freeze + LABELS = %w[ohms kiloohms megaohms gigaohms teraohms].freeze def initialize(colors) @colors = colors.map(&:to_sym) @@ -7,11 +8,10 @@ def initialize(colors) end def label - "Resistor value: #{to_s}" + "Resistor value: #{self}" end private - attr_reader :tens, :ones, :zeros def significants @@ -27,6 +27,12 @@ def value end def to_s - value < 1000 ? "#{value} ohms" : "#{(value.to_f/1000).to_i} kiloohms" + index = 0 + value_copy = value + while value_copy >= 1000 && index < LABELS.size - 1 + value_copy /= 1000 + index += 1 + end + "#{value_copy} #{LABELS[index]}" end end diff --git a/exercises/practice/resistor-color-trio/resistor_color_trio_test.rb b/exercises/practice/resistor-color-trio/resistor_color_trio_test.rb index f9499d96ff..b0b0b95628 100644 --- a/exercises/practice/resistor-color-trio/resistor_color_trio_test.rb +++ b/exercises/practice/resistor-color-trio/resistor_color_trio_test.rb @@ -4,26 +4,71 @@ class ResistorColorTrioTest < Minitest::Test def test_orange_and_orange_and_black # skip - assert_equal "Resistor value: 33 ohms", ResistorColorTrio.new(%w[orange orange black]).label + actual = ResistorColorTrio.new(%w[orange orange black]).label + expected = 'Resistor value: 33 ohms' + assert_equal expected, actual end def test_blue_and_grey_and_brown skip - assert_equal "Resistor value: 680 ohms", ResistorColorTrio.new(%w[blue grey brown]).label + actual = ResistorColorTrio.new(%w[blue grey brown]).label + expected = 'Resistor value: 680 ohms' + assert_equal expected, actual end def test_red_and_black_and_red skip - assert_equal "Resistor value: 2 kiloohms", ResistorColorTrio.new(%w[red black red]).label + actual = ResistorColorTrio.new(%w[red black red]).label + expected = 'Resistor value: 2 kiloohms' + assert_equal expected, actual end def test_green_and_brown_and_orange skip - assert_equal "Resistor value: 51 kiloohms", ResistorColorTrio.new(%w[green brown orange]).label + actual = ResistorColorTrio.new(%w[green brown orange]).label + expected = 'Resistor value: 51 kiloohms' + assert_equal expected, actual end def test_yellow_and_violet_and_yellow skip - assert_equal "Resistor value: 470 kiloohms", ResistorColorTrio.new(%w[yellow violet yellow]).label + actual = ResistorColorTrio.new(%w[yellow violet yellow]).label + expected = 'Resistor value: 470 kiloohms' + assert_equal expected, actual + end + + def test_blue_and_violet_and_blue + skip + actual = ResistorColorTrio.new(%w[blue violet blue]).label + expected = 'Resistor value: 67 megaohms' + assert_equal expected, actual + end + + def test_minimum_possible_value + skip + actual = ResistorColorTrio.new(%w[black black black]).label + expected = 'Resistor value: 0 ohms' + assert_equal expected, actual + end + + def test_maximum_possible_value + skip + actual = ResistorColorTrio.new(%w[white white white]).label + expected = 'Resistor value: 99 gigaohms' + assert_equal expected, actual + end + + def test_first_two_colors_make_an_invalid_octal_number + skip + actual = ResistorColorTrio.new(%w[black grey black]).label + expected = 'Resistor value: 8 ohms' + assert_equal expected, actual + end + + def test_ignore_extra_colors + skip + actual = ResistorColorTrio.new(%w[blue green yellow orange]).label + expected = 'Resistor value: 650 kiloohms' + assert_equal expected, actual end end