ズンドコキヨシを12個の言語で書いてみた

# はじめに
今更ですが、ズンドコキヨシ
というものを発見してしまったので、
面白そと思い自分で書いてみました。
今回は自分で書けそうな言語 ~~9個~~ ~~10個~~ ~~11個~~ 12個で書いてみました。

※luaでも書けましたので、追加しました。
※GAS(Google Apps Script)でも書けました。
※UWSCでも書けました。

**追記：**
**2022/10/5**
* **コメントにてバグのご指摘いただきましたので、プログラム修正、それに伴いフローチャート修正いたしました。**
* **一部体裁が整っていなかった箇所がありましたので、修正しました。**
* **VBA、VBSにおいてRandamizeがなかったので追加しました。**

**2022/10/6**
* **再度指摘ありましたので修正しました。**

**2022/10/7**
* **プログラム自体は正常に動くようになりましたが、
リファクタリングについてご意見いただきましたので、修正しました。**

# ズンドコキヨシとは？
下記Twitterを発端としたもので、この仕様のプログラムを作ることを目的としたものです。

><blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから<br>「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ！」って出力した後終了って関数作ったら満点で単位貰ってた</p>&mdash; てくも (@kumiromilk) <a href="https://twitter.com/kumiromilk/status/707437861881180160?ref_src=twsrc%5Etfw">March 9, 2016</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# フローチャート
各言語は下記フローチャートに準じた形で記載しています。
![zundoko.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855481/88ce5f21-3949-c9d8-4172-ba96ade42e27.png)



# C

```c:zundoko.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void zundoko() {
	char zudo[2][5] = { "ズン","ドコ" };
	srand((unsigned int)time(NULL));
	int count = 0;

	while (1) {
		int i = rand() % 2;
		printf("%s", zudo[i]);
        if (i == 0) {
            if ( count <= 4 ) count++;
		} else {
            if ( count >= 4 ) break;
    		else count = 0;
        }
	}
	printf("\nキ・ヨ・シ！\n");
}

int main(void) {
	zundoko();
	return 0;
}
```

# C++

```c++:zundoko.cpp
#include <bits/stdc++.h>
using namespace std;


void zundoko() {
	string zudo[2] = { "ズン","ドコ" };
	srand((unsigned int)time(NULL));
	int count = 0;

	while (1) {
		int i = rand() % 2;
        cout << zudo[i];		
        if (i == 0) {
			if( count <= 4 ) count++;
		} else {
    		if ( count >= 4 ) break;
    		else count = 0;
        }
	}
	cout << endl << "キ・ヨ・シ！" << endl;;
}

int main(void) {
	zundoko();
	return 0;
}
```

# Excel VBA

```vb:zundoko.xlsm
Option Explicit


Sub zundoko()

    Dim zudo(1) As String
    zudo(0) = "ズン"
    zudo(1) = "ドコ"
    
    Dim count As Integer
    count = 0
    Randomize
    Do
        Dim i As Integer
        i = Int(Rnd * 2)
        Debug.Print zudo(i)
        If i = 0 Then
            If count <= 4 then
                count = count + 1
            End if
        Else
            If count >= 4 Then
                Exit Do
            Else
                count = 0
            End If
        End If
    Loop
    
    Debug.Print "キ・ヨ・シ！"

End Sub
```

# VBScript

```vb:zundoko.vbs
Option Explicit

zundoko

Sub zundoko()

    Dim zudo(1)
    zudo(0) = "ズン"
    zudo(1) = "ドコ"
    
    Dim count
    count = 0
    Randomize
    Do
        Dim i
        i = Int(Rnd * 2)
        Wscript.Echo zudo(i)
        If i = 0 Then
            If count <= 4 then
                count = count + 1
            End If
        Else
            If count >= 4 Then
                Exit Do
            Else
                count = 0
            End If
        End If
    Loop
    
    Wscript.Echo "キ・ヨ・シ！"

End Sub
```

# PowerShell

