2013年10月14日月曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の10章(章全部で復習), 10.3(練習問題)、シャッフル(再帰)をDartで解いてみる。

その他参考書籍

シャッフル(再帰)

コード

sample.dart

import 'dart:math' as math;

List sort(List some_list){
  var unsorted_list = some_list.toList();
  var sorted_list = [];
  while(unsorted_list.length != 0){
    var min = unsorted_list.removeAt(0);
    var tmp = [];
    for(var x in unsorted_list){
      if(x.compareTo(min) < 0){
        tmp.add(min);
        min = x;
      } else {
        tmp.add(x);
      }
    }
    sorted_list.add(min);
    unsorted_list = tmp;
  }
  return sorted_list;
}

List shuffle(List some_list){
  return recursiveShuffle (some_list, []);
}

List recursiveShuffle(List unshuffled_list, List shuffled_list){
  var a = unshuffled_list.length;
  if(a == 0){
    return shuffled_list;
  }
  var random = new math.Random();
  var r = random.nextInt(a);
  shuffled_list.add(unshuffled_list[r]);
  var tmp = unshuffled_list.sublist(0, r);
  tmp.addAll(unshuffled_list.sublist(r + 1));
  return recursiveShuffle(tmp, shuffled_list);
}

void main(){
  var langs = ["ruby", "python", "dart", "haskell", "c", 
               "scheme", "lisp", "csharp", "cpp", "perl"];
  var sorted_langs = sort(langs);
  var shuffled_langs = shuffle(sorted_langs);
  print('ソート前:    ${langs}');
  print('ソート後:    ${sorted_langs}');
  print('シャッフル後: ${shuffled_langs}');
}

入出力結果

ソート前:    [ruby, python, dart, haskell, c, scheme, lisp, csharp, cpp, perl]
ソート後:    [c, cpp, csharp, dart, haskell, lisp, perl, python, ruby, scheme]
シャッフル後: [dart, c, lisp, cpp, haskell, ruby, csharp, perl, python, scheme]

0 コメント:

コメントを投稿