Code challenge from lantmateriet.se
Yesterday I found a code challenge on http://www.lantmateriet.se/knackkoden that I decide to take a look on. We first need to decode the base 64 encoded text to get the actual instructions.
Problem
Gör ett program som skriver ut talen i mängden {1, 2, …, 10500} i stigande ordning.
Om talet är jämnt delbart med 3 så ska www. skrivas ut istället för själva talet.
Om talet är jämnt delbart med 5 så ska lantmateriet skrivas ut istället för själva talet.
Om talet är jämnt delbart med 7 så ska .se skrivas ut istället för själva talet.
Om talet är jämnt delbart med 3, 5 och 7 så ska www.lantmateriet.se skrivas ut istället för själva talet.
Inga nyradstecken ska skrivas ut, utan allt ska skrivas ut på en och samma rad.
Utskriften inleds enligt nedan:
1 2 www. (och så vidare…)
Inget mellanrum som sista tecken.
MD5-summan av utskriften är 402087a86f4fbd5d01d80baec13fddc5
Men vad är SHA-1-summan?
Solution
Anyone that can come up with another or better solution?
public static void Main() { const int NumberOfIterations = 10500; var sb = new StringBuilder(); for (var i = 1; i <= NumberOfIterations; i++) { if (i % 3 != 0 && i % 5 != 0 && i % 7 != 0) { sb.Append(i + " "); continue; } if (i % 3 == 0 && i % 5 == 0 && i % 7 == 0) { sb.Append("www.lantmateriet.se "); continue; } if (i % 3 == 0) { sb.Append("www. "); } else if (i % 5 == 0) { sb.Append("lantmateriet "); } else if (i % 7 == 0) { sb.Append(".se "); } } var resultString = sb.ToString().TrimEnd(); if ("402087a86f4fbd5d01d80baec13fddc5" != GetMD5HashData(resultString, Encoding.UTF8)) { Console.WriteLine("Error missmatch MD5 hash"); return; } Console.WriteLine("The SHA1 hash is:" + GetSHA1HashData(resultString, Encoding.UTF8)); } |
You can download the complete solution here: LantmaterietKnackkoden