人気ブログランキング | 話題のタグを見る


主人KuLuSの趣味Blog ★ PSP,エミュ,オンラインゲーム,PSU,パソコン,プログラム,SNS,著作権,舞台,歌舞伎,音楽,DTP,DTM,マンガ、ラノベなどを戯言ってみる
by dengel
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
■ カテゴリ
全体
・ゲーム/PSO/PSU
・PSP/PSV/エミュ/ガジェット
・DTM/Audio/音楽
・小説/漫画/ラノベ
・舞台/歌舞伎/映画
・プログラム/NW
・PC/戯言/メモ
iPhone/Android
■ 検索
■ お気に入りブログ
すちゃらか統一ウオーズを...
ゲームパッド地下秘密
Dengel Wing
Invisible Ray
博麗幻想書譜
目撃者を探しています!平...
■ Dengel Tweet
■ 以前の記事
2024年 01月
2021年 09月
2020年 10月
more...
■ 各種規約/設定
スカウター : 天魔の館
携帯からでも【天魔の館Blog】へ
QRコード
 ● 活用サイト
■Gmail
■MSN Hotmail
■Simpletext

■10分Mail (メーラー)
■7日Mail日本語 (メーラー)

▼【CG/画像加工】▼
■Photoshop
■Pixlr
■Naverフォトエディタ

▼【ストレージ】▼
■Nドライブ(30GB)
■SkyDrive(7GB)
■Yahooボックス(5GB)

▼【SNS】▼
■mixi
■マンガ読もっ! (漫画系)
■ほんのきもち (漫画系)
■Gocco (小説系)
■手書きブログ
■BOOK index(本情報)

▼【便利サービス】▼
■SimpleAPI (リンクサムネイル)
■ColorGenerator (色生成)
■Button Generator
■CoolText (タイトル生成)
■bgmaker(背景画像生成)
■Media Convert (ファイル変換)
■いい色 (写真加工)
■Glad (グラデ生成)
■igosso (画像サーチ)
■Doc&Sheet (google)
■Yahoo!ノートパッド (ネットメモ)
■Google トランジット (駅経路)

▼【ラノベ創作関連】▼
■ライトノベル作法研究所
■-小説の書き方講座-
■キャラクターなんとか機
■Weblio 類語辞典

▼【音楽関連】▼
■Sounds39
■東方同人カラオケwiki
■うたスキ(joysound)

▼【PSP関連】▼
■Emu on PSP
■PSPnfo
■QJ.net(DL)

▼【Mylo】▼
■mylo-ねとらじ
■mylo COM-2@wiki
■mylo com-2
■mylolabs
・BlogMemoLinker(自作)
・ゲーム「Yacht」(自作)

▼【開発関連】▼
■CodeZine
■コードなにがし
■MOONGIFT
■Phpspot開発日誌

▼【情報】▼
■連邦
■Impress
■ITmedia
■SimpleAPI
■Gigazine
■アルファルファモザイク
■淡々と更新し続けるぞ雑記
■楽画喜堂
■らばQ
■電脳御殿
■かーずSP

■にがHP

▼【生活】▼
e-gohan
今晩のおかず検索
ご飯好き.COM

▼【WEBゲーム】▼
■ぱんぱんミュージック
■TYPING MANIA

Map

あわせて読みたい
フィードメーター - 天魔の館
ダンガンロンパ 希望の学園と絶望の高校生
ダンガンロンパ 希望の学園と絶望の高校生

 ● 素材拝借
▼タイトル画像▼
[www.SCX.hu]写真素材サイト
Richard Sweet photography 様
▼背景画像▼
Grayish Web 様
▼プロフィール画像▼
Bart Vermeersch 様
 ● 著作権利
このページで使用されている画像は(株)セガの許諾を得て、Windows用ゲーム『ファンタシースターオンライン ブルーバースト』および『ファンタシースターユニバース』よりキャプチャーしたものです。配布や再掲載は禁止されています。
(C) SEGA
■ 最新のトラックバック
■ その他のジャンル
■ ライフログ
■ ファン
■ 記事ランキング
■ ブログジャンル
■ 画像一覧
■ VBAでFizzBuzz ■
  ::: 2007年 05月 10日 :::
 プログラムは大好きだけれども、実の所プログラマの素養は一般プログラマ程度しかないKuLuSです。
 昔から分かってるんですけどね。 元々数学的素養には欠けてるって。
 嫌いじゃないし、大好きだし、理解するまでやるけど。
 理解するまでの時間、理解してからの解釈度、応用度は全然上級開発者になる素養を持ってないと実感してます。

 さて、RマスターくんがVBAでチャレンジしてくれたので自分もやってみました。
 
 汚いソースの状態なら5分切ってたんですがプログラマらしくないので、アルゴリズムの整理したら6分過ぎてしまいました orz
 6,28,23

▼下準備
 ユーザーフォームにテキストボックス、ボタンを作成。
 
 テキストボックス:「tx」
 ・マルチライン:True

 ボタンは作るだけでよし。

