Задача:
Создайте диаграмму 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).