すのものの「いろいろ」(その175)

回文>「殻入れ甍」(からいれいらか)

サイゼリヤでムール貝などのはいったメニューを頼むと、 殻入れとして皿を持ってきてくれる。それを見て。

2008-01-02 (3) 00:30:42 +0900

回文>「数理ユリウス」(すうりゆりうす)

本文ナシ

2008-01-02 (3) 00:28:49 +0900

ローマ字逆読み>Iriso(入曽)と osiri(お尻)

「入曾」とも書く(かも)。

2008-01-02 (3) 00:25:18 +0900

回文>「爺、戦士は新生児?」(じいせんしはしんせいじ)

「G」を「ジイ」としてよいなら「G戦士は新生児」も可。

2008-01-02 (3) 00:24:04 +0900

ΑΒΓ文体>「まτλρ」(また恨むだろう)

こうなってくると判じ物だ。

2008-01-02 (3) 00:21:03 +0900

ΑΒΓ文体>「γン」(ガンマン)

本文ナシ

2008-01-02 (3) 00:20:16 +0900

ΑΒΓ文体>「δび」(出るたび)

本文ナシ

2008-01-02 (3) 00:19:43 +0900

ΑΒΓ文体>「プロトタε」(プロトタイプ試論)

本文ナシ

2008-01-02 (3) 00:18:52 +0900

ローマ字回文ご両家名>Ôtuma-Mutô(大妻武藤)ご両家

本文ナシ

2008-01-02 (3) 00:17:03 +0900

ローマ字回文>Arabika ka, Sakakibara(アラビカか、榊原)

「Ara, bika ka? Sakakibara」(あら、美化か? 榊原)も可。

2008-01-02 (3) 00:14:36 +0900

ローマ字回文>Akizuki, ikuzi ka(秋月、育児か)

本文ナシ

2008-01-02 (3) 00:13:21 +0900

「源田郁子」って速く言うと「現代っ子」みたいに聞こえるな

「いくこ」が「いっこ」になって。

2008-01-02 (3) 00:11:56 +0900

「今週のハイライト」をつい最近までタバコの銘柄の話だと思っていた

先日、Wikipedia で「横山ノック」について調べた際、 初めて、タバコの銘柄の話をしているんじゃなかったんだと知った次第。

2008-01-02 (3) 00:08:43 +0900

鶴来麻衣さんっていると「剣の舞」みたいだな

本文ナシ

2008-01-02 (3) 00:06:43 +0900

サイゼリヤのウェイトレスが空いたグラスビールのグラスを下げない理由

無料の水や、ドリンクバーのグラスと同じなので区別できないためでは?

2008-01-02 (3) 00:04:54 +0900

「はなれこ島」とか「りくのこ島」って(架空の)名前、ないかな

「離れ小島」「陸の孤島」と同音。

2008-01-02 (3) 00:03:19 +0900

「こざっぱり」と「おおざっぱ」って直接の関係はないよな

「ざっぱ」が共通しているけど。

2008-01-02 (3) 00:02:21 +0900

ジークフリート>間違ってグラーネに接吻、目覚めさせていたら?

確かに「Das ist kein Mann!」だわな。 人間女性を知らないのでブリュンヒルデの愛馬にキスしてしまった、というオチ。

2007-12-31 (1) 01:55:56 +0900

ラインの乙女って、ジークフリートを倒したハーゲンを殺せるほど強いんだ

さらにさかのぼると、 巨人ファゾルトを倒したファフナーが大蛇になっていたのを倒した英雄ジークフリートを倒したハーゲンを殺したのである。 一本の矢は折れるが三本の矢は……という話を思い出す人もいるかも。 (実際は二人で殺す。)

2007-12-31 (1) 01:50:26 +0900

ニーベルングの指環>一晩ごとに、死ぬ人物の数が増えてゆくようなのだが

