== るびー系 ==
=== 1(必修) ===
rb1.rbという名前で提出してください。
Studentクラスに次のようなクラスメソッドconvert_studentを定義してください。
{{{
"(id)/(name)/(dept)/(sex)"の書式で与えられた文字列を引数にとって、与えられた情報をもったStudentクラスのインスタンスを返す
}}}
例えば次のように使います。
{{{#!highlight ruby
st = Student.convert_student("1011203/Aragaki Ayase/i/f")
# stに学籍番号1011203、名前新垣あやせ、学科I、性別女性という情報が入ったStudentクラスのインスタンスが代入される
}}}
=== 2(任意) ===
rb2.rbという名前で提出してください。
==== a ====
前回の必修問題を解いた状態で新しくUniversityクラスを作りましょう。
==== b ====
Universityクラスが大学名を表すnameインスタンス変数と所属する学生を表わすstudentsインスタンス変数をもつようにしてください。<
>
studentsインスタンス変数はStudentクラスのインスタンスの配列をもつことにします。
=== c ===
Universityクラスのインスタンスメソッドとして全ての学生の情報を出力するメソッドprint_all_infoを定義してください。
=== 3(任意) ===
rb3.txtという名前で提出してください。
putsメソッドと文字列のlengthメソッドを比較します。
{{{#!highlight ruby
puts "love live!"
"love live!".length
}}}
見て分かる通り、putsメソッドには'''〜.'''というものがついていません。
* a) なぜ'''〜.'''がなくても良いのか説明してください。
* b) 普通は書きませんが、putsメソッドに対して'''〜.'''をつけることができます。〜に入るものを答えてください。
=== 4(任意) ===
rb4.rbという名前で提出してください。
クラスAとクラスBがあります。クラスAはクラスBの親クラスであるとします。クラスAとクラスBはそれぞれ次のようなメソッドを持っています。
{{{#!highlight ruby
class A
def abc
"abc"
end
end
class B
def abc
"abc!!"
end
def abc2
"abc2!!"
end
end
}}}
この状態で次のようなプログラムを書きます。
{{{#!highlight ruby
hoge = A.new
fuga = B.new
puts hoge.abc
puts fuga.abc2
puts fuga.abc
}}}
* a) どのような出力が得られますか。
* b) なぜそうなりますか。
== あるごりずむ系 ==
以下の問題はRuby以外の言語で解いても良い。
algo(問題番号).(拡張子)という名前で提出してください。
=== 1(選択必修) ===
芽兎(めう)めう氏が経営する兎月堂では今、お客様感謝セールとして袋に好きなだけ商品を詰めてそれを1,000円均一で買うことができるセールを行なっている。<
>
ただし条件があり袋には2kgまでしか商品を入れられない。<
>
また同じ商品を2つ以上購入することはできない<
>
今、和泉一舞(いぶき)氏はこのセールで出来るだけお得に商品を買いたいと思っている。<
>
兎月堂の商品は次のとおりである。
||商品||値段||重さ||
||A||700円||1kg||
||B||200円||0.4kg||
||C||900円||0.5kg||
||D||400円||0.1kg||
||E||900円||0.7kg||
||F||700円||0.3kg||
||G||400円||0.6kg||
||H||500円||0.3kg||
条件を破らずに、和泉一舞氏ができるだけお得に商品を持ち帰るにはどのような組み合わせで袋に詰めれば良いだろうか。
=== 2(選択必修) ===
0 から 9 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力するプログラムを作成してください。<
>
n 個の数はおのおの 0 から 9 までとし、1つの組み合わせに同じ数字は使えません。
入力はnとsが1つのスペースで区切られて与えられるものとします。複数の入力に対応する必要はありません(nとsは1回だけ与えられ、1回だけ答えを出力すれば良いということです)。
=== 3(任意) ===
0 から 100 の数字から異なる n 個の数を取り出して合計が s となる組み合わせの数を出力するプログラムを作成してください。<
>
n 個の数はおのおの 0 から 100 までとし、1つの組み合わせに同じ数字は使えません。
入力はnとsが1つのスペースで区切られて与えられるものとします。複数の入力に対応する必要はありません(nとsは1回だけ与えられ、1回だけ答えを出力すれば良いということです)。
なおこの問題に関しては私の環境(Core i5 1.8GHz/Memory 8GB)で2秒以内に終了することを正解の条件とします。