2014年2月14日金曜日

FizzBuzz for VBS

講座用に適当な課題さがしをしていたら「Fizz Buzz」なるものがあったのでやってみた。
自分のツイートを見た限り取り敢えず動くのを出すのに15分の間があったけども実際はもうちょこっと早いかな?
実行はCscriptです。そのまま実行すると100回ポップアップしますので注意。


たしか初回コードがこれ。ルールをまんま処理した感じですね

For i = 1 To 100
    s=""
    if i mod 3 = 0 then s = "Fizz"
    if i mod 5 = 0 then s = s & "Buzz"
    if s="" then s=i
    wsh.echo s
Next  


出来た11分後に3・5倍数は15でいいと気づくが何とも・・・。


整理したのがこれ

for i=1 to 100
s="FizzBuzz":if i mod 15 then s="Fizz":if i mod 3 then s="Buzz":if i mod 5 then s=i
wsh.echo s
next

modで余剰を出していますが「余剰値=0」の比較記述は入れていません。
過去の記事でも軽く触れていますがif内処理は数値で言えば0がfalseとnot0がtrueと言った感じで処理できます。
処理順はツイートした通りです。




一行版はこれ

for i=1 to 100:s="FizzBuzz":do while i mod 15:s="Fizz":do while i mod 3:s="Buzz":do while i mod 5:s=i:exit do:loop:exit do:loop:exit do:loop:wsh.echo s:next

まぁ私のソースだとちょくちょくあるソースですがかなりおすすめしません。見ずらいですからね。
こっちは140字にまとまらなかったのでツイートしていないので少し説明。基本的には上と同じです。


ネストはこうなります。

for i=1 to 100
    s="FizzBuzz"
    do while i mod 15
        s="Fizz"
        do while i mod 3
            s="Buzz"
            do while i mod 5
                s=i
                exit do
            loop
            exit do
        loop
        exit do
    loop
    wsh.echo s
next

do whileもif同様0はfalseと同じように処理されます。
15で割れない、3で割れない、5で割れないとネストが深くなり最終的に割れなければループカウンタを格納します。


0 件のコメント:

コメントを投稿