Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save otofu-square/71d4213ba411ec96ca76facf45d005b5 to your computer and use it in GitHub Desktop.
Save otofu-square/71d4213ba411ec96ca76facf45d005b5 to your computer and use it in GitHub Desktop.
たのしい Ruby 達成度確認テスト

たのしい Ruby 達成度確認テスト

問1

irb の "i" は、どういう意味か。

問2

「\n」や「\t」などの、「\」と英数字との組み合わせで構成される文字のことをなんというか。

問3

[ "abc", 123, "def", "ghi" ] このような配列を作ることはできるか?できないか?

問4

文字列オブジェクトをシンボルオブジェクトに変換するときに用いるメソッドは何か。

問5

{ name: "井上" } このようなオブジェクトをハッシュオブジェクトというが、「ハッシュ」と呼ばれる所以は何か。

問6

/ruby/ =~ str の結果が「0」のとき、それはどういう意味か。str は文字列オブジェクトとする。

問7

puts name unless name 、このコードが name の値を標準出力するケースは、以下のうちどれとどれか。

  • name の値が "井上"
  • name の値が空文字列
  • name の値が nil
  • name の値が true
  • name の値が false

問8

一般的に、 ARGV とはどういう意味(何の略)か。

問9

file = File.open(filename)
text = file.read
print text
file.close

file = File.open(filename)
file.each_line do |line|
  print line
end
file.close

これら2つのプログラムについて、どちらがどう優れているか。

問10

def test
end

上記のようなメソッドを実行したとき、どうなるか。

問11

def hello
  print "hello"
end

というようなメソッド hello があるとき、 a = hello とすると a には何が入るか。

問12

いわゆるオブジェクト指向プログラミングにおける「クラス」とはどんなものか。簡潔に説明せよ。 (大きく外れているような説明になっていなければ良いものとする)

問13

いわゆるオブジェクト指向プログラミングにおける「オブジェクト」とはどんなものか。簡潔に説明せよ。 (大きく外れているような説明になっていなければ良いものとする)

問14

Ruby で扱える変数の種類のうち、 @@x は何変数というか。「x」は変数名とする。

問15

TEST = 1
TEST = 2

このコードを実行したとき、どうなるか。理由も合わせて簡潔に答えよ。

問16

a, *b, c = [ 1,2,3,4,5,6 ]
p [ a, b, c ]

上記のコードを実行したとき、どうなるか。

問17

case item
when String
 p "ok"
else
 p "ng"
end

これはどういう挙動をするコードか。

問18

case value
when A
  p "A"
when B
  p "B"
else
  p "other"
end

これと同じ挙動をするコードを case - when の代わりに if を用いて書き換えなさい。

問19

変数 a の値が "test" のとき、 a.equal?(b) が true となるような 変数 b を宣言しなさい。

問20

for i in 1...5
  p i
end

このコードの実行結果を書きなさい。

問21

i = 1
while i < 3
  puts i
  i += 1
end

上記のようなコードの出力結果は何か。

問22

names = [ "awk", "Perl", "Python", "Ruby" ] という配列があったとき、 この配列の値全てを標準出力するようなコードを書きなさい。 ただし、Array#each を用いること。

問23

names = [ "awk", "Perl", "Python", "Ruby" ]

i = 0
names.each do |name|
  i += 1
  puts name
  if i == 1
    next
  elsif i == 2
    redo
  elsif i == 3
    break
  end
end

このコードの実行結果を書きなさい

問24

a = 'abc'
b = '123'
a + b

上記のコードのうち、「メソッド」はどれか。

問25

オブジェクト.メソッド(引数) の構文のうち、「レシーバ」とも呼ばれるものはどれか。

問26

「Array.new」の new、「Time.now」の now などのような呼び出し方のできるメソッドを、何メソッドというか。

問27

def test(a, b)
  if a > b
    a
  else
    return b
  end
end

上記のようなメソッド test があったとき、test(3,2) としたときの戻り値はなにか。

問28

def test(a, b)
  if a > b
    return a
  end
end

