4
0

More than 3 years have passed since last update.

C10K 問題を解決する Ruby のワンライナー

Posted at

C10K 問題とは

i18n と L10N は,それぞれ internationalization と localization の略称だ。
internationalization は綴りが長いので,「i」と「n」の間に 18 文字あるというところから「i18n」という表記が生み出された。L10N も同様。
なお,「i18n」が小文字で「L10N」が大文字なのはタイプミスではない。
参考:国際化と地域化 - Wikipedia

では,「c」で始まり「k」で終わり,間に 10 文字ある英単語としてどんなものがあるだろうか。
これが C10K 問題である1

コード

まず,英単語が大量に集められたファイルがあるとよいのだが,幸い,Linux や macOS にはそういうファイルが存在する。
/usr/share/dict というディレクトリー内にたいていそういうファイルがあるので覗いてみてほしい。
私の macOS では /usr/share/dict/words が英単語リストだった。
1 行に 1 単語。これがただひたすら並んでいるだけのファイルだ。数えたら全部で 23 万語以上あった。

ここから正規表現で抜き出せばいい。Ruby なら 1 行で書ける。

puts IO.foreach("/usr/share/dict/words").grep(/^c.{10}k$/i)

IO.foreach にファイルパスを与えると,行とごとにブロックを評価するが,ブロックを与えない場合は Enumerator を返す。
それを Enumerable#grep でフィルタリングしてやるだけ。
grep に正規表現を与えると,マッチした文字列だけからなる配列ができる。

結果は以下のとおり。

concertstuck
countercheck
counterprick
counterstock
Czechoslovak

な,なんじゃこれは?
Czechoslovak は名詞で「チェコスロバキア人」,形容詞で「チェコスロバキア(人・語)の」だが,あとの単語は見たこともないものばかり。macOS 付属の『ウィズダム英和辞典』にも載っていない。

concertstuck はどうもドイツ語の Konzertstück と関係ありそうだ。
Konzertstück は音楽用語で「小協奏曲」などと訳されたり,外来語として「コンツェルトシュテュック」と呼ばれたりするようだが,音楽に疎いのでよく分からん。

残りの 3 語はすべて counter- が接頭辞になった複合語だ。

ネットで調べてもいまひとつよく分からないけど,「countercheck」は「対抗手段」とか「ダブルチェック」(二重に点検すること)というような意味があるっぽい。
「counterstock」はチケットなどの半券を指すぽい。
「counterprick」はなんだろうな?


  1. この記事はジョーク記事です。本当の C10K 問題はまったく違うものです。ごめんなさい。 

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0