チャレンジ:
特定のテキストで最も一般的に使用される単語の ASCII チャートを作成します。
ルール:
a-z
andA-Z
(英字)のみを単語の一部として受け入れます。- 大文字と小文字の区別は無視します (ここでは
She
==she
です)。 - 次の単語は無視してください (非常に恣意的です、私は知っています):
the, and, of, to, a, i, it, in, or, is
明確化: 考慮
don't
: これは、範囲内の 2 つの異なる「単語」と見なされます: (a-z
および)。A-Z
don
t
必要に応じて (仕様を正式に変更するには遅すぎます)、すべての 1 文字の「単語」を削除することを選択できます (これにより、無視リストも短縮される可能性があります)。
指定されたファイルを解析しtext
(コマンド ライン引数で指定されたファイルまたはパイプで入力されたファイルを読み取ります。推定) 、次の特性を備えたus-ascii
a を構築します。word frequency chart
- 最も一般的な 22 の単語 (頻度の降順) のグラフを表示します (以下の例も参照)。
- バー
width
は、単語の出現回数 (頻度) を (比例的に) 表します。スペースを 1 つ追加して単語を出力します。 - これらのバー (およびスペースと単語とスペース) が常に収まるようにしてください:
bar
+[space]
+word
+[space]
は常に <=80
文字でなければなりません (バーと単語の長さが異なる可能性があることを確認してください:頻度はそれほど変わらないものの、最初のもの)。これらの制約内でバーの幅を最大化し、バーを適切にスケーリングします (バーが表す頻度に従って)。
例:
例のテキストはここにあります(不思議の国のアリスの冒険、ルイス・キャロル著)。
この特定のテキストは、次のチャートを生成します。
_________________________________________________________________________ |__________________________________________________________________________| 彼女 |____________________________________________________________________________________________| あなた |__________________________________________________________________________| 言った |____________________________________________________| アリス |____________________________________________________________| だった |__________________________________________| それ |___________________________________| なので |__________________| 彼女 |____________________________| と |____________________________| で |______________| 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 によって最初に追加されました):
言葉遣い 緩い 厳格 ========= ======= ====== ゴルフスクリプト 130 143 パール 185 Windows PowerShell 148 199 マテマティカ 199 ルビー 185 205 Unix ツールチェーン 194 228 パイソン 183 243 クロージュア 282 スカラ 311 ハスケル 333 オーク 336 R 298 JavaScript 304 354 グルービー 321 マトラブ 404 C# 422 スモールトーク 386 PHP 450 F# 452 TSQL 483 507
数字は、特定の言語での最短のソリューションの長さを表します。「厳密」とは、仕様を完全に実装するソリューションを指します (バーを描画|____|
し、上部の最初のバーを____
線で閉じ、頻度の高い長い単語の可能性を考慮するなど)。「リラックスした」とは、解決策を短縮するためにいくつかの自由が取られたことを意味します。
500 文字より短いソリューションのみが含まれます。言語のリストは、「厳密な」ソリューションの長さによってソートされます。「Unix ツールチェーン」は、従来の *nix シェルに加えてツールの組み合わせ (grep、tr、sort、uniq、head、perl、awk など)を使用するさまざまなソリューションを表すために使用されます。