fc2ブログ

無精で短気で傲慢なプログラマ

UNIX や web やプログラムの技術的なことを中心に。

英単語トリビアと look コマンド

話のネタになるかもしれないトリビア50個
> * "Almost"は、全ての文字がアルファベット順になっている単語の中で最も長い単語。
>  A→l→m→o→s→t。他にどんな単語があるのでしょうか。
>
> * "Rhythm"は、母音の無い最も長い単語。
>  これも他の単語が気になります。

英単語トリビアが気になったので調べてみる。

UNIX には look というコマンドがある (1979年リリースの V7 から存在する)。引数で与えた文字列から始まる英単語を表示するだけのものだ。
% look fuga
fugacious
fugaciously
fugaciousness
fugacity
fugal
fugally

テキストファイル (FreeBSD だと /usr/share/dict/words) に英単語が羅列してあって、そこから grep しているようなものである。テキストファイルは最初からソートしてあり、二分探索で探しているので grep よりは速い。でもいまどきのマシンにおいては、ほとんど誤差程度の違いしかない。

> * "Rhythm"は、母音の無い最も長い単語。

まずこれ。若干の敗北感を感じつつも awk を使う。
% grep -iv '[aeiou]' /usr/share/dict/words | awk '{print length($1),$1}' | sort -nr | head -15
8 symphysy
7 nymphly
7 gypsyry
7 gypsyfy
6 tyddyn
6 thymyl
6 syzygy
6 sylphy
6 styryl
6 strych
6 spryly
6 rhythm
6 pyrryl
6 phytyl
6 myrrhy

「Rhythm」より長い英単語はあるし、「Rhythm」と同じ長さの英単語も結構あるので「最も長い」はちょっと言いすぎのようだ。

look で最長であった「symphysy」でググった結果、ほんとの母音なしの最長英単語は「TWYNDYLLYNG」のようだ。15世紀ごろの英古語で意味は「twin」だとか。ここまでくると、どの範囲を英単語と認めるかという話になりそうだ。

 - A Collection of Word Oddities and Trivia, Page 6
 - Longest word without vowels

> * "Almost"は、全ての文字がアルファベット順になっている単語の中で最も長い単語。

今度は perl を使う。コマンドラインでこんなことができるんですよ! ということを書きたかったはずなのに。堕落だ。
#!/usr/local/bin/perl
open(IN, '/usr/share/dict/words') || die "$!";
wordloop:
while (<IN>){
  chomp;
  my @chars = unpack('C*', lc($_));
  $max = 0;
  foreach my $c (@chars){
    if ( $max < $c ){
      $max = $c;
    } else {
      next wordloop;
    }
  }
  printf("%d %s\n", length($_), $_);
}
実行結果:
% perl hoge.pl | sort -rn | head -15
7 egilops
7 Adelops
6 ghosty
6 dimpsy
6 deinos
6 dehort
6 dehors
6 chintz
6 biopsy
6 bijoux
6 beknow
6 behint
6 befist
6 almost
6 agnosy

トップは 7文字の「egilops」と「Adelops」。almost は 6文字で、2番手グループ。上記の結果は同じ文字が連続している英単語は除外していたが、それも含むと以下のようになる。
% perl hoge.pl | sort -rn | head -10
7 egilops
7 billowy
7 begorry
7 beefily
7 alloquy
7 Adelops
6 knotty
6 knoppy
6 glossy
6 ghosty

A Collection of Word Oddities and Trivia, Page 1 によれば、全ての文字がアルファベット順になっている最長英単語は 8文字の「aegilops」。意味は look の最長である「egilops」と同じで、意味は an ulcer in a part of the eye (目の潰瘍?)。

とはいえ、
 * "TWYNDYLLYNG"は、母音の無い最も長い単語。
 * "aegilops"は、全ての文字がアルファベット順になっている単語の中で最も長い単語。
ではあんまり「へぇ」とは思わないので、まぁいいか。

look のデータは更新されてるのかな? と思って FreeBSD の cvsweb を見てみたら、ちまちまと手が入っているようだ。例えば Australia, Denmark, karaoke, karate などの英単語が追加されている。最新版 (2003年更新) は 235,882 単語が登録されており、4.4 BSD Lite 版 (1994年) と比べると 2632 単語 追加・修正・削除されていた。

ちなみに V7 版 は 24,001単語だった。

スポンサーサイト



PageTop