using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using static System.Console; namespace Challenge_8 { public static class Client { private static readonly HttpClient _CLIENT = new HttpClient(); public static async Task GetStringAsync(string url) => await _CLIENT.GetAsync(url).Result.Content.ReadAsStringAsync(); public static async Task PostAsync(string url, string data, string mediaType) => await _CLIENT.PostAsync(url, new StringContent(data, Encoding.UTF8, mediaType)).Result.Content.ReadAsStringAsync(); } internal class Program { private const string CHALLENGE_URL = "https://cc.the-morpheus.de/challenges/8/"; private const string SOLUTIONS_URL = "https://cc.the-morpheus.de/solutions/8/"; private static void Main(string[] args) { do { Clear(); WriteLine("Empfange Daten..."); Stopwatch sw = Stopwatch.StartNew(); string jsonGet = Client.GetStringAsync(CHALLENGE_URL).Result; dynamic json = JsonConvert.DeserializeObject(jsonGet); int target = json.k; int[] list = ((JArray)json.list).ToObject>().ToArray(); WriteLine($"Dauer: {sw.Elapsed.TotalMilliseconds}ms"); WriteLine($"Empfangene Daten:\nK: {target}\nL: [ {string.Join(", ", list)} ]\n"); WriteLine("Starte Berechnung..."); sw.Restart(); int[] ret = Solve(list, target); sw.Stop(); WriteLine($"Lösung: [ {string.Join(", ", ret)} ]"); WriteLine($"Dauer: {sw.Elapsed.TotalMilliseconds}ms / {sw.Elapsed.Ticks} Ticks"); string jsonResponse(int[] s) => $"{{\"token\": [{string.Join(", ", s)}]}}"; string response = Client.PostAsync(SOLUTIONS_URL, jsonResponse(ret), "application/json").Result; BackgroundColor = response.StartsWith("Success") ? ConsoleColor.DarkGreen : ConsoleColor.DarkRed; WriteLine("Ergebnis: " + response); BackgroundColor = ConsoleColor.Black; } while (ReadKey().Key != ConsoleKey.Escape); WriteLine("ENDE"); } private static int[] Solve(int[] arr, int target) { Dictionary> dict = new Dictionary>(arr.Length * arr.Length); for (int i = 0; i < arr.Length - 1; i++) { for (int j = i; j < arr.Length; j++) { int sum = arr[i] + arr[j]; dict[sum] = new KeyValuePair(i, j); if (dict.ContainsKey(target - sum)) { KeyValuePair p = dict[target - sum]; return new[] { i, j, p.Key, p.Value }; } } } return new[] { -1, -1, -1, -1 }; } } }