「BUZZ」を含む日記 RSS

はてなキーワード: BUZZとは

2011-01-14

http://anond.hatelabo.jp/20110114224058

まぁ、今時は32Bitだし 100までしかFizzBuzzは回さないだろうから、動くんだろうな。

どうでもいいけど

cout 書いたなら、strstreamだろうし sprintf使うならprintfだろうなぁと

int main(void){

  int i;

  for(i = 1 ; i <= 100 ; i++){

    printf("%d \0Fizz \0FizzBuzz "+(i%5?(i%3?0:4):(i%3?14:10)),i);

  }

  printf("\n");

  return 0;

}

ちなみにFizzBuzzを短くするなら、こう。printfの""はポインタである。というのをつかって\0を文字列に入れ込み、数値の演算結果で文字列シフトする。

Buzz単体を表示したい時にはFizzBuzz+4相当で表示できる というのがさらにポイント

だが、こんなプログラム実際に書いてあったら、レビュー却下するだろうな・・・

難読化されているわりには、プログラム的に速くなるわけでもなんでもないから。

http://anond.hatelabo.jp/20110114214708

もちろん

if(!i%15){
  std::cout << "fizzbuzz" << std::endl;
}else if(!i%5){
  std::cout << "buzz" << std::endl;
}else if(!i%3){
  std::cout << "fizz" << std::endl;
}else{
  std::cout << i << std::endl;
}

とか書くことはできますが、見やすさとかそういう話はいいかと思って短くしてみました

あと3項演算子の:の左右で違う型を受け付けてくれないので、intを文字列に変換する必要がありました

sprintfを使わないで変換する方法がわからなかったもので。

「ヤバい」と書かれた方でしょうか?

http://anond.hatelabo.jp/20110114210551

ゴルフやってんじゃないんだから三項演算子とか無駄なsprintfとか使う必要ないと思うんだが

if fizzbuzz else if fizz else if buzz else print n

ぐらいでいいんだよ。

http://anond.hatelabo.jp/20110114202812

void fizzbuzz(int n)
{
  for(int i=1;i<=n;i++){
    char ich[sizeof(int)];
    sprintf(ich,"%d",i);
    std::cout << ((i%15==0)?"fizzbuzz":((i%5==0)?"buzz":((i%3==0)?"fizz":ich))) << std::endl;
  }
}

コードとかほんと苦手。

2010-08-16

if も 3項演算子も for も do whileすらもない ifなしの Fizz Buzz

だから、プログラム記法がなくても<>が無いから化けないぜ

#include "stdio.h"
#include "stdlib.h"

int cnumber=0;

void fizz(){
    printf("fizz");
    cnumber++;
};

void nonfizz(){
};

void buzz(){
    printf("buzz");
    cnumber++;
};

void nonbuzz(){
};

void number(int i){
    printf("%d",i);
    cnumber = 0;
}

void nonnumber(int i){
    cnumber = 0;
}

void myexit(void){
    printf("\n Hit return key to exit\n");
    getchar();
    exit(1);
}

void noexit(void){
}

void (*pfizz[3])() = {fizz,nonfizz,nonfizz};
void (*pbuzz[5])() = {buzz,nonbuzz,nonbuzz,nonbuzz,nonbuzz};
void (*pnumber[3])(int) = {number,nonnumber,nonnumber};
void (*pmyexit[2])() = {noexit,myexit};

int main(int argc, char* argv[])
{
    int loopmax = (111+222+333)*10;
    int i = 1;
    head:
    (*pfizz[i%3])();
    (*pbuzz[i%5])();
    (*pnumber[cnumber])(i);
    (*pmyexit[!(loopmax-i)])();
    printf(",");
    i++;
    goto head;
    return 0;
}

includeが<>を使ってないので必要ならパスは各自で通してねw

2010-08-15

http://anond.hatelabo.jp/20100815054742

FizzBuzz面接でのエピソードの典型としてネタに良く取り上げられる理由は

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

これを読むとわかると思います。

ここにあるように、まともな面接官なら

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

仕様を説明してするでしょうね。知ってるか知ってないかはあまり問題ではないです。

他にも面接に使われるモチーフはいくつかありますけど、どれも仕様解釈する力、プログラムでの表現力を確認するのが目的

2010-08-13

