ika #5618(2008/02/01 07:41 GMT) [ D ] Rating0/0=0.00
コンパイラはDMD2.009を使用しました。 ソートコードのコンパイルは、最適化を有効にした場合、n=6までしか出来ませんでした。 * ソースコード生成 gensort 7 00:00.062 gensort 8 00:00.515 gensort 9 00:05.312 gensort 10 00:57.671 * コンパイル sort5 00:00.125 sort6 00:00.156 sort7 00:01.328 sort8 00:54.937 // 9,10はメモリ不足でコンパイルできず
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
import std.stream, std.string, std.conv void gensort(uint n, Stream o) { enum string INDENT = "\t"; void _gensort(string[] checked, uint index, string[] vars, uint indent) { if(!vars.length) { o.writefln("%swriteln([%s]);", INDENT.repeat(indent), checked.join(", ")); return; } o.writefln("%sif(%s < %s)", INDENT.repeat(indent), checked[index], vars[0]); if(index + 1 < checked.length) { _gensort(checked, index + 1, vars, indent + 1); } else { _gensort(checked ~ vars[0], 0, vars[1..$], indent + 1); } o.writefln("%selse", INDENT.repeat(indent)); _gensort(checked[0..index] ~ vars[0] ~ checked[index..$], 0, vars[1..$], indent + 1); } string[] _variables(uint n) { auto vars = new string[n]; vars[0] = "a"; foreach(i; 1 .. n) { vars[i] = vars[i - 1].succ(); } return vars; } o.writefln("import std.stdio, std.string, std.conv;"); o.writefln("void main() {"); auto vars = _variables(n); foreach(var; vars) { o.writefln("%sint %s = to!(int)(strip(readln()));", INDENT, var); } _gensort([vars[0]], 0, vars[1..$], 1); o.writefln("}"); } void main(string[] args) { if(args.length>=2) { auto o = new BufferedFile("sort" ~ args[1] ~ ".d", FileMode.OutNew); scope(exit) o.close(); gensort(to!(int)(args[1]), o); } }
Rating0/0=0.00-0+
[ reply ]
ika
#5618()
[
D
]
Rating0/0=0.00
Rating0/0=0.00-0+
[ reply ]