LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-20

元ネタ

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

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

更新履歴

2022/12/22 コメント読みました。レスポンスうれしいです。現在再作成中。
2022/12/22 zundoko2.cのコードと実行結果を載せました。
2022/12/24 第3版 "doko"が出るのを許さない="zun"×4狙い撃ちバージョン
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 !!!

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

振り返り

  • 作ることはできた。実行結果が面白い。
  • 4つセットで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 !!!

何回かやってるうちに、2ターンで揃いました!
↑+Enterって、速い。
今日は、ここまでにします。

第3版 前2つよりはマシな版

"doko"が出るのを許さない="zun"×4狙い撃ちバージョン

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;
}

実行結果3

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!!

あれ?2つめが zun x 4 + doko なのにそこで終わってない。これ、課題。

振り返り

  • このネタのTwitterが2016年だった。面白いことがあったんだなと思いました。これの他に面白そうなネタがあったらチャレンジしてみたいです。
  • コードが小規模なので、練習問題として取り組むにはちょうど良いと思いました。
  • ズンドコ問題に、たくさんの人が取り組んでいることが分かりました。
0
0
3

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
0
0