Вариант А


Задача 1. (15 т.) Студентите от Факултета по Магични Изкуства попълват анкети на края на всеки семестър, в които оценяват преподавателите си. Анкетите са анонимни и се пазят в текстов файл с име survey.txt, който съдържа редове от вида:

<код на предмет> <оценка> <коментар>

Кодът на предмет е низ до 10 символа без интервали, оценката е цяло число от 1 до 5, а коментарът е произволен низ до 1000 символа, но е по желание. Да се напише функция, която създава двоичен файл report.dat за ръководството на Факултета, в който има по точно един запис за всеки предмет, който съдържа кода, средна оценка за предмета и най-дългия коментар за този предмет. Предметите да са подредени по азбучен ред на кодовете им.


Задача 2. (20 т.) В учебния отдел на Факултета по Магични Изкуства, преподавателите са длъжни да нанасят оценките на всеки изпитан от тях студент в големи книжни тетрадки с твърди корици, наречени Грамадни Книги. Всяка Грамадна Книга описва оценките на всички студенти с факултетни номера в някакъв затворен интервал [a; b]. През сесията преподавателите се редят на опашка пред учебния отдел. Всеки преподавател носи Свитък, в който има списък с факултетни номера и оценки на изпитаните студенти. Попълването на една оценка в Грамадна Книга отнема точно 1 мин., но ако тя се попълва от друг преподавател в същия момент, трябва да се изчака той да приключи. Ако двама преподаватели чакат за една и съща Грамадна Книга да се освободи, има предимство този, който е бил по-напред в опашката. Да се напише функция, която получава като параметри:

  • списък от Грамадните Книги, представени чрез двойка числа, задаващи границите на интервала от факултетни номера, които се съдържат в книгата; и

  • опашка от преподавателите, представени чрез списъци от факултетните номера в техните Свитъци.

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

Бонус: (10 т.) Да се вземе предвид, че в даден момент в учебния отдел могат да влизат не повече от четирима преподаватели, останалите изчакват отвън докато някой не излезе.


Задача 3. (15 т.) По време на следването си, студентите във Факултета по Магични Изкуства записват и слушат различни предмети, всеки от които има код до 10 символа, без интервал. Някои от предметите имат входни изисквания студентът успешно да е взел изпита по няколко други предмета. Изискванията са представени в текстов файл requirements.txt с редове от вида

<код на предмет> <изискване1> <изискване2> … <изискванеn>,

като n ≥ 0 и всяко едно изискване представлява код на предмет. Знайко Знайков много иска да запише един предмет, но иска преди това да разбере колко и кои изпити трябва да вземе. Напишете функция, която връща списък на всички предмети (без повторение), които трябва да са успешно взети, за да може Знайко да запише любимия си предмет. Предметите да са изведени в ред, в който Знайко трябва да ги вземе. Да се има предвид, че администрацията на Факултета допуска грешки и понякога се стига до абсурдната ситуация, че даден предмет може да бъде записан само ако вече по него е положен изпит. Ако случаят е такъв, функцията да изведе съобщение за грешка.


Вариант Б

Задача 1. (15 т.) Студентите от Факултета по Магични Изкуства попълват анкети на края на всеки семестър, в които оценяват преподавателите си. Анкетите са анонимни и се пазят в няколко двоични файла с имена от вида <code>.dat, където <code> е код на предмет, низ до 10 символа. Файловете съдържат записи с две полета: оценка от 1 до 5 и коментар до 100 символа. Да се напише функция, която по зададен списък от кодове на предмети създава текстов файл report.txt за ръководството на Факултета, който съдържа редове от вида

<код на предмет> i <брой оценки i> <коментари>

За всеки предмет да се включат по точно пет реда, за 1 ≤ i ≤ 5, всеки от които съдържа броя на получените оценки със стойност i за този предмет и всички коментари, съответстващи на тази оценка, разделени със запетаи. Предметите да са подредени по азбучен ред на кодовете им.


Задача 2. (20 т.) След изпита по Свитъци от Древни Пазители, лекторът трябва да нанесе оценките на студентите в студентските им книжки. Нанасянето на оценки е обявено за 10:00, но за съжаление не всички студенти са точни. Преподавателят събира книжките на всички пристигнали студенти накуп и започва да нанася оценките със скорост една оценка в минута, като взема книжки от горната част на купа. Докато той нанася оценки, продължават да пристигат студенти, които, за нещастие на колегите си, оставят книжките си най-отгоре на купа. При попълването на оценки, някои от студентите не са съгласни с оценката си и молят лектора да ги изпита за по-висока оценка. Той им дава допълнителна задача, което му отнема също една минута и ги оставя да работят, след което продължава да попълва оценки. Всеки студент работи различно време върху задачата и след като приключи, оставя решението си в книжката и я слага най-отгоре на купа. Преподавателят има нужда от пет минути, за да прегледа всяка решена задача и да попълни оценката. Да се напише функция, която приема като параметър списък от студенти, представени с факултетен номер, минута на пристигане (0 за точните студенти) и време за решаване на допълнителната задача (0 за студентите, които са съгласни с оценката си). Функцията да връща времето, което е чакал всеки студент да му бъде нанесена оценката, както и общото време, което е било нужно на лектора да нанесе всички оценки.

Бонус: (10 т.) За да намали житейската несправедливост, на всяка десета минута преподавателят “цепи” купа с книжки, т.е. взема X книжки от върха на купа и ги поставя най-отдолу.


Задача 3. (15 т.) По време на следването си, студентите във Факултета по Магични Изкуства записват и слушат различни предмети, всеки от които има код до 10 символа, без интервал. Някои от предметите имат входни изисквания студентът да е взел изпитите по няколко други предмета. Изискванията са представени в текстов файл requirements.txt с редове от вида

<код на предмет> <изискване1> <изискване2> … <изискванеn>,

като n ≥ 0 и всяко едно изискване представлява код на предмет. Студентът Тънколайснов мрази един конкретен предмет и иска да вземе колкото се може повече предмети без него. Напишете функция, която връща списък на всички предмети (без повторение), които могат да бъдат взети без да се държи изпит по омразния за Тънколайснов предмет. Предметите да са изведени в ред, в който Тънколайснов трябва да ги вземе. Да се има предвид, че администрацията на Факултета допуска грешки и понякога се стига до абсурдната ситуация, че даден предмет може да бъде записан само ако вече по него е положен изпит. Ако случаят е такъв, функцията да изведе съобщение за грешка.


Last modified: Friday, 12 February 2016, 1:01 PM