Programming Basics Exam 30.08
Здравейте, днес (30.08) бях на изпита Programming basics, искам да ви попитам дали само на мен ми се стори доста доста по-труден от предишните изпити?!
Здравейте, днес (30.08) бях на изпита Programming basics, искам да ви попитам дали само на мен ми се стори доста доста по-труден от предишните изпити?!
Неприятен беше като цяло.
Първа задача не особено сложна, с доста сметки, но някои не особено логични моменти, като например, че възрастта или броят тренировки на седмица може да са отрицателни. Доста хора бъркаха и със закръглянето - трябваше да се закръгля надолу, което при отрицателни числа не става с обикновено кастване, а трябва да се ползва Math.Floor.
Втора задача стандартно би се решила с речник, в който да се пазят данните, или най-малкото масив. Авторското решение мисля има 8 променливи и доста if-ове и не е много лицеприятно. Нямаше нещо сложно като логика, най-честа грешка беше сплитването, понеже в условието е казано, че може да има повече от един интервал между елементите.
Трета мисля стандартна - за 15-20 реда се разписва логиката ако се измисли хубаво, за да няма излишни цикли и проверки.
В четвърта имаше доста неща за съобразяване. Основно трябваше да се преброят правилно точките - да не се броят тези по стените, да не се броят два пъти едни и същи точки, да се проверява дали все пак тези точки са едновременно в рамките на радиуса на телепорта и в рамките на стаята. Не можах да разбера къде бъркаха хората; повечето бяха писали доста код и беше трудно да се разбере къде има пропуски.
Пета не беше особено сложна; няколко души имаха по 90 точки, като интересното беше, че им гърмяха различни тестове. На 2-3 души забелязах дребни пропуски, които лесно се отстраняваха и щяха да им донесат 100/100. Има някои особености при битовите операции с unsigned типове; аз се сблъсках с такъв, както и поне един студент. При изместване с 64 позиции надясно вместо очакваното 0 числото не се променя, което ако се установи, се оправя с един обикновен if. Възмоно е някакви подобни гранични случаи да са създавали проблеми; доста зависи и от логиката.
Условията, решенията и тестовете са качени в джъдж вече. Може да видите какво сте пропуснали по време на изпита.
Адмирации за колегите, изкарали точки от 4та задача! Аз не мога да разбера условието : D Някой, ако е разбрал, да помага. Кои са тия точки, дето се броят и какво е Н??
H e стъпка. Аз си представих, че кръга е вписан в квадрат, и започнах да го обикалям квадрант по квадрант (От 0,0 на северозапад, североизток, югоизток и югозапад), с два вложени for цикъла (за настрани и нагоре/надолу) при които имам for (double i = 0; i < radius; i += step (H) ) и с break-ове, ако i стане по-голямо или равно на някоя от страните на правоъгълника. Всяка намерена точка добавях в List<string>, като след това изкарах Count на Distinct елементите на този лист.
По-късно през деня си разглеждах решенията и усетих, че имаше и една идея по-лесен начин; но така сведох проверките на точки, които НЕ са в рамките на телепорта до минимум.
Edit: Много Paint skills. Разстоянието между зелените точки (тях броим) е постоянно и е H - стъпката. Всички точки, които са на разстояние, което се дели точно на H от центъра на кръга И са вътре в стаята И вътре в кръга отговарят на условието.
@Rextor92.
Човек, мерси за зелените точки, най-накрая разбрах какво се брои : ) Аз си мислех, че се почва с радиус H oт центъра и постоянно въпросния кръг се разширява. Като цяло супер приятна задача, жалко че е нямало една ей такава картинка в условието.
Отделно, мисля че не е коректно да се дава сплитване по повече от един уайтспейс. Всичко останало ми изглежда малко или много нормално. Имало е доста неприятни задачи по изпити, примерно Longest Alphabetical Word. A самото сплитване изобщо не е сложно, просто не съм сигурен дали е учено.
Определно изпитът е по-сложен от предишните 3-4, И все пак това е плюс, защото при колегите от 4-тия випуск се получи доста сериозна дупка в сложността и те изобщо не бяха готови за Advanced C# изпита. Вие се гответе, да не се налага пак да има извънреден изпит : )
Успехи в СофтУни : )
Постарах се да обясня 4-та в началото на изпита, но може би просто визуално е трябвало повече да се помисли как да се покаже в самото условие. Не е лесно и с нулевите тестове да се покаже идеята.
И на мен ми се стори по-сложeн и по-специално трета и четвърта задача. Разгледах и резултатите, хората масово са се затруднили.
Първите две задачи не ми се видяха сложни, с изключение на отрицателните уъркаути?!
Трета задача обаче въобще не беше стандартна трета, дори напротив, решавала съм доста от старите изпити и там се решаваха по един и същи начин с new string. Успях да я реша и тази, но ме затрудни.
На четвърта задача не разбрах условието. Щеше да е добре да има пример с малки числа, в който точките да могат да се преброят, за да схване човек логиката. Попитах асистент за условието, но ми отговори, че всичко си го пише в условието.
Пета задача не ми се видя много сложна /като за пета/, на минали изпити и по-сложни е имало. Разписах я до средата, обаче свърши времето преди да направя изтриването, утре ще я доразцъкам. Ако някой я е решил със стрингове, би ли споделил решението.
Аз на доста от пробните изпити, които съм си правил последния месец съм стигал до положение, в което не ми стига времето. И стигам до там, че проверявам input-а, който не е наличен по време на изпит. На мен проблема ми е, че трудно се концентрирам докато чета условията, по-приятно ми е да тръгна да пиша програмите. И в последствие пропускам важните неща от условията. Резултата, който постигнах е нормален за мен, даже малко над нормалния бих казал. :D
Сега гледам авторските решения:
Може много извинения да си измислям, но в крайна сметка съм си виновен аз. В реална ситуация винаги ще може да се види кога ви гърми програмата. При изпита това го няма, най-вероятно за да се види кой има внимание към детайлите. Моето внимание бързо се изчерпва. Важното е човек да не се предава. :D
А какво следва оттук нататък - кога да очакваме оценки, прием и записване? Съответно, записване и за университетите?
======
За изпита...
Поради липса на време за подготовка, си бях решавала само 1/2/3 задача от предишните и целта ми беше да реша и същите задачи на изпита. 300те точки ми се получиха за около 4 часа.
Специално за тях не мога да кажа, че бяха по-трудни. Както винаги - имаше уловки, аз лично забих на първа на това, че workouts може да са отрицателни... Note to self: гледай constraints, не логиката :D Втора задача, в сравнение с минали беше по-лесна откъм логика, но мнооого повече откъм писане, като Паисий се почувствах и бях убедена, че някъде ще гръмне заради правописна грешка в името на някой отбор. E, сигурно ако бях понаучила малко повече функции, вместо да пиша десетки иф-ове, нямаше да е такава драма, ама нейсе. При първия опит се оказа, че съм объркала точките при равен (давах по 1 т. само на един от отборите). Онова с болда го бях прочела иначе, но съм го направила трим-а не с метода от авторското, а с регекс (s+).
Чергата на мен лично ми беше най-лесна. От тия за рисуването обикновено, даже по-лесна ми се видя (от гледна точка, че по-малко математически изчисления са нужни). Отне ми малко време, да видя патерните, но си ги нарисувах на листче и ми се получи :P
@s_andreev:
Едва ли нещо "следва". Оценката се определя от общата успеваемост, а ако теста е бил грешен наистина, то е бил еднакво грешен за всички : ) Като гледам, никой не е решил 4та със 100 т. , а 5та май само един беше стигнал до 100, което говори, че тези двете наистина са били по-труднички явно.
А някой знае ли при неуспешно представяне, кога може да се явим пак и дали трябва да се запишем за съответния курс отново, за да се явим?
Много гаден изпит, да. Първа задача получих 75 точки само, кой да се сети за отрицателните workouts, но вече мина. Втора задача я направих много грозно с много if-else, но във visual studio и 2-та нулеви тестове работиха и да сложа кода в judge и хоп появи ми се препълнен масив и съответно 0 точки. Трета задача беше трудна в сравнение с минали изпити, измислих как да ги чертая, но така и не успях да ги чертая N пъти. Ползвах булева както в авторското, но все нещо не ставаше. Пета измислих как да я реша, но вече докато шофирах обратно към вкъщи.
Здравей,
На мен лично третата задача ми беше значително по-трудна от същия тип задачи на предишни изпити. Би ли показала как си я решила?
Вече можем да си видиме оценките от изпита.
Моите впечатления от изпита - първите 3 задачи ми се сториха горе-долу нормални, като изключим уловките... 4-та просто изключих, изобщо не разбрах условието и така и не стигнах до решение... 5-та с битовете си беше стандартна, не можах да се концентрирам напълно над нея (все си мислех за 4-та) и не я реших както трябва, предполагам, че с малко повече внимание и концентрация можеше да се направи
Това ми е решението на 3-та задача, тя ми беше най-интересна от тези, които успях да реша
Здравейте мога ли да попитам каква оценка трябва минимум за да успеем да влезнем?
Трябва да си получил mail дали влизаш. Този път и 75 точки са стигали за 3.
На мен първа и втора ми се сториха лесни.За втора пописах малко повече,но и на двете извадих 100.Трета задача,обаче,съдрах си дупето (да не кажа по-грозната дума),но така и не можах да я направя за четвъртия ред.Винаги ми гърми при вход 9,10,17,18 .. и т.н.Накрая даже се ядосах и реших да направя цикъл да обходи числата и да ги вкара в черен списък.Не съм я довършил,защото се отказах.Някой,ако успее да схване идеята от кода ми,моля да удари едно рамо.Защо винаги гърми с тези числа за вход?
Погледнах ти задачата колега и проблема е в логиката с която чертаеш редовете, обикновено в този тип задачи трябва да погледнеш примерите и да си изведеш някаква обща логика която ще е валидна за всички ситуации. Примерно аз като погледна задачата виждам че на примера в които N = 5 чергата е широка 5 символа и дълга 7 символа, на примера в които N = 7 чергата е широка 7 символа и дълга 10 символа, на N = 9 е широка 9 символа и дълга 13, така мога да достигна до извода че чергата е широка N елемента и дълга N+N/2 елемента. Ако мислиш за нещата с формули ще намериш веднага как да начертаеш редовете, шарката примерно се вижда че е на всеки 3ти елемент. Виждам че условието те е объркало да си мислиш за ".." като един елемент, но точно за това е важно в тези задачи да се вгледаш в примерите за да си изведеш логиката от там вместо да напасваш за всеки ред.
Благодаря за отделеното време!Ще преразгледам отново задачата,благодаря за коментара!
Стори ми се по-труден, особено 2-ра 4-та и 5-та задача. Тях така и не ги реших.
Третата ми беше доста лесна, и след около 30-40 минути мислене я разгадах. Реших я с два for цикъла и 6 if-а. Общо около 40 реда код.
Първата я мислих супер много време, докато я реша. Почнах от 12 точки. После 25, 37,50, 62, 87, 100... Общо взето ми отне много време да се сетя да използвам Numerics библиотеката, както и Math.Floor и да забележа, че за female формулата е 655, а не 665.
Ето и моите решения на задачите.
Първа - http://pastebin.com/gLJ4RLdK
Трета - http://pastebin.com/8Q9zcSwY
Между другото съм доволен от себе си. Като за първи опит, и с не много (време за) учене, се справих добре за моите критерии. Така и така няма да мога да зпиша следващото ниво в близката година, тамън до тогава може да си уча :)
Поздрави :)
Много рядко поствам подобни мнения, обаче понеже много разпалено обсъждахте 3-та задача, реших да я погледна.
Ей този ред дава 100 точки:
for (int i = 0; i < (int)(width * 1.5); i++)
{
Console.WriteLine(string.Concat(Enumerable.Repeat("#..", 51)).Substring(i % 3, width));
}
Само трябва да вземете width от конзолата : )
Малко извратено идва това. Доста е неефективно откъм памет и скорост. Една идея по-добре би било ако конкатенацията се извади преди цикъла и в него се взимат само събстринговете. Като цяло доста се дъни откъм КПК :) Но пък е интересно като алгоритъм.
"Малко извратено идва това."
Това му е идеята : )
"Доста е неефективно откъм памет и скорост."
Само откъм памет.
"Една идея по-добре би било ако конкатенацията се извади преди цикъла и в него се взимат само събстринговете."
Знам
"Като цяло доста се дъни откъм КПК :) "
И туй го знам : )
"Но пък е интересно като алгоритъм."
Просто ми хрумна и тествах. Винаги е интересно като решиш изпитна задача на един ред. Не много го позволяват обаче : )
На всяка итерация извършваш конкатениране и вадене на събстринг, и откъм време е неефективно в сравнение със стандартния подход :)
Потвърждавам, беше по-труден от други, които съм решавал.. Но пък на другите никога не съм отделял 6 часа, а на този ги мислих през цялото време и накрая се получиха нещата.. Като изключим няколко теста на четвърта, които ми гърмяха или ми даваха Memory Limit Error (да, толкова се омазах) и въпросните 90 точки на пета :D
На втора направих един речник, всички възможни проверки - дори в едиин момент поспорих с квесторите, че решението ми е перфектно и не може да не ми дава 100 точки. Тези три думи в условието, които изискват StringSplitOptions.RemoveEmptyEntries много лесно се пропускат.
След като оценяването се прави на база общото преставяне няма лошо и да са по-трудни задачите. Да видим от рано какво ни очаква :) Знае ли се кога очакваме резултати?
Сега разгледах тестовете на 4-та задача. По-специално тест №2, който дава грешка при повечето колеги, включително и при мен. Във файла test.002.in.txt са записани следните входни данни:
-20 -20
-10 -20
0 0
-20 0
20
2
Ред 3, обаче противоречи на условието на задачата, а именно: "The device can only be used within rectangular rooms", защото фигурата, която се получава така, е трапец:
В зависимост от начина на решаване се получават различни резултати: например при мен е 67, тъй като описвам правоъгълника по точки А и C, и обхождам с вложен цикъл от долен ляв ъгъл нагоре и надясно. При решение по квадранти или с друго определяне на граничните координати ще се получат други резултати.
Поздрави за изпита, задачите определено бяха изцеждащи, разбира се сега вече изглеждат фасулски! :)
P.S. Ако наистина се окаже, както изглежда дотук, че тест №2 е сгрешен, какво следва от това?
Току-що и аз го открих, упорито ми гърмят 2-ри и 8-ми тест. Решението ми като цяло е безумно, но да, 2-ри тест гърми, защото фигурата не е правоъгълник. Коректното в случая е да се смени теста и да се пуснат всички решения наново. 8-ми тест гърми, защото джъджа е настроен за 0.1 секунди лимит, а в задачата пише 0.25. Аз го минавам за 0.15 ; )