上記のようなメソッド test があったとき、test(3,5) としたときの戻り値はなにか。

問29

def myloop
  while true
    yield
  end
end

上記のようなメソッドが定義されていたとき、下記のような出力を得るコードを書きなさい。 ただし、myloop メソッドを用いること。

1
2
3
4
5

問30

引数の数をあらかじめ決められないようなメソッドを定義する際、引数はどのように定義すれば良いか。

問31

def foo(arg)
  p arg
end

上記のようなメソッド foo が定義されているとき、foo(a: 1, b: 2) として foo を呼び出した時の arg は何クラスのオブジェクトか。

問32

def bar(arg1, arg2)
  [arg1, arg2]
end

上記のようなメソッド bar が定義されているとき、 bar(a: 1, b: 2, 3) という呼び出し方は可能か、不可能か。理由も合わせて答えよ。

問33

オブジェクト指向において、既に定義されているクラスを継承することによって新たに作られたクラスのことを、何クラスと呼ぶか。

問34

オブジェクト指向において、既に定義されているクラスを継承し新たなクラスを作ったとき、継承のもととなったクラスのことを何クラスと呼ぶか。

問35

class Test
  def number(num)
    @n ||= num
  end

  def output
    puts @n
  end
end

上記のようなメソッドが定義されているとき、 test = Test.new; test.number(1); test.output としたときの出力結果はどんなものか。

問36

class Test
  attr_writer :number

  def initialize(num)
    @number = num
  end
end

上記のようなクラスが定義されているものとする。このクラスと同等の働きを持つクラスを、 attr_writer を用いずに定義しなさい。

問37

class Test
  attr_accessor :number

  def set_number(number)
    (※)
  end

  def output
    puts number
  end
end

上記のようなクラスが定義されているものとする。このとき、 test = Test.new; test.set_number(5); test.output としたときの出力を「5」にするためには、 Test#set_number の実装の※の部分に、どのような実装をすればよいか。

問38

HelloWorld.hello('John') とすることで「John said hello.」と出力されるようなメソッドを持つクラス、HelloWorld を定義しなさい。

問39

下記のコードには問題がある。どのような問題があるか。

class HelloCount
  attr_accessor :count
end

HelloCount.count = 5
puts HelloCount.count

問40

class HelloCount
  @@count = 0

  def HelloCount.count
    @@count
  end

  def initialize(myname = 'Ruby')
    @name = myname
  end

  def hello
    @@count += 1
    puts "Hello, world. I am #{@name}\n"
  end
end

上記のようなクラスが定義されているとき、

bob = HelloCount.new('Bob')
alice = HelloCount.new('Alice')
ruby = HelloCount.new

bob.hello
alice.hello
ruby.hello
p HelloCount.count

上記のように実行した場合、最後に得られる出力はなにか。理由も合わせて簡潔に答えよ。

問41

class HelloCount
  @@count = 0

  def initialize(myname = 'Ruby')
    @name = myname
  end

  def hello
    @@count += 1
    puts "Hello, world. I am #{@name}\n"
  end

  def goodbye
    puts "Good bye, #{@name}\n"
  end

  public :goodbye

  private

  def count_reset
    @@count = 0
  end
end

上記のようなクラスが定義されているとき、 initialize hello goodbye count_reset のそれぞれは、「public メソッド」「private メソッド」「protected メソッド」のうち、どれに属するか。ひとつずつ答えよ。"

問42

あるクラス(Aクラスとする)を継承したクラス(Bクラスとする)において、Aクラスで既に定義されているものと同じ名前のメソッドをBクラスにて再定義したとき、その再定義メソッド内で、Aクラスの元のメソッドを呼び出す際に指定する句はなにか。

問43

既に存在するメソッドに別の名前を割り当てる際に用いる句はなにか。

問44

クラスとモジュールの異なる点として、「モジュールはインスタンスを持つことができない」と、あとひとつはなにか。

問45

include を使い、モジュールに含まれるメソッドや定数をクラスの中に取り込むことをなんというか。

問46

