Skip to content

Instantly share code, notes, and snippets.

@einarwh
Last active March 29, 2025 13:07
FizzBuzz without numbers
namespace FizzBuzzWithoutNumbers;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
class Program
{
public class EmptyStringEnumerable : IEnumerable<string>
{
public IEnumerator<string> GetEnumerator()
{
yield return "";
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class OneEnumerable : IEnumerable<string>
{
private readonly IEnumerable<string> _inner;
public OneEnumerable(IEnumerable<string> inner)
{
_inner = inner;
}
public IEnumerator<string> GetEnumerator()
{
foreach (var s in _inner)
{
yield return "1" + s;
}
foreach (var s in _inner)
{
yield return "2" + s;
}
foreach (var s in _inner)
{
yield return "3" + s;
}
foreach (var s in _inner)
{
yield return "4" + s;
}
foreach (var s in _inner)
{
yield return "5" + s;
}
foreach (var s in _inner)
{
yield return "6" + s;
}
foreach (var s in _inner)
{
yield return "7" + s;
}
foreach (var s in _inner)
{
yield return "8" + s;
}
foreach (var s in _inner)
{
yield return "9" + s;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class ZeroEnumerable : IEnumerable<string>
{
private readonly IEnumerable<string> _inner;
public ZeroEnumerable(IEnumerable<string> inner)
{
_inner = inner;
}
public IEnumerator<string> GetEnumerator()
{
foreach (var s in _inner)
{
yield return "0" + s;
}
foreach (var s in new OneEnumerable(_inner))
{
yield return s;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class RecEnumerable : IEnumerable<string>
{
private readonly IEnumerable<string> _inner;
public RecEnumerable(IEnumerable<string> inner)
{
_inner = inner;
}
public IEnumerator<string> GetEnumerator()
{
foreach (var s in new OneEnumerable(_inner))
{
yield return s;
}
foreach (var s in new RecEnumerable(new ZeroEnumerable(_inner)))
{
yield return s;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class FizzBuzzEnumerable : IEnumerable<string>
{
private readonly IEnumerator<string> _e;
public FizzBuzzEnumerable()
{
_e = new RecEnumerable(new EmptyStringEnumerable()).GetEnumerator();
}
public IEnumerator<string> GetEnumerator()
{
while (true)
{
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return "Fizz";
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return "Buzz";
_e.MoveNext();
yield return "Fizz";
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return "Fizz";
_e.MoveNext();
yield return "Buzz";
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return "Fizz";
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return _e.Current;
_e.MoveNext();
yield return "Fizz Buzz";
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
static void Main(string[] args)
{
foreach (var s in new FizzBuzzEnumerable().Take(int.Parse(args.First())))
{
Console.WriteLine(s);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment