Skocz do zawartości

    Zamknięty DailyProgrammer Challenge


    Ogen Dogen
     Udostępnij

    Rekomendowane odpowiedzi

    • Cała zawartość 7
    • Temat został założony
    • Ostatnia odpowiedź

    Top użytkownicy w tym temacie

    Najpopularniejsze posty

    Witam, żeby zmotywować się do regularnego odświeżania szarych komórek i swoich umiejętności postanowiłem wziąć udział w wyzwaniu w serwisie Reddit, gdzie codziennie są publikowane zadania do wykonania

    Zadanie #2 - Odwrócony Regex Zadanie zostało oznaczone jako trudne, ale wydaje mi się że jest to mocno przesadzone. Regex, czyli narzędzie do obsługi wyrażeń regularnych służy do weryfikowan

    Zadanie #5   "Droga do Filozofii" Na angielskiej Wikipedii wybierając dowolny artykuł i klikając w kolejne linki prawie zawsze dojdziemy do artykułu "Philosophy". Według badań w 2011 ro

    Witam, żeby zmotywować się do regularnego odświeżania szarych komórek i swoich umiejętności postanowiłem wziąć udział w wyzwaniu w serwisie Reddit, gdzie codziennie są publikowane zadania do wykonania na różnym poziomie trudności. O ile będzie czas pozwalał, będę również starał się codziennie publikować swoje rezultaty. Głównym celem zadań jest rozwijanie myślenia algorytmicznego, dlatego w kodzie nie będę się skupiał na innych kwestiach np. walidacji wejścia. Językiem, który będę najczęściej używał będzie C#, chociaż postaram się czasami też użyć innych :)

     

    Do każdego zadania będę podać link i krótki opis po Polsku.

     

    Zadanie na dziś - "Sztuczne monety"

    W skarbcu znajdują się monety. Każda z nich ma unikalny symbol, jednakże część z nich jest fałszywa. Możemy je rozpoznać po wadze - wszystkie prawdziwe monety ważą tyle samo, jak i wszystkie fałszywe monety ważą tyle samo. Jednakże fałszywe monety są lżejsze.

    Na wejście otrzymujemy częściowe informacje o wybranych monetach - czy dwie monety ważą tyle samo lub czy pierwsza moneta jest cięższa od drugiej. Naszym zadaniem jest wskazanie wśród wszystkich wymienionych monet fałszywki np. dostając taką informację na wejście:

    a x equal
    b x equal
    y a left

    Powinniśmy dostać informację, że a,b,x są fałszywe. Dlaczego ? Ważą tyle samo i są lżejsze od y :)

    Link do tematu: https://www.reddit.com/r/dailyprogrammer/comments/4utlaz/20160727_challenge_277_intermediate_fake_coins/?st=j09ypxnb&sh=909fc261

    Moja propozycja implementacji: (na razie tylko dla pojedynczych monet)

    // collecting input
    string input = "";
    List<string> inputs = new List<string>();
    while (true)
    {
    	input = Console.ReadLine();
    	if (input == "0") break;
    	inputs.Add(input);
    }
    
    // parsing
    Dictionary<string, int> coins = new Dictionary<string, int>();
    
    string[] parts;
    List<List<string>> groups = new List<List<string>>();
    bool is_continue;
    foreach (var line in inputs) // first looping - adding same coins and initializing dictionary
    {
    	parts = line.Split(' ');
    	if (parts[0] == parts[1]) continue;
    	is_continue = true;
    	if (parts[2] == "equal") // adding coints
    	{
    		foreach (var group in groups) // first condition - joining
    		{
    			if (group.Contains(parts[0]))
    			{
    				group.Add(parts[1]);
    				is_continue = false;
    			}
    			else if (group.Contains(parts[1]))
    			{
    				group.Add(parts[0]);
    				is_continue = false;
    			}
    		}
    
    		if (is_continue) // second condition - no group found, create new
    		{
    			groups.Add(new List<string>());
    			groups.Last().Add(parts[0]);
    			groups.Last().Add(parts[1]);
    		}
    	}
    
    	// initializing dictionary
    	if (!coins.ContainsKey(parts[0])) coins.Add(parts[0], 0);
    	if (!coins.ContainsKey(parts[1])) coins.Add(parts[1], 0);
    }
    
    // second looping - counting heavier coins
    for (int i=0; i<inputs.Count(); i++)
    {
    	parts = inputs[i].Split(' ');
    	if (parts[2] == "left") coins[parts[0]]++;
    }
    
    // concluding
    var tester = coins.First().Value;
    if (coins.All(x => x.Value.Equals(tester) && tester == 0)) // all equal, can't say anything
    {
    	Console.WriteLine("Wszystkie sa prawdziwe lub wszystkie sa fałszywe");
    	Console.ReadKey();
    	return;
    }
    
    // real coins
    var max_v = coins.Values.Max();
    var max_k = coins.First(x => x.Value == max_v).Key;
    
    // fake coins
    var fakecoin_groups = groups.FindAll(x => !x.Contains(max_k));
    if (fakecoin_groups.Count() > 0)
    {
    	Console.Write("Fałszywki: ");
    	foreach (var fakecoin_group in fakecoin_groups)
    	{
    		foreach (var fakecoin in fakecoin_group)
    		{
    			Console.Write(fakecoin);
    		}
    		Console.WriteLine();
    	}
    }
    else Console.WriteLine("Dane niespójne"); // assuming there's at least one fake coin
    Console.ReadKey();

     

    Odnośnik do komentarza
    Udostępnij na innych stronach

    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    • 2 tygodnie później...
    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    • 3 tygodnie później...
    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    • 3 miesiące później...
    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    • 2 tygodnie później...
    Hej! Nie widzisz zawartości tego postu?
    Zaloguj się lub Zarejestruj nowe konto, aby korzystać ze wszystkich dostępnych funkcji!
    Odnośnik do komentarza
    Udostępnij na innych stronach

    Gość
    Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
     Udostępnij

    ×
    ×
    • Dodaj nową pozycję...
    Przeglądasz forum jako gość.
    Nie posiadasz dostępu do niektórych treści i funkcji!