ズンドコズンドコ、ズンズンズンドコ。

### 元ネタ
なんのこっちゃない、元ネタはこちらです。

https://sitest.jp/blog/?p=4816

真ん中あたりの「おまけ」にあります。
結局はFizzBuzz問題ということみたいです。

### 更新履歴
2022/12/22　コメント読みました。レスポンスうれしいです。現在再作成中。
2022/12/22　zundoko2.cのコードと実行結果を載せました。
2022/12/24　第3版　"doko"が出るのを許さない="zun"×４狙い撃ちバージョン
2022/12/24　第4版　最終版。

### 初期版
#### 開発環境
開発環境はこちらです。
```
user:~ % uname -a
FreeBSD xxxxxx 13.1-RELEASE-p3 FreeBSD 13.1-RELEASE-p3 GENERIC i386
```
生温かい目で見てやってください。

#### コード
とりあえず、作ってみました。

```zundoko.c
/*********
  zundoko.c
 *********/

#include <stdio.h>
#include <stdlib.h>

#define sZUN " zun"
#define sDOKO " doko"
#define ZUN 0
#define DOKO 1

int main() {
        int z1=0, z2=0, z3=0, z4=0, is_zzzd=0;

        srand((unsigned int)time(NULL));

        while(is_zzzd<4)
        {
                z1=(int)rand()%2;
                z2=(int)rand()%2;
                z3=(int)rand()%2;
                z4=(int)rand()%2;
                if(z1==ZUN && z2==ZUN && z3==ZUN && z4==DOKO)
                        break;
                printf("%s\n\r", z1==0 ? sZUN : sDOKO);
                printf("%s\n\r", z2==0 ? sZUN : sDOKO);
                printf("%s\n\r", z3==0 ? sZUN : sDOKO);
                printf("%s\n\r", z4==0 ? sZUN : sDOKO);
        }

                printf("%s\n\r", z1==0 ? sZUN : sDOKO);
                printf("%s\n\r", z2==0 ? sZUN : sDOKO);
                printf("%s\n\r", z3==0 ? sZUN : sDOKO);
                printf("%s\n\r", z4==0 ? sZUN : sDOKO);
        printf("KI,YO,SHI !!!\n\r");
        return 0;
}
```
#### コンパイル
こんな感じ。エラー出てるけど、あんまり気にしない。

```
user:~ % cc -o zd zundoko.c
zundoko.c:16:22: warning: implicit declaration of function 'time' is invalid in C99 [-Wimplicit-function-declaration]
        srand((unsigned int)time(NULL));
                            ^
1 warning generated.
```
#### 実行
走らせてみる。
```
user:~ % ./zd
 zun
 doko
 zun
 doko
 doko
 doko
 doko
 doko
 zun
 doko
 doko
 doko
 doko
 doko
 zun
 doko
 zun
 doko
 zun
 zun
 doko
 doko
 zun
 zun
 doko
 zun
 zun
 doko
 doko
 zun
 zun
 doko
 doko
 zun
 zun
 doko
 zun
 doko
 zun
 zun
 zun
 doko
 doko
 zun
 zun
 doko
 doko
 zun
 zun
 zun
 doko
 zun
 doko
 doko
 zun
 zun
 doko
 zun
 doko
 zun
 zun
 doko
 zun
 zun
 zun
 zun
 doko
 zun
 zun
 doko
 zun
 zun
 zun
 doko
 zun
 doko
 zun
 zun
 doko
 zun
 zun
 zun
 zun
 doko
KI,YO,SHI !!!
```

ちゃんと動いてるみたい。

#### 振り返り
* 作ることはできた。実行結果が面白い。
* ４つセットでwhileしてるので、ちゃんと条件がそろっている様に見えても内部処理的に当てはまっていないことがある。これはちゃんと直したい。
* とりあえず作っただけなので、もっとエレガントなコードにしたい。
* 他の言語だとどんなコードになるか試してみたい。ただし、いつになるかは分からない。

