#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
int main()
{
using v_str = std::vector<std::string>;
auto print_v = [](const v_str &v)
{
std::copy(v.cbegin(), v.cend(), std::ostream_iterator<std::string>(std::cout, "\n"));
std::cout << "***************\n";
};
auto lessLength = [](const std::string &lhs, const std::string &rhs)
{
return lhs.length() < rhs.length();
};
std::uniform_int_distribution<char> charDist('a', 'z');
std::uniform_int_distribution<int> lengthDist(1, 15);
std::default_random_engine gen{ std::random_device()() };
std::function<char()> charGen = std::bind(charDist, gen);
std::function<int()> lengthGen = std::bind(lengthDist, gen);
const size_t numWords = 7;
v_str words(numWords);
std::generate(words.begin(), words.end(), [&charGen, &lengthGen]
{
std::string result;
std::generate_n(std::back_inserter(result), lengthGen(), charGen);
return result;
});
print_v(words);
words.erase(std::min_element(words.begin(), words.end(), lessLength));
print_v(words);
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8dmVjdG9yPgogCmludCBtYWluKCkKewogICAgdXNpbmcgdl9zdHIgPSBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz47CiAgICBhdXRvIHByaW50X3YgPSBbXShjb25zdCB2X3N0ciAmdikKICAgIHsKICAgICAgICBzdGQ6OmNvcHkodi5jYmVnaW4oKSwgdi5jZW5kKCksIHN0ZDo6b3N0cmVhbV9pdGVyYXRvcjxzdGQ6OnN0cmluZz4oc3RkOjpjb3V0LCAiXG4iKSk7CiAgICAgICAgc3RkOjpjb3V0IDw8ICIqKioqKioqKioqKioqKipcbiI7CiAgICB9OwogICAgYXV0byBsZXNzTGVuZ3RoID0gW10oY29uc3Qgc3RkOjpzdHJpbmcgJmxocywgY29uc3Qgc3RkOjpzdHJpbmcgJnJocykKICAgIHsKICAgICAgICByZXR1cm4gbGhzLmxlbmd0aCgpIDwgcmhzLmxlbmd0aCgpOwogICAgfTsKIAogICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248Y2hhcj4gY2hhckRpc3QoJ2EnLCAneicpOwogICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248aW50PiBsZW5ndGhEaXN0KDEsIDE1KTsKICAgIHN0ZDo6ZGVmYXVsdF9yYW5kb21fZW5naW5lIGdlbnsgc3RkOjpyYW5kb21fZGV2aWNlKCkoKSB9OwogICAgc3RkOjpmdW5jdGlvbjxjaGFyKCk+IGNoYXJHZW4gPSBzdGQ6OmJpbmQoY2hhckRpc3QsIGdlbik7CiAgICBzdGQ6OmZ1bmN0aW9uPGludCgpPiBsZW5ndGhHZW4gPSBzdGQ6OmJpbmQobGVuZ3RoRGlzdCwgZ2VuKTsKIAogICAgY29uc3Qgc2l6ZV90IG51bVdvcmRzID0gNzsKICAgIHZfc3RyIHdvcmRzKG51bVdvcmRzKTsKICAgIHN0ZDo6Z2VuZXJhdGUod29yZHMuYmVnaW4oKSwgd29yZHMuZW5kKCksIFsmY2hhckdlbiwgJmxlbmd0aEdlbl0KICAgIHsKICAgICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7CiAgICAgICAgc3RkOjpnZW5lcmF0ZV9uKHN0ZDo6YmFja19pbnNlcnRlcihyZXN1bHQpLCBsZW5ndGhHZW4oKSwgY2hhckdlbik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0pOwogCiAgICBwcmludF92KHdvcmRzKTsKICAgIHdvcmRzLmVyYXNlKHN0ZDo6bWluX2VsZW1lbnQod29yZHMuYmVnaW4oKSwgd29yZHMuZW5kKCksIGxlc3NMZW5ndGgpKTsKICAgIHByaW50X3Yod29yZHMpOwp9