「ラインの黄金」で死ぬのはファゾルト一人。 「ワルキューレ」ではジークムントとフンディングの二人。 「神々のたそがれ」ではジークフリート、グンター、ブリュンヒルデ、 ハーゲンの四人。 で、前項に書いたように、 もしも「ジークフリート」でエルダも死んでいるのなら、 ファフナー、ミーメと合わせて三人となり、 毎晩一人ずつ増えてゆくことになる。

前史(作品と作品の間)も数えるなら、 「ジークフリート」の前史でジークリンデが死ぬ。 代わりにこれを数えるか? 彼らの母である人間女性も 「ワルキューレ」の前で死んでいるが、 前作「ラインの黄金」に登場しないからこれはカウントしない。

2007-12-31 (1) 01:47:09 +0900

ジークフリート第3幕>ヴォータンがエルダを「永遠の眠り」につかせるのは

永遠の眠りといえば普通は死を意味する。 ヴォータンは、「ワルキューレ」第2幕でフンディングに対して行なったように、 ことばだけで人を殺すことができる。 だから、ここもエルダを殺しているのだ、 と解釈することはできないだろうか。

たぶん無理。だって、 「神々のたそがれ」序幕でノルンたちがエルダの元へ降りて行こう、 と言いながら消えるから。

2007-12-31 (1) 01:44:06 +0900

長方形の面積を、「縦×横」と「横×縦」の一方だけを正解とする小学校

Phinloda 氏の「裏の裏」で、 どこかの小学校では長方形の面積を 「縦×横」だか「横×縦」だかのどちらかで計算するよう教えていて、 他方で計算するとバツだ、という話を読んだ。 まず、この話が本当かどうか調べるのが先決だが、 伝聞の伝聞なのでそれはできないとして置いておいて、 アマノジャクな私としては、 この先生の指摘がもっともだと思える状況を探してみた。

「一人に3枚ずつ紙を配るとすると、4人に配るには何枚いりますか」 という問題は、小学校では「3×4=12」と計算するよう求められる。 「4×3=12」はバツである。 それは、3枚が4つあると考えるからである。 分配法則がなりたつから逆にかけても答えは同じになるが、 正しく考えたかどうかを見るため、順序を問題にするのである。

これと似た状況はないだろうか、と考えてみて、 この先生は、「長方形の辺が紙の辺と平行になるように書き直して、 それから『縦×横』で計算しなさい」と教えているのでは、 と考えてみた。 どっちが縦でどっちが横かは、見方の問題である。 しかし、見方を決めれば一意に決まる。 だから、どう見たかを示した上で、約束通りに計算しよう、 という考え方には一理あると思う。 (“半理”ぐらいのような気もするが。)

Phinloda 氏がこの「縦×横 vs 横×縦」を笑い飛ばすために考えられた例は 「縦、横、高さがこれこれの直方体の表面積を計算せよ」だった。 これはうまい。 隣り合った三つの面のそれぞれについて、 どちらが縦でどちらが横かを一貫して決めることは(おそらく)不可能だから。 しかし、もしも私が上に書いたように指導する教師なら、 展開図を紙に書かせて、その紙の上での「縦」と「横」に従って計算させると思う。

さて、私が、「どこが縦でどこが横か」をよく考えさせたいと思う理由は、 余分な、まぎらわしい情報が付け加わっている問題の場合である。

          8          3
  +---------------$-----+
  |                     |
  |                     | 4
6 |       *             |
  |                     $
  |                     |
  $                     |
  |             *       | 6
4 |                     |
  |                     |
  +-----$---------------+
     3          8
この図の、四つの「$」が線分で結ばれ、 斜めの長方形が書かれていると想像していただきたい。 この長方形の長いほうの辺は「*」も通る。 書かれている数字は長さであり、 長方形の二辺の長さはピタゴラスの定理により 5 と 10 になる。 それも問題に書かれていると仮定する。 よくわかっている児童は、5 と 10 が縦と横であり、 どっちがどっちでもいいとすぐにわかるだろう。 しかし、そうでない児童は、ほかの数に惑わされないとも限らない。 それを防ぐには、この図とは別に
  +-------------------+
  |                   |
 5|                   |
  |                   |
  |                   |
  +-------------------+
           10
