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>> result = new List<Tuple<int, int, int>>();
List<int> squares = new List<int>();
foreach (var element in elements) {
squares.Add(element * element);
int squaresCount = squares.Count();
for (var a = 0; a < squaresCount; a++) {
for (var b = 0; b < squaresCount; b++) {
for (var c = 0; c < squaresCount; c++) {
if (squares[a] + squares[b] == squares[c] && a != b && b != c && a < b && b < c) {
result.Add(new Tuple<int, int, int>(a, b, c));
public static string Encrypt(string message, string key)
var divisionResult = message.Count() % key.Count();
if (divisionResult == 0) {
string[,] encryptionMatrix = new string[(message.Count() / key.Count()) + auxAdd, key.Count()];
string sortedKey = String.Concat(key.OrderBy(c => c));
int rows = encryptionMatrix.GetLength(0);
int cols = encryptionMatrix.GetLength(1);
for (int i = 0; i < cols; i++) {
encryptionMatrix[0, i] = sortedKey.IndexOf(key[i]).ToString();
for (int i = 1; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (it == message.Count()) {
encryptionMatrix[i, j] = " ";
encryptionMatrix[i, j] = message[it++].ToString();
for (int i = 0; i < cols - 1; i++) {
for (int j = i + 1; j < cols; j++) {
if (Convert.ToInt16(encryptionMatrix[0, i]) > Convert.ToInt16(encryptionMatrix[0, j])) {
for (int k = 0; k < rows; k++) {
var aux = encryptionMatrix[k, i];
encryptionMatrix[k, i] = encryptionMatrix[k, j];
encryptionMatrix[k, j] = aux;
for (int i = 1; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result += encryptionMatrix[i, j];
public class StudentRankingsPrinter
public StudentRankingsPrinter()
public string PrintRankings(IEnumerable<Student> students)
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);