東方算程譚

Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。

目次

Blog 利用状況

ニュース

著作とお薦めの品々は

著作とお薦めの品々は
東方熱帯林へ。

あわせて読みたい

わんくま

  1. 東京勉強会#2
    C++/CLI カクテル・レシピ
  2. 東京勉強会#3
    template vs. generics
  3. 大阪勉強会#6
    C++むかしばなし
  4. 東京勉強会#7
    C++むかしばなし
  5. 東京勉強会#8
    STL/CLRによるGeneric Programming
  6. TechEd 2007 @YOKOHAMA
    C++・C++/CLI・C# 適材適所
  7. 東京勉強会#14
    Making of BOF
  8. 東京勉強会#15
    状態遷移
  9. 名古屋勉強会#2
    WinUnit - お気楽お手軽UnitTest

CodeZine

  1. Cで実現する「ぷちオブジェクト指向」
  2. CUnitによるテスト駆動開発
  3. SQLiteで組み込みDB体験(2007年版)
  4. C++/CLIによるCライブラリの.NET化
  5. C# 1.1からC# 3.0まで~言語仕様の進化
  6. BoostでC++0xのライブラリ「TR1」を先取りしよう (1)
  7. BoostでC++0xのライブラリ「TR1」を先取りしよう (2)
  8. BoostでC++0xのライブラリ「TR1」を先取りしよう (3)
  9. BoostでC++0xのライブラリ「TR1」を先取りしよう (4)
  10. BoostでC++0xのライブラリ「TR1」を先取りしよう (5)
  11. C/C++に対応した、もうひとつのUnitTestFramework ─ WinUnit
  12. SQLiteで"おこづかいちょう"
  13. STL/CLRツアーガイド
  14. マージ・ソート : 巨大データのソート法
  15. ヒープソートのアルゴリズム
  16. C++0xの新機能「ラムダ式」を次期Visual Studioでいち早く試す
  17. .NETでマンデルブロ集合を描く
  18. .NETでマンデルブロ集合を描く(後日談)
  19. C++/CLI : とある文字列の相互変換(コンバージョン)
  20. インテルTBBによる選択ソートの高速化
  21. インテルTBB3.0 によるパイプライン処理
  22. Visual C++ 2010に追加されたSTLアルゴリズム
  23. Visual C++ 2010に追加されたSTLコンテナ「forward_list」
  24. shared_ptrによるObserverパターンの実装
  25. .NETでマンデルブロ集合を描く(番外編) ── OpenCLで超並列コンピューティング
  26. StateパターンでCSVを読む
  27. 状態遷移表からStateパターンを自動生成する
  28. 「ソートも、サーチも、あるんだよ」~標準C++ライブラリにみるアルゴリズムの面白さ
  29. インテルTBBの同期メカニズム
  30. なぜsetを使っちゃいけないの?
  31. WPFアプリケーションで腕試し ~C++でもWPFアプリを
  32. C++11 : スレッド・ライブラリひとめぐり
  33. Google製のC++ Unit Test Framework「Google Test」を使ってみる
  34. メールでデータベースを更新するココロミ
  35. Visitorパターンで遊んでみたよ
  36. Collection 2題:「WPFにバインドできる辞書」と「重複を許す検索set」
  37. Visual C++ 2012:stateless-lambdaとSQLiteのぷち拡張
  38. 「Visual C++ Compiler November 2012 CTP」で追加された6つの新機能

@IT

  1. Vista時代のVisual C++の流儀(前編)Vista到来。既存C/C++資産の.NET化を始めよう!
  2. Vista時代のVisual C++の流儀(中編)MFCから.NETへの実践的移行計画
  3. Vista時代のVisual C++の流儀(後編) STL/CLRによるDocument/Viewアーキテクチャ
  4. C++開発者のための単体テスト入門 第1回 C++開発者の皆さん。テスト、ちゃんとしていますか?
  5. C++開発者のための単体テスト入門 第2回 C++アプリケーションの効率的なテスト手法(CppUnit編)
  6. C++開発者のための単体テスト入門 第3回 C++アプリケーションの効率的なテスト手法(NUnit編)

AWARDS


Microsoft MVP
for Visual Developer - Visual C++


Wankuma MVP
for いぢわる C++


Nyantora MVP
for こくまろ中国茶

Xbox

