http://d.puremagic.com/issues/show_bug.cgi?id=4705
--- Comment #6 from bearophile_h...@eml.cc 2011-02-13 05:51:55 PST --- Two more usage examples of the improved max. This program finds the longest common subsequence with a recursive algorithm: import std.stdio; T[] lcs(T)(T[] a, T[] b) { T[] longest(T)(T[] s, T[] t) { return s.length > t.length ? s : t; } if (!a.length || !b.length) return null; if (a[0] == b[0]) return a[0] ~ lcs(a[1..$], b[1..$]); return longest(lcs(a, b[1..$]), lcs(a[1..$], b)); } void main() { writeln(lcs("thisisatest", "testing123testing")); } With a key-mapping max() you are able to remove the inner function and simplify the code (untested): import std.stdio; T[] lcs(T)(T[] a, T[] b) { if (!a.length || !b.length) return null; if (a[0] == b[0]) return a[0] ~ lcs(a[1..$], b[1..$]); return max!q{a.length}([lcs(a, b[1..$]), lcs(a[1..$], b)]); } void main() { writeln(lcs("thisisatest", "testing123testing")); } -------------- This program shows the most common anagrams from a dictionary file of different words: import std.stdio, std.algorithm; void main() { string[][string] anags; foreach (w; File("unixdict.txt").byLine()) anags[w.sort.idup] ~= w.idup; int m = reduce!max(map!q{a.length}(anags.values)); writeln(filter!((wl){ return wl.length == m; })(anags.values)); } A key-mapping max() makes the code shorter and more readable (untested): import std.stdio, std.algorithm; void main() { string[][string] anags; foreach (w; File("unixdict.txt").byLine()) anags[w.sort.idup] ~= w.idup; int m = max!q{a.length}(anags.values); writeln(filter!((wl){ return wl.length == m; })(anags.values)); } maxs() simplifies the code even more (untested): import std.stdio, std.algorithm; void main() { string[][string] anags; foreach (w; File("unixdict.txt").byLine()) anags[w.sort.idup] ~= w.idup; writeln(maxs!q{a.length}(anags.values)); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------