2013年10月22日火曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の12章(新しいクラスのオブジェクト), 12.6(練習問題の続き)、バースデーヘルパーをDartで解いてみる。

その他参考書籍

バースデーヘルパー

コード

sample.dart

import 'dart:io' as io;

void main(){
  var birth_dates = {},
      filename = '../../birth_day_helper.txt',
      file = new io.File(filename),
      int_months = {'Jan': 1,
                    'Feb': 2,
                    'Mar': 3,
                    'Apr': 4,
                    'May': 5,
                    'Jun': 6,
                    'Jul': 7,
                    'Aug': 8,
                    'Sep': 9,
                    'Oct': 10,
                    'Nov': 11,
                    'Dec': 12};
  file.readAsLines().then((List<String> lines){
    for(var line in lines){
      var splited_line = line.split(','),
          name = splited_line[0],
          month_day = splited_line[1],
          year = int.parse(splited_line[2]),
          splited_day_month = month_day.trim().split(new RegExp(r'\s+')),
          month = int_months[splited_day_month[0].trim()],
          day = int.parse(splited_day_month[1].trim());
      birth_dates[name] = new DateTime(year, month, day);
    }
  }).then((e){
    var td = new DateTime.now(),
        td_year = td.year,
        td_month = td.month,
        td_day = td.day;
    while(true){
      var name = io.stdin.readLineSync();
      if(name.isEmpty){
        break;
      }
      if(birth_dates.containsKey(name)){
        var birth_date = birth_dates[name],
            birth_year = birth_date.year,
            birth_month = birth_date.month,
            birth_day = birth_date.day,
            age = td_year - birth_year;
        if (birth_month > td_month ||
            (birth_month == td_month && birth_day > td_day)){
          age -= 1;
        }
        print('誕生日: ${birth_year}年${birth_month}月${birth_day}日 年齢: ${age}歳');
      } else {
        print('${name}さんの誕生日は一覧にありません。');
      }
    }
  }).catchError((e){
    print(e);
  });
}

入出力結果

Christopher Pine
誕生日: 2000年10月21日 年齢: 13歳
Christopher Plummer
誕生日: 2000年10月22日 年齢: 13歳
Christopher Lloyd
誕生日: 2000年10月23日 年齢: 12歳
dart
dartさんの誕生日は一覧にありません。


0 コメント:

コメントを投稿