using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace FizzBuzz
|
|
{
|
|
class Program
|
|
{
|
|
static void Main(string[] args)
|
|
{
|
|
int start = 01;
|
|
int end = 100000;
|
|
|
|
//For information about Dotnet List Can be found
|
|
// https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=net-6.0
|
|
List<Divisor> divisorList = new List<Divisor>();
|
|
|
|
//Intialize word list
|
|
divisorList.Add(new Divisor(3, "Fizz"));
|
|
divisorList.Add(new Divisor(5, "Buzz"));
|
|
divisorList.Add(new Divisor(7, "Fuzz"));
|
|
divisorList.Add(new Divisor(11, "Bizz"));
|
|
divisorList.Add(new Divisor(13, "Biff"));
|
|
|
|
List<string> Output = new List<string>();
|
|
|
|
//Meat & Potatoes
|
|
for (int i = start; i <= end; i++)
|
|
{
|
|
string output = "";
|
|
|
|
foreach(Divisor div in divisorList)
|
|
{
|
|
if (i % div.Div == 0)
|
|
output += div.Word;
|
|
}
|
|
|
|
if(output == string.Empty)// output == ""
|
|
output = i.ToString();
|
|
|
|
Output.Add(output);
|
|
Console.WriteLine(output);
|
|
}
|
|
|
|
Console.WriteLine(string.Join(",", Output.Distinct().Where(s=> int.TryParse(s, out _)==false)));
|
|
PrintStatisticsReport(Output, divisorList);
|
|
|
|
//PROOF of Concept
|
|
/*for (int i = 1; i <= 100; i++)
|
|
{
|
|
if (i % 3 == 0)
|
|
Console.Write("Fizz");
|
|
|
|
if (i % 5 == 0)
|
|
Console.Write("Buzz");
|
|
|
|
if (i % 3 != 0 && i % 5 != 0)
|
|
Console.Write(i);
|
|
|
|
Console.WriteLine();
|
|
}*/
|
|
}
|
|
|
|
static void PrintStatisticsReport(List<string> output, List<Divisor> divisorList)
|
|
{
|
|
string TABLE_FORMAT = "|{0,-20}|{1, -10}|";
|
|
string TABLE_LINE = "|--------------------|----------|";
|
|
List<string> outcomes = output.Distinct().Where(s => int.TryParse(s, out _) == false).ToList<string>();
|
|
|
|
//TABLE HEADER
|
|
Console.WriteLine(TABLE_LINE);
|
|
Console.WriteLine(string.Format(TABLE_FORMAT, "OUTCOMES", "COUNT"));
|
|
Console.WriteLine(TABLE_LINE);
|
|
|
|
//TABLE CONTENT
|
|
foreach (string outcome in outcomes)
|
|
{
|
|
var outcomeCount = output.FindAll(s => s.Equals(outcome)).Count();
|
|
Console.WriteLine(string.Format(TABLE_FORMAT, outcome.TrimEnd(), outcomeCount.ToString()));
|
|
|
|
}
|
|
//TABLE END
|
|
Console.WriteLine(TABLE_LINE);
|
|
}
|
|
|
|
//https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/classes
|
|
class Divisor
|
|
{
|
|
private int _div;
|
|
public Divisor(int div, string word)
|
|
{
|
|
Div = div;
|
|
Word = word;
|
|
}
|
|
|
|
//Property More information: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties
|
|
public int Div
|
|
{
|
|
get
|
|
{
|
|
return _div;
|
|
}
|
|
set
|
|
{
|
|
_div = value;
|
|
}
|
|
|
|
}
|
|
public string Word { get; set; }
|
|
}
|
|
|
|
|
|
}
|
|
}
|