はじめての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時点

Author: Shun Takahashi

Created: 2018-08-14 火 17:07

Emacs 25.3.1 (Org mode 8.2.10)

Validate