という図を書かせて、それを元に計算するようにさせればよい。

付) 本項の図は、半角文字の縦横比が 2:1 なら、 正確な長さ・角度で表示されるはずである。 特に一つめの図が、きちんと書けたのはうれしかった。 ついでに小型版も。

      8    3
  +-------$--+
  |          | 4
6 |          $
  $          | 6
4 |          |
  +--$-------+
    3    8

2007-12-31 (1) 01:18:06 +0900

Tコードのほうが目が疲れないのかな?

きのうの土曜日は、家でレシートの整理をしていた。 Tコードが使える PC-9801VX で打ち込んでいたのだが、 思っていたほど目が疲れなかった。Tコードのせいか。

ほかにも、外が明るい時間帯から作業していたとか、 部屋の電灯が切れているのでスタンドだけをつけていたがそれを高い位置に置いていたとか、 気温が高めだったとか、いろいろ考えられるが。

2007-12-30 (0) 02:07:16 +0900

「シミュレーション」が「シュミ〜」と言い誤られやすい二つの理由

一つは「ミュ」が外来語以外には現れない音だから。 (「おおまみゅうだ」という姓はあるそうだが。)

もう一つは「趣味」という語があるのでそれに引きずられやすいこと。

2007-12-30 (0) 01:54:34 +0900

ニュルンベルクのマイスター「ジンガー」はドイツ語風に発音されること多し

「ジ」が「ズィ」のように発音され、「ガ」が鼻濁音化する。 (外来語として発音するなら鼻濁音化しないのが原則。)

ただし、 手元のドイツ語の辞書には -singer の -ng- の発音は載っていなかった。 singen と Sänger が“鼻濁音”なので、たぶんそうだろう。 (ついでに知ったが、英語の finger は“鼻濁音”でないのに対し、 ドイツ語の Finger は“鼻濁音”になる。)

2007-12-30 (0) 01:49:34 +0900

「おつりにも消費税がかかる」って言い張ってるやついないかな?

100 円のおつりをもらう際に 「消費税がかかるから 105 円だ」 と言い張るやつ。

2007-12-29 (6) 15:03:06 +0900

升さんちに嫁いだ理香さんが縁起をかついで「まあたりか」と改名する可能性

「する」を忌む人だったので、「ますりか」を「まあたりか」と言い換えたのである。

2007-12-28 (5) 19:24:51 +0900

きょうの補筆箇所

2007-12-27 (4) 02:15:11 +0900

1819 で「いいバイク」という語呂合わせの店があるのだが、「位牌・苦」に

……思えてしまう。

2007-12-27 (4) 01:59:04 +0900

「発覚した」のかと思ったら「はっ。隠した」だったりして。

意味なし。

2007-12-27 (4) 01:58:08 +0900

駢文数列を添え字が負の項にまで延長する

0110|1001|1001|0110|... が駢文数列であるが、 《“駢文数列(べんぶんすうれつ)”》 に書いたように、 この第 n 項は「n を二進表示した際の 1 の数 mod 2」とも思えるのだった。 この数列は、同じパターンを三度くりかえさない。 実は、より強く、 《駢文数列>三度めのくりかえしを始めることすらない》 に書いたように、 同じパターンを三度くりかえし始めることがない、のであった。 つまり、101 101 1 のような部分も含まないのである。 この性質を、以下では簡単に「三度くりかえさない」と呼ぼう。

この数列は右へはどこまでも延びてゆく。 では、三度くりかえさずに左へ延ばすことは可能だろうか?

