2013年12月11日水曜日

開発環境

初めてのコンピュータサイエンス(Jennifer CampbellPaul GriesJason MontojoGreg Wilson(著)長尾 高弘(翻訳))の11章(探索とソート)、11.7(練習問題)、11-9.をDartで解いてみる。

その他参考書籍

11.7(練習問題)、11-9.

コード

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';
    testList.forEach((List s){
      List a = s[1];
      List b = s[2];
      mergeSort(a);
      pre.text += cmpList(a, b) ? 'true' : s.first;
      pre.text += '\n';
    });
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

List merge(List s1, List s2){
  List new_s = [];
  int i1 = 0;
  int i2 = 0;
  
  while(true){
    if(i1 == s1.length){
      for(var x in s2.sublist(i2)){
        new_s.add(x);
      }
      break;
    }
    if (i2 == s2.length){
      for(var x in s1.sublist(i1)){
        new_s.add(x);
      }
      break;
    }
    if (s1[i1] <= s2[i2]){
      new_s.add(s1[i1]);
      i1 += 1;
    } else {
      new_s.add(s2[i2]);
      i2 += 1;
    }
  }
  return new_s;
}

void mergeSort(List s){
  List<List> workspace = [];
  int i;
  for(i = 0; i < s.length; i += 1){
    workspace.add([s[i]]);
  }
  i = 0;
  while(i < workspace.length - 1){
    var s1 = workspace[i];
    var s2 = workspace[i + 1];
    var new_s = merge(s1, s2);
    workspace.add(new_s);
    i += 2;
  }
  if (workspace.length != 0){
    s.replaceRange(0, s.length, workspace.last.sublist(0));
  }
}

bool cmpList(List s1, List s2){
  if(s1.length != s2.length){
    return false;
  }
  int i;
  for(i = 0; i < s1.length; i += 1){
    if(s1[i] != s2[i]){
      return false;
    }
  }
  return true;
}

List testList = [["空のリスト", [], []],
                 ["要素が1個のリスト", [1], [1]],
                 ["要素が2個でソート済のリスト", [1, 2], [1, 2]],
                 ["要素が2個で逆順になっているリスト", [2, 1], [1, 2]],
                 ["3個の等しい値によるリスト", [3, 3, 3], [3, 3, 3]],
                 ["異なる値が1つ混ざっているリスト", [3, 0, 3], [0, 3, 3]]];














						

0 コメント:

コメントを投稿