http://anond.hatelabo.jp/20100813021101

つ http://revilog.com/2010/08/c-fizzbuzz-printf.html

#include <stdio.h>

int main(void){
    int i;
    for(i = 1 ; i <= 100 ; i++){
        printf("%d \0Fizz \0FizzBuzz "+(i%5?(i%3?0:4):(i%3?14:10)),i);
    }
    printf("\n");
    return 0;
}

有効行数的{}を取るとか 以外で、これよりもFizz Buzzを短く出来る?

Pythonfizzbuzz

def fizzbuzz(n):
	def fb_iter(m):
		if(m>n):
			return
		else:
			if(m%15==0):
				print("FizzBuzz")
			elif(m%3==0):
				print("Fizz")
			elif(m%5==0):
				print("Buzz")
			fb_iter(m+1)
	fb_iter(1)

プログラミングセンスとかマジ無いわー

ていうか増田っていつになったらコード記法対応するんだろう?

永遠に無理か。

ハイライト無しならいけるのか

2010-02-22

http://anond.hatelabo.jp/20100222110752

かっけぇ。w

つか、そのレベルを求めるなら、いっそGoogleMicrosoftばりの試験すりゃいんじゃね?

もちろん試験する側の才覚も問われるが。

どっかで読んだけど、課題を出して数時間放置、結果をプレゼンさせるみたいな試験があるそうな。

問題が何処にあって、どういう解決が必要で、そのためのアプローチをどうするか、居並ぶ技術屋を納得させなきゃ駄目なんさ。


どういう技術屋が欲しくて、「テトリス」と言ってるのかは判らんけれど、それは「Fizz Buzz」とかわらんだろう。

テトリスに対するブレークスルーの斬新さを評価するとか?w

http://anond.hatelabo.jp/20100222110139

単純な話、試験する側の都合8時間以上かけられてもこまる。

Fizz Buzzなら30分以内だな。

動けば良いだけの適正を見るだけのテトリスなら8時間もあれば対外の奴はくみ終わるだろ。実質時間制限がないのと同じだ。

ちなみに、俺は高校時代でテトリスはくめる。大学時代暇だったので、授業時間テトリス組見始めて、授業終わる前に遊んでた。

ただ、アニメーションゲーム程度は小学校時代にも組めたので、テトリス小学校時代にあったら組んでたかもな。

だいたいそういう奴はどこの大学にも100人~1000人に一人ぐらいの割合でいる。そういう奴を見つけ出すためのテスト

Fizz Buzzにしろ、16進ダンプにしろ出来て当たり前すぎて、テストにならん。(※自称プログラマー現実はおいておいて)

ちなみに動くだけテトリスはあほみたいに簡単な分類。

http://anond.hatelabo.jp/20100222012026

新人とつけるべきか)プログラマの実力を計るなら、16進ダンプ一択だ。

ファイル入出力、型変換、ループ処理、フォーマット整形、GUI文化なら、それらオブジェクトの扱いからスクロールまで。

一通りの基礎的な概念の理解度を計れる。

なにかの言語で作った後に、別の言語でも作らせて見れば、設計と実装言語は分けて考えることも可能だと理解できるだろう。


ところで、試験として時間縛った中での設計コーディングに、何の意味があるんだ?

そんなのは単なる曲芸で、仕事じゃ求められない。

適正を見るだけなら、「Fizz Buzz」で十分だ。

2010-02-12

http://anond.hatelabo.jp/20100210185450

ああ、google buzz やっぱりこんな展開に・・・

昔の彼女メアドが設定されすぐに切りました。 RT @***: やばいよねRT @***: お節介グーグル勝手Buzz友達を設定…あなたが誰とメールをやり取りしたかが別の関係ない人にわかってしまう。

2010-02-10

twitterって、微妙検索機能が貧弱なのが、ゆるーいコミュニティを作るのに

マッチしてると思ってるんだけど、これをgoogleが真似して

バリバリ検索して見つかっちゃいます!!もしかしてあなたにはこの人がおすすめ!!

なんて機械的にゴリゴリやっちゃうと、また違った感じになるんだろうなぁ・・・

追記:あー、おれもダンコガイと同じこと考えてたとはなー

Google Buzz がただの buzz で終わる(かも知れない)理由

http://blog.livedoor.jp/dankogai/archives/51399165.html