```powershell:zundoko.ps1
function zundoko{

    $zundoko = @("ズン","ドコ")

    $count = 0

    while($true){

        $i = get-random 2
        $zundoko[$i]

        if ($i -eq 0) {
            if($count -le 4){
                $count += 1
            }
        } else {
            if ($count -ge 4){
                break;
            } else {
                $count = 0
            }
        }

    }

    Write-Host "キ・ヨ・シ！"

}

zundoko
```

# Java

```java:zundoko.java
import java.util.Random;
public class zundoko {
	
	public static void main(String[] args) {
		zundo();

	}
	
	public static void zundo() {
		String[] zudo = { "ズン","ドコ" };
		int count = 0;

		while (true) {
			Random rand = new Random();
			int i = rand.nextInt(2);
            System.out.print(zudo[i]);
			if (i == 0) {
                if (count <= 4) count++;
			} else {
    			if (count >= 4) break;
    			else count = 0;
            }
		}
		System.out.print("\nキ・ヨ・シ！\n");
	}
}
```

# Processing

```java:zundoko.pde
void setup(){
  zundoko();
}

void zundoko() {
  String zudo[] = { "ズン","ドコ" };
  
  int count = 0;

  while (true) {
    int i = (int)random(0,2);
    print(zudo[i]);
    if (i == 0) {
      if (count <= 4) count++;
    } else { 
        if (count >= 4 && i == 1) break;
        else if (i == 1) count = 0;
    }
  }
  print("\nキ・ヨ・シ！\n");
}
```

# HSP

```hsp:zundoko.hsp
#module

#deffunc zundoko
	dim zudo,2
	zudo = "ズン","ドコ"
	dim count
	count = 0
	randomize
	repeat
    	i = rnd(2);
        mes zudo(i)
        if i == 0 {
          if count <= 4 {
            count=count+1
          }
        }
        else {    
            if count >= 4 {
        	    break
        	}
            else {
	            count = 0
	        }
        }
	loop

	mes "キ・ヨ・シ！"

	return

#global

zundoko
```

# Windowsバッチ

```bat:zundoko.bat
@echo off
setlocal enabledelayedexpansion

call :zundoko
pause
exit

:zundoko

set /a count = 0
set zundoko[0]=ズン
set zundoko[1]=ドコ

:loop

set /a i=%random%*2/32767
echo !zundoko[%i%]!
if %i% equ 0 (
  if %count% le:q 4 (
    set /a count = count + 1
  )
) else (
  if %count% geq 4 ( 
    goto :endloop
  ) else (
    set /a count = 0
  )
)
goto :loop
:endloop

echo キ・ヨ・シ！

exit /b
```

# lua

```lua:zundoko.lua
function zundoko()
	zudo={"ズン","ドコ"}
	count=0
	math.randomseed(os.time())
	while true do
		i=math.random(1,2)
        print(zudo[i])
	 	if i==1 then
            if count<=4 then
    	 		count=count+1
            end
	 	else
    	 	if count>=4 then
    	 		break
    	 	else
    	 		count=0
    	 	end
        end
	end
	print("キ・ヨ・シ！")
end

zundoko()
```

# GAS(Google Apps Script)

```javascript
function zundoko() {
  let zudo = ["ズン","ドコ"];
  let count=0;
  while(1){
    let i = Math.floor(Math.random()*2);
    console.log(zudo[i]);
    if (i == 0) {
        if (count <= 4) count++;
    }else{
        if (count >= 4) break;
    	else count = 0;
  }
  console.log("キ・ヨ・シ！");
}
```

# UWSC

```visualbasic:zundoko.uws
zundoko()

procedure zundoko()

	dim zun[2]="ズン","ドコ"
	dim cnt=0

	while true
		dim i=random(2)
		print zun[i]
		ifb i = 0 then 
			if cnt <= 4  then cnt=cnt+1
		else 
			if cnt >= 4 then break else cnt = 0
		endif

	wend

	print "キ・ヨ・シ！"

fend
```