Професионална програма
Loading...
+ Нов въпрос
MartinMinev avatar MartinMinev 1 Точки

More Exercise: Strings and Text Processing , Treasure Finder Задача , C#

И двата инпута от условието (с които между другото имах проблеми при въвеждането с копи пейст) дават във ВС 2019 верен резултат!

Но джъдж дава 20 от 100... Ако някой има време и желание, моля за предложения!

using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace TreasureFinder
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] keys = Console.ReadLine().Split(" ", StringSplitOptions.RemoveEmptyEntries)
                                           .Select(int.Parse).ToArray();
            string input = string.Empty;
            StringBuilder decrypted = new StringBuilder();
            Dictionary<string, string> found = new Dictionary<string, string>();

            int typeFirstIndex = 0;
            int typeLastIndex = 0;
            int coordinatesFirstIndex = 0;
            int coordinatesLastIndex = 0;
            string metal = string.Empty;
            string coordinates = string.Empty;


            while ((input = Console.ReadLine()) != "find")
            {
                int counter = 0;
                for (int i = 0; i < input.Length; i++)
                {
                    int decreased = input[i] - keys[counter];
                    counter++;

                    if (counter > 3)
                    {
                        counter = 0;
                    }
                    decrypted.Append((char)decreased);
                }
                typeFirstIndex = decrypted.ToString().IndexOf('&');
                typeLastIndex = decrypted.ToString().LastIndexOf('&');
                coordinatesFirstIndex = decrypted.ToString().IndexOf('<');
                coordinatesLastIndex = decrypted.ToString().IndexOf('>');
                metal = decrypted.ToString().Substring(typeFirstIndex + 1, typeLastIndex - typeFirstIndex - 1);
                coordinates = decrypted.ToString().Substring(coordinatesFirstIndex + 1, coordinatesLastIndex - coordinatesFirstIndex - 1);

                found.Add(metal, coordinates);
                decrypted.Clear();
            }

            foreach (var item in found)
            {
                Console.WriteLine($"Found {item.Key} at {item.Value}");
            }
        }
    }
}

Тагове:
0
Fundamentals Module
MartinBG avatar MartinBG 3827 Точки

Гърми, защото приемате, че броят ключове винаги ще е 4.

Променете този код:

                    if (counter > 3)
                    {
                        counter = 0;
                    }

На:

                    if (counter >= keys.Length)
                    {
                        counter = 0;
                    }

И ще вземете 100/100 в Judge.

 

Имайте предвид, че решението Ви има още един проблем и ще гърми, ако в декрипираните съобщения има съкровища с еднакви имена, заради използването им като ключове в Dictionary<string, string> found.

.Например при вход

1 2 1 3
ikegfp'jpne)bv=41P83X@
ikegfp'jpne)bv=41P83X@
find

Програмата ще гръмне с:

Unhandled exception. System.ArgumentException: An item with the same key has already been added. Key: gold
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)

 

0