駢文数列の左に 0 をつけた 0|0110|1001|1001|0110|... も 1 をつけた 1|0110|1001|1001|0110|... も、三度くりかえさないように見える。

00|0110|1001|1001|0110|... は 0 を三度くりかえすのでダメ。 10|0110|1001|1001|0110|... はよさそうに見える。 01|0110|1001|1001|0110|... もよさそう。 11|0110|1001|1001|0110|... は 110 110 1 と三度くりかえすからダメ。

010|0110|1001|1001|0110|... は 010011 010011 0 でダメ。 110|0110|1001|1001|0110|... はよさそう。 001|0110|1001|1001|0110|... もよさそう。 101|0110|1001|1001|0110|... は 10 10 1 でダメ。

ここまで見てくると、次の仮説を思いつく。 「駢文数列の左に鏡を立ててそれに写したように延ばしたもの (a-n = an-1 として負の添え字 -n にも延長したもの) およびその延長部分の 0 と 1 とを反転したもの (a-n = 1 - an-1 として負の添え字 -n にも延長したもの) は三度くりかえさず、 それ以外の延ばし方をすると三度くりかえしが生じる」。 後半の真偽についてはわからないが、前半は証明できる。

証明: 三度のくりかえしが起こるのは、添え字が有限の範囲でである。 よって、十分大きな自然数 2N に対し -2N < n < 2N の範囲で、としてよい。 この範囲でのみ、上の数列を考えると、 前者はビット数が N より十分大きな偶数である(C言語でいうところの) int 型で 1 であるビットの数を mod 2 で数えたもの、となる。 ただし、負の数 -n については「二の補数」表現を採用したものとする。 後者はこれの「偶数」を「奇数」でおきかえたもの。 1 であるビットの数 mod 2 は unsigned int 型だと思って数えても同じことであるから、 もしも延長した駢文数列で三度のくりかえしが起これば、 それは延長する前の駢文数列でも起こっている。矛盾。 [Q.E.D.]

付) このようにして負のほうへ有限項だけ延長した駢文数列は、 元の駢文数列の添字をずらしたものではない。 もしもそうなら、駢文数列が周期を持ってしまうから。

2007-12-27 (4) 01:44:17 +0900

日本のクリスマスって、日付が固定された全国一斉の忘年会なんじゃないか?

……とふと思った。

Phinloda 氏が「裏の裏」に、 どうして日本ではあんなにクリスマスイブを祝うのか、 という趣旨のことを書いておられたので、 考えてそこにも書いたこと。

忘年会は、本来は年の暮れにやるものだが、 「年末は忙しいから」などと理由をつけて、 だんだんと開かれる時期が早まっている。 しかし、クリスマスは日付が固定されているので先にやってしまうことができない。 そのためみんな一斉にクリスマスイブを祝う。 つまり、あれは日付が固定された全国一斉の忘年会である。 実は、みんな、同じ日に忘年会をやりたいという気持ちも持っている。 そうやってかろうじて真の年末に残った忘年会がクリスマスイブである。

こんな仮説はどうかな?

2007-12-27 (4) 01:31:00 +0900

やまぶどうのバッグを売っている東京のお店を発見!

Google で「やまぶどう バッグ」を検索したらトップに出てきた 「和装工芸 かごや Online Shop」。 阿佐ヶ谷に店舗があるそうだ。行ってみようかな?

商品の写真を見ていると、節(ふし)がサルの顔に見えるのも!?

たくさん見ているうちに、 「僕は『みだれ編み』じゃなくて『極太編み』が好きなんだ」と気がついた。

やまぶどうのシステム手帳もあったが、思っていたのとはちょっと感じが違った。

2007-12-27 (4) 01:28:35 +0900

ポーカーの役をコンピュータに判定させる --- ジョーカーなし・ありの場合

