Ruby 逆引き チュートリアル

Ruby逆引き
http://www.namaraii.com/rubytips/
http://doc.ruby-lang.org/ja/1.9.3/doc/index.html

チュートリアル
http://www.ruby.or.jp/ja/tech/development/ruby/tutorial/020_data_type1.html
データ型(数・文字列)
配列
ハッシュ
時刻
制御構造&例外処理
正規表現
ファイル入出力
メソッド

ライブラリ
自作ライブラリ(基本) ーgoogle "ruby require"

Mechanize
http://d.hatena.ne.jp/johnyuan2000/20130102/1357103701
http://w.livedoor.jp/ruby_mechanize/d/Mechanize
http://mechanize.rubyforge.org/

CSV
http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html

ZIP(zipruby)
https://bitbucket.org/winebarrel/zip-ruby/wiki/Home

http://ruby.gfd-dennou.org/tutorial/gokuraku/
「1. Rubyの基本的な使い方」まで

例題1(Rubyプログラムの基本事項&データ型)
変数ageJohn=51とlaterを作成し、標準入力からlaterに年数を(例えば10を)入力すると、「ジョンは10年後に61歳になります。」と出力するプロググラムを書け。

例題2(Rubyプログラムの基本事項&データ型)
変数nameを作成し、標準入力からnameに名前を入力(例えば"john"を)すると、「名前はjohnです。文字数は4文字です。」と出力するプロググラムを書け。

例題3(配列)
配列week=['月曜日','火曜日','水曜日','木曜日','金曜日','土曜日','日曜日']を作成し、標準入力から数字を入力(例えば3)すると、「週の3日目は。水曜日です。」と出力するプロググラムを書け。

例題3-2(配列&制御構造)
配列week=['月曜日','火曜日','水曜日','木曜日','金曜日','土曜日','日曜日']を作成し、標準入力から数字を入力(例えば3)すると、「週の3日目は。水曜日です。」と出力し、もし7以上の数字の入力が在ったら、「範囲は1〜7です。再入力:」と表示した上で元に戻って再度、標準入力から数字を入力させるプロググラムを書け。

例題3-3難(配列&制御構造)
配列juunishi=['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']を作成し、標準入力から2012以上の数字を入力(例えば2100)すると、「西暦2100年は。午年です。」と出力するプロググラムを書け。

