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 4803 Точки

Гърми, защото приемате, че броят ключове винаги ще е 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.