▼ソース
Private Sub CommandButton1_Click()

 For a = 1 To 100

  If a Mod 3 = 0 Or a Mod 5 = 0 Then
  
   If a Mod 3 = 0 Then
    tx.Text = tx.Text & "Fizz"
   End If
  
   If a Mod 5 = 0 Then
    tx.Text = tx.Text & "Buzz"
   End If

  Else
   tx.Text = tx.Text & a
  End If

  tx.Text = tx.Text & vbCrLf

 Next

End Sub


ポイントは ”Fizz” と ”Buzz” の表示と連結部、改行コードの一元化してるとこですね。

 これぐらいスマートな発想がもうちょっと早く出てほしーなぁ。
 余り、を出す関数modも調べました。
 つーか、余り、を出す計算って、C言語譲りの「%」計算が好きなんで、他の言語で違うのを採用してるとなかなかでてこないですね。

 C言語なら、5分以内だと思いますけど。
 余剰計算に%使えるし、Printfで表示最後に改行使えるし。

 あと選択言語によっても記述が異なるので、VBAとかHSPとか、書きやすい反面入力量が増えるのはちょっと避けるべきでしたね、、、、。

 ちょっと面白かったです。
 



■さて、ネットでしばらくFizzBuzzを調べたら、今回の記事で影響うけて作ってる方々が結構いらっしゃいましたYO。

で最初に3と5で割り切れたらFizzBuzzを表示している人が結構いた。

・3と5で割り切れたら”FizzBuzz”
・上以外で3で割り切れたら”Fizz”
・上以外で5で割り切れたら”Buzz”
・上記全て以外は数字

って感じ

なんつーか、せっかく3でFizz、5でBuzz使ってるのに、わざわざ条件を増やして”FizzBuzz”を別途に対応させるのは、なんか気持ち悪い。
できれば使いまわしたい。そう思った。

あと、3と5で割り切れるもの、って事でいきなり最小公倍数の「15」もってきて、15で割り切れたら”FizzBuzz”を表示。
これも気色悪い感じ。
3と5が条件になってるのに、作る時点で計算済みの15使うってどーよ。

とゆーわけで、アルゴリズム的には、自分で考えたものが一番自分にはしっくりきました。
ただ、ほぼ同じ処理をPerlなどで50文字くらいで書いてるのみて鬱。

やっぱりWEB系のスクリプト言語、特に文字列だけならPerlはすごいなと思った。
Perlは一応組めるけど、あんな記述方法があるとはさっぱりだ。

▼さら改良////////////////////////////////
余剰計算なかったらヤバイってゆー人がいて、逆に無しでもやってやるぜ、って人がたくさんいらっしゃるようで、VBAでも余剰関数なしでやってみました。

 For a = 1 To 100

   If InStr(1, a / 3, ".") = 0 Then
    tx.Text = tx.Text & "Fizz"
   End If
  
   If InStr(1, a / 5, ".") = 0 Then
    tx.Text = tx.Text & "Buzz"
   End If

   If InStr(1, a / 3, ".") > 0 and InStr(1, a / 5, ".") > 0 Then
    tx.Text = tx.Text & a
   End If

  tx.Text = tx.Text & vbCrLf
  
 Next


 余剰関数「mod」を使わない代わりに、Instrで割り算の結果の中に「.」が無かったら割り切れてる、って判断として使いました。
 
 まあ、mod も Instr も ちょっと微妙な関数ではありますが。
 VBAではこんなもんでしょうか

▼さらにさらに改良/////////////////////
 先ほどの他の方のを参考にして文字数を減らしてみました。
 また余剰関数も使ってません。

For a = 1 To 100

 t = Len(a / 3)
 g = Len(a / 5)
 s = Len(a)

  If t <= s Then
    x = x & "Fizz"
  end if

  If g <= s Then
    x = x & "Buzz"
  end if

 If t > s and g > s Then
   x = x & a
 End If
 
 x = x & vbCrLf
Next

 tx.Text = x


 こいつのポイントは、Len()関数を使って、現在のループ数の桁と、計算結果の桁で、余剰を計算してるとこですね。
 割る、のですから割り切れれば、現在のループ数の桁より大きくなるわけがありませんよね。

 あと文字数削減のために、一旦変数xに全データを入れて、最後にテキストボックスに移すということをやってます。

 アルゴリズムは2,30分考えました。。。。。


▼おまけのおまけ/////////////////
 何を思ったのか最初に掲載したアルゴリズムで、Flex2(ActionScript3)でも作成してみました。

■作成したFlashファイル
※スクロールバー無いですけど、ホイール回せばで結果は下まで見れます。


  public function first(){
   var tf1:TextField = new TextField();

   var a:int;

   for(a=1;a<=100;a++){
    if (a % 3 == 0 || a % 5 == 0 ){

     if (a % 3 ==0){
      tf1.text += "Fizz";}

     if (a % 5 == 0){
      tf1.text += "Buzz";}

    }else{
     tf1.text += a;
    }

    tf1.text += "\n";

    tf1.width = 100;
    tf1.height = 200;
    tf1.x = 50;
    tf1.y = 20;
    addChild(tf1);
   }
  }

 Flex2については、サイトや本を読んで作ったので、まだあんまり把握できません。
 あしからず。とりあえず動いたものを見せたかっただけっすw

by dengel | 2007-05-10 09:47 | ・プログラム/NW