module HelloModule
  Version = '1.0'

  def version
    puts Version
  end
end

上記のようなモジュールが定義されているとき、 HelloModule.version とするとエラーになる。これをエラーとならないようにするには、モジュールをどのように定義すればよいか。

問47

module M
  def meth
    'M#meth'
  end
end

class C
  def meth
    'C#meth'
  end
  include M
end

c = C.new
p c.meth

上記のような場合、最後の行の出力としては何が得られるか。理由も合わせて簡潔に答えよ。

問48

オブジェクト指向における「カプセル化」について説明しなさい。

問49

オブジェクト指向における「ポリモルフィズム(ポリモーフィズム)」について説明しなさい。

問50

a = 2
a ||= 3
puts a

上記のようなコードの出力結果は何か。理由も合わせて簡潔に答えよ。

問51

a = 1
b = nil
puts b || a

上記のようなコードの出力結果は何か。

問52

a = 1
b = nil
puts b && a

上記のようなコードの出力結果は何か。

問53

a = 1
b = 2
v = (a > b) ? a : b
p v

上記のようなコードの出力結果は何か。

問54

$ ruby test.rb 
test.rb:3:in `read': No such file or directory @ rb_sysopen - /no/file (Errno::ENOENT)
        from test.rb:3:in `initialize'
        from test.rb:7:in `new'
        from test.rb:7:in `<main>'

実行すると上記のようなエラーメッセージが出るような test.rb を書け。ただし、行番号については上記と一致していなくてもよい。

問55

def error_test
  begin
    1 / 0
    p '1'
  rescue
    p '2'
  ensure
    p '3'
  end
end

上記のようなメソッド error_test があるとき、この error_test を呼び出したときに行われる標準出力はどのようなものになるか。

問56

def error_test(number)
  p Integer(number) rescue nil
end

上記のようなメソッド error_test があるとき、 error_test('abc') と呼び出した時の標準出力はどのようなものになるか。

問57

array = ['Ruby', 'Perl', 'PHP', 'Python']

上記のような配列 array の中の文字列を長い順にソートするようなコードを、 Array#sort を用いて書きなさい。"

問58

def total(from, to)
  result = 0
  from.upto(to) do |num|
    result += yield(num)
  end
  result
end

上記のようなメソッド total が定義されているとき、 total(1,10) { |num| num * 2 } の実行結果として何が出力されるか。

問59

def total(from, to, &proc)
  result = 0
  from.upto(to) do |num|
    result += proc.call(num)
  end
  result
end

上記のようなメソッド total が定義されているとき、 total(1,10) { |num| num * 3 } の実行結果として何が出力されるか。

問60

x = 1
y = 1
ary = [1, 2, 3]

ary.each do |x|
  y = x
end

p [x, y]

上記のようなコードの実行結果として得られる標準出力はどのようなものになるか。

問61

Rational(2, 5) これは何を表すか。

問62

puts (1 + 1.0).class.name このコードを実行して得られる標準出力の内容はなにか。

問63

5 / 2 の結果を答えよ。

問64

p 1.1.to_i このコードを実行して得られる標準出力の内容はなにか。

問65

ソフトウェアでは本物の乱数を作ることができず、計算によって「乱数のように見える値」を作っている。この乱数のことを「擬似乱数」と呼んでいるが、この擬似乱数では、乱数を生成するきっかけとなる値が必要となる。この値のことを、「乱数の何」というか。

問66

a = 0.1 + 0.2
b = 0.3

のとき、 a == b はfalse になる。これは何によるものか。

問67

p [1, 2, 3, 4, 5][-2] このコードを実行して得られる標準出力の内容はなにか。

問68

p [1, 2, 3, 4, 5][1..3] このコードを実行して得られる標準出力の内容はなにか。

問69

p [1, 2, 3, 4, 5][1..10] このコードを実行して得られる標準出力の内容、もしくは結果はなにか。

問70

p [1, 2, 3, 4, 5].values_at(2,3,4) このコードを実行して得られる標準出力の内容はなにか。

問71

