ストーリーのある就労移行支援|アップル梅田

【プログラミング】ズンドコ問題

calendar

reload

【プログラミング】ズンドコ問題

こんにちは
ストーリーのある就労移行支援、アップル梅田です

皆さん、プログラミングを楽しんでいますか?
プログラムは画面の上で起こることなら何でも作ることができます
それを自分の手で作れるようになると、欲しいものが全て手に入ります……
というと言いすぎでしょうか(≧▽≦)

プログラムの勉強はとにかく沢山書くことですので、色々作ってみましょう。
今回は一風変わったプログラムをご紹介します!!

数年前、ズンドコキヨシのプログラミングが流行しました
何かというと、

  • ズンまたはドコを同じ確率で出力する
  • 出力が「ズンズンズンズンドコ」になったら、次に「キ・ヨ・シ!」と出力して終了

というものです。

ちょっとした思いつきで、これを当事業所のメンバーさんたちとやってみました。
単純な要件に見えますが、これが結構書く人によってアルゴリズムが全然違うんです。

ある方は過去5回分の出力を保管しておき、出力のたびに文字の並びを判定しました。
またある方は出力する前に文字をひたすら生成して、その後ろ10文字分が一致したら
まとめて出力しました。
いろんな発想が見えて面白いですね(^^♪

さらにはズンズンズンズンズンズンドコになったらドリフになるべき
という情報も見つけてさあ大変(≧▽≦)
どうやって組みましょうか???

せっかくなので、元のズンドコを私もJavaでやってみました!!


public class ZunDoko {
    public static void main(String[] args) {
        int zunCount = 0; // ズンが出た回数を数えます
        while (true) { // 繰り返します
            if (Math.random() < 0.5) { // 半分の確率で
                System.out.println("ズン"); // ズンと表示します
                zunCount++; // ズンが出たので数えます
            } else { // ズンでなければ
                System.out.println("ドコ"); // ドコと表示します
                if (zunCount >= 4) break; // ズンが既に4回以上出ていたら繰り返しを終了
                zunCount = 0; // ズンの回数をリセットします
            }
        }
        System.out.println("キ・ヨ・シ!"); // 最後にキヨシと表示して終了します
    }
}

こんな感じです。
ズンが出現した回数を数えて、その後ドコが出た時にズンが4回以上出てたら終了
というものです。

ついでにjavascriptでコードゴルフもやってみました。
コードゴルフとは、プログラムをできるだけ短く書くという競技です。
レギュレーションは以下のものに合わせます。

https://qiita.com/kikurage/items/8535e757a0cb133571d7

上記のサイトでは最短が86バイト
(タイトルでは87ですが、下のコメントに86のものがあります)でしたので、
これを目標とします。
実行環境はchrome64です。


console.log((f=i=>i?Math.random()<0.5?'ズン'+f(i+1):'ドコ'+f(i<5):'キ・ヨ・シ!')(1))

85バイトで達成です。
調べた中では多分これが一番短いと思います。

理屈としては、ズンドコの文字を戻り値として再帰させることによって
変数を削減しています。
またtrue + 1が2になるという性質を利用して終了条件を簡略化しました。

コードゴルフは普段使わないような技を駆使して組み立てていきますので、
言語の細かな仕様や複雑なロジックを無駄に学ぶことができます。

時間をかけて一文字づつ削るのはパズルのようで面白です。
ぜひ皆さんもやってみて下さい!

それではまた(^^♪

<投稿スタッフ:O>

最後までご覧いただきありがとうございます。 (#^^#

就労移行支援 アップル梅田では利用者様それぞれの状況に応じた個別の訓練プログラムの提案と就労前/就労後を含めた総合的な支援を実践しております。

大阪在住の方に限らず、見学/体験はどなたでもご参加いただけますので、気軽にお問合せください!

%d人のブロガーが「いいね」をつけました。