2013年12月7日土曜日

開発環境

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

その他参考書籍

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

コード

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';
    List<num> bubbleSort1(Iterable<num> sequence){
      List<num> result = sequence.toList();
      pre.text += '$result\n';
      int b;
      int i = 0;
      for (b = sequence.length - 1; b > 0; b -= 1){
        pre.text += '$b\n';
        while (i < b){
          if (result[i] > result[i + 1]){
            num temp = result[i];
            result[i] = result[i + 1];
            result[i + 1] = temp;
          }
          i += 1;
          pre.text += '$result\n';
        }
        i = 0;
      }
      return result;
    }
    List<num> sequence = [6,5,4,3,7,1,2];
    bubbleSort1(sequence);
    pre.text += 'test\n';
    for (List l in [['空のリスト', [], []], ['要素が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]]]){
      pre.text += test(l[1], l[2]) ? 'true\n' : '${l[0]}\n';
    }
  });
  clear.onClick.listen((MouseEvent event) => pre.text = '');
}

List<num> bubbleSort(Iterable<num> sequence){
  List<num> result = sequence.toList();
  int b;
  int i = 0;
  for (b = sequence.length - 1; b > 0; b -= 1){
    while (i < b){
      if (result[i] > result[i + 1]){
        num temp = result[i];
        result[i] = result[i + 1];
        result[i + 1] = temp;
      }
      i += 1;
    }
    i = 0;
  }
  return result;
}
bool test(List<num> original, List<num> expected){
  int i;
  List<num> result = bubbleSort(original);
  int max = result.length;
  if (max != expected.length){
    return false;
  }
  for(i = 0; i < max; i += 1){
    if (result[i] != expected[i]){
      return false;
    }
  }
  return true;
}














						

0 コメント:

コメントを投稿