Links

記事カテゴリ

書庫

日記カテゴリ

しつこくもFizzBuzz

FizzBuzz思考過程のコメント:

失礼なこと書いて申し訳ないですが、個人的にはマズイと思います。
普通にメンテナンスが入る業務系のプログラムにはそういうトリッキーなロジック含めるべきじゃないという意味です。

ごもっとも。
ならばおもきし一般化してみる。
要は"ある条件"を満たしたとき"ある動作を行う"の連続ですわね。
ならば"ある条件"と"ある動作を行う"の組をいくつか持っといて...

using System;
using System.Collections.Generic;

delegate bool Predicate(int n); // この条件が満たされたら
delegate void Action(int n);    // こぉします。

class Program {
  public static void Main() {
    KeyValuePair<Predicate,Action>[] table = { 
      new KeyValuePair<Predicate,Action>(
        delegate(int x) { return x%3!=0 && x%5!=0; },
        delegate(int x) { Console.WriteLine(x); }),
      new KeyValuePair<Predicate,Action>(
        delegate(int x) { return x%3==0 && x%5!=0; },
        delegate(int x) { Console.WriteLine("Fizz"); }),
      new KeyValuePair<Predicate,Action>(
        delegate(int x) { return x%3!=0 && x%5==0; },
        delegate(int x) { Console.WriteLine("Buzz"); }),
      new KeyValuePair<Predicate,Action>(
        delegate(int x) { return x%3==0 && x%5==0; },
        delegate(int x) { Console.WriteLine("FizzBuzz"); }),
    };
    for ( int i = 1; i <= 100; ++i ) {
      foreach ( KeyValuePair<Predicate,Action> kv in table )
       
if ( kv.Key(i) ) kv.Value(i);
    }
  }
}

メンテしやすいったらありゃしないテカー ^^;

投稿日時 : 2007年11月8日 11:06

コメントを追加

# re: しつこくもFizzBuzz 2007/11/08 11:16 裏口

>メンテしやすいったらありゃしない

失礼しました。 m(_ _)m
# でもこれなら初心者でも解りますよwww

# re: しつこくもFizzBuzz 2007/11/08 11:31 シャノン

初めてラムダ式を使いたくなったww

# re: しつこくもFizzBuzz 2007/11/08 11:59 刈歩 菜良

> # でもこれなら初心者でも解りますよwww
うそーーー!!
KeyValuePairクラスやら、delegateが出た段階で初心者さんは「はい、消えたー」ですよ。
(>_<)

# 初心者の通る道 2007/11/08 12:46 Mr.Tの場所

初心者の通る道

# re: しつこくもFizzBuzz 2007/11/08 13:01 裏口

>KeyValuePairクラスやら、delegateが出た段階で初心者さんは「はい、消えたー」ですよ。

そうかなあ?

>delegate bool Predicate(int n); // この条件が満たされたら
>delegate void Action(int n); // こぉします。

きちんとコメント入ってるし、判らないキーワードはHelp見るはず。
何より拡張仕様の可能性の高い部分:KeyValuePairクラス
を追加するには容易なんじゃないかと思いますが。

# re: しつこくもFizzBuzz 2007/11/08 13:13 シャノン

> KeyValuePairクラスやら、delegateが出た段階で初心者さんは「はい、消えたー」ですよ。

それよね。
いい初心者と悪い初心者を分ける境目。
いい初心者は、知らないものは調べる。
悪い初心者は、知らないものは放棄する。

# re: しつこくもFizzBuzz 2007/11/08 13:22 επιστημη

困った初心者は、訊き方がなってない
# 訊くだけマシなんだけどね ^^;

# re: しつこくもFizzBuzz 2007/11/08 13:29 裏口

初心者の分類www

いい初心者:知らないものは調べる
悪い初心者:知らないものは放棄する
困った初心者:(訊くけど)訊き方がなってない

どんだけー

# re: しつこくもFizzBuzz 2007/11/08 13:32 επιστημη

トホホな初心者:そのものヅバリを欲しがる
# 知りたいんじゃない。答えが欲しいだけ。トホホー

# re: しつこくもFizzBuzz 2007/11/08 13:57 刈歩 菜良

んんん~~~
初心者の定義がどうもみなさんといちぢるしく違うっぽい。
# 「分類」ぢゃなくって「定義」ね。

