Loading...
svetljo avatar svetljo 27 Точки

Softuni's compiler otput differs from mine

Здравейте,

output-ът, който вади сървърът на Софтуни, не съвпада с output-a, който вади моят компютър. По-конкретно: моят комп сортира различно от компа на judge и съответно judge ми дава грешка. Някой да е имал подобен проблем?

Тагове:
0
C# Advanced 20/05/2016 09:01:25
petar.dimitrov.86 avatar petar.dimitrov.86 450 Точки

Дай някоя по-конкретна задача, където това се получава и съответно кода ти.

1
svetljo avatar svetljo 27 Точки

Задачата е legendary farming от Contests Advanced-CSharp-Exercises Sets and Dictionaries. Ето примерен input, който ползва judge:

3 Motes 5 stones 5 Shards
6 leathers 255 fragments 7 Shards

Ето код: http://pastebin.com/UMfT644a

 

0
20/05/2016 11:27:49
IskrenPenev avatar IskrenPenev 177 Точки

Грешката е в метода ти на сортиране според мен.
Забелязвам че сортираш данните в списък, и после от този списък ги принтираш.. Тук трябваше да пробваш дали този вид сортировка работи - е аз пробвах твоя метод и резулатата беше следния:

1. ConsoleWriteLine(pair.Key); = key (всичко е наре)

2. ConsoleWriteLine(pair.Value) = Value (и тук всичко е както трябва).

За самия тест използвах нормалната сортировка ((pair1, pair2) => pair2.Value.CompareTo(pair1.Value)); 
Обаче когато пуснах да отпечата вече сортирания списък елемент по елемент както се иска, резултата беше абсолютно същия както и преди сортировката : първо ми отпечата фрагменти, после шардове и т.н (по стойност в низходящ ред).

Съветвам те за сортировка да използваш това:

var sorted = from pair in legendaries
             orderby pair.Value descending
             select pair;
foreach (var pair in sorted)
        {
             Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
        }

По този начин би трябвало всичко да работи както трябва. Прегледах ти кода и не забелязах някакви грешки в логиката, само това сортиране със списъка.
Надявам да съм помогнал. Поздрави !

1
svetljo avatar svetljo 27 Точки

Мерси! Judge прие този вариант. Но за мен мистерията остава, защото при мен двата кода генерират един и същ output. А при теб явно връщат различен.

Поздрави!

Светльо

 

Код 1:
            var keyMaterialQuantityList = keyMaterialQuantity.ToList();
            keyMaterialQuantityList.Sort((pair1, pair2) => pair2.Value.CompareTo(pair1.Value));

            foreach (var item in keyMaterialQuantityList)
            {
                Console.WriteLine($"{item.Key}: {item.Value}");
            }

 

Код 2:

            var sorted = from pair in keyMaterialQuantity
                         orderby pair.Value descending
                         select pair;
            foreach (var pair in sorted)
            {
                Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
            }

1
g.kolev avatar g.kolev 82 Точки

Здравей.
Проблема идва от сортиращите алгоритми които ползват двата метода. 

OrderBy от LINQ сортира стабилно. Това означава, че когато 2 елемента са еднакви, той няма да размени местата им в колекцията. 

Enumerable.OrderBy()

This method performs a stable sort; that is, if the keys of two elements are equal, the order of the elements is preserved. In contrast, an unstable sort does not preserve the order of elements that have the same key. sort; that is, if two elements are equal, their order might not be preserved. In contrast, a stable sort preserves the order of elements that are equal.

Source

 Докато List.Sort() сортира нестабилно, което може да размени местата на еднакви елементи в колекцията в процеса на сортиране.

List<T>.Sort()
This method uses Array.Sort, which uses the QuickSort algorithm. This implementation performs an unstable sort; that is, if two elements are equal, their order might not be preserved. In contrast, a stable sort preserves the order of elements that are equal.

Source

Задачата ти работи чудесно с OrderBy() на речника.

Поздрави.

2
20/05/2016 15:48:16
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.