Професионална програма
Loading...
+ Нов въпрос
nakov avatar nakov SoftUni Team Trainer 5296 Точки

За изпита по структури от данни

Колеги, давам малко пояснения за изпита по структури от данни, който предстои в неделя (13 септември):

  • Ще има две задачи - една с unit tests и една с judge-базирана проверка
  • И на двете задачи въвеждаме следния принцип на оценяване:
    • Ако минават всички тестове, взимате пълния брой точки за задачата.
    • Ако не минават всички тестове, взимате до 50% от точките, пропорционално на броя преминати тестове.
    • Пример: задачата има 20 теста с еднаква тежест. Ако всичките тестове минават, взимате 100 точки (максимума). Ако минават 19 от 20 теста, взимате 100*(19/20)/2 = 47.50 точки.
  • На задачата с unit tests ще имате C# и Java вариант
    • Проект-скелет (на VS или Eclipse) + интерфейс за имплементация + тестове (функционалност и performance)
  • На задачата с judge-базираната проверка ще изпращате решение в judge системата и тя ще ви оценява. Ако не минават всички тестове, ще ви се признават до 50% от точките за задачата. Ако минават всички тестове, ще ви се присъждат всички точки.

Защо едната задача се оценява с unit tests, а другата автоматизирано?

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

Я кажете сега: някой ще пише ли на C++? Да се пънем ли да превеждаме C# кода на C++? За Java обещавам, че ще има читав превод.

Наков

nakov avatar nakov SoftUni Team Trainer 5296 Точки

Причината да удвояваме резултата при 100% минаващи тестове е, че с много малко усилия можем да напишем бавно решение.

Бавното решение, базирано на обикновен списък, се пише за 10 минути и хваща 80%-90% от тестовете. Искаме да поощрим участниците, които пишат бързи и верни решения, като внимателно подбират структурите си от данни. 

-1
Filkolev avatar Filkolev 4482 Точки

А какво правим ако са използвани правилни структури, но 1 или няколко теста не минават поради бъг от друго естество (грешен отговор, а не лимит време)? Малко е кофти да ти падне резултата наполовина, защото не си съобразил някакъв граничен случай или нещо подобно, а не защото не умееш да преценяваш за дадена операция как да пазиш и извличаш данните.

8
RoYaL avatar RoYaL Trainer 6847 Точки

Е какво решение трябва да си намазал, че да не ти мине един тест заради OUTPUT?! На мен това оценяване ми се вижда справедливо.

0
veselinsavov avatar veselinsavov 219 Точки

Съгласен съм Filkolev. Наков, не е ли по- удачно просто тестовете да се направят така, че с List да минават примерно 10-20% от тестовете ? Ако се направят такива тестове judge-а ли няма да издържи ? 

Royal, примерно, ако не си направил търсенето по 2 ключа и не ти минат Х теста, които са по 2 ключа е тъпо точките да ти се орежат на половина.

6
11/09/2015 12:56:53
borislavml avatar borislavml 368 Точки

Може ли някой да ме светне, на първа задача за person-collection-a , поддточката в която търсим person-и в range от години този метод .Range(startAge, true, endAge, true), който ни връща subview от дървото от къде се взе?Няма го ни в Wintelect ни в C5, нещо къстъм писано ли е, и ако да може ли някой да сподели код.Иначе какъв е другия вариянт да си вземем итертор за този range, който ни интересува.С LINQ е ясно, че не е efficient, някакъв binarySearch или....?

0
Filkolev avatar Filkolev 4482 Точки

Това е метод за Ordered колекциите от PowerCollections, т.е. тези, които са имплементирани с дърво. Примерно за OrderedDictionary.

1
borislavml avatar borislavml 368 Точки

Мерси много, аз блъскам като идиот върху SortedDictionary и какви ли не извращения се мъчих да правя.

0
11/09/2015 21:15:51
HPetrov avatar HPetrov 822 Точки

Превеждане към C++ може би е малко късно за изпита сега но не е лоша идея да се направи за следващите издания на курса както и курсовете по алгоритми. Програмисти различни, предпочитанията също. В частност C++ не е по-малко важен от C#/Java от гледна точка на структурите от данни и алгоритмите. Нека е има и тази опция за мазохисти :)

0
12/09/2015 00:29:37
Filkolev avatar Filkolev 4482 Точки

За алгоритмите няма да е проблем, там няма да има юнит тестове, защото задачите ще са... алгоритмични. Ще има Judge, а C++ отдавна се поддържа там.

0
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Хм и според мен има нещо сбъркано в оценяването. Значи ако решим и двете задачи на 100%, всичко е ок и ще имаме макс точки. Ако на едната задача не ни мине само 1 тест ще имаме макс около 74% от точките. Ако и на двете задачи не ни мине дори само по 1 тест ще имаме 47,5% от точките. Заради 2 теста от общо 40 такава секира ми се струва нелогично...

Накрая излиза, че освен точки от автоматизираната система, най-удачно е да има и ръчна проверка както при ООП-то в съотношение 1:2 (автоматизирано оценяване: ръчно оценяване)

Другото според мен е, че не е толкова трудно да се напишат такива тестове, че реално ако използваме само list да минават 20-30% от тестовете. Пример:

Ако има 5 теста, които минават с list, слагате 15 комплексни теста, които правят много неща, т.е. минават през всички методи на имплементираната структура. В никакъв случай няма начин тези комплексни тестове да минат, ако не са използвани правилните структури.

7
12/09/2015 01:58:09
Kamigawa avatar Kamigawa 750 Точки

Съгласен съм - за 1 тест 50% са много. Можеше да се измисли по-гъвкаво решение на проблема - 19/20 теста - 90т, 18/20 теста - 80т, 17/20 - 70т и надолу някакво скалиране примерно - 16/20 = 100 * (16/20) / 1.3 = 61, 15/20 => 57 или нещо подобно. Мисълта ми е до 2-3 теста да има някакъв толеранс, при 17/20 се предполага, че задачата нещо малко и куца, да не говорим за 19/20.

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

2
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Не съм сигурен, че ще има проблем с времето за изпълнение. Пример:

днес като решавах първата задача от примерния изпит не обърнах внимание, че в скелета на solution-а в тестовете за performance и двата реда инициализират бавната структура. Добавянето с List отнемаше 33 секунди, а с речник 50ms... разликата е прекалено голяма, така че лесно може да се направят комплексни тестове, които при правилна структура от данни да минават за милисекунди.

0
RoYaL avatar RoYaL Trainer 6847 Точки

Не, няма такъв вариант, Ники.

Няма ПРАВИЛНАТА структура от данни. има много възможности, които биха били практически верни и даващи разлика една от друга, както има и много възможности, които биха могли да бъдат грешни.

Ако се направи всеки един тест да е на границата на ПРАВИЛНАТА структура от данни, значи има само едно валидно решение и това е авторското.

Нека само да ви спомена, че темата е за да ни информира какъв ще е регламентът на изпита, а не за да ни попита дали сме съгласни.

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

Знаеш ли какво ми е направило впечатление до сега от изпитите? Че например изкарав 380/400 точки им и се губят 2 теста от една задача. Остават ми 2 часа до края на изпита и останалите 20 точки ги взимам в последните секунди. Демек съм блъскал 2 часа за 20 точки. Накрая някой с 350 точки да речем е на равно с мен или над мен в оценяването. Т.е. де факто 2-3 часа труд т.е. половината от времето на изпита не са имали значение.

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