2009-09-29

OOPFizzBuzz

あえてプログラミングゴルフの正反対を目指してみる。

class FizzBuzzProgram{
	public static void main(String args[]){
		for (int i = 0; i++ < 100; ) {
			System.out.println(new Number(i).checkMod3().checkMod5());
		}
	}
}

interface Mod3Mod5Unchecked extends Mod5Unchecked {
	public Mod5Unchecked checkMod3();
}

interface Mod5Unchecked {
	public Object checkMod5();
}

class Number implements Mod3Mod5Unchecked{
	private int no;
	public Number (int no) { this.no = no; }
	public Mod5Unchecked checkMod3() {
		return no % 3 == 0 ? new Fizz(no) : this;
	}
	public Object checkMod5() {
		return no % 5 == 0 ? new Buzz() : this;
	}
	public String toString() { return Integer.toString(no); }
}

class Fizz implements Mod5Unchecked{
	private int no;
	public Fizz (int no) { this.no = no; }
	public Object checkMod5() {
		return no % 5 == 0 ? new FizzBuzz() : this;
	}
	public String toString() { return "Fizz"; }
}

class Buzz {
  	public String toString() { return "Buzz"; }
  }

class FizzBuzz {
	public String toString() { return "FizzBuzz"; }
}

2009-09-25

25歳童貞プログラマーの俺が全レスします

1 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2009/09/25(金) 13:35:12.60 ID:+TARyGqc0

一生童貞だろうか

84 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2009/09/25(金) 15:52:07.44 ID:LOkx6/No0

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

86 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2009/09/25(金) 15:55:18.62 ID:+TARyGqc0

sub function main

for i as integer = 1 to 100

if

next

87 名前:以下、名無しにかわりましてVIPがお送りします[] 投稿日:2009/09/25(金) 15:58:55.18 ID:+TARyGqc0

&gt;&gt;84

書いてる途中で送ったからやる気がなくなったすまん。

VBerなのでアシスト昨日ないとダメだな。

本当に書けないのかよ…

参考:http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

引用元:http://yutori7.2ch.net/test/read.cgi/news4vip/1253853312/

2009-04-28

http://anond.hatelabo.jp/20090428121628

ASPという言葉が使い古されて、SaaSという言葉になった。

SaaSという言葉が使い古されて、クラウドとか言い始めた。

厳密にはクラウドコンピューティングというのは技術的になかなか便利なのだが、

その意味でつかっているコンサルタント(笑)は既に壊滅。

web2.0のようなbuzz wordに生まれ変わっております。

2009-02-19

http://anond.hatelabo.jp/20090213162149

大変だったね。元増田乙。

まあ、他人がどうするかに期待するよりも、自分で対策取る方が安全・確実だ、というのは間違いないんじゃないの。

(もちろん、それは対策をとらなかった元増田が責められるべき、って話じゃないけど。為念)

相手がこちら側の期待した能力を持っていることは「あるべき理想」であっても「当然・必然」ではないから・・・。

既にブコメでも似たような指摘付いてるけど、そういうの、わかんない人にはそれこそ一生わかんないよ。

それを「社会人として当たり前」という風に怒ることは正しいとしても、あまり合理的ではないと思う。

社会人であっても、「職務上の要請で人と変わりなく接する」ことを要求される立場にない人は、

増田が言うような「社会人として当たり前」の意識持ってないこと多いよ。いちいち腹を立てたり、

不快感を覚えたりするのも疲れるだろうし、そういうもんだと思って割り切った方が楽。

何回誘われたのかは分からないけど、この人は婉曲に言ってもわからないのだな、と思える閾値を超えるようなら、

直接伝えちゃった方が確実だね。「嫌なことははっきり嫌と言う」文化の人だったら、

「嫌」ってはっきり言うとあっけないぐらいあっさり引いたりすることもあるし。

不快に思ったら出来るだけ失礼のないように直接的表現で伝えた方がいいかも。


あと、「社会人として当たり前」と言うのは、人によって定義も扱いもまるで変わってくるbuzzワードなので、

あまり自明の前提として使わない方がいいと思う。場合によってはそれこそ正に元増田が「加害者のように扱われそう」。


・・・まあ、正直おれもあんまり「当たり前」じゃない方の人です。なんか仲間がご迷惑を掛けたようですみませんでした・・・。

