Сегодня прочитал у
Джеффа Этвуда, что 199 из 200 людей имеющих Graduate по Computer Science не могу писать код. Он привёл простой прмиер: эти люди не могу написать простую прогу:
Для всех чисел от 0 до 100: вывести на экран Buzz если число делится на 3, Fizz - если на 5, и BuzzFizz если на 15. Во всех остальных случаях вывести само число.
Я немного охуел когда это прочитал. Неужели у них в штатах и правда настолько плохо с мозгами? Охуели и остальные читатели его блог, заспамили его комментами, после чего блог слёг. :(
Но я успел вытащить из комментов аццкую абасцаку.
Чел хорошо постебался:
public abstract class Factory
{
public string ToString(char[] chars)
{
return new string(chars);
}
}
public class FizzFactory : Factory
{
private const char F = 'F';
private const char i = 'i';
private const char z = 'z';
public bool isFizz(int input)
{
if (input == 3) return true;
else if (input == 6) return true;
else if (input == 9) return true;
else if (input == 12) return true;
else if (input == 15) return true;
else if (input == 1 return true;
else if (input == 21) return true;
else if (input == 24) return true;
else if (input == 2 return true;
else if (input == 30) return true;
else if (input == 33) return true;
else if (input == 36) return true;
else if (input == 39) return true;
else if (input == 42) return true;
else if (input == 45) return true;
else if (input == 4 return true;
else if (input == 51) return true;
else if (input == 54) return true;
else if (input == 57) return true;
else if (input == 60) return true;
else if (input == 63) return true;
else if (input == 66) return true;
else if (input == 69) return true;
else if (input == 72) return true;
else if (input == 75) return true;
else if (input == 7 return true;
else if (input == 81) return true;
else if (input == 84) return true;
else if (input == 87) return true;
else if (input == 90) return true;
else if (input == 93) return true;
else if (input == 96) return true;
else if (input == 99) return true;
else return false;
}
public string GetFizz()
{
return base.ToString(new char[4] { F, i, z, z });
}
}
public class BuzzFactory : Factory
{
private const char B = 'B';
private const char u = 'u';
private const char z = 'z';
public bool isBuzz(int input)
{
if (input == 5) return true;
else if (input == 10) return true;
else if (input == 15) return true;
else if (input == 20) return true;
else if (input == 25) return true;
else if (input == 30) return true;
else if (input == 35) return true;
else if (input == 40) return true;
else if (input == 45) return true;
else if (input == 50) return true;
else if (input == 55) return true;
else if (input == 60) return true;
else if (input == 65) return true;
else if (input == 70) return true;
else if (input == 75) return true;
else if (input == 80) return true;
else if (input == 85) return true;
else if (input == 90) return true;
else if (input == 95) return true;
else if (input == 100) return true;
else return false;
}
public string GetBuzz()
{
return base.ToString(new char[4] { B, u, z, z });
}
}
public delegate void FizzBuzzWriter(string input);
public class Looper
{
private FizzFactory Fizz;
private BuzzFactory Buzz;
public event FizzBuzzWriter OnFizzBuzz;
public Looper(Factory fizzFact, Factory buzzFact)
{
Fizz = (FizzFactory) fizzFact;
Buzz = (BuzzFactory) buzzFact;
}
public void execute(int start, int finish)
{
for(int i = start; i<=finish; i++)
{
string val = String.Empty;
if (Fizz.isFizz) val += Fizz.GetFizz();
if (Buzz.isBuzz) val += Buzz.GetBuzz();
if (val == String.Empty) val = i.ToString();
if (OnFizzBuzz != null) OnFizzBuzz(val);
}
}
}
public class TheFizzBuzzProgram
{
public static void main(string[] args)
{
Looper l = new Looper(new FizzFactory(), new BuzzFactory());
l.OnFizzBuzz += new FizzBuzzWriter(l_OnFizzBuzz);
l.execute(1,100);
}
static void l_OnFizzBuzz(string input)
{
Console.Write(input + Environment.NewLine);
}
}