MBrendecke icon

Challenge 8

MBrendecke | PRO | 09/08/18 04:04:09 PM UTC | 0 ⭐ | 473 👁️ | Never ⏰ | []
C# |

2.84 KB

|

None

|

0 👍

/

0 👎

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