> $in = 'fuckthemall aeouy yeah'; $letters = array('a','e','i','j','o','u','y');
> foreach (str_word_count($in, 1) as $word) $letters = array_intersect($letters, str_split(count_chars($word,
> 3), 1));
> Не знаю, кому как, а мне по читабельности этот код гораздо проще
> для понимания, чем примеры на Ruby и Python. В основном за
> счет простых и понятных названий функций и ключевых слов.Мне эти слова не очень знакомы. В отличие от слов 'for', 'in', 'all' и 'if', которые я хорошо знаю года с 1987. И только из них состоит выражение на python.
Там есть и другие python-примеры:
reduce(lambda x,y:set(x)&set(y),words)&set(('a','e','i','o','u','y'))
words = 'fuckthemall aeouy yeah'.split()
result = reduce(set.intersection, words, set('aeiouy'))
words = 'fuckthemall aeouy yeah'.split(' ')
print filter(lambda c: all(c in word for word in words), 'aeiouy')
Указанный в начале темы вариант мне нравится именно тем, что можно и в голове прокрутить этот код, и понять, что он делает, и объяснить его младоразработчикам и девушкам, чтобы им было понятно, как работает (оно состоит из очень простых для анализа вещей: простое лучше сложного):
print [c for c in 'aeiouy']
['a', 'e', 'i', 'o', 'u', 'y']
понятно, что тут перебираются буквы, а if ... ] - выводятся только буквы, когда соблюдается условие. дальше всё просто и понятно (возможно, для ещё большей наглядности, в исходном примере c in word следовало бы взять в скобки):
print [word for word in words]
['fuckthemall', 'aeouy', 'yeah']
print [('o' in word) for word in words]
[False, True, False]
print [('a' in word) for word in words]
[True, True, True]
и, соответственно, all возвращает True, если всё есть True, и False, если не всё.
В зале есть младодевочки, которые не поняли, как это работает, после этой краткой лекции? Поднимите руки.