Задача:
Создайте диаграмму ASCII наиболее часто используемых слов в данном тексте.
Правила:
- Принимать
a-zиa-z(буквенные символы) только как часть слова. - Игнорировать корпус (
She==Sheдля наших целей). - Игнорируйте следующие слова (довольно суровые, я знаю):
the, and, of, to, a, i, it, in, or, is -
Уточнение: учитывая
don't: это было бы принято как 2 разных слова в диапазонахa-zиa-z: (donиt). -
Необязательно (слишком поздно, чтобы формально изменить спецификации сейчас) может выбрать все однобуквенные слова (это может потенциально для сокращения списка игнорирования тоже).
Разберите заданный text (прочитайте файл, указанный с помощью аргументов командной строки или подключенный к сети, предположим us-ascii) и создайте нам word frequency chart со следующими характеристиками:
- Отобразите диаграмму (см. также пример ниже) для 22 наиболее распространенных слов (упорядоченных по нисходящей частоте).
- Строка
widthпредставляет количество вхождений (частоты) слова (пропорционально). Добавьте одно место и напечатайте слово. - Убедитесь, что эти полосы (плюс пространство пространства-слова) всегда соответствуют:
bar+[space]+word+[space]должны быть всегда <=80символов (убедитесь, что вы учитываете возможные разница между строками и длиной слова: например: второе наиболее распространенное слово может быть намного длиннее, чем первое, но не так сильно различающееся по частоте). Увеличьте ширину штриха в пределах этих ограничений и соответствующим образом нарисуйте полосы (в соответствии с представленными частотами).
Пример:
Текст примера можно найти здесь (Alice Adventures in Wonderland, Льюис Кэрролл).
В этом конкретном тексте будет приведена следующая диаграмма:
_________________________________________________________________________ |_________________________________________________________________________| she |_______________________________________________________________| you |____________________________________________________________| said |____________________________________________________| alice |______________________________________________| was |__________________________________________| that |___________________________________| as |_______________________________| her |____________________________| with |____________________________| at |___________________________| s |___________________________| t |_________________________| on |_________________________| all |______________________| this |______________________| for |______________________| had |_____________________| but |____________________| be |____________________| not |___________________| they |__________________| so
Для вашей информации: это частоты, на которых построена вышеприведенная диаграмма:
[('she', 553), ('you', 481), ('said', 462), ('alice', 403), ('was', 358), ('that
', 330), ('as', 274), ('her', 248), ('with', 227), ('at', 227), ('s', 219), ('t'
, 218), ('on', 204), ('all', 200), ('this', 181), ('for', 179), ('had', 178), ('
but', 175), ('be', 167), ('not', 166), ('they', 155), ('so', 152)]
Второй пример (чтобы проверить, была ли реализована полная спецификация):
Замените каждое событие you в связанном файле Alice in Wonderland с помощью superlongstringstring:
________________________________________________________________ |________________________________________________________________| she |_______________________________________________________| superlongstringstring |_____________________________________________________| said |______________________________________________| alice |________________________________________| was |_____________________________________| that |______________________________| as |___________________________| her |_________________________| with |_________________________| at |________________________| s |________________________| t |______________________| on |_____________________| all |___________________| this |___________________| for |___________________| had |__________________| but |_________________| be |_________________| not |________________| they |________________| so
Победитель:
Кратчайшее решение (по количеству символов, по языку). Получайте удовольствие!
Изменить: таблица, обобщающая результаты до сих пор (2012-02-15) (первоначально добавленный пользователем Нас Банов):
Language Relaxed Strict ========= ======= ====== GolfScript 130 143 Perl 185 Windows PowerShell 148 199 Mathematica 199 Ruby 185 205 Unix Toolchain 194 228 Python 183 243 Clojure 282 Scala 311 Haskell 333 Awk 336 R 298 Javascript 304 354 Groovy 321 Matlab 404 C# 422 Smalltalk 386 PHP 450 F# 452 TSQL 483 507
Цифры представляют длину кратчайшего решения на определенном языке. "Строгий" относится к решению, полностью реализующему спецификацию (рисует строки |____|, закрывает первый балл сверху линией ____, учитывает возможность длинных слов с высокой частотой и т.д.). "Relaxed" означает, что некоторые свободы были сокращены до решения.
В комплект включены только решения длиной менее 500 символов. Список языков сортируется по длине "строгого" решения. "Unix Toolchain" используется для обозначения различных решений, которые используют традиционную оболочку * nix плюс набор инструментов (например, grep, tr, sort, uniq, head, perl, awk).


