Topological sort: Difference between revisions

Content added Content deleted
(Added Bracmat)
(Updated D entry)
Line 573: Line 573:
string[][] topoSort(TDependencies d) {
string[][] topoSort(TDependencies d) {
foreach (k, v; d)
foreach (k, v; d)
d[k] = array(filter!((string s){ return s != k; })
d[k] = array(filter!(s => s != k)(uniq(v.sort())));
(uniq(v.sort())));

foreach (s; uniq(sort(join(d.values))))
foreach (s; uniq(sort(join(d.values))))
if (s !in d)
if (s !in d)
Line 595: Line 593:
foreach (item, dep; d)
foreach (item, dep; d)
if (!canFind(ordered, item))
if (!canFind(ordered, item))
dd[item] = array(filter!
dd[item] = array(filter!(s => !canFind(ordered, s))
(
(dep));
(string s) { return !canFind(ordered, s); }
)(dep));
d = dd;
d = dd;
}
}
Line 610: Line 606:


void main() {
void main() {
auto data =
immutable data =
"des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee
"des_system_lib std synopsys std_cell_lib des_system_lib dw02 dw01 ramlib ieee
dw01 ieee dw01 dware gtech
dw01 ieee dw01 dware gtech
Line 639: Line 635:
writeln(subOrder);
writeln(subOrder);
}</lang>
}</lang>
{{out}}
Output:
<pre>#1 : [ieee, std, synopsys]
<pre>#1 : [ieee, std, synopsys]
#2 : [dware, gtech, ramlib, std_cell_lib]
#2 : [dware, gtech, ramlib, std_cell_lib]