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

「ネガティブ」の「ガ」を鼻濁音で発音していることに気がついた

英単語 negative の発音がそうならないよう気をつけねば。

2003-07-21 (1) 16:33:25 +0900

指名打者の代打で出た選手がチェンジのあとすぐ守備につくことは可能?

可能だと思うが、その場合、 朝日新聞のスポーツ面の書き方では

[指]  だれそれ
 打左 だれそれ
のようになるのだろうか。

指名打者の交代のルールが気になる (1998-05-25 (1) 02:01:10 +0900)》に書いた 「納得がゆかないケース」というのはこれだったかもしれない。

2003-07-20 (0) 16:43:55 +0900

上のリンクはいまはった。それまでは a href タグをおいていなかった。

2006-05-23 (2) 21:04:07 +0900

タウンページ表紙と同じデザインのトートバッグを作ったら売れないかな……

もちろん、NTTの許可が必要だろうけど。

付) 《タウンページ表紙と同じデザインのTシャツを作ったら売れないかな……。 (2003-07-05 (6) 20:25:19 +0900)》と本文は全く同じ。 :-)

2003-07-20 (0) 16:35:43 +0900

上のリンクはいまはった。それまでは a href タグをおいていなかった。

2006-05-23 (2) 21:05:44 +0900

ハノイの塔>table タグで書いてみました(Cプログラムつき)

;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .
;
;
;
;
;
;
;
;
;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .
;
;
;
;
;
;
;
;
;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .

大きな table の中に三つの table がはいっています。 (ソースファイル上では、 外側の table のタグは大文字で、内側の table のタグは小文字で書いてあります。)

以下が種明かしです。 border を 0 から 1 にし、 灰色の部分の地と文字の色を変えました。 (棒の部分だけ文字がセミコロンなのはデバッグを容易にするためで、 深い意味はありません。)

;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .
;
;
;
;
;
;
;
;
;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .
;
;
;
;
;
;
;
;
;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .

円盤に縁があったほうが見やすいかも、 と思ったのでもう一つ作ってみました。 (上のよりも棒が円盤一枚分だけ長くなっていますが、 深い意味はありません。)

; ; ;
; ; ;
; ;
; ;
; ;
; ;
; ;
; ;
; ;
; ;
. . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; . . . . . . . . . . . . . . .

ただし、これは全体で一つの table なので、 これ以外の状態の図を書こうとすると行単位での cut & paste ではすみません。 計算がかなりめんどうになるでしょう。 ソースを吐き出すプログラムを書く必要がありそうです。

そう思って書いてみたのが次です。

/******************************************************************************

コマンドライン引数を(例えば)112210 とすると、円盤が[小さいほうから順に]1,
1, 2, 2, 1, 0 の棒にささっているハノイの塔の絵を html の table で出力します。

  覚え書きその1:このとき、
        a[0] ... -1, -1, -1, -1, -1, -1,  5
        a[1] ... -1, -1, -1, -1,  0,  1,  4
        a[2] ... -1, -1, -1, -1, -1,  2,  3
  となる。

  覚え書きその2:「表の出力」のところの「貯め」は、隣り合った
  <td colspan=" "></td> を合併するための細工である。

******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define START 1             /* 円盤の番号をいくつから始めるか */
#define DIST  6             /* 大きくすればするほど、棒と棒との間隔があく */

#define COLOR0 "ffcccc"     /* 偶数番目の円盤の色 */
#define COLOR1 "ccccff"     /* 奇数番目の円盤の色 */
#define BAR    "aaaaaa"     /* 棒の色 */
#define GROUND "aaaaaa"     /* 土台の色 */

int main(int argc, char* argv[]) {
    int i, j;
    int len;
    char* a[3];
    int p[3];               /* a[0], a[1], a[2] の“スタックポインタ” */

    if (argc == 1) {
        fprintf(stderr, "引数が必要です.\n"); return 1;
    }

    len = strlen(argv[1]);
    for (i = 0; i < 3; i++) {       /* メモリの確保 */
        if ((a[i] = malloc(len + 1)) == NULL) {
            fprintf(stderr, "メモリが足りません.\n");
            while (--i >= 0) {      /* この三行は */
                free(a[i]);         /* 要らないような */
            }                       /* 気がする */
            return 1;
        }
    }

    p[0] = p[1] = p[2] = len;
    for (j = len - 1; j >= 0; j--) {    /* 引数を解釈して配列を埋める */
        int c = argv[1][j] - '0';

        if (c == 0 || c == 1 || c == 2) {
            a[c][p[c]--] = j;
        } else {
            fprintf(stderr, "引数に不適切な文字があります.\n");
            return 1;
        }
    }
    for (i = 0; i < 3; i++) {           /* 残りを埋める */
        for (j = p[i]; j >= 0; j--) {
            a[i][j] = -1;
        }
    }

    printf("<table border=\"1\" cellspacing=\"0\">\n"); /* 表の出力 */
    for (j = 0; j <= len; j++) {
        int save = 0;                   /* 貯め */

        puts("<tr align=\"center\">");
        for (i = 0; i < 3; i++) {
            if (a[i][j] == -1) {        /* 棒 */
                printf("<td colspan=\"%d\"></td>", save + len + DIST);
                save = 0;
                printf("<td bgcolor=\"#%s\">", BAR);
                printf("<font color=\"#%s\">.</font>", BAR);
                printf("</td>");
                save = len + DIST;
            } else {                    /* 円盤 */
                int num0 = a[i][j] + 1;     /* 1 から始めた番号 */
                int num1 = a[i][j] + START; /* START から始めた番号 */

                printf("<td colspan=\"%d\"></td>", save + DIST + len - num0);
                save = 0;
                printf("<td colspan=\"%d\" ", 2 * num0 + 1);
                printf("bgcolor=\"#%s\">", num1 % 2 ? COLOR1 : COLOR0);
                printf("%d</td>", num1);
                save = DIST + len - num0;
            }
        }
        puts("</tr>");
    }
    printf("<tr bgcolor=\"#%s\">\n", GROUND);       /* 土台 */
    for (i = 0; i < ((len + DIST) * 2 + 1) * 3; i++) {
        printf("<td><font color=\"#%s\">.", GROUND);
        printf("</font></td>\n");
    }
    puts("</tr>");
    printf("</table>\n");

    return 0;
}

上のプログラムで作った、“実物大”のハノイの塔です。 (“本物”は円盤が 64 枚と聞いたことがあるので。)

...
1..
2..
3..
4..
5..
6..
7..
8..
9..
10..
11..
12..
13..
14..
15..
16..
17..
18..
19..
20..
21..
22..
23..
24..
25..
26..
27..
28..
29..
30..
31..
32..
33..
34..
35..
36..
37..
38..
39..
40..
41..
42..
43..
44..
45..
46..
47..
48..
49..
50..
51..
52..
53..
54..
55..
56..
57..
58..
59..
60..
61..
62..
63..
64..
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

付) 《ハノイの塔>奇数(resp. 偶数)番目の円盤どうしが隣り合うことはない (2003-02-10 (1) 02:10:16 +0900)》で述べたように、 最短手順の途中段階では、 奇数番目の円盤どうし、偶数番目の円盤どうしが隣り合うことはない。 それが奇数番目の円盤と偶数番目の円盤とで色を変えている理由である。

2003-07-20 (0) 14:30:35 +0900

上のリンクはいまはった。それまでは a href タグをおいていなかった。

2006-05-23 (2) 21:08:33 +0900


すのもの Sunomono