パスワードを忘れた? アカウント作成
494478 journal

FizzBuzz for VBS 8

日記 by uhyorin

fslashtさめ経由、FizzBuzz問題をVisualBasic Scriptで実行してみた。
他言語と比較するまでもなく簡単に実装可能ですなぁ…。

なお、FizzBuzz.vbsを単体実行すると、WScript.Echo() はWindows Formのメッセージボックスを表示する。
OKボタンを100回押すことになるので注意されたし。

'
' 1.以下のスプリクトをテキスト形式で保存。
'   ファイル名:FizzBuzz.vbs
' 2.コマンドプロンプトで実行する。
'   cscript //NoLogo FizzBuzz.vbs | more
'
    Option Explicit
    Dim iLoop       ' ループカウンタ
    Dim strMsg      ' メッセージ出力
 
    For iLoop = 1 to 100 step 1
        strMsg = ""
 
        ' 3で割り切れる値ならFizzをセット。
        If ((iLoop Mod 3) = 0) then
            strMsg = "Fizz"
        end if
 
        ' 5で割り切れる値ならBuzzをセット。
        If ((iLoop Mod 5) = 0) then
            If (RTrim(strMsg) <> "") then: strMsg = strMsg & space(1)
            strMsg = strMsg & "Buzz"
        end if
 
        ' 上記以外の場合は数値をセット。
        If (RTrim(strMsg) = "") then: strMsg = CStr(iLoop)
 
        Call WScript.Echo(strMsg)
    next

# すらどでコードを公開するのはこれが初めてかもしれず。
----
2007/06/26 17:00 追記
初エントリからちょうど4年が経過してました。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • Call WScript.StdOut.WriteLine(strMsg)
    として、コンソール出力するとヨサゲ

    # 短いですね。
    --
    M-FalconSky (暑いか寒い)
    • なるほど、コンソール出力用の命令があるってことですね。
      明日試してみよう…。

      ># 短いですね。

      精通している言語があれば、設問(FuzzBuzz問題)を答えるのは苦労しませんね。
      ただ、VBSだと他言語への応用がほとんど効かない・思いつかないなぁと思うところもありまして…。
      親コメント
      • by Anonymous Coward
        特別コード変えなくてもプロンプトで

        <c:\hoge>cscript fizzbuzz.vbs

        とすればいいのでは?
  • by WindVoice (14680) on 2007年05月15日 20時32分 (#1157486) 日記
    この問題名でぐぐると問題文がみつかるんですが、私の見たところにはmodや%(剰余)は使ってはダメと書いてありまして、それで結構頭を悩ませます。でも、すらどのあちこちで見かけるスクリプトでは、%を使っている例も結構ありますね、う~ん。
    --
    人生は七転び八起き、一日は早寝早起き
    • 「余剰を使わずに3の倍数、5の倍数を判定する」
      という考え方に該当するコードが思いつきません。orz
      プログラミングというか、数学的な教養がないと辛いです…なんとなく。
      親コメント
      • by Anonymous Coward
        カウンタを追加するのもダメなのかな。

        Option Explicit
        Dim iLoop ' ループカウンタ
        Dim iFizz ' Fizz カウンタ
        Dim iBuzz ' Buzz カウンタ
        Dim strMsg ' メッセージ出力

        iFizz = 3
        iBuzz = 5
        For iLoop = 1 to 100 step 1
                strMsg = ""

                ' 3で割り切れる値ならFizzをセット。
                If (iLoop = iFizz) then
                        strMsg = "Fizz"
                        iFizz = iFizz + 3
        • by Anonymous Coward
          見れば解るけど
          >If (RTrim(strMsg) "") then: strMsg = strMsg & space(1)
          If (RTrim(strMsg) = "") then: strMsg = strMsg & space(1)

          それと重要な問題ではないが個人的には

          >strMsg = strMsg & "Buzz"
          strMsg = Trim(strMsg & "Buzz")

          としたくなる。

          まあ、それはともかく「少しでもコードを書けるか見る」のが目的だと考えると、(1a)1~100までループで回す(1b)3,5の倍数までループで回す
          という基本的な制御文と(2)nと等しくなったらという判断処理だけ解れば書ける、
          という2点だけ知っていれば出来る、剰余まで使う事のは邪道という事なら正解かも。
          でもそれだとTrimは反則って気がしますね、馬鹿正直に判断文かけば済むと思いますが。
    • by Anonymous Coward
      まとめると

      (1)プログラムが少しでも書けるかのテストに用いるもの
        だから基本的な構文だけで書ければよい
        ていうか基本以上の命令使ったらアウト
      (2)プログラムが少し以上書ける人間には切り詰めたり
        変な言語で書いてみたりチャレンジするもの
        だからあらゆる手をつかっていい
        http://golf.shinh.org/p.rb?FizzBuzz [shinh.org]
           
typodupeerror

Stay hungry, Stay foolish. -- Steven Paul Jobs

読み込み中...