元増田会社生活に平穏があらんことを。

2008-12-12

プログラマーへの道

3Kだの7Kだの言われるプログラマー1年目のオレが

どうしようもなくIT業界に進むことになった学生に寝ぼける。

まずはひとつの言語をとことんやれ

プログラミング言語の種類にはC、VBJAVADelphiPHPPerlとか無数にあるが

どれでもいいからひとつ好きなの選んで学べ。

どれにしようかと迷うぐらいならCかJAVAやっとけ。

あまりマイナー言語プログラミグ嫌いになるからやめとけ。

まずは基礎だ

いきなり難しいことしようとは考えず、入門書通りに文字を表示したり

掛け算したりそういうのを確実にやれ。

FizzBuzzっていう基礎さえできてれば屁をこく方が難しいプログラミングがある。

1からどんどん数を増やしていくプログラミングだ。

3の倍数になった場合は数字の変わりに「Fizz」と表示させて

5の倍数になった場合は数字の変わりに「Buzz」と表示させる。

3と5の公倍数になった場合は数字の変わりに「FizzBuzz」と表示させるシンプルプログラムだ。

プログラミングできるって言っておいてこれもできない奴が結構いるわけだ。

学習の仕方

とりあえず入門書買って順々に進んで行け。

大抵のサイトはやり方と簡単な説明だけで詳細な説明が載ってないから本は買え。

そして一気にやろうとするな。先週やったことを30分でもいいから今週にもしろ。

ソースコピペじゃなくて自分の手で打ち込め。足でもいいぞ。

ミスすることはとてもステップアップに繋がるからな。

IDEや補完機能がついたエディタなんて使わないで

メモ帳で作って、コマンドプロンプトからコンパイルすること。

あと、目標を立てろ。1日10ページとか1章とかそんなんでいいから

そして最後の5分は今日やったことをノートでもブログにでも書け。

本とかの練習問題では目標タイムとか書いてあるからそれを守るように解いていけ。

時間を多めにとってある入門書の練習問題程度で目標タイムに届かなかったら前の章からやり直せ。

仕事生産性が非常に大切だ。 仕事遅いのにできる人より残業して給料貰ってる汚い大人にはなるなよ。

とりあえず基礎だ基礎。

基礎を学び終わったら

普通なら応用に進むのが普通だろうと思うが、これからプログラマになるわけだから

環境を変えてやってみるのもいいと思う。基礎さえ確実にマスターしておけば

応用的なものはその都度調べることの繰り返しで結構覚えれるもの。

ここからはメモ帳からサクラエディタ秀丸エディタに変えてプログラミングしてみたり

EclipseVisual Studioを使ってこういったツールが非常に便利であることを体験しろ。

仕事はこういったツールがないとやっていけない。

そして意外とこういったツールを使いこなせていないプログラマが沢山いる。

使いこなすことによって仕事量が増えるだけでなく、ミスも減らすことができる。

まだ余裕があるなら

英語できないならプロラミング関係英語を最低限覚えろ。

英語エラー吐き出されただけでため息出すようじゃ話にならん。

ネットで調べても英語サイトがよく引っかかるわけだ。

あと、エラーメモ帳作れ。これ以外と人にもつかえる。

2008-10-30

http://anond.hatelabo.jp/20081030224457

ん?ん?

なんだ・・・?

そんなの計算するまでもなく

writeln("Fizz");

writeln("Buzz");

とか記述していけばいいだけの話で、改行コードもあわせて出力しちゃえば1行でいけるぜ!

みたいなことに、なってないか?

それはちょっと違うような気がする。

いやさ、確かに仕様は満たすんだけどさ。

http://anond.hatelabo.jp/20081025202001

いまさらだがFizzBuzz

1から100まで、3の倍数5の倍数云々って、全部定数の計算じゃね?

というところに気付き、自称メタプログラマー(略してメタグラマー)俺の血が騒いだ。

定数計算なら、それは実行時ではなくコンパイル時に行なわれるべきだ……。

というわけでC++テンプレートメタプログラミング召喚。

#include <iostream>

const int FIZZ_NUM = 3;
const int BUZZ_NUM = 5;
const int BEGIN_NUM = 1;
const int END_NUM = 101;