昔、パソコンの習い始めに人から“雑誌に出ていた”と教わったことだが、 ジョーカーを含まない 52 枚のカードで行なうポーカーでは、 ワンペア、ツーペア、スリーカード、フルハウス、フォーカードの判定は、 五枚のうち同じランクのペアが何組あるかを数えればいい。 順に 1 組、2 組、3 組、4 組、6 組となる。 これは記憶にあったので、そのほかの役の判定法は自分で考えてみた。 上のペアが 0 組であって、隣あったランクのペアが 4 組あれば、 それはストレートである。 ただし、エースは 1 と 14 のそれぞれとみなし、二度、ペアを数える必要がある。 フラッシュは、もちろん、すべてが同じスートかどうかを調べればよい。 そして、これら三種の組み合わせですべての役を判定できる。

ジョーカーを含む場合、 ジョーカーを除いた四枚に上と似た判定法を用いてからジョーカーを加え、 上の役に上がるかどうか判定するか、 あるいは、 「スペードの 2, ハートの 3, クラブの 5, ダイヤモンドの 6 にジョーカーだから、 ジョーカーをスペードの 4 とみなせばストレートで……」 などと細かく考えてゆくのかと(しばらくの間)思っていた。 同じカードを二枚持つことは許されないので、 その点も考えるとめんどうなことになりそうである。

しかし、その必要はなかった。 「ジョーカーが(ジョーカー以外の)52 枚のそれぞれだと思って、 上の方法で役を判定し、それらのうちの最高の役とみなせばよい」のである。 もしも、たとえば、スペードとハートの 2 が含まれていたとしよう。 ジョーカーをクラブまたはダイヤモンドの 2 と思ってスリーカードとみなす、 というのが人間の判定法であるが、それ以外のどのカードと思っても、 必ずスリーカード以下となる。 スペードやハートの 2 と思ってもスリーカードであるのだから。 この、“ジョーカーは手札に含まれているほかのカードだと思ってもよい” というのがミソである。

そのほかの役の場合もこれでいいことは、よく考えて確認しなければならない。 ファイブカードは、この判定法では、冒頭に述べた、同じランクのカードのペアが 10 組できた場合として判定される。 (ファイブカードにおいては、 ジョーカーは必ずすでに手元にあるカードと同じランクのカードとみなされる。 そうでないとファイブカードにならないから。)

2007-12-27 (4) 01:18:29 +0900

読み返してみたら、最後のカッコ内の「同じランクのカードとみなされる」 の意味がわからない。 「すでに手元にあるカードのどれかと同じカードとみなされる」 というつもりで書いたのだろうか?

2009-05-27 (3) 00:42:13 +0900

NHKフランス語会話>十二月 19 日(水曜日)放送分

前半については 《NHKフランス語会話>六月 20 日(水曜日)放送分》 も参照。

文法事項の説明をされている先生はとってもうれしそうで、 きらきら輝いている。 変なお芝居はやめて、“先生”に徹してほしいものだ。

後半の映画コーナーで、「殺人犯でななく」という誤植あり。 それと、たぶん「フェミニスト」が「フェミスト」になっていた。

2007-12-26 (3) 21:32:52 +0900

0 と 1 の有限列が与えられたとき、駢文数列の一部かどうかを判定する方法

与えられた有限列の長さが 1 の場合は 0, 1 のどちらかであり、 長さが 2 の場合は 00, 01, 10, 11 のどれかである。 これらは駢文数列の中に現れる。 長さが 3, 4 の場合、 《三度めのくりかえしを始めることのない数列は駢文数列内に現れるか?》 に書いたように、三度めのくりかえしを始めることのないものは現れる。

