From de6463a8258526799a3493f990355b629ab00426 Mon Sep 17 00:00:00 2001 From: Rikuoh Date: Sun, 17 Mar 2024 23:28:50 +0900 Subject: [PATCH] 3/17 --- cherry.md | 13 +++++++++++++ main.rb | 34 +++------------------------------- main_test.rb | 10 ++++++++++ 3 files changed, 26 insertions(+), 31 deletions(-) create mode 100644 main_test.rb diff --git a/cherry.md b/cherry.md index e7121f9..2d3d13b 100644 --- a/cherry.md +++ b/cherry.md @@ -27,4 +27,17 @@ do endの代わりに{}でブロックをくくることもできる:僕が最 112ページまで ## 3/17 +numbers.select {|n| n.even?} : このようにselectメソッドを使うと条件を満たした配列のみを作成できる。この例では偶数のみの配列が生成される +numbers.find : findメソッドは戻り値が真になった最初の値のみを返す +numbers.sum : 名前通り配列の要素を合計できる。文字列でも使える('')単純な連結ならjoinメソッドの方が楽だがsumは文字列の加工に優れる +&:メソッド名でシンプルに書ける:ブロックパラメータが1つ、ブロックの中のメソッドに引数がない、メソッドを1回呼び出す以外の処理がない、といった条件をすべて満たすと [1,2,3,4,5,6].select{|n| n.odd?}を[1,2,3,4,5,6,].select{&:odd?}のように簡潔に書ける。演算子を使っている場合は不可能 +(1..5)←これはRangeという名前のオブジェクトだった!:ただのそういう感じの簡略記法かと思っていた。点が三つだと5は含まれなくなる +(1..5).to_aで値が連続する配列を作ることができる:これ””””答え””””だ。こういうものがあるといいと思ってた +RBG変換器の実装を通じて:これたぶんもっと短くなる方法ありそうだな……と思っていたらすぐ下でsumを使った記法が書かれていた。ぜひものにしたい + + + + + + diff --git a/main.rb b/main.rb index b538c33..8d6269e 100644 --- a/main.rb +++ b/main.rb @@ -1,33 +1,5 @@ -def fizz_buzz(n) - if n % 15 == 0 - 'FizzBuzz' - elsif n % 3 == 0 - 'Fizz' - elsif n % 5 == 0 - 'Buzz' - else - n.to_s +def to_hex(r, g, b) + [r, g, b].sum('#') do |n| + n.to_s(16).rjust(2, '0') end end - -require 'minitest/autorun' - -class FizzBuzzTest < Minitest::Test - def test_fizz_buzz - assert_equal '1', fizz_buzz(1) - assert_equal '2', fizz_buzz(2) - assert_equal 'Fizz', fizz_buzz(3) - assert_equal '4', fizz_buzz(4) - assert_equal 'Buzz', fizz_buzz(5) - assert_equal 'Fizz', fizz_buzz(6) - assert_equal 'Fizz Buzz', fizz_buzz(15) - end -end - -# puts fizz_buzz(1) -# puts fizz_buzz(2) -# puts fizz_buzz(3) -# puts fizz_buzz(4) -# puts fizz_buzz(5) -# puts fizz_buzz(6) -# puts fizz_buzz(15) diff --git a/main_test.rb b/main_test.rb new file mode 100644 index 0000000..5dcc3ba --- /dev/null +++ b/main_test.rb @@ -0,0 +1,10 @@ +require 'minitest/autorun' +require_relative 'main' + +class RdbTest < Minitest::Test + def test_to_hex + assert_equal '#000000', to_hex(0, 0, 0) + assert_equal '#ffffff', to_hex(255, 255, 255) + assert_equal '#043c78', to_hex(4, 60, 120) + end +end