Hatena::Groupfizzbuzz

id:tyruが<del>毎日</del>気が向いたらFizzBuzzを一生懸命書く日記

|

2010-04-29Acme::FizzBuzz::Descriptive このエントリーのブックマークコメント

最近見たFizzBuzz

fizzbuzz - kyeeva blog!

fizzbuzz returns - kencobaの日記

書いてみる

せっかく久し振りに更新したんだしなんか書いてくか。





(何時間か後)







         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『適当にブログ更新しようと思っていたら
        i|:!ヾ、_ノ/ u {:}//ヘ         いつの間にかAcme::FizzBuzz::Descriptiveというモジュールを作っていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -—一ァ‐゙T´ '"´ /::::/-‐  \    超スピードだとか催眠術だとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…



use Acme::FizzBuzz::Descriptive;

fizzbuzz {
    from 1;
    to 100;
    rule { print "Fizz" } where { $_ % 3 == 0 };
    rule { print "Buzz" } where { $_ % 5 == 0 };
    fallback { print $_ };
    each_loop_end { print "\n" };
};

こんな風にFizzBuzzが書けます。

「自分は人と一風変わったFizzBuzzを書きたい!」

「見た目凄そうなFizzBuzzを書いて同僚と差をつけたい!」

そんな方にピッタリのモジュールです。

どうぞご利用ください。

GitHub - tyru/p5-Acme-FizzBuzz-Descriptive: Write FizzBuzz descriptively.



暇があったら

  • ディレクトリ構造をCPANに合わせる
  • ドキュメント (POD)
  • テスト (書いてないのかよ...とか言われそう)

2010-04-15Perl 5.12, Moose このエントリーのブックマークコメント

日記書いてないことに昨日気づいた。

あとやっぱり無理そうなのでしばらくこのブログは不定期更新にしようと思います。

use strict;
use warnings;
use 5.12.0;
use Moose;

{
    package ArrayFilter 0.00;

    has from => (
        is  => 'ro',
        isa => 'Int',
        required => 1,
    );
    has to => (
        is  => 'ro',
        isa => 'Int',
        required => 1,
    );

    sub filter {    # no filter.
        my ($self, $x) = @_;
        return $x;
    }

    sub print {
        my ($self) = @_;
        for my $n ($self->from..$self->to) {
            print $self->filter($n);
        }
    }

    __PACKAGE__->meta->make_immutable;
}

{
    package FilterRule 0.00;

    has str => (
        is  => 'ro',
        isa => 'Any',
        required => 1,
    );

    has rule_fn => (
        is  => '',
        isa => '',
        required => 1,
    );

    sub hasMatched {
        my ($self, $x) = @_;
        local $_ = $x;
        return $self->rule_fn->();
    }

    __PACKAGE__->meta->make_immutable;
}

{
    package FizzBuzz 0.00;
    extends ArrayFilter;

    has rules => (
        is         => 'rw',
        isa        => 'ArrayRef[FilterRule]',
        auto_deref => 1,
        default    => sub { [] },
    );

    sub add_rule {
        my ($self, $print_obj, $rule_fn) = @_;

        # Push rule.
        $self->rules(
            $self->rules(),
            FilterRule->new(
                str => $print_obj,
                rule_fn => $rule_fn,
            );
        );
    }

    sub filter {    # override.
        my ($self, $x) = @_;

        for my $rule ($self->rules) {
            if ($rule->hasMatched($x)) {
                return $rule->str;
            }
        }
        return $x;
    }

    sub print {
        ...
    }

    __PACKAGE__->meta->make_immutable;
}

no Moose;




my $fizzbuzz = FizzBuzz->new(from => 1, to => 100);
$fizzbuzz->add_rule(Fizz => where { $_ % 3 == 0 });
$fizzbuzz->add_rule(Buzz => where { $_ % 5 == 0 });
$fizzbuzz->print;

実行環境が整わなかったのでまったくの未テスト。

違うバージョンのPerlインストールするのってどうするといいんだろう。

2010-04-10C このエントリーのブックマークコメント


#include <stdio.h>
#include <stdlib.h>


int
main(int argc, char *argv[])
{
    int i;
    for (i = 1; i <= 100; i++) {
        if (i % 15 == 0)
            printf("FizzBuzz");
        else if (i % 5 == 0)
            printf("Buzz");
        else if (i % 3 == 0)
            printf("Fizz");
        else
            printf("%d", i);
        putchar('\n');
    }


    return EXIT_SUCCESS;
}

2010-04-09Perl

Perl - id:tyruが<del>毎日</del>気が向いたらFizzBuzzを一生懸命書く日記 のブックマークコメント

$ perl -MAcme::FizzBuzz -e1

Perl - id:tyruが<del>毎日</del>気が向いたらFizzBuzzを一生懸命書く日記 のブックマークコメント

use Acme::FizzBuzz

これはひどい

2010-04-07Perl - Coro このエントリーのブックマークコメント

昨日せっかく早く起きて習慣化できるかと思ってたのに...

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;

use feature qw(say);
use Coro;

my @fizzbuzz;
for my $i (1..100) {
    push @fizzbuzz, async {
        $i % 15 == 0 ? q(FizzBuzz)
        : $i % 5 == 0 ? q(Buzz)
        : $i % 3 == 0 ? q(Fizz)
        : $i
    };
}

say for map { $_->join } @fizzbuzz;

話変わりますけどAcme::Coro::Sukeはひどいですね。

具体的なひどさを知らない人は

$ cpanm Acme::Coro::Suke    # インストール
$ perldoc Acme::Coro::Suke

して表示されたSYNOPSISのコードを実行してから

http://blog.livedoor.jp/insidears/archives/24999740.html

を見ると理解できると思います。


ネタばらし

Acme::Coro::Sukeをリリースしました | へぼい日記

|