長さが 5 以上の場合。 駢文数列は、定義により、第 2k 項と第 2k+1 項を足すと 1 になる。 第 2k+1 項と第 2k+2 項は足して 1 になるとは限らない。 よって、与えられた有限列の第 2k 項と第 2k+1 項を足すとすべて 1 になるか、 第 2k+1 項と第 2k+2 項を足すとすべて 1 になるかをチェックして、 どちらも 1 にならなければ、それは駢文数列からのものではない。 両方がすべて 1 になれば、0 と 1 を交互に並べたものだから、 長さが 5 以上であれば、それは三度めのくりかえしの始まりまでを含んでいるので、 駢文数列からのものではない。 片方のみがすべて 1 になった場合、 第 2k 項と第 2k+1 項を足して 1 になるなら第 2k 項のみを、 第 2k+1 項と第 2k+2 項を足して 1 になるなら第 2k+1 項のみを取り出した部分列について、 同じことを行なう。

これをくりかえしてゆくことで判定できる。

……と思ったが、駢文数列の先頭から適当な項数だけ書き出し、 その中から検索すればいいのだった。 与えられた有限列 S の項数を n とするとき、 n 以上の最小の 2 ベキを 2k とする。 駢文数列の最初の 2k 項を A, 次の 2k 項を B とすると、 駢文数列は A と B とを適切な順に並べたものである。 よって、もしも S が駢文数列に含まれるなら、 それは AA, AB, BA, BB のどれかに含まれる。 先頭から書いてゆけば ABBABAAB だから、 先頭から 7*2k 項までには現れるわけだ。

2007-12-24 (1) 00:01:34 +0900

シスの復讐>駐機場から脱出するオビ=ワンはグリーバスの死体を見ている?

クローン兵が裏切り、ウータパウから脱出するシーン。 コクピットが閉まる間、オビ=ワンがこちらを見ているのは、 グリーバスの死体を見ているのだろうか?

2007-12-23 (0) 23:20:10 +0900

シスの復讐>いくつかのシーンではマペットのヨーダを出してほしかった気も

本文ナシ

2007-12-23 (0) 23:04:05 +0900

某チャペルのクリスマス礼拝に出たら「新改訳新約聖書」をもらってしまった

思わず「私の新約聖書のコレクションがまた増える」と喜んだりはしなかった。 (←元ネタは「シスの復讐」で 「私のライトセーバーのコレクションがまた増える」 と喜ぶグリーバス将軍。)

奥付によると 1970 年発行。 実家に帰れば、 中学生のころ近くの教会へ一回だけ行った際にもらったのがあると思う。

2007-12-23 (0) 22:52:03 +0900

ここから先はいまからアップロードする。

2008-01-02 (3) 02:02:37 +0900

「被弾=打たれる」というイメージなのか? ホームランも銃弾も

本来は銃で打たれて銃弾を受けることを被弾というのだろうが、 投手がホームランを打たれることもそういうことがある。

2007-12-23 (0) 00:12:53 +0900

回文>「湿気で決死」(しっけでけっし)

本文ナシ

2007-12-23 (0) 00:10:52 +0900

回文>「失敬、決死」(しっけいけっし)

意味はよくわからない。

2007-12-23 (0) 00:10:19 +0900

ローマ字回文>Azemoto, Otomeza(「畔元、乙女座」)

畔元さんは乙女座、と。

2007-12-23 (0) 00:04:39 +0900

ローマ字回文ご両家名>Otomaru-Kuramoto ご両家(乙丸・倉本ご両家)

本文ナシ

2007-12-23 (0) 00:03:29 +0900

ローマ字回文ご両家名>Akasi-Saka ご両家(明石・坂ご両家)

本文ナシ

2007-12-23 (0) 00:00:59 +0900

「の家」を意味する「んち」は「ん」で終わる語の次では「ち」

「ヒロシの家」なら「ヒロシんち」だが、 「ケンちゃんの家」は「ケンちゃんち」となる。 だから、 「サチコンチ」と聞いただけでは「サチコの家」なのか「サチコンの家」 なのかわからない。(サチコンはサチコの愛称。)

ただし、「ケンの家」の場合は「ケンんち」となるような気がする。

ん十年間、こんなことに気づいていなかった。

