開発環境
- OS X Mavericks - Apple (OS)
- Dart Editor (開発環境)
- Dartium | Dart/ Structured web apps (ブラウザ, Dart VM 用 (Chromium with the Dart VM))
- Safari (ブラウザ, JavaScript 用)
- Dart (プログラミング言語)
初めてのコンピュータサイエンス(Jennifer Campbell、Paul Gries、Jason Montojo、Greg Wilson(著)長尾 高弘(翻訳))の11章(探索とソート)、11.7(練習問題)、11-9.をDartで解いてみる。
その他参考書籍
- What is Dart? [Kindle版] (O'Reilly Media) Kathy Walrath Seth Ladd (著) このブログでの感想
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 コメント:
コメントを投稿