Skip to content

Instantly share code, notes, and snippets.

@savaged
Created July 16, 2019 14:26
Show Gist options
  • Save savaged/6a36f83ba049435e6967ce646e495d91 to your computer and use it in GitHub Desktop.
Save savaged/6a36f83ba049435e6967ce646e495d91 to your computer and use it in GitHub Desktop.
Oop Fizz Buzz
namespace OopFizzBuzz
{
class Program
{
static void Main(string[] args)
{
const int lastNumber = 17;
var app = new Program();
app.Run(lastNumber);
}
private bool _isDone;
void Run(int lastNumber)
{
System.Console.WriteLine($"Playing Fizz Buzz counting to {lastNumber}...");
var counter = new FizzBuzzCounter(lastNumber);
counter.FizzBuzzCount += OnFizzBuzzCount;
counter.FizzBuzzComplete += OnFizzBuzzComplete;
do
{
counter.Count();
} while (!_isDone);
System.Console.ReadLine();
}
private void OnFizzBuzzComplete(object sender, System.EventArgs e)
{
System.Console.WriteLine("Done!");
}
private void OnFizzBuzzCount(object sender, FizzBuzzCountEventArgs e)
{
_isDone = true;
System.Console.WriteLine(e.Output);
}
}
public class FizzBuzzCounter
{
private readonly int _lastNumber;
public FizzBuzzCounter(int lastNumber = 17)
{
_lastNumber = lastNumber;
}
public void Count()
{
for (var i = 1; i < _lastNumber; ++i)
{
var s = string.Empty;
var r = i % 3;
if (r == 0)
{
s = "Fizz";
}
r = i % 5;
if (r == 0)
{
s += "Buzz";
}
if (s == string.Empty)
{
s = i.ToString();
}
RaiseFizzBuzzCount(s);
}
RaiseFizzBuzzComplete();
}
public event System.EventHandler<FizzBuzzCountEventArgs> FizzBuzzCount;
public event System.EventHandler FizzBuzzComplete;
public void RaiseFizzBuzzCount(string count)
{
var handler = FizzBuzzCount;
handler?.Invoke(this, new FizzBuzzCountEventArgs(count));
}
public void RaiseFizzBuzzComplete()
{
var handler = FizzBuzzComplete;
handler?.Invoke(this, System.EventArgs.Empty);
}
}
public class FizzBuzzCountEventArgs : System.EventArgs
{
public FizzBuzzCountEventArgs(string output)
{
Output = output;
}
public string Output { get; }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment