Created
July 16, 2019 14:26
-
-
Save savaged/6a36f83ba049435e6967ce646e495d91 to your computer and use it in GitHub Desktop.
Oop Fizz Buzz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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