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
IskrenPenev avatar IskrenPenev 177 Точки

Начина на сортиране със списък нещо се чупи. Когато го тествах, бях сменил реда от низходящ към възходящ, и промяна нямаше - това ме наведе на идеята, че просто не ги сортира. Иначе изходът е един и същ, заради реда в който са вкарани елементите в речника ( фрагменти, после шардове и тн.) - в C# редът на вкарване се запазва.

0
RoYaL avatar RoYaL Trainer 6849 Точки

Sort() е нестабилно сортиране. При два еднакви елемента на различна машина може да се държи по различен начин.

3
svetljo avatar svetljo 27 Точки

Щом sort() е непредсказуем, значи никога да не го ползваме, така ли излиза?

0
RoYaL avatar RoYaL Trainer 6849 Точки

За judge задачи по-добре не го ползвай. Има смисъл да се ползва когато не те интересува подредбата на два елемента, които са еднакви според сортиращата функция.

0
a_rusenov avatar a_rusenov 1103 Точки

Дори при нестабилно сортиране пак трябва да се вадят същите резултати. Това че машините са различни не е от значение, все пак .NET Framework-ът си е един и същ, следователно и кода на алгоритъма. Според този пост до .NET 4.0 Array.Sort() ползва QuickSort, a от версия 4.5 нагоре са сменили на Introsort (QuickSort + Insertion Sort). Може би компилираш до по-стара версия от 4.5 и от там идва разминаването?

0
svetljo avatar svetljo 27 Точки

Много ви благодаря за отговорите! Светна ми.

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