# [Issue 4705] Redesign of std.algorithm.max()/min() + mins()/maxs()

`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: -------
```