例題3-4難(配列&制御構造)
配列nums=[1,2,3,..99,100]をオペライター「<<」を使い自動生成し、エラトステネスのふるい(http://ja.wikipedia.org/wiki/エラトステネスの篩)を用いて、1〜100までの素数をすべて出力するプロググラムを書け。

例題3-5易(配列&制御構造&split)
文字列str='1234'を作成し、配列double=[2,4,6,8]を自動生成し出力(puts double)するプロググラムを書け。

例題3-6(配列&制御構造&ブロック)
timesを利用し、配列double=[0,2,4,6,8,10]を自動作成しを出力するプロググラムを書け。自動生成のコードはブロックを用いて1行のみで実装せよ。

例題4-1(ハッシュ)
ハッシュjuunishi=['2020'=>'子','2021'=>'丑','2022'=>'寅','2023'=>'卯','2024'=>'辰','2013'=>'巳','2014'=>'午','2015'=>'未','2016'=>'申','2017'=>'酉','2018'=>'戌','2019'=>'亥']を作成し、標準入力から2013〜2024数字を入力(例えば2015)すると、「西暦2015年は未年です。」と出力するプロググラムを書け。

例題4-2難(ハッシュ)
例題4-1のハッシュjuunishi使用し、標準入力から任意の正の数字を入力(例えば1000)すると、「西暦1000年は申年です。」と出力するプロググラムを書け。

例題4-3難(ハッシュ)
例題4-2のコードを改良し、標準入力から任意の正または負の数字を入力(例えば−983)すると、「紀元前983年は酉年です。」と出力するプロググラムを書け。なお、入力が正の整数(例えば1000)すると、「西暦1000年は申年です。」とする例題4-2の機能はそのまま保持すること。

例題4-4(ハッシュ)
オペレータ「*」とtranspose、flattenを用いて、文字列'子丑寅卯辰巳午未申酉戌亥'から例題4-1のハッシュjuunishiを自動生成し出力(puts juunishi)するプロググラムを書け。自動生成のコードはブロックを用いて1行のみで実装せよ。

例題4-5(ハッシュ&配列&ブロック&map)
mapを用いて、例題4-1のハッシュjuunishiから配列aJuunishi=['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']を自動生成し出力(puts aJuunishi)するプロググラムを書け。自動生成のコードはブロックを用いて1行のみで実装せよ。

例題4-5(ハッシュ&配列&ブロック&map)
mapを用いて、例題4-1のハッシュjuunishiから配列aJuunishi=['子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥']を自動生成し出力(puts aJuunishi)するプロググラムを書け。自動生成のコードはブロックを用いて1行のみで実装せよ。

例題5-1(時刻)
strftimeを用いて現在の時刻(例えば2013年1月5日午後3時30分45秒)なら、「現在の時間は西暦2013年01月05日、15時30分」と出力するプロググラムを書け。

例題5-2(時刻)
現在の時刻(例えば2013年3月15日午後3時30分45秒)から、文字列'130315'を出力するプロググラムを書け。全コードは1行のみで実装せよ。

例題6-1(正規表現)
標準入力から8桁の日付を表す文字列をyy-mm-ddの形式で入力(例えば'15-06-22')すると、「日付は15年6月22日です。」と出力するプロググラムを書け。

ヒント:正規表現中に()を用いいて、特定のマッチ結果を$1,$2,$3...で順番に取り出すことが出来る。例えば
irb> k="商品番号P130325-06cはお買い得!"
irb> k =~ /[A-Z]\d{6}-\d{2}[a-z]/
=> 4
irb> k =~ /[A-Z](\d{6})-(\d{2})[a-z]/
=> 4
irb> p $1,$2
"130325"
"06"
=> ["130325", "06c"]

注意:「\」「\」は両方共バックスラッシュを表す。


例題6-2(正規表現&時刻)
例題6-1を応用して更に、「西暦2015年6月22日は月曜日です。」と出力するプロググラムを書け。

例題6-3(正規表現&sub)
子供の身体検査結果文字列kensa='鈴木花子:f010819-45-123P'を作成し、名前を削除した文字列'f010819-45-123P'を出力するプロググラムを書け。
注意:身体検査結果文字列は'名前:生年月日-体重-身長-学校,名前:生年月日-体重-身長-学校,...’の形式で書かれていると仮定する。

例題6-4(正規表現&match)
例題6-3の文字列から、文字列「2001年8月19日生まれ」を出力するプロググラムを書け。ただしmatchとsubを使用して一行で実装せよ。

例題6-5(正規表現&gsub)
文字列kensa='鈴木花子:f010819-45-123P,山田太郎:m031109-34-99P,中村幸子:f080926-25-86K'を作成し、名前を全て削除した文字列'f010819-45-123P,m031109-34-99P,f080926-25-86K'を出力するプロググラムを書け。
(注意:カンマは必ず半角「,」を使用すること)

例題6-6(正規表現&scan)
例題6-5の文字列から、「生徒は3名。身長はそれぞれ123cm、99cm、86cm。平均は103cm。」と出力するプロググラムを書け。

例題6-7繁(正規表現&split)
例題6-5の文字列から、
 鈴木花子は2001年8月19日生まれ,体重45Kg,身長123cm,PrimarySchool
 山田太郎は2003年11月09日生まれ,体重34Kg,99cm,PrimarySchool
 中村幸子は2008年9月26日生まれ,体重25Kg,86cm,KinderGarden

例題7-1(ファイル入出力)
テキストファイルkensa.txtを作成し例題6-2の文字列'鈴木花子:f010819-45-123P,山田太郎:m031109-34-99P,中村幸子:f080926-25-86K'を書き込み、プログラムからkensa.txtを開き、例題6-2と同じ処理を行い結果をテキストファイルkensa_kekka.txtに保存せよ。

例題8-1(メソッド)
メソッド:

def open_kensa
#テキストファイル'kensa.txt'をオープンする処理
......
end

を書き、直後にその内容

'鈴木花子:f010819-45-123P,山田太郎:m031109-34-99P,中村幸子:f080926-25-86K'

を表示(puts)するプロググラムを書け。


例題8-2(メソッド)
例題8-1のメソッドを改良し、ファイル名を指定出きるように書き換え:

def open_kensa(txt_file)
#テキストファイルtxt_fileをオープンする処理
......
end

を書き、直後に標準入力からファイル名'kensa.txt'を入力し、kensa.txtの内容を表示(puts)するプロググラムを書け。

例題8-3(メソッド&自作ライブラリ)
プログラムkensa.rbとその補助プログラムkensa_utility.rbを作成し例題8-2のメソッドをkensa_utility.rbに書き写し、kensa.rbでkensa_utility.rbをrequireしたのちその内容を表示(puts)するプロググラムを書け。

例題9-1(CSVライブラリ)
まず例題7-1のファイルkensa_kekka.txtをコピー、拡張子変更してkensa_kekka.csvを作成する。
プログラムkensa.rbとその補助プログラムkensa_utility.rbを作成し例題8-2のメソッドをkensa_utility.rbに書き写し、kensa.rbでkensa_utility.rbをrequireしたのちその内容を表示(puts)するプロググラムを書け。