template<int N> struct Fizz {
    enum {PRINT = 0, NEXT = N + 1};
    static void print() {}
};

template<int N> struct Buzz {
    enum {PRINT = 0, NEXT = N + 1};
    static void print() {}
};

template<int N, bool ForB> struct Number {static void print() {std::cout << N;}};

template<> struct Fizz<FIZZ_NUM> {
    enum {PRINT = 1, NEXT = 1};
    static void print() {std::cout << "Fizz";}
};

template<> struct Buzz<BUZZ_NUM> {
    enum {PRINT = 1, NEXT = 1};
    static void print() {std::cout << "Buzz";}
};

template<int N> struct Number<N, true> {static void print() {}};

template<int N, int F, int B> struct FizzBuzz {
    static void print() {
        typedef ::Fizz<F> Fizz;
        typedef ::Buzz<B> Buzz;
        
        Fizz::print();
        Buzz::print();
        Number<N, Fizz::PRINT || Buzz::PRINT>::print();
        std::cout << std::endl;
        
        FizzBuzz<N + 1, Fizz::NEXT, Buzz::NEXT>::print();
    }
};

template<int F, int B> struct FizzBuzz<END_NUM, F, B> {static void print() {}};

int main(int argc, char **argv)
{
    FizzBuzz<BEGIN_NUM, 1, 1>::print();
    return 0;
}

ifなし%なしループ系なし、しかも実行時オーバーヘッドなし!(多分)

あ、これを見て理解する人間オーバーヘッドは無視ね。

ああ、久しぶりにC++を触ったけど、やっぱC++テンプレートってダメダメだな。20世紀の遺物といわざるを得ない。

君がもし21世紀モテイケメンメタグラマーなら、21世紀プログラミング言語D言語を使うべきだ!

驚くべきことに、D言語コンパイル時に関数が実行でき、その結果をソースコードとして取り込める!

ただし実行できるのは簡単な関数だけだけど……。

以下、それを使ったD言語によるメタプログラミング的実装。

import std.stdio;

// これでFizzBuzzを全部出力するコードを作るぜ!
string makeFizzBuzzCode() {
    string code;
    for(int i = 1; i <= 100; ++i) {
        // 効率? コンパイル時にそんな配慮は要らん!
        if(i % 3 == 0 &amp;&amp; i % 5 == 0) {
            code ~= "writefln(\"FizzBuzz\");\n";
        } else if(i % 3 == 0) {
            code ~= "writefln(\"Fizz\");\n";
        } else if(i % 5 == 0) {
            code ~= "writefln(\"Buzz\");\n";
        } else {
            code ~= "writefln(" ~ static_itoa(i) ~ ");\n";
        }
    }
    return code;
}

int main(string[] args) {
    // おまけで生成されたコードも見せるよ。
    pragma(msg, makeFizzBuzzCode());
    
    // 生成したコードを埋め込む。コピペみたいな感覚
    mixin(makeFizzBuzzCode);
    return 0;
}

// 以下ユーティリティ。このぐらい標準で欲しいな……。

/// 整数文字列変換(コンパイル時)
string static_itoa(int n) {
    if(n == 0) {
        return "0";
    }
    
    // 10で割りながら余りを文字にして追加。桁が逆転した文字列になる。
    string s;
    for(; n; n /= 10) {
        s ~= ("0123456789")[n % 10];
    }
    
    // 桁位置を正常にする。相変わらず効率無視。
    return static_reverse(s);
}

/// 配列リバースコンパイル時)
/// 実行時ならarray.reverseが使えるんだけどね……。
T[] static_reverse(T)(T[] s) {
    T[] result;
    foreach_reverse(c; s) {
        result ~= c;
    }
    return result;
}

// 心配なので静的ユニットテスト(笑)
unittest {
    static assert(static_itoa(0) == "0");
    static assert(static_itoa(10) == "10");
    static assert(static_itoa(999) == "999");
    static assert(static_itoa(9999) == "9999");
    static assert(static_itoa(12345) == "12345");
    static assert(static_itoa(314159265) == "314159265");
}

コンパイル結果

