/** Print the shortest and the longest whitespace-separated words in the input.
To try:
$ g++ -std=c++11 print-minmax-words.cpp && </usr/share/dict/words ./a.out
A: 1, electroencephalograph's: 23
>>> import sys
>>> spaces = [c for c in map(chr, range(sys.maxunicode+1)) if c.isspace()]
>>> len(spaces)
29
>>> spaces[:10]
['\t', '\n', '\x0b', '\x0c', '\r', '\x1c', '\x1d', '\x1e', '\x1f', ' ']
>>> from itertools import count
>>> with open('input', 'w', encoding='utf-8') as file:
... file.write("".join("%02d%c" % (i, s) for i, s in enumerate(spaces)))
...
87
>>> t = open('input', encoding='utf-8').read()
>>> len(t)
87
>>> len(t.encode())
123
>>> max(t.split(), key=len)
'00'
>>> min(t.split(), key=len)
'00'
>>> min(t.encode().split(), key=len)
b'00'
>>> max(map(len, t.encode().split()))
93
*/
#include <algorithm> // minmax
#include <iostream>
#include <iterator> // istream_iterator
#include <string>
bool size_less(const std::string& a, const std::string& b) {
return a.size() < b.size(); // compare word sizes in bytes
}
int main() {
using namespace std;
// skipws is set, the currently imbued locale is used to determine
// whether a charT is whitespace
//NOTE: Windows, OS X, Linux demonstrate different behavior
// - Windows may corrupt even a byte stream (ANSI conversions)
// - OS X might limit available locales (relevant for wide streams)
if (cin.getloc().name() != "C") {
cerr << "warning: what whitespace is depends on locale: '"
<< cin.getloc().name() << "'\n";
}
istream_iterator<string> words(cin), eof;
auto p = minmax_element(words, eof, size_less);
if (p.first == eof && p.second == eof) {
cerr << "there are no words in the input\n";
return 1;
}
else if(!(cout << *p.first << ": " << (*p.first).size() << ", "
<< *p.second << ": " << (*p.second).size() << endl))
return 2; // I/O error
return cin.eof() ? 0 : 2;
}
LyoqIFByaW50IHRoZSBzaG9ydGVzdCBhbmQgdGhlIGxvbmdlc3Qgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgd29yZHMgaW4gdGhlIGlucHV0LgoKICAgIFRvIHRyeToKCiAgICAgICQgZysrIC1zdGQ9YysrMTEgcHJpbnQtbWlubWF4LXdvcmRzLmNwcCAmJiA8L3Vzci9zaGFyZS9kaWN0L3dvcmRzIC4vYS5vdXQKICAgICAgQTogMSwgZWxlY3Ryb2VuY2VwaGFsb2dyYXBoJ3M6IDIzCgogID4+PiBpbXBvcnQgc3lzCiAgPj4+IHNwYWNlcyA9IFtjIGZvciBjIGluIG1hcChjaHIsIHJhbmdlKHN5cy5tYXh1bmljb2RlKzEpKSBpZiBjLmlzc3BhY2UoKV0KICA+Pj4gbGVuKHNwYWNlcykKICAyOQogID4+PiBzcGFjZXNbOjEwXQogIFsnXHQnLCAnXG4nLCAnXHgwYicsICdceDBjJywgJ1xyJywgJ1x4MWMnLCAnXHgxZCcsICdceDFlJywgJ1x4MWYnLCAnICddCiAgPj4+IGZyb20gaXRlcnRvb2xzIGltcG9ydCBjb3VudAogID4+PiB3aXRoIG9wZW4oJ2lucHV0JywgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmaWxlOgogIC4uLiAgICAgZmlsZS53cml0ZSgiIi5qb2luKCIlMDJkJWMiICUgKGksIHMpIGZvciBpLCBzIGluIGVudW1lcmF0ZShzcGFjZXMpKSkKICAuLi4KICA4NwogID4+PiB0ID0gb3BlbignaW5wdXQnLCBlbmNvZGluZz0ndXRmLTgnKS5yZWFkKCkKICA+Pj4gbGVuKHQpCiAgODcKICA+Pj4gbGVuKHQuZW5jb2RlKCkpCiAgMTIzCiAgPj4+IG1heCh0LnNwbGl0KCksIGtleT1sZW4pCiAgJzAwJwogID4+PiBtaW4odC5zcGxpdCgpLCBrZXk9bGVuKQogICcwMCcKICA+Pj4gbWluKHQuZW5jb2RlKCkuc3BsaXQoKSwga2V5PWxlbikKICBiJzAwJwogID4+PiBtYXgobWFwKGxlbiwgdC5lbmNvZGUoKS5zcGxpdCgpKSkKICA5MwoKKi8KI2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gbWlubWF4CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPiAvLyBpc3RyZWFtX2l0ZXJhdG9yCiNpbmNsdWRlIDxzdHJpbmc+Cgpib29sIHNpemVfbGVzcyhjb25zdCBzdGQ6OnN0cmluZyYgYSwgY29uc3Qgc3RkOjpzdHJpbmcmIGIpIHsKICAgIHJldHVybiBhLnNpemUoKSA8IGIuc2l6ZSgpOyAvLyBjb21wYXJlIHdvcmQgc2l6ZXMgaW4gYnl0ZXMKfQoKaW50IG1haW4oKSB7CiAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAvLyBza2lwd3MgaXMgc2V0LCB0aGUgY3VycmVudGx5IGltYnVlZCBsb2NhbGUgaXMgdXNlZCB0byBkZXRlcm1pbmUKICAvLyB3aGV0aGVyIGEgY2hhclQgaXMgd2hpdGVzcGFjZQogIC8vTk9URTogV2luZG93cywgT1MgWCwgTGludXggZGVtb25zdHJhdGUgZGlmZmVyZW50IGJlaGF2aW9yCiAgLy8gICAgICAtIFdpbmRvd3MgbWF5IGNvcnJ1cHQgZXZlbiBhIGJ5dGUgc3RyZWFtIChBTlNJIGNvbnZlcnNpb25zKQogIC8vICAgICAgLSBPUyBYIG1pZ2h0IGxpbWl0IGF2YWlsYWJsZSBsb2NhbGVzIChyZWxldmFudCBmb3Igd2lkZSBzdHJlYW1zKQogIGlmIChjaW4uZ2V0bG9jKCkubmFtZSgpICE9ICJDIikgewogICAgICBjZXJyIDw8ICJ3YXJuaW5nOiB3aGF0IHdoaXRlc3BhY2UgaXMgZGVwZW5kcyBvbiBsb2NhbGU6ICciCiAgICAgICAgICAgPDwgY2luLmdldGxvYygpLm5hbWUoKSA8PCAiJ1xuIjsKICB9CiAgaXN0cmVhbV9pdGVyYXRvcjxzdHJpbmc+IHdvcmRzKGNpbiksIGVvZjsKICBhdXRvIHAgPSBtaW5tYXhfZWxlbWVudCh3b3JkcywgZW9mLCBzaXplX2xlc3MpOwogIGlmIChwLmZpcnN0ID09IGVvZiAmJiBwLnNlY29uZCA9PSBlb2YpIHsKICAgIGNlcnIgPDwgInRoZXJlIGFyZSBubyB3b3JkcyBpbiB0aGUgaW5wdXRcbiI7CiAgICByZXR1cm4gMTsKICB9CiAgZWxzZSBpZighKGNvdXQgPDwgKnAuZmlyc3QgPDwgIjogIiA8PCAoKnAuZmlyc3QpLnNpemUoKSA8PCAiLCAiCiAgICAgICAgICAgICAgICAgPDwgKnAuc2Vjb25kIDw8ICI6ICIgPDwgKCpwLnNlY29uZCkuc2l6ZSgpIDw8IGVuZGwpKQogICAgICByZXR1cm4gMjsgLy8gSS9PIGVycm9yCiAgcmV0dXJuIGNpbi5lb2YoKSA/IDAgOiAyOwp9Cg==