2007-12-22 (6) 23:57:15 +0900

駢文数列を途中から読んだものが与えられたとき、どこから読んだかわかる?

相手が、非負の整数 k を隠して、 駢文数列の第 k 項からを読み上げ始めたとする。 どうしたら、k の値がわかるであろうか?

“駢文数列(べんぶんすうれつ)”》 に書いたようにこの数列の第 n 項は 「n を二進で表わしたときの 1 の数を 2 で割った余り」 だから、第 0 項から第 111 項までと第 11000 項から第 11111 項とは同じになる。 (十進なら第 0 項から第 7 項までと第 24 項から第 31 項まで。)

こういう現象が起きるので、最初の有限項を見るだけでは k の値はわからないのだ。

又。

0110100110010110100101100110100110010110011010010110100110010110
10110100101100110100110010110011010010110100110010110
をマッチさせるとしよう。 まず 1 文字めを、なるべく手前でマッチさせる。
0110100110010110100101100110100110010110011010010110100110010110
 10110100101100110100110010110011010010110100110010110
2 文字めが合わないのでさらにずらす。
0110100110010110100101100110100110010110011010010110100110010110
  10110100101100110100110010110011010010110100110010110
4 文字めが合わないのでさらにずらす。
0110100110010110100101100110100110010110011010010110100110010110
           10110100101100110100110010110011010010110100110010110
これで OK(に見えるのは有限項しか書いてないから)。

2007-12-22 (6) 23:35:24 +0900

テキストファイルに色(グラデーション)をつけて html ファイルにしたい

いきなりプログラムを示します。いわゆる日本語は非対応。 定数 A と B の値は適当です。

#include <stdio.h>

#define A 28
#define B 5

void colorprint(char c, int n);

main() {
    int c,lin, col;

    puts("<html><body bgcolor=\"black\">");
    puts("<pre>");
    for (lin = 1;    ; lin++) {
        for (col = 1;    ; col++) {
            if ((c = getchar()) == EOF) {
                return 0;
            }
            if (c == '\n') {
                putchar('\n'); break;
            }
            colorprint(c, (A*lin + B*col) % (255*6));
        }
    }
}


/* 0 <= n <= 255*6 */
void colorprint(char c, int n) {
    if (n <= 255) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 255, n, 0, c);
    } else if (n <= 255*2) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 255*2-n, 255, 0, c);
    } else if (n <= 255*3) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 0, 255, n-255*2, c);
    } else if (n <= 255*4) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 0, 255*4-n, 255, c);
    } else if (n <= 255*5) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", n-255*4, 0, 255, c);
    } else {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 255, 0, 255*6-n, c);
    }
}

このプログラムでこのソース自身を処理してみたもの。

#include <stdio.h>

#define A 28
#define B 5

void colorprint(char c, int n);

main() {
    int c,lin, col;

    puts("<html><body bgcolor=\"black\">");
    puts("<pre>");
    for (lin = 1;    ; lin++) {
        for (col = 1;    ; col++) {
            if ((c = getchar()) == EOF) {
                return 0;
            }
            if (c == '\n') {
                putchar('\n'); break;
            }
            colorprint(c, (A*lin + B*col) % (255*6));
        }
    }
}


/* 0 <= n <= 255*6 */
void colorprint(char c, int n) {
    if (n <= 255) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 255, n, 0, c);
    } else if (n <= 255*2) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 255*2-n, 255, 0, c);
    } else if (n <= 255*3) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 0, 255, n-255*2, c);
    } else if (n <= 255*4) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 0, 255*4-n, 255, c);
    } else if (n <= 255*5) {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", n-255*4, 0, 255, c);
    } else {
        printf("<font color=\"#%02x%02x%02x\">%c</font>", 255, 0, 255*6-n, c);
    }
}

2007-12-22 (6) 23:06:03 +0900


すのもの Sunomono