How susceptible you are to dullness, and a little holywar
I accidentally heard a story from one colleague to another about the fact that everything is very cool and convenient in scripting languages. The narrator promoted perl as something very cool, simple, and straightforward. 
I could not resist and interrupted, saying that python will be more intelligible, and it provides no less opportunities.
Then I was asked how things are with regular expressions in python , and as a result we came to the following task:
There is a line, it is necessary to display all the words in it that occur N times.
The task, of course, is completely trivial, and writing a solution takes a matter of minutes, but this dumbass consumed everyone for at least a few hours. If you succumb to dumbasses, then welcome tackle
Here are some solutions:
test1.py writing 3 min. "War and peace" this decision did not overpower
test2.pl writing 30 min (for some reason, the person wove for a long time). working hours on “war and peace”: 0m0.282s
the working time of the first solution did not satisfy at all, so this was written:
test3.py writing 3 min. working hours on “war and peace”: 0m0.285s
test4.pl writing 30 min (again a very long time). working hours on “war and peace”: 0m0.221s
But alas, the result is incorrect
test5.hs writing 10 min. working hours on “war and peace”: 0m2.948s
A man built it to say “but I can also use Haskell,” but the result was not impressive
Well, if so, then in C ++ we also implement
test6.cpp writing 5 min. working hours on “war and peace”: 0m0.640s
I could not resist and interrupted, saying that python will be more intelligible, and it provides no less opportunities.
Then I was asked how things are with regular expressions in python , and as a result we came to the following task:
There is a line, it is necessary to display all the words in it that occur N times.
The task, of course, is completely trivial, and writing a solution takes a matter of minutes, but this dumbass consumed everyone for at least a few hours. If you succumb to dumbasses, then welcome tackle
Here are some solutions:
test1.py writing 3 min. "War and peace" this decision did not overpower
#!/usr/bin/env python
import re
n = 5
with open("./input_file.txt", "r") as f:
	s = f.read()
l = re.findall(r'\w+',s)
print repr([x for x in l if l.count(x) == n])
test2.pl writing 30 min (for some reason, the person wove for a long time). working hours on “war and peace”: 0m0.282s
#!/usr/bin/perl
open FH, ";
$n = 5;
%h = ();
$h{$1}++ while $str =~ /(\w+)/g;
print '['.(join ", ", grep {$h{$_} == 5} keys %h).']';
 the working time of the first solution did not satisfy at all, so this was written:
test3.py writing 3 min. working hours on “war and peace”: 0m0.285s
#!/usr/bin/env python
import re
n = 5
with open("./input_file.txt", "r") as f:
	s = f.read()
d={}
for x in re.findall(r'\w+',s):
	if x in d:
		d[x] += 1
	else:
		d[x] = 1
print repr([k for k,v in d.items() if v == n])
test4.pl writing 30 min (again a very long time). working hours on “war and peace”: 0m0.221s
But alas, the result is incorrect
#!/usr/bin/perl
open FH, "<./input_file.txt";
local $/;
$str = ;
$n = 5;
chomp($str);
foreach(split(/ /, $str)){$h{$_}++;}
my $res ="[";
foreach(keys(%h)) {if($h{$_} == $n){$res .= "$_, ";}}
$res .=  "]";
print $res;
 test5.hs writing 10 min. working hours on “war and peace”: 0m2.948s
A man built it to say “but I can also use Haskell,” but the result was not impressive
import Data.List
import Data.Char
main = interact                          -- IO
  $ unlines                              -- combine meta-data into string
  . map (\(n, w) -> if (n == 5) then show w else "")
  . sort                                 -- sort meta-data by occurances
  . map (\s -> (length s, head s))       -- transform to sublist meta-data
  . group                                -- break into sublists of unique words
  . sort                                 -- sort words
  . words                                -- break into words
  . map (\c ->                           -- simplify chars in input
    if isAlpha c
      then toLower c
      else ' ')
Well, if so, then in C ++ we also implement
test6.cpp writing 5 min. working hours on “war and peace”: 0m0.640s
#include 
#include 
#include 
#include 
#include 
#include 
std::multiset words;
void prepare() {    
    char *p = 0;
    int err = 1;
    while ( 1 == scanf("%as", &p)) {
        words.insert(p);
        free(p);
    }
    if (errno) {
        perror("scanf");
        abort();
    }
}
void output(int n) {
    std::multiset::iterator it(words.begin());
    std::string out;
    for(;it!=words.end(); it = words.upper_bound(*it))  {
        if ( words.count(*it) == n )
            out.append(" ," + *it);
    }
    if (out.find(" ,") == 0 )
        out.erase(0, 2);
    std::cout<<"["<        
Предлагайте свои решения в комментариях, если вы подвержены тупняку и способны сделать лучше за вменяемое время ;)
этот файл использовался как input_file.txt, это «Война и мир» из библиотеки Гутенберга