$ dmd -unittest fizz_buzz.d
writefln(1);
writefln(2);
writefln("Fizz");
writefln(4);
writefln("Buzz");
writefln("Fizz");
writefln(7);
writefln(8);
writefln("Fizz");
writefln("Buzz");
writefln(11);
writefln("Fizz");
writefln(13);
writefln(14);
writefln("FizzBu(ry

出力結果は略。

さすがD言語C++JavaC#にできない事を平然とやってのけるッ

そこにシビれる!あこがれるゥ!

というか、

writefln(1);
writefln(2);
writefln("Fizz");
writefln(4);

もうwritefln(出力関数)要らなくね?

修正。

// これでFizzBuzzを全部出力するぜ!
string makeFizzBuzzCode() {
    string code;
    for(int i = 1; i <= 100; ++i) {
        // 効率? コンパイル時にそんな配慮は要らん!
        if(i % 3 == 0 &amp;&amp; i % 5 == 0) {
            code ~= "FizzBuzz\n";
        } else if(i % 3 == 0) {
            code ~= "Fizz\n";
        } else if(i % 5 == 0) {
            code ~= "Buzz\n";
        } else {
            code ~= static_itoa(i) ~ "\n";
        }
    }
    return code;
}

int main(string[] args) {
    // もうコンパイル時のメッセージしか出さない。(笑)
    pragma(msg, makeFizzBuzzCode());
    return 0;
}

コンパイル結果。

$ dmd -unittest fizz_buzz.d
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBu(ry

実行するまでもなく結果が出力された。つまり実行時間ゼロ、ということは……

世 界 最 速

以上、世界最速なD言語宣伝でした。

みんな使おうD言語

D言語リファレンス日本語

http://www.kmonos.net/alang/d/1.0/index.html(1.0。こっちの方が安定してる?)

http://www.kmonos.net/alang/d/2.0/index.html(もっと凄い2.0)

D言語本家配布元(無料コンパイラが入手できます)

http://www.digitalmars.com/

それにしても、ちゃんとD言語シンタックスハイライトを実装しているはてなは偉い。(笑)

2008-10-28

http://anond.hatelabo.jp/20081028124833

じゃ、少しだけ本気出してみたよ。要求仕様にかなうといいんだけど。

#include <stdio.h>

int main(void) {
    puts("1");
    puts("2");
    puts("Fizz");
    puts("4");
    puts("Buzz");
    puts("Fizz");
    puts("7");
    puts("8");
    puts("Fizz");
    puts("Buzz");
    puts("11");
    puts("Fizz");
    puts("13");
    puts("14");
    puts("FizzBuzz");
    puts("16");
    puts("17");
    puts("Fizz");
    puts("19");
    puts("Buzz");
    puts("Fizz");
    puts("22");
    puts("23");
    puts("Fizz");
    puts("Buzz");
    puts("26");
    puts("Fizz");
    puts("28");
    puts("29");
    puts("FizzBuzz");
    puts("31");
    puts("32");
    puts("Fizz");
    puts("34");
    puts("Buzz");
    puts("Fizz");
    puts("37");
    puts("38");
    puts("Fizz");
    puts("Buzz");
    puts("41");
    puts("Fizz");
    puts("43");
    puts("44");
    puts("FizzBuzz");
    puts("46");
    puts("47");
    puts("Fizz");
    puts("49");
    puts("Buzz");
    puts("Fizz");
    puts("52");
    puts("53");
    puts("Fizz");
    puts("Buzz");
    puts("56");
    puts("Fizz");
    puts("58");
    puts("59");
    puts("FizzBuzz");
    puts("61");
    puts("62");
    puts("Fizz");
    puts("64");
    puts("Buzz");
    puts("Fizz");
    puts("67");
    puts("68");
    puts("Fizz");
    puts("Buzz");
    puts("71");
    puts("Fizz");
    puts("73");
    puts("74");
    puts("FizzBuzz");
    puts("76");
    puts("77");
    puts("Fizz");
    puts("79");
    puts("Buzz");
    puts("Fizz");
    puts("82");
    puts("83");
    puts("Fizz");
    puts("Buzz");
    puts("86");
    puts("Fizz");
    puts("88");
    puts("89");
    puts("FizzBuzz");
    puts("91");
    puts("92");
    puts("Fizz");
    puts("94");
    puts("Buzz");
    puts("Fizz");
    puts("97");
    puts("98");
    puts("Fizz");
    puts("Buzz");
    return 0;
}

http://anond.hatelabo.jp/20081026132547

FizzBuzz続き

Cにもlambdaがあればいいのに

#include <stdio.h>
#include <unistd.h>
#define FALSE 0
#define TRUE !FALSE

typedef struct state_t {
    int state;
    int num;
    int max;
    int outputted;
} state_t;

typedef struct fsm_t {
    state_t *(*func)(struct fsm_t *, state_t *);
    int divider;
    char *str;
} fsm_t;

static state_t *fizzbuzz(fsm_t *, state_t *);
static state_t *end_of_line(fsm_t *, state_t *);
static state_t *cond(fsm_t *, state_t *);
static state_t *succ(fsm_t *, state_t *);

static fsm_t fsm[] = {
    { fizzbuzz, 3, "Fizz" },
    { fizzbuzz, 5, "Buzz" },
    { end_of_line, 0, NULL },
    { cond, 0, NULL },
    { NULL, 0, NULL },
};

static state_t *fizzbuzz(fsm_t *fsm, state_t *cur) {
    if ((cur->num % fsm[cur->state].divider) == 0) {
        printf("%s", fsm[cur->state].str);
        cur->outputted = TRUE;
    }
    return succ(fsm, cur);
}

static state_t *end_of_line(fsm_t *fsm, state_t *cur) {
    if (!cur->outputted)
        printf("%d", cur->num);
    puts("");
    cur->outputted = FALSE;
    return succ(fsm, cur);
}

static state_t *cond(fsm_t *fsm, state_t *cur) {
    if (++cur->num > cur->max)
        return NULL;
    return succ(fsm, cur);
}

static state_t *succ(fsm_t *fsm, state_t *cur) {
    if (fsm[++cur->state].func == NULL)
        cur->state = 0;
    return cur;
}

int main(void) {
    state_t state = { 0, 1, 100, FALSE };
    state_t *cur = &state;

    while ((cur = (*fsm[cur->state].func)(fsm, cur)) != NULL)
        ;

    return 0;
}

2008-10-26

DRYFizzBuzz

http://anond.hatelabo.jp/20081026002746

ステートマシン大好きっ子としては書かずにいられない

もう少しがんばればforも無くせるな

fsmの中身ってDRYなの?的な話もあるだろうが,こんなもの他のプログラム自動生成すればいいんだよ!(開き直り)

#include <stdio.h>

static int process(unsigned char *str, int c) {
    if (str != NULL)
        puts(str);
    else
        printf("%d\n", c);
    return ++c % (3 * 5);
}

static int iter(int c) {
    return process(NULL, c);
}

static int fizz(int c) {
    return process("Fizz", c);
}

static int buzz(int c) {
    return process("Buzz", c);
}

static int fizzbuzz(int c) {
    return process("FizzBuzz", c);
}

static int (*fsm[])(int) = {
    fizzbuzz, iter, iter, fizz, iter,
    buzz, fizz, iter, iter, fizz,
    buzz, iter, fizz, iter, iter
};

int main(void) {
    int i, state;

    for (i = state = 1; i <= 100; i++) {
        state = (*fsm[state])(i);
    }

    return 0;
}

main(i){
  for(;i<101;puts("buzz"-i*i++%5))
  printf(i%3?i%5?"%d":0:"fizz",i);
}

こうだな

http://anond.hatelabo.jp/20081025233759

Thanks. 確かにそうなんだけど、putsだと勝手に改行が出力されてしまうので一ヶ所しか使えなかった。DRY、forなし、ifなし(:?使ってるのでインチキだけど)、main以外に関数なし風味。これで完成ということにして寝ます。

int main() {
  int fizz_buzz(int i, int limit) {
    int do_fizz_buzz(int num, int divisor, const char* str, int print) {
      return num % divisor == 0 ? do_fizz_buzz(num / divisor, divisor, str, 1) : (printf("%s", print ? str : ""), num);
    }
    do_fizz_buzz(do_fizz_buzz(i, 3, "Fizz", 0), 5, "Buzz", 0) == i ? printf("%d\n", i) : puts("");
    return i++ == limit ? 0 : fizz_buzz(i, limit);
  }
  return fizz_buzz(1, 100);
}

移植性の話は厳禁でw

ログイン ユーザー登録
ようこそ ゲスト さん