2013年12月21日土曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の12章(各種ツール)、12.7(練習問題)、12-17.をDartで解いてみる。

その他参考書籍

12.7(練習問題)、12-17.

コード

sample.dart

import 'dart:html';

void main() {
  InputElement run = querySelector('#run_dart');
  InputElement clear = querySelector('#clear');
  Element pre = querySelector('#pre0');
  run.onClick.listen((MouseEvent event){
    pre.text = '${window.navigator.userAgent}\n';
    pre.text += '$l1\n平均値: ${mean(l1)}\n$l2\n';
    try{
      mean(l2);
    }catch(e){
      pre.text += '$e\n';
    }
    pre.text += '$l3\n中央値: ${median(l3)}\n' +
        '$l4\n中央値: ${median(l4)}\n' +
        '$l5\n最頻値: ${mode(l5)}\n';
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

num mean(Iterable nums){
  num total = 0;
  for(var n in nums){
    if(n.runtimeType != double && n.runtimeType != int){
      throw '数値以外の要素が含まれている。';
    }
    total += n;
  }
  return total / nums.length;
}

num median(Iterable<num> nums){
  var l = nums.length;
  if(l == 0){
    return null;
  }
  List<num> new_nums = nums.toList();
  new_nums.sort((num a, num b) => a - b);
  int n = l ~/2;
  if(l % 2 == 0){
    return (new_nums[n - 1] + new_nums[n]) /  2;
  }
  return new_nums[n];
}

List<num> mode(Iterable nums){
  List<num> result = [];
  Map<int, num> n_c = {};
  for(var n in nums){
    n_c[n] = n_c.containsKey(n) ? n_c[n] + 1: 1;
  }
  var cs = n_c.values;
  int m = n_c.values.fold(cs.first,
      (int prev, int next) => prev < next ? next : prev);
  for(var n in n_c.keys){
    if (n_c[n] == m){
      result.add(n);
    }
  }
  return result;
}

var l1 = new List.generate(10, (int index) => index + 1);
var l2 = [1, 'dart', 2];
var l3 = [5, 1, 4, 2, 3];
var l4 = [5, 1, 4, 2, 3, 6];
var l5 = [0, 1, 0, 3, 2, 4, 1];















						

0 コメント:

コメントを投稿