using System.Collections.Generic;
namespace InternshipSpring2019
public static class Exercises
public static IEnumerable<Tuple<int, int, int>> FindPythagoreans(List<int> elements)
List<Tuple<int, int, int>> tuples = new List<Tuple<int, int, int>>();
for (int i = 0; i < elements.Count - 1; i++)
for (int j = i + 1; j < elements.Count; j++)
for (int k = 0; k < elements.Count; k++)
if (a * a + b * b == c * c)
tuples.Add(Tuple.Create(i, j, k));
public static string Encrypt(string message, string key)
int j = key.Length, i = 0, c = 0;
if (message.Length % j == 0)
else i = message.Length / j + 1;
char[] LineOfMessage = new char[j];
int[,] KeyMatrix = new int[2, j];
StringBuilder EncryptedMessage = new StringBuilder("", i*j);
for (int k = 0; k < j; k++)
KeyMatrix[0, k] = key[k];
for (int k = 0; k < j; k++)
for (int l = 0; l < j; l++)
if (KeyMatrix[0, k] <= KeyMatrix[0, l])
int temp = KeyMatrix[0, k];
KeyMatrix[0, k] = KeyMatrix[0, l];
KeyMatrix[1, k] = KeyMatrix[1, l];
for (int k = 0; k < i; k++)
for (int l = 0; l < j; l++)
LineOfMessage[l] = message[c];
for (int l = 0; l < j; l++)
EncryptedMessage.Append(LineOfMessage[KeyMatrix[1, l]]);
return EncryptedMessage.ToString();
public class StudentRankingsPrinter
public StudentRankingsPrinter()
public string PrintRankings(IEnumerable<Student> students)
StringBuilder FormattedString = new StringBuilder();
FormattedString.Append("Rank#Name#Average\n####################\n");
for (int j = students.Count() - 1; j >= 0; j--)
FormattedString.Append(i++);
FormattedString.Append("#" + students.ElementAt(j).FirstName + " - " + students.ElementAt(j).LastName + "#");
foreach (double grade in students.ElementAt(j).Grades)
average /= students.ElementAt(j).Grades.Length;
FormattedString.Append("F\n");
FormattedString.Append("D\n");
FormattedString.Append("C\n");
FormattedString.Append("B\n");
FormattedString.Append("A\n");
FormattedString.Remove(FormattedString.Length - 1, 1);
return FormattedString.ToString();
public Student(string firstName, string lastName, double[] grades)
public static void Main(string[] args)
ExerciseForFindPythagoreansWhenNone(new List<int>{1, 3});
ExerciseForFindPythagoreans(new List<int>{1, 3, 4, 5, 12, 17, 13}, new[]{Tuple.Create(1, 2, 3), Tuple.Create(3, 4, 6)});
ExerciseEncrypt("secretinformation", "crazy", "cseerntiofarmit on ");
ExerciseEncrypt("abcd", "abc", "abcd ");
ExerciseEncrypt("1234567890", "ba", "2143658709");
ExerciseEncrypt("key", "key", "eky");
ExercisePrintRanking(new[]{new Exercises.Student("Bob", "Ross", new[]{6.0, 8.0, 10.0})}, "Rank#Name#Average\n####################\n1#Bob - Ross#B");
ExercisePrintRanking(new[]{new Exercises.Student("Bob", "Ross", new[]{7.0, 6.0, 8.5, 8.0}), new Exercises.Student("Rob", "Boss", new[]{9.0, 8.0})}, "Rank#Name#Average\n####################\n1#Rob - Boss#B\n2#Bob - Ross#C");
Console.WriteLine("Well done!");
private static void ExerciseForFindPythagoreans(List<int> elements, Tuple<int, int, int>[] expectedAnyOf)
var result = Exercises.FindPythagoreans(elements);
foreach (var pythagorean in result)
var containsResult = expectedAnyOf.Any(c => pythagorean.Item1 + pythagorean.Item2 + pythagorean.Item3 == c.Item1 + c.Item2 + c.Item3);
Assert.True(containsResult, string.Format("The pair {0}, {1}, {2} does not match the criteria", pythagorean.Item1, pythagorean.Item2, pythagorean.Item3));
private static void ExerciseForFindPythagoreansWhenNone(List<int> elements)
var result = Exercises.FindPythagoreans(elements);
private static void ExerciseEncrypt(string message, string key, string expected)
var encrypted = Exercises.Encrypt(message, key);
Assert.Equal(expected, encrypted);
private static void ExercisePrintRanking(IEnumerable<Exercises.Student> students, string expected)
var printer = new Exercises.StudentRankingsPrinter();
var rankings = printer.PrintRankings(students);
Assert.Equal(expected, rankings);