a = [1, 2, 3]
b = [2, 3, 4]

のとき、 p a & b を実行して得られる標準出力の内容はなにか。

問72

「キュー」「スタック」それぞれに対しての要素の追加・取り出しの特徴を表した「FIFO」「LIFO」であるが、それぞれどちらがどちらの特徴を表した言葉か。

問73

p [1, 2, 3, 4, 5].pop このコードを実行して得られる標準出力の内容はなにか。

問74

a = [1, 2, 3, 4, 5]
a.pop
p a

このコードを実行して得られる標準出力の内容はなにか。

問75

p [1, 2, 3, 4, 5] << 3 このコードを実行して得られる標準出力の内容はなにか。

問76

「破壊的メソッド」とは、どのような特徴をもつメソッドのことか。

問77

p [1, 2, 3, 4, 5].map{ |a| a * 2 } このコードを実行して得られる標準出力の内容はなにか。

問78

a = [1, [2, [3]], [4], 5]

上のような配列 a を、下記のような配列にするコードを書きなさい。

p a #=> [1, 2, 3, 4, 5]

問79

p %Q|I am a pen.| このコードを実行して得られる標準出力の内容はなにか。

問80

n = <<INT
123
INT
p n.class.name

上記のコードを実行して得られる標準出力の内容はなにか。

問81

x = 'abc'

a = x
b = x

a << 'z'
p b

上記のコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。

問82

p ('aaaaa' < 'b') このコードを実行して得られる標準出力の内容はなにか。

問83

puts 'I am a pen.'.upcase このコードを実行して得られる標準出力の内容はなにか。

問84

h = Hash.new(0)
puts h['key']

上記のコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。

問85

puts person_age['feedforce']['a-know'] #=> 33
puts person_age['kaizen']['naoya'] #=> 38

上記のような値を持つ変数 person_age を作成しなさい。

問86

"012\nABC" という文字列の「ABC」の部分にマッチする正規表現は /\AABC/ /^ABC/ のうち、どちらか。

問87

文字列 'aBcabc' に対して、正規表現 /a[^A-B]c/ でマッチする部分はあるか。ある場合、それはどこか。

問88

文字列 'ABBC' に対して、正規表現 /A.C/ でマッチする部分はあるか。ある場合、それはどこか。

問89

文字列 'BC' に対して、正規表現 /A*C/ でマッチする部分はあるか。ある場合、それはどこか。

問90

文字列 'AB CD' に対して、正規表現 /A.*C/ でマッチする部分はあるか。ある場合、それはどこか。

問91

文字列 'AAC' に対して、正規表現 /AAA+C/ でマッチする部分はあるか。ある場合、それはどこか。

問92

文字列 'AAC' に対して、正規表現 /AAA?C/ でマッチする部分はあるか。ある場合、それはどこか。

問93

文字列 'ABCDCBA' に対して、正規表現 /A.*?B/ でマッチする部分はあるか。ある場合、それはどこか。

問94

文字列 'ABCBADCBCD' に対して、正規表現 /^(AB|CD)+$/ でマッチする部分はあるか。ある場合、それはどこか。

問95

/ABC/i =~ "ABCDE" というようなときの「i」はどういう意味か。

問96

/(.)(.)(.)/ =~ "abc"
p $1

このコードを実行して得られる標準出力の内容はなにか。

問97

p "a@@b@@c@@d@@e".sub(/@+/, '*')

このコードを実行して得られる標準出力の内容はなにか。理由も合わせて簡潔に答えよ。

問98

File.open('foo.txt') do |io|
  while line = io.gets
    # some operations
  end
end

上記のコードに、io.close が無くても問題ないのはなぜか。

問99

hello = Proc.new do |name|
  puts "Hello, #{name}."
end

hello.xxx("World") # 実行結果: Hello, World.

上記の通りとなるような結果を得たい場合、xxx はどんなメソッドになるか。

問100

%w(1 2 3).map(&:to_i)

を、Proc.new を用いて同じ動きをするよう、書き換えなさい。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment