Rubyでプログラミング勉強中(参照)のちょっと息抜きに書いてみた。もうちょっとスッキリ書けないかなと思いつつ、現時点ではこれが精一杯。
today = Time.new thisYear = today.year thisMonth = today.month month = [1, 3, 5, 6, 7, 9, 10, 12, 13, 14, 16] age_1 = 17 age_2 = 24 dogYear_1 = 7 dogYear = 4 puts 'あなたのワンちゃんは西暦何年生まれですか?' birthYear = gets.chomp.to_i while birthYear > thisYear puts '今年以前の西暦年を入力してください。' birthYear = gets.chomp.to_i end puts 'あなたのワンちゃんは何月生まれですか?' birthMonth = gets.chomp.to_i if (thisYear == birthYear and thisMonth == birthMonth) puts 'あなたのワンちゃんは生まれたばかりですね。おめでとう!' exit end age_y = thisYear - birthYear age_m = thisMonth - birthMonth if age_m < 0 age_m = thisMonth + (12 - birthMonth) age_y = age_y - 1 end if age_y == 0 puts 'あなたのワンちゃんは、月齢' + age_m.to_s + 'ヶ月です。' age = month[age_m - 1] elsif (age_y == 1 and age_m == 0) puts 'あなたのワンちゃんは、' + age_y.to_s + '歳です。' age = age_1 elsif (age_y == 1 and age_m > 0) puts 'あなたのワンちゃんは、' + age_y.to_s + '歳と' + age_m.to_s + 'ヶ月です。' age = age_1 + (dogYear_1 * age_m / 12) elsif (age_y >= 2 and age_m == 0) puts 'あなたのワンちゃんは、' + age_y.to_s + '歳です。' age = age_2 + ((age_y - 2) * dogYear) elsif (age_y > 1 and age_m > 0) puts 'あなたのワンちゃんは、' + age_y.to_s + '歳と' + age_m.to_s + 'ヶ月です。' age = (age_2 + ((age_y - 2) * dogYear)) + (dogYear * age_m / 12) end puts '人間でいうと、概ね' + age.to_s + '歳です。'
メモ
- 換算表参照 ⇒ 犬&猫 年齢換算表 e-Petfood
- 月齢1ヶ月→1歳までは規則性がないみたい。
- 1歳→2歳は7歳、2歳以降は4歳/年。
- 誕生年(西暦)と誕生月を入力してもらい、取得する現在の年月と比較して、年齢(月齢)を計算・表示。
- 月齢1ヶ月→1歳までの換算は規則性がないので、換算年齢を配列(month[])に入れこむ。
- きっかりn歳にならない場合(例: 1歳9ヶ月とか)もあるので、大体で換算年齢を計算。