|
by dengel
■ カテゴリ
・ゲーム/PSO/PSU ・PSP/PSV/エミュ/ガジェット ・DTM/Audio/音楽 ・小説/漫画/ラノベ ・舞台/歌舞伎/映画 ・プログラム/NW ・PC/戯言/メモ iPhone/Android
■ 検索
■ お気に入りブログ
ゲームパッド地下秘密 Dengel Wing Invisible Ray 博麗幻想書譜 目撃者を探しています!平...
■ Dengel Tweet
■ 以前の記事
2021年 09月 2020年 10月 more...
■ 各種規約/設定
携帯からでも【天魔の館Blog】へ ● 活用サイト ■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 ● 素材拝借 [www.SCX.hu]写真素材サイト Richard Sweet photography 様 ▼背景画像▼ Grayish Web 様 ▼プロフィール画像▼ Bart Vermeersch 様 ● 著作権利 (C) SEGA
■ 最新のトラックバック
■ その他のジャンル
■ ライフログ
■ ファン
■ 記事ランキング
■ ブログジャンル
■ 画像一覧
|
::: 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
|
|||||||||||||||||||||||||||||||||||||||||||||||
ファン申請 |
||