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<string> GetStringAsync(string url) => await _CLIENT.GetAsync(url).Result.Content.ReadAsStringAsync();
public static async Task<string> 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<IEnumerable<int>>().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<int, KeyValuePair<int, int>> dict = new Dictionary<int, KeyValuePair<int, int>>(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<int, int>(i, j);
if (dict.ContainsKey(target - sum)) {
KeyValuePair<int, int> p = dict[target - sum];
return new[] { i, j, p.Key, p.Value };
}
}
}
return new[] { -1, -1, -1, -1 };
}
}
}
Comments