class Program
{
private const string alphabet = "abcdefghijklmnopqrstuvwxyz";
static void Main(string[] args)
{
char c = Console.ReadKey().KeyChar;
List<char> myChars = new List<char>();
foreach (char character in alphabet)
{
if (character <= c)
myChars.Add(character);
}
List<char> temp = new List<char>(Reverse<char>(AllButFirst<char>(myChars)));
temp.AddRange(myChars);
string fullRow = new string(temp.ToArray());
List<string> myRows = new List<string>();
foreach (char character in myChars)
{
myRows.Add(ConvertToSpaces(character, fullRow));
}
IEnumerable<string> reverseRows = AllButFirst<string>(Reverse<string>(myRows));
myRows.AddRange(reverseRows);
Console.WriteLine(Environment.NewLine);//Skip the ReadKey line
foreach (string line in myRows)
Console.WriteLine(line);
Console.ReadKey();
}
private static IEnumerable<T> Reverse<T>(IEnumerable<T> myChars)
{
Stack<T> reverse = new Stack<T>();
foreach (T character in myChars)
{
reverse.Push(character);
}
while (reverse.Count > 0)
{
yield return reverse.Pop();
}
}
private static IEnumerable<T> AllButFirst<T>(IEnumerable<T> myChars)
{
bool first = true;
foreach (T character in myChars)
{
if (first)
first = false;
else
yield return character;
}
}
private static string ConvertToSpaces(char wanted, IEnumerable<char> characters)
{
StringBuilder result = new StringBuilder();
foreach (char character in characters)
{
result.Append(character == wanted ? character : ' ');
}
return result.ToString();
}
}