Saved for later reference

online repository of stuff I had to google for hours to figure out – and random snippets of code

FizzBuzz with Reactive Extensions

TAGS: None

I played around with – and tried to do the “classic” FizzBuzz programming test in an obnoxious way.

Here’s what I’ve got so far, but I think it’s possible to make it more convoluted than this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reactive.Linq;

namespace FizzBuzz
{
    public delegate void NumberEventHandler(object sender, long e);

    class Program
    {
        public static event NumberEventHandler AnyNum;

        static void Main(string[] args)
        {
            var numbergenerator = Observable.Interval(TimeSpan.FromMilliseconds(1));
            var numbers = from n in numbergenerator where n > 0 && n <= 100 select n;

            var numberobs =
                    Observable.FromEvent<NumberEventHandler, long>(
                                ev => { NumberEventHandler neh = (sender, e) => { ev(e); }; return neh; },
                                ev => AnyNum += ev,
                                ev => AnyNum -= ev);

            var watchforfizz = from n in numberobs where n % 3 == 0 select "Fizz";
            var watchforbuzz = from n in numberobs where n % 5 == 0 select "Buzz";
            var watchforothers = from n in numberobs select ((n % 3 != 0 && n % 5 != 0)?n.ToString():"") + "\n";

            watchforfizz.Subscribe(x => { Console.Write(x); });
            watchforbuzz.Subscribe(x => { Console.Write(x); });
            watchforothers.Subscribe(x => { Console.Write(x); });
            numbers.Subscribe(x => AnyNum(null, x));
           
            Console.ReadKey();
        }
    }
}

Key features are the number generator, and the three filter event handlers. I feel like there should a better way of handling the “regular” numbers, but close enough.

Share

© 2009 Saved for later reference. All Rights Reserved.

This blog is powered by Wordpress and Magatheme by Bryan Helmig.