Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  177  : 記事  0  : コメント  752  : トラックバック  37

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

うーん、FizzBuzz問題です。

なんのひねりもなくやれば、これだけなんですが。

For i As Integer = 1 To 100
    Dim result As String = i.ToString
    If (i Mod 3 = 0) And (i Mod 5 = 0) Then
        result = "FizzBuzz"
    ElseIf (i Mod 3) = 0 Then
        result = "Fizz"
    ElseIf (i Mod 5) = 0 Then
        result = "Buzz"
    End If
    Console.WriteLine("i={0}", result)
Next

問題として、「1~100までの表示をする」とか、「3の倍数、5の倍数、3と5の倍数の判定」
この二つ。難しいもんじゃない。

これを「ふつーそんなことしねーヨ!」ということをすると、楽しくなるかもしれない。
小手先で、i mod 3とかを関数にしてみるとか、Const宣言してみるとか、色々あるんだけどそれは面白くない。

ミソである、判定を楽しくできないか?

じゃあ、一つ考えてみる。
ifなどの判定をまったく使わずに、できないか?

Dim i As Integer
Dim ViewMessage As List(Of String) = New List(Of String)

For i = 0 To 100
    ViewMessage.Add(i.ToString)
Next

For i = 3 To 100 Step 3
    ViewMessage.Item(i) = "Fizz"
Next

For i = 5 To 100 Step 5
    ViewMessage.Item(i) = "Buzz"
Next

For i = 15 To 100 Step 15
    ViewMessage.Item(i) = "FizzBuzz"
Next

For i = 1 To 100
    Console.WriteLine("i={0}", ViewMessage.Item(i))
Next

ううむ、簡単にできてしまって、オチない。

どーにか面白くならねーか?

投稿日時 : 2007年11月5日 16:50

コメント

# re: 素直か、ひねくれか 2007/11/05 19:09 774RR
エラトステネスの古い^H篩っすね。
篩テーブルをstaticリソースに持ってワンライナー化
実行時効率が最優先される場合の素直な常套手段

# re: 素直か、ひねくれか 2007/11/06 3:02 Mr.T
>エラトステネスの古い^H篩っすね
すっかり、そんなの忘れてましたww

Post Feedback

タイトル
名前
Url:
コメント