### その2版
#### コード
```zundoko2.c
/*********
  zundoko2.c
 *********/

#include <stdio.h>
#include <stdlib.h>

#define sZUN " zun"
#define sDOKO " doko"
#define ZUN 0
#define DOKO 1

int main() {
        int z1=0, z2=0, z3=0, z4=0, z5=0;

        srand((unsigned int)time(NULL));

        while(1)
        {
                z1=(int)rand()%2;
                z2=(int)rand()%2;
                z3=(int)rand()%2;
                z4=(int)rand()%2;
                z5=(int)rand()%2;
                if(z1==ZUN && z2==ZUN && z3==ZUN && z4==ZUN && z5==DOKO)
                        break;
                printf("1: %s\n\r", z1==0 ? sZUN : sDOKO);
                printf("2: %s\n\r", z2==0 ? sZUN : sDOKO);
                printf("3: %s\n\r", z3==0 ? sZUN : sDOKO);
                printf("4: %s\n\r", z4==0 ? sZUN : sDOKO);
                printf("5: %s\n\r", z5==0 ? sZUN : sDOKO);
        }

                printf("1: %s\n\r", z1==0 ? sZUN : sDOKO);
                printf("2: %s\n\r", z2==0 ? sZUN : sDOKO);
                printf("3: %s\n\r", z3==0 ? sZUN : sDOKO);
                printf("4: %s\n\r", z4==0 ? sZUN : sDOKO);
                printf("5: %s\n\r", z5==0 ? sZUN : sDOKO);
        printf("KI,YO,SHI !!!\n\r");
        return 0;
}
```
#### 実行結果
```
user:~ % ./zd
1:  doko
2:  zun
3:  zun
4:  doko
5:  zun
1:  zun
2:  zun
3:  zun
4:  zun
5:  doko
KI,YO,SHI !!!
```
何回かやってるうちに、２ターンで揃いました！
↑＋Enterって、速い。
今日は、ここまでにします。

### 第３版　前２つよりはマシな版
"doko"が出るのを許さない="zun"×４狙い撃ちバージョン
```zundoko3.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int zzz=0;

    srand((unsigned int)time(NULL));

    while(1) {
        if((int)rand()%2 == 0) {
            printf(" zun");
            zzz++;
        }
        else
            zzz=0;
        if(zzz==4) {
            if((int)rand()%2 == 1) {
                printf(" doko\n\r");
                printf("KI YO SHI!!\n\r");
                break;
            }
        else
            zzz=0;
        }
    }
    return 0;
}
```

#### 実行結果３
```
user:~ % ./zd3
 zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun doko
KI YO SHI!!
user:~ % ./zd3
 zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun doko
KI YO SHI!!
user:~ % ./zd3
 zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun zun doko
KI YO SHI!!
user:~ % ./zd3
 zun zun zun zun zun zun zun zun zun doko
KI YO SHI!!
```

### 第4版　"doko"も表示してあげる版
```zundoko4.c
     1  #include <stdio.h>
     2  #include <stdlib.h>
     3  #include <time.h>
     4
     5  int main()
     6  {
     7    int zzzz=0;
     8
     9    srand((unsigned int)time(NULL));
    10
    11    while(1) {
    12      if((int)rand()%2 == 0) {
    13        printf(" zun");
    14        zzzz++;
    15      }
    16      else {
    17        printf(" doko");
    18        zzzz=0;
    19      }
    20      if(zzzz==4) {
    21      if((int)rand()%2 == 1) {
    22        printf(" doko\n\r");
    23        printf("KI YO SHI!!\n\r");
    24        break;
    25      }
    26      else
    27        zzzz=0;
    28      }
    29    }
    30    return 0;
    31  }

```

17行目を追加しただけです。
あと、stdlib.h, time.hをincludeして、warningを無くしました。

#### 実行結果
```
user:~ % ./zd4
 zun doko doko doko zun zun doko doko doko doko zun zun zun doko zun zun zun zun doko
KI YO SHI!!
user:~ % ./zd4
 doko doko doko doko zun doko doko zun zun zun zun zun doko doko doko zun zun zun doko zun zun doko zun zun zun zun doko
KI YO SHI!!
user:~ % ./zd4
 doko zun doko zun zun zun zun doko
KI YO SHI!!
```
あれ？２つめが zun x 4 + doko なのにそこで終わってない。これ、課題。
#### 振り返り
* このネタのTwitterが2016年だった。面白いことがあったんだなと思いました。これの他に面白そうなネタがあったらチャレンジしてみたいです。
* コードが小規模なので、練習問題として取り組むにはちょうど良いと思いました。
* ズンドコ問題に、たくさんの人が取り組んでいることが分かりました。