Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iterator>
- #include <iostream>
- #include <range/v3/all.hpp>
- #include <vector>
- #include <algorithm>
- #include <string>
- auto group() noexcept {
- return ranges::view::group_by([](auto&& lhs, auto&& rhs) {
- return std::isalpha(lhs) == std::isalpha(rhs);
- })
- | ranges::view::transform([](auto&& list) {
- return ranges::accumulate(list, std::string{});
- });
- }
- auto remove_separators() noexcept {
- return ranges::view::filter([](auto&& str) {
- return std::all_of(str.begin(), str.end(), [](auto&& c) {
- return std::isalpha(c);
- });
- });
- }
- auto restrict() noexcept {
- return ranges::view::filter([](auto&& str) {
- return str.length() >= 5 && std::all_of(str.begin(), str.end(), [](auto&& c) {
- return std::isalpha(c);
- });
- });
- }
- auto lowercase() noexcept {
- return ranges::view::transform([](auto str) {
- std::transform(str.begin(), str.end(), str.begin(), [](auto&& c) {
- return std::tolower(c);
- });
- return str;
- });
- }
- auto map() noexcept {
- return ranges::view::group_by([](auto&& lhs, auto&& rhs) {
- return lhs == rhs;
- })
- | ranges::view::transform([](auto&& list) {
- return std::pair(list | ranges::view::take(1), ranges::distance(list));
- });
- }
- int main(int argc, char* argv[]) noexcept {
- if (argc != 3) {
- std::cout << "Usage: ./" << argv[0] << " [file] [word-amount]n";
- return -1;
- }
- std::ifstream file{argv[1]};
- if (!file.is_open()) {
- std::cout << "Couldn't open file " << argv[1] << "!n";
- return -1;
- }
- auto amount = 0u;
- try {
- amount = std::stoi(argv[2]);
- }
- catch (const std::exception&) {
- std::cout << "Invalid number " << argv[2] << "!n";
- }
- std::vector<char> character_list;
- char character = '