軽くRubyを触ってみた。
触りついでに会社にあるOJT用の問題を解いてみた。
エラーハンドリングなどは漏れ漏れだけどまぁ暇つぶしなのでご容赦を。*1
階乗
#!/usr/bin/ruby =begin 入力した数値の階乗を計算して出力するプログラムを作成する。 ※ただしfor文やwhile文を使用してはいけない。 =end ## 階乗処理 def calc_factorial(i) if i == 1 return i end return i * calc_factorial((i - 1)) end ## main # 引数チェック unless $*.length == 1 puts "usage: ./factorial1.rb integer number" exit 0 end # 階乗処理 rslt = calc_factorial($*[0].to_i) # 出力処理 printf("%sの階乗は%dです。\n", $*[0], rslt)
ピラミッド
#!/usr/bin/ruby =begin 正の整数nが与えられたときに、高さnのピラミッドを出力するプログラムを作ってください。 =end ## 出力処理 def printf_pyramid(length_max, length_now) if length_now > length_max return end #ピラミッド部分 pyramid = Array.new((length_now * 2 - 1), '*') #出力 printf("%*s%s\n", (length_max - length_now), "", pyramid) printf_pyramid(length_max, (length_now + 1)) end ## main # 引数チェック unless $*.length == 1 puts "usage: ./pyramid.rb integer number" exit 0 end # 出力処理 printf_pyramid($*[0].to_i, 1)
星座判定
#!/usr/bin/ruby =begin 入力された誕生日に対応する星座の名前(英語表記)を出力して終了するプログラムを作成してください。 =end ## 星座クラス class Zodiac def initialize(name_jp, name_eng, date_begin, date_end) @name_jp = name_jp @name_eng = name_eng @date_begin = date_begin @date_end = date_end end def get_name_jp return @name_jp end def get_name_eng return @name_eng end def is_MyZodiac(date) if date < @date_begin.to_i return false elsif @date_end.to_i < date return false end return true end end ## main # 引数チェック unless $*.length == 1 puts "usage: ./zodiac MMDD" exit 1 end unless $*[0].length == 4 puts "usage: ./zodiac MMDD" exit 1 end # 星座情報初期化 # 山羊座は年をまたぐので二つに分ける。 zodiac_info = Array.new(14, 0) zodiac_info[0] = Zodiac.new("おひつじ座", "Aries" , "0321", "0419") zodiac_info[1] = Zodiac.new("おうし座", "Taurus" , "0420", "0520") zodiac_info[2] = Zodiac.new("ふたご座", "Gemini" , "0521", "0621") zodiac_info[3] = Zodiac.new("かに座", "Cancer" , "0622", "0722") zodiac_info[4] = Zodiac.new("しし座", "Leo" , "0723", "0822") zodiac_info[5] = Zodiac.new("おとめ座", "Virgo" , "0823", "0922") zodiac_info[6] = Zodiac.new("てんびん座", "Libra" , "0923", "1023") zodiac_info[7] = Zodiac.new("さそり座", "Scorpius" , "1024", "1121") zodiac_info[8] = Zodiac.new("いて座", "Sagittarius" , "1122", "1221") zodiac_info[9] = Zodiac.new("やぎ座", "Capricornus" , "1222", "1231") zodiac_info[10] = Zodiac.new("やぎ座", "Capricornus" , "0101", "0119") zodiac_info[11] = Zodiac.new("みずがめ座", "Aquarius" , "0120", "0218") zodiac_info[12] = Zodiac.new("うお座", "Pisces" , "0219", "0320") zodiac_info[13] = Zodiac.new("星座なし", "no Zodiac" , "0000", "9999") # 星座情報取得 for zodiac_info_now in zodiac_info if zodiac_info_now.is_MyZodiac($*[0].to_i) == true break end end # 出力 printf("%s's zodiac is %s.\n", $*[0], zodiac_info_now.get_name_eng)
触った感じ
bashとC++あたりを混ぜて使い勝手のいいところを合わせた感じ。
知識として知らない所ももちろんあったけど概ねネットで検索したら分かるレベル。
まぁ組んだ問題レベルが問題レベルってのもあるけどね。
うーん、Ruby面白いかも。
*1:とはいえ公開してる以上不備や改善点は大歓迎です。