はじめてのRuby
Table of Contents
1 print,puts,pメソッド
1.1 helloruby.rb
「Hello, Ruby.」という文字列を表示するプログラムを作成せよ。
print 'Hello, Ruby.\n'
> answer.rb Hello, Ruby.
1.2 helloruby_2.rb
「Hello, "Ruby".」という文字列を表示するプログラムを作成せよ。
print Hello, \"Ruby\".\n"
> answer.rb Hello, "Ruby".
1.3 p_method.rb
「"Hello,\n\tRuby."」という文字列を表示するプログラムを作成せよ。
p "Hello,\n\tRuby."
> answer.rb "Hello,\n\tRuby."
2 コマンドラインからのデータの入力
2.1 print_argv.rb
コマンドラインから5つの引数を受け取り、受け取った順に表示するプログラムを作成せよ。
puts ARGV[0] puts ARGV[1] puts ARGV[2] puts ARGV[3] puts ARGV[4]
> ruby answer.rb 1st 2nd 3rd 4th 5th 1st 2nd 3rd 4th 5th
2.2 arg_arith.rb
コマンドラインから数値を2つ受け取り、その和、差、積、商を表示するプログラムを作成せよ。
num0 = ARGV[0].to_i num1 = ARGV[1].to_i sum = num0 + num1 dif = num0 - num1 pro = num0 * num1 quo = num0 / num1 puts sum puts dif puts pro puts quo
> ruby answer.rb 5 3 8 2 15 1
3 変数
3.1 area_volume.rb
3つの数値をx、y、zとして受け取り、縦x、横y、高さzの直方体の表面積と体積を求め、表示するプログラムを作成せよ。
x = ARGV[0].to_i y = ARGV[1].to_i z = ARGV[2].to_i area = (x * y + y * z + z * x) * 2 volume = x * y * z print '表面積=', area, "\n" print '体積=' volume, "\n"
> ruby answer.rb 10 20 30 表面積=2200 体積=6000
4 条件判断
4.1 greater_smaller_else.rb
1つの数値を受け取り、それが10より大きければ「greater」小さければ「smaller」と表示するプログラムを作成せよ。
a = ARGV[0].to_i if a >= 10 print "greater\n" else print "smaller\n" end
>ruby answer.rb 20 greater >ruby answer.rb 5 smaller
5 繰り返し
5.1 1_to_n.rb
1つの数値をnとして受け取り、1からnまでの数を順番に表示するプログラムを作成せよ。
n = ARGV[0].to_i i = 1 while i <= n print i, "\n" i += 1 end
> ruby answer.rb 5 1 2 3 4 5
5.2 five_times.rb
「All work and no play makes Jack a dull boy.」と5行表示するプログラムを作成せよ。
5.times do print "All work and no play makes Jack a dull boy.\n" end
> answer.rb All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy. All work and no play makes Jack a dull boy.
6 配列
6.1 配列からオブジェクトを取り出す
1つの数値をnとして受け取り、配列のn番目の要素を取り出し、表示するプログラムを作成せよ。ただし、配列はプログラム内で定義し、配列には数値が入るものとする。
nums = [3, 1, 4, 1, 5] print nums[ARGV[0].to_i]
> ruby answer.rb 0 3 > ruby answer.rb 3 1
6.2 配列にオブジェクトを格納する
配列の先頭の要素をコマンドラインに入力した要素に変更するプログラムを作成せよ。 ただし、配列はプログラム内で定義し、配列には数値が入るものとする。
nums = [3, 1, 4, 1, 5] nums[0] = ARGV[0].to_i print nums
> ruby answer.rb 5 [5, 1, 4, 1, 5]
6.3 配列の大きさ
配列を表示し、その配列の大きさも表示するプログラムを作成せよ。 ただし、配列はプログラム内で定義すること。
nums = [3, 1, 4, 1, 5] print nums, "\n" print nums.size, "\n"
> ruby answer.rb [3, 1, 4, 1, 5] 5
6.4 配列と繰り返し
配列全体を表示してから、配列の要素を順に表示するプログラムを作成せよ。 ただし、配列はプログラム内で定義すること。
nums = [3, 1, 4, 1, 5] print nums, "\n" nums.each do |n| puts n end
> ruby answer.rb [3, 1, 4, 1, 5] 3 1 4 1 5
7 ハッシュ
7.1 シンボル
1つの文字列を受け取り、シンボルに変換して表示するプログラムを作成せよ。
n = ARGV[0] p n.to_sym
> ruby answer.rb hash :hash
7.2 ハッシュの操作
:name, :furigana というそれぞれのキーに"高橋", "タカハシ"というオブジェクトが格納されているハッシュを作成、表示し、さらに:tel というキーに"000-1234-5678"を格納して再度表示するプログラムを作成せよ。
address = { name: "高橋", furigana: "タカハシ" } puts address address[:tel] = "000-1234-5678" puts address
> ruby answer.rb {:name=>"高橋", :furigana=>"タカハシ"} {:name=>"高橋", :furigana=>"タカハシ", :tel=>"000-1234-5678"}
8 正規表現
8.1 パターンとマッチング
1つの文字列を受け取り、それが「Hello, Ruby」とマッチするなら「match.」マッチしないなら「not match.」と表示するプログラムを作成せよ。
n = /#{ARGV[0]}/ if n =~ "Hello, Ruby." print "match.\n" else print "not match\n" end
> ruby answer.rb Ruby match. > ruby answer.rb RUBY not match.
9 ファイルからの読み込み
9.1 read_text.rb
1つの文字列を受け取り、該当するファイル名のテキストデータを表示するプログラムを作成せよ。
filename = ARGV[0] text = File.read(filename) print text
>ruby answer.rb [filename] [text]
9.2 read_line.rb
1つの文字列を受け取り、該当するファイル名のテキストデータを1行ずつ読み取り、表示するプログラムを作成せよ。
filename = ARGV[0] file = File.open(filename) file.each_line do |line| print line end
9.3 simple_grep.rb
2つの文字列を受け取り、2つ目の文字列に該当するファイル名のテキストデータの中から、1つ目の文字列にマッチする行を出力するプログラムを作成せよ。
pattern = Regexp.new(ARGV[0]) filename = ARGV[1] file = File.open(filename) file.each_line do |line| if pattern =~ line print line end end file.close
>ruby answer.rb [pattern] [filename]
10 メソッドの作成
10.1 hello_ruby2.rb
「Hello, Ruby.」と表示するメソッドhelloを用いて、「Hello, Ruby.」と表示するプログラムを作成せよ。
def hello puts 'Hello, Ruby.' end hello
> ruby answer.rb Hello, Ruby.
10.2 hello_ruby3.rb
1つの文字列を受け取り、「Hello, [受け取った文字列].」と表示するメソッドhelloを作成し、 2つの文字列を受け取り、「Hello, [受け取った文字列].」と2行表示するプログラムを作成せよ。
def hello(name) print 'Hello, ', name, ".\n" end hello(ARGV[0]) hello(ARGV[1])
> ruby answer.rb Ruby Takahashi Hello, Ruby. Hello, Takahashi.
11 別のファイルを取り込む
11.1 ディレクトリ内のファイルの取り込み
1つの文字列を受け取り、「Hello, [受け取った文字列].」と表示するメソッドhelloが書かれたプログラムhello.rbがある。
このプログラムを取り込んで、1つの文字列を受け取り、「Hello, [受け取った文字列].」と表示するプログラムを作成せよ。
- hello.rb
def hello(name) print 'Hello, ', name, "\n" end
require_relative "hello" name = ARGV[0] hello(name)
> answer.rb Ruby Hello, Ruby.
11.2 Rubyの標準ライブラリ
Rubyの標準ライブラリ「date」を用いて、Rubyが誕生した1993年2月24日から、今日までの日数を表示するプログラムを作成せよ。
require "date" days = Date.today - Date.new(1993, 2, 24) puts days.to_i
> ruby answer.rb 9302
- 2018/8/14時点