Wyzwanie:
Utwórz wykres ASCII z najczęściej używanymi słowami w danym tekście.
Zasady:
- Akceptuj
a-z
iA-Z
(znaki alfabetu) tylko jako część słowa. - Zignoruj wielkość liter ( w naszym celu
She
==she
). - Zignoruj następujące słowa (dość arbitralne, wiem):
the, and, of, to, a, i, it, in, or, is
Wyjaśnienie: biorąc pod uwagę
don't
: byłoby to przyjęte jako 2 różne „słowa” w zakresacha-z
iA-Z
: (don
it
).Opcjonalnie (to zbyt późno, aby zostać formalnie zmianę specyfikacji teraz), który może zdecydować się odrzucać wszystkie single-literą „słowa” (może to potencjalnie powodują skrócenie listy ignorowanych zbyt).
Przetwórz dane text
(przeczytaj plik określony za pomocą argumentów wiersza poleceń lub potokiem; przypuszczam us-ascii
) i zbuduj nam plik word frequency chart
o następujących cechach:
- Wyświetl tabelę (zobacz również poniższy przykład) dla 22 najczęściej używanych słów (uporządkowanych według malejącej częstotliwości).
- Słupek
width
przedstawia liczbę wystąpień (częstotliwość) słowa (proporcjonalnie). Dodaj jedną spację i wydrukuj słowo. - Upewnij się, że te kreski (plus spacja-słowo-spacja) zawsze pasują :
bar
+[space]
+word
+[space]
powinno zawsze zawierać <=80
znaki (upewnij się, że uwzględniłeś możliwe różne długości kresek i słów: np .: drugie najczęściej używane słowo może być znacznie dłuższe niż pierwszy, choć nie różni się tak bardzo pod względem częstotliwości). Zmaksymalizuj szerokość słupków w ramach tych ograniczeń i odpowiednio skaluj słupki (zgodnie z reprezentowanymi przez nie częstotliwościami).
Przykład:
Tekst przykładu można znaleźć tutaj ( Alice's Adventures in Wonderland, autorstwa Lewisa Carrolla ).
Ten konkretny tekst dałby następujący wykres:
_________________________________________________________________________ | _________________________________________________________________________ | Ona | _______________________________________________________________ | ty | ____________________________________________________________ | powiedziany | ____________________________________________________ | alicja | ______________________________________________ | był | __________________________________________ | że | ___________________________________ | tak jak | _______________________________ | jej | ____________________________ | z | ____________________________ | w | ___________________________ | s | ___________________________ | t | _________________________ | na | _________________________ | wszystko | ______________________ | to | ______________________ | dla | ______________________ | miał | _____________________ | ale | ____________________ | być | ____________________ | nie | ___________________ | one | __________________ | więc
Dla twojej informacji: są to częstotliwości, na których zbudowany jest powyższy wykres:
[('she', 553), ('you', 481), ('said', 462), ('alice', 403), ('was', 358), ('that ', 330), (' as ', 274), (' ona ', 248), (' z ', 227), (' at ', 227), (' s ', 219), (' t ' , 218), ('on', 204), ('all', 200), ('this', 181), ('for', 179), ('had', 178), (' ale ', 175), (' być ', 167), (' nie ', 166), (' oni ', 155), (' tak ', 152)]
Drugi przykład (aby sprawdzić, czy zaimplementowano pełną specyfikację):
Zamień każde wystąpienie you
w połączonym pliku Alicji w Krainie Czarów nasuperlongstringstring
:
________________________________________________________________ | ________________________________________________________________ | Ona | _______________________________________________________ | superlongstringstring | _____________________________________________________ | powiedziany | ______________________________________________ | alicja | ________________________________________ | był | _____________________________________ | że | ______________________________ | tak jak | ___________________________ | jej | _________________________ | z | _________________________ | w | ________________________ | s | ________________________ | t | ______________________ | na | _____________________ | wszystko | ___________________ | to | ___________________ | dla | ___________________ | miał | __________________ | ale | _________________ | być | _________________ | nie | ________________ | one | ________________ | więc
Zwycięzca:
Najkrótsze rozwiązanie (według liczby znaków, na język). Baw się dobrze!
Edycja : Tabela podsumowująca dotychczasowe wyniki (2012-02-15) (pierwotnie dodana przez użytkownika Nas Banov):
Język Łagodny Surowy ========= ======= ====== Kaczmarek 130 143 Perl 185 Windows PowerShell 148199 Mathematica 199 Wiśniewska 185 205 Unix Toolchain 194 228 Python 183 243 Clojure 282 Scala 311 Haskell 333 Awk 336 R 298 Javascript 304 354 Kaczor 321 Matlab 404 C # 422 Wiśniewska 386 PHP 450 F # 452 TSQL 483 507
Liczby przedstawiają długość najkrótszego rozwiązania w określonym języku. „Ścisłe” odnosi się do rozwiązania, które w pełni realizuje specyfikację (rysuje |____|
słupki, zamyka pierwszą ____
kreskę na górze linią, uwzględnia możliwość tworzenia długich słów z dużą częstotliwością itp.). „Zrelaksowany” oznacza, że zdecydowano się na skrócenie pewnych swobód do rozwiązania.
Uwzględniane są tylko rozwiązania krótsze niż 500 znaków. Lista języków jest posortowana według długości rozwiązania „ścisłego”. „Unix Toolchain” oznacza różne rozwiązania, które używają tradycyjnej powłoki * nix oraz mieszanki narzędzi (takich jak grep, tr, sort, uniq, head, perl, awk).
s
i t
są reprezentowane.