わたしは職業柄、私のお客様はみんな初心者です。
# と、いうか、初心者だからうちのお客様になります。

他の言語経験はあるかもしれないし、全くプログラミング経験がないかもしれない。
変数宣言や分岐構造、繰り返しなどなどを学び、オブジェクトはわかったようなわからないような。
# ほんの数時間の講習でオブジェクト指向が身に付くはずもなく...

IDEでツールボックスから部品をぺたぺた。なんか動いたー。

という方々を初心者と定義しての意見でした。

数日間の教育ではKeyValuePairクラスは勿論delegateなんてのも出てきません。
調べて理解できる人も2割いればいい方だと思います。

FizzBuzz問題はこれぐらいのレベルの方々向けだと思うのですが...

# επιさんの記事には初心者向けとは書いてらっしゃらないので、むしろ私たち向けかと...
# で、私はこんなん大好物です。(●^o^●)

# re: しつこくもFizzBuzz 2007/11/08 14:13 Mr.T

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

>という方々を初心者と定義しての意見でした。
私もそのくらいと考えてました。

>FizzBuzz問題はこれぐらいのレベルの方々向けだと思うのですが...
うわ、どこの授業の問題ってはじめ思いましたw

やはりそのくらいでも、躓く人はいるわけで、そういう人がプログラム初心者ではないかと思います。

# re: しつこくもFizzBuzz 2007/11/08 14:45 刈歩 菜良

MR.Tさん
あ、こちらにも。

>>という方々を初心者と定義しての意見でした。
>私もそのくらいと考えてました。
それを伺ってほっとしました。
(●⌒∇⌒●)

# re: しつこくもFizzBuzz 2007/11/08 17:57 Piz&Yumina

皆さん基本的に剰余を使っていますが、敢えて難しく解いてみる私は異端ですかそうですか

# re: しつこくもFizzBuzz 2007/11/08 17:59 Piz&Yumina

static void Main(string[] args)
{
for (int i = 1; i <= 100; i++)
if (Is3NoBaisu(i) && Is5NoBaisu(i))
Console.WriteLine("FizzBuzz");
else if (Is3NoBaisu(i))
Console.WriteLine("Fizz");
else if (Is5NoBaisu(i))
Console.WriteLine("Buzz");
else
Console.WriteLine(i);

Console.ReadLine();
}

static bool Is3NoBaisu(int n)
{
int keta = (int)Math.Log10(n) + 1;

int kakuketaNoWa = 0;
for (int i = 0; i < keta; i++)
{
kakuketaNoWa += n % 10;
n /= 10;
}

if (kakuketaNoWa >= 10)
return Is3NoBaisu(kakuketaNoWa);
else if (kakuketaNoWa == 3 || kakuketaNoWa == 6 || kakuketaNoWa == 9)
return true;
else
return false;
}

static bool Is5NoBaisu(int n)
{
int keta = (int)Math.Log10(n) + 1;

for (int i = keta; i > 1; i--)
{
int _10NoNZyou = (int)Math.Pow(10, i - 1);

while (n >= _10NoNZyou)
n -= _10NoNZyou;
}

if (n == 0 || n == 5)
return true;
else
return false;
}

# qpUvSKtNrCnKoANJEuy 2011/12/22 21:22 http://www.discreetpharmacist.com/

s1YtHq Thanks for the news! Just was thinking about it! By the way Happy New Year to all of you:D

# hbKglTqknhw 2011/12/26 23:35 http://www.discreetpharmacist.com/ger/index.asp

Hooray! the one who wrote is a cool guy..!

# oLzdqmHteTHnea 2011/12/27 0:18 http://www.discreetpharmacist.com/ger/index.asp

Yeah, in my opinion, it is written on every fence!!...

# xLNpfSvunEuFaEk 2011/12/27 6:22 http://www.laurenslinens.com

Hello! How do you feel about young composers?!...

# pxtJOZLztbcmmsz 2011/12/27 6:30 http://www.67wine.com/

Thanks for the article! I hope the author does not mind if I use it for my course work!...

# VxmmsBTcwcqdCrJB 2012/01/06 22:21 http://www.luckyvitamin.com/c-1151-vitamin-d-formu

It's straight to the point! You could not tell in other words! :D

タイトル
名前
URL
コメント