挑戦:
特定のテキストで最も一般的に使用される単語の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
)。必要に応じて(正式に仕様を変更するのは遅すぎます)、1文字の「単語」をすべて削除することもできます(これにより、無視リストも短くなる可能性があります)。
与えられたものを解析しtext
(コマンドライン引数で指定されたファイルまたはパイプで読み込まれたファイルを読み取り、presume us-ascii
)word frequency chart
、次の特性を持つを構築します。
- 最も頻度の高い22の単語(頻度の降順)のグラフを表示します(以下の例も参照)。
- バー
width
は、単語の出現回数(頻度)を(比例的に)表します。スペースを1つ追加して、単語を印刷します。 - これらのバー(およびスペース-ワード-スペース)が常にフィットすることを確認してください:
bar
+[space]
+word
+[space]
は常に<=80
文字でなければなりません(可能な異なるバーとワードの長さを考慮に入れてください:例:2番目に最も一般的なワードはそれよりずっと長い可能性があります最初の頻度はそれほど変わらない)。これらの制約内でバーの幅を最大化し、バーを適切にスケーリングします(バーが表す頻度に従って)。
例:
例のテキストはここにあります(ルイス・キャロルによる不思議の国のアリスの冒険)。
この特定のテキストは、次のチャートをもたらします:
_________________________________________________________________________ | _________________________________________________________________________ | 彼女 | _______________________________________________________________ | 君は | ____________________________________________________________ | 前記 | ____________________________________________________ | アリス | ______________________________________________ | だった | __________________________________________ | それ | ___________________________________ | なので | _______________________________ | 彼女 | ____________________________ | と | ____________________________ | で | ___________________________ | s | ___________________________ | t | _________________________ | オン | _________________________ | すべて | ______________________ | この | ______________________ | ために | ______________________ | 持っていました | _____________________ | だが | ____________________ | なる | ____________________ | ない | ___________________ | 彼ら | __________________ | そう
参考までに:これらは、上記のチャートが基づいている頻度です:
[( '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)、( ' しかし、 '、175)、(' be '、167)、(' not '、166)、(' they '、155)、(' so '、152)]
2番目の例(完全な仕様を実装したかどうかを確認するため):you
リンクされたAlice in Wonderlandファイル内の
すべてのを次のように置き換えますsuperlongstringstring
:
________________________________________________________________ | ________________________________________________________________ | 彼女 | _______________________________________________________ | スーパーロングストリング | _____________________________________________________ | 前記 | ______________________________________________ | アリス | ________________________________________ | だった | _____________________________________ | それ | ______________________________ | なので | ___________________________ | 彼女 | _________________________ | と | _________________________ | で | ________________________ | s | ________________________ | t | ______________________ | オン | _____________________ | すべて | ___________________ | この | ___________________ | ために | ___________________ | 持っていました | __________________ | だが | _________________ | なる | _________________ | ない | ________________ | 彼ら | ________________ | そう
勝者:
最短のソリューション(言語ごとの文字数による)。楽しんで!
編集:これまでの結果をまとめた表(2012-02-15)(ユーザーNas Banovが最初に追加):
言語リラックス厳格 ========= ======= ====== GolfScript 130143 Perl 185 Windows PowerShell 148 199 Mathematica 199 ルビー185205 Unixツールチェーン194228 Python 183 243 Clojure 282 Scala 311 ハスケル333 Awk 336 R 298 Javascript 304 354 グルーヴィー321 Matlab 404 C#422 Smalltalk 386 PHP 450 F#452 TSQL 483 507
数値は、特定の言語での最短のソリューションの長さを表しています。「厳密」とは、仕様を完全に実装するソリューションを指し|____|
ます(バーを描画し、最初のバーを線で閉じ、____
頻度の高い長い単語の可能性を考慮します)。「リラックス」とは、いくつかの自由が解決まで短縮されたという意味です。
500文字未満のソリューションのみが含まれます。言語のリストは、「厳密な」ソリューションの長さによってソートされます。'Unix Toolchain'は、従来の* nixシェルに加えてツールの組み合わせ(grep、tr、sort、uniq、head、perl、awkなど)を使用するさまざまなソリューションを示すために使用されます。
s
とt
表現されます。