Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Ruby | CLI | Play Well with Others | Add Additional Fields to Make Searching Easier

概要

書籍 Build Awesome Command-Line Applications in Ruby2

Play Well with Others

詳細

ユーザーが対象データを抽出しやすいように、フラグやステータスを表す内容を
レコードに含めることも有効。

サンプル仕様

引数1 〜 引数2 の範囲数値を配列化し、中身をシャッフルします。
シャッフルした配列に対して、順に2要素ずつ合計を出力します。
合計値が 引数3 を越えたら "OVER", 越えていなければ "UNDER"を出力します。

表示フォーマットは1計算1行、カンマ区切りで「計算全体」「加算元1」「加算元2」「加算結果」「OVER/UNDER フラグ」です。

サンプルコード

from = ARGV.first.to_i
to = ARGV[-2].to_i
limit = ARGV.last.to_i

[*from..to].shuffle.each_slice(2) do |one, other|
  sum = one + other
  over_under = (sum >= limit) ? "OVER" : "UNDER"
  puts "#{one} + #{other} = #{sum},#{one},#{other},#{sum},#{over_under}"
end

サンプル出力

1-20の範囲かつ合計を10でチェック

$ ruby good.rb 1 20 10
5 + 12 = 17,5,12,17,OVER
1 + 8 = 9,1,8,9,UNDER
3 + 16 = 19,3,16,19,OVER
20 + 9 = 29,20,9,29,OVER
14 + 15 = 29,14,15,29,OVER
10 + 17 = 27,10,17,27,OVER
7 + 2 = 9,7,2,9,UNDER
6 + 11 = 17,6,11,17,OVER
19 + 13 = 32,19,13,32,OVER
4 + 18 = 22,4,18,22,OVER

1-20の範囲かつ合計を20でチェックし、結果を OVER でフィルタ

$ ruby good.rb 1 20 20 | grep ",OVER"
18 + 5 = 23,18,5,23,OVER
8 + 16 = 24,8,16,24,OVER
17 + 14 = 31,17,14,31,OVER
19 + 12 = 31,19,12,31,OVER
6 + 20 = 26,6,20,26,OVER
7 + 15 = 22,7,15,22,OVER

1-20の範囲かつ合計を20でチェックし、結果を UNDER でフィルタ

$ ruby good.rb 1 20 20 | grep ",UNDER"
8 + 3 = 11,8,3,11,UNDER
13 + 4 = 17,13,4,17,UNDER
7 + 12 = 19,7,12,19,UNDER
6 + 1 = 7,6,1,7,UNDER