Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

mar0der avatar mar0der 191 Точки

[Exam] PHP Basics - 12 Януари 2015 - решения, впечатления, резултати

Здравейте,

веднъж и аз да стартирам такава тема :) Моето лично мнение е, че на поправителни / повишителни изпити, особено като са струпани в 4 дни един след друг е хубаво, ако не с една идея по - лесни то в никакъв случай по - трудни задачи от тези на редовната сесия. Мнението ми може да се потвърди и от 50% нулеви резултати на днешния изпит а бих казал, че имаше подобно леко "изхъвляне" в една от задачките на JS също. Идеята ми е че с подобен тип задачи хората който са на кантар да се откажат .. биват отказвани, а това е лоши и за тах и за Софтуни.

Ето мойте решения GitHub

Ще се радвам да прочета мненията ви за днешния изпит.

PP: Ако някой може сам да измисли алгоритъм за пълнене на спираловидна матрица в рамките на час и нещо, без да е решавал нещо подобно до момента лично ще му стисна ръката и ще го черпя бира. Ма наистина сам да я измисли, не да "преведе" алгоритъма от джава или C# 

Тагове:
5
PHP Web Development Basics 12/01/2015 23:58:03
Filkolev avatar Filkolev 4482 Точки

Има различни мнения по въпроса каква трябва да е трудността на поправките. Някои с право казват, че понеже има доста повече време за подготовка, е нормално задачите да са по-трудни. Донякъде и ти си прав, но пък ако поправките са много лесни, това не е мотивация да учиш, а да чакаш поправката. Аз съм на мнение, че трябва да са сравними редовните изпити и поправките, т.е. истината е някъде по средата.

1-ва, 3-та и 4-та ми се сториха лесни. За 3-та има решения за пълнене на спирална матрица във форума, все пак това е задача, която е давана за домашно. Там си ползвах 1:1 алгоритъм, който съм ползвал и преди, с while цикли. Не е от най-елегантните и кратките, но за мен е доста лесно разбираем и много лесно се дебъгва ако има някъде неточност. А на изпит залагам основно на това - да мога да се ориентирам бързо в това, което съм писал, а не да седя и да се чудя какво съм искал да направя и как да го променя ако се наложи.

2-ра беше доста неприятна. Предвид, че я направихме 4 човека, явно не е мое субективно усещане. Очаквам да видя тестовете и да си открия грешката в регексите, които пробвах на кило. Тази задача мисля да я пробвам по друг начин и ще я кача като стигна до някакво по-смислено решение, че това от днес не е за гледане :D

Между другото, mar0der, ако не се лъжа на теб ти гърмеше трети нулев тест и въпреки това имаш 100 на нея :) Абе кофти задача, не знам дали просто е трудна или нещо в условието не е изчистено, че толкова трудно се хващаха някои тестове.

Ето и решенията ми (без 2-ра, че ме е срам да я показвам): ЛИНК

 

4
mar0der avatar mar0der 191 Точки

Гърмяха многотестове но като натаманих регекса минаха всички. Един от триковете е следния. Могат да ти подадат Petar$5#5-----$$$@243434 и в този случай, ако не си написал регекса със positive lookahead ще ти хване ----- като валиден номер. (поне при моя регекс е така). Та за това с positive lookahead му казвам след, като намери или не намери + в номера да провери за някой спейс и след това да се увери че има число и след това да го селектира. След като тествах регекса и добавих лукахеда нещата станаха.

btw качи го това решение дето не е за гледане че ще да е шедьовър, като се има предвид, че беше направил 387 точки в 11 и половина та да го мъчиш до края на изпита ще да е нещо сериозно :)

0
13/01/2015 00:23:13
Filkolev avatar Filkolev 4482 Точки

На 2-ра задача ти гърми първи нулев тест с твоето решение, сега се вижда като го събмитнах :)

Видях го след като излязох; отидох в офиса, защото исках да видя подробности за задачата и на този етап ти беше единственият, който я беше решил за 100 точки освен мен.

Успях да го фиксна, пропуснал си, че между името и номера, освен +, не трябва да има и букви. Просто ги добавих в negated set-a и нулевия тест също мина. Зачистих и някои ненужни неща. Ето кодът: ЦЪК.

0
13/01/2015 00:29:21
mar0der avatar mar0der 191 Точки

ха супер странно изобщо не съм забелязал че гърми тоя нулев тест. Нямам условията пред себе си а ги няма и в системата, но ми се струва, че не пишеше да няма букви между името и номера. пишеше че може да има всичко без + .. може и да греша не знам. Много се изморих 5 изпита за 5 дена ми дойде в почече

0
cvetant avatar cvetant 75 Точки

Рядко пиша в форума, но днеска и аз ще пусна мойте 5 цента.

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

7
scr33nsh0o7 avatar scr33nsh0o7 61 Точки

За мен това беше най-трудният изпит(като изключим C#.. тогава не знаех още нищо), а и на предния изпит по PHP имам 212 а сега 124 точки. 

1. Задача е кофти заради датите. Не са ми любими и не винаги нацелвам правилното решение. Изкарах 62т. Нямам идея защо са толкова.

2. Задача всичко опира до regex и не ми е много точени за това пак имам 62т.

3. Задача докато стигна до нея доста се напрегнах. До сега не съм решавал такава, което е голяма грешка. Опитах се за час да измъдря нещо ,но не ми се получи.

4.Задача я реших и сотирах но не ми стигна времето да я притна.

Докато се прибирах зяпах картинка на матрица и на спокоен акъл разбрах как се прави.

Всичко опира до това колко здачи си решил, така тренираш мислене , а и няма какво толкова ново да измислят в задачите.

Друг е проблема ,че задачите за домашна по php бяха боза, което не е оправдание, но на лекциите може да се набляга на по важните неща ,а не да се обяснява за не знам кой път , по 2 часа как се върти цикъл.. и все пак ако сме достатъчно мотивирани всичко това са оправдания и не би трябвало да пречат на самостоятелното ни развитие.

 

6
verito898 avatar verito898 265 Точки

Пак са прибивали със задачи значи laughing. Еми хубавото, е че вече ще си знам- да се стои далеч от поправки laughing

Другото хубаво нещо е че ще можем много добре да се упражним с поправителните изпити .

В крайна сметка въпреки всичко може би найстина не трябва да се оплакваме - щом има хора които все пак се справят  с  всички задачи ..

0
13/01/2015 09:41:56
RoYaL avatar RoYaL Trainer 6849 Точки

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

Основно правило според мен е да не се дава неизучен материал. Ако е казано на лекции, че един масив може да има N на брой измерения, а в примерните задачи са се решавали масиви само с до 2 измерения, не пречи на изпитната задача да се даде с 15 измерения.

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

Има теория, че всяка задача може да се реши само с WHILE и GOTO (или WHILE и IF) :)

За поправките специално, доста хора отиват и за да си повишат оценката, т.е. не отиват просто защото са изкарали точки, с които няма да минат нивото, а отиват защото искат оценка за сертификат или нещо друго. Тогава би било абсолютно неприемливо, ако задачите са по-лесни от редовните.

Честно казано моментът е тънък. Трудно можеш да определиш на око трудността на една задача. Дали задача със спирална матрица е по-трудна от двуредов регекс е субективно. На един му се отдават регексовете, на друг алгоритмите... Освен, ако вторият не реши задачата с краен автомат, най-вероятно ще фейлне на регекса.

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

5
dim4o avatar dim4o 288 Точки

За едни хора е поправителен, за други повишителен изпит, а за трети е възможност изобщо да отидат на изпит, защото по някаква причина не са могли да присъстват на редовните дати (като мен). Ако се знае, че поправките са по-леки много хора ще се юрнат да ходят направо на поправки, защото са по-лесни. За момента съм забелязал, че първите дати са с малко по-леки задачи, което е коректно, защото почечето хора са нямали много време за подготовка при тези кратки курсове + teamwork.

Според мен задачите от изпита не бяха трудни. Даже в първия момент, след като прочетох условията ми се сториха лесни. Лесни ама така и не разбрах защо на 2-ра ми дава само 50 точки. Сигурен съм, че регекса си работи, но така и не тръгна задачата на 100%. Най-вероятно не съм разтълкувал нещо в условието както трябва. За другите задачи нямах проблеми и всичко мина сравнително гладко. 1-ва ми изяде повече време отколкото очаквах. 4-та беше от най-стандартните. 3-та е на 70% вече решавана в домашноте по C# и Java. Реших я с while() цикли (на които в един моент много бях зациклил докато разбера защо не работят). Докато въртя по спиралата в отделна матрица си отбелязвах кое поле е черно и кое бяло, като резглеждах остатъка на текущия индекс по модул 2. После на зиг-заг обхождането просто остана да се конкатенират белите и черните стрингове без сложни допълнителни проверки. Малко ме е яд, че не успях да изкарам 100т. на 2-ра, защото изглеждаше лека, но ще ми мине :) Поздравления за тези, които успяха да я решат !

0
mar0der avatar mar0der 191 Точки

Виж моя регекс на втора има тънкости там вероято от него ти идва проблма иначе няма какво да се сгреши в задачата

0
dim4o avatar dim4o 288 Точки

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

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

Аз лично този изпит го започнах доста зле...

Започнах с 1-ва задача. След редовния изпит по PHP вече имам обеца на ухото, че дати се генерират само с DateTime. Да ама в случая ако DateTime не успее да генерира дата judge връща runtime error. Какво ли не търсих, но в крайна сметка се оказа, че DateTime конструктора няма как да върне false ако не успее да генерира дата. Успях да взема само 37 точки.

След 1 час борба с първа задача минах на 2-ра. Тук набързо направих някакъв regex и взех 50 точки. След малко корекции стигнах до 75 и реших да зарежа и тази задача и да минавам на следващата. Поне не отделих много време да се боря и с тази задача.

Минах на 3-та. Веднага си погледнах решението на спиралната матрица от C# Basics домашното. Все пак тук имаше и допълнителни условия и трябваше малко повече логика да се добави. След няколко submit-a и тук взех 100 точки.

Реших да се върна на 1-ва. При strtotime хубавото е, че ако не успее връща false. Накрая измислих някакво тъпо решение като комбинация между strtotime и DateTime. Проверявам с if дали strtotime може да генерира дата и ако да то с DateTime генерирам дата. По този начин 1 тест не минаваше и имах 87 точки. Пак я зарязах.

Стигнах най-накрая и до 4-та. Тя беше много идентична с Computer Shop от изпита на 5 Септември. Директно си копирах решението и го преработих малко. В началото имах дребни грешни но след няколко submit-а взех 100 точки.

Върнах се отново на първа и за 20 минути успях да я реша.

Накрая ми останаха да преодолея последните два теста на втора. След като ми светна в зелено последния тест, на който повечето хора са се мъчили остана да гадая каква ли тъпа грешка съм направил, за да не ми мине 7-ми. Оказа се, че в regex-a след началната главна буква търся само малки букви, а трябва да търся и големи.

Така за 4 часа и малко успях да се преборя с всички задачи. Фактът, че само Filkolev беше решил всички задачи, когато си тръгвах говори достатъчно за изпита :). 

mar0der, след като реши всички задачи без трета очаквах да станеш готов доста преди мен с изпита.

 

Ето и моите решения на задачите (преработени):

GitHub

 

P.S. ако някой има желание мога да му обясня логиката на пълнене на спиралната матрица.

3
13/01/2015 13:16:25
mar0der avatar mar0der 191 Точки

значи аз имах голям късмет с датата че открих решение на твоето затруднение почти моментално. Ако ползваш ООП синтаксиса когато не успее да генерира дата дава грешка трика тук е че ако ползваш процедурния синтаксис date_create то той ако не успее да направи дата връща false което решава задачата доста лесно. (справка виж моето решение). А иначе явно някъде съм пропуснал тая задача с спираловидната матрица в c# щото после забелязах че маса народ са я ярешили със 100 точки а са се затруднили на предните задачки. Та както казах не е лесно да измислиш алгоритъм за пълнене на спираловидна матрица под напрежение за час и нещо. Аз лично намеих код в интернет и го преведох на php това ми отне 2 часа (не намирах работещ код) останалото решение с палиндроми ( или както им е там името ) ми отне 15 мин. Аз лично бях потресен от скоростта на filkolev тои имасше 387 точки в 11 и нещо :) Явно възраста ми си казва думата и затъпявам :)

1
Filkolev avatar Filkolev 4482 Точки

За задачи с дати се бях подготвил още от редовния изпит, където разучих подробно DateTime, пак за 1-ва задача. Спирална матрица решавах за последния курс по C#, една за подготовка и една, която дадохме на изпит. 4-та беше много стандартна и като цяло по-лесна от предишни такива, давани на PHP. На това отдавам краткото време, за което ги направих тези трите.

Иначе статистиката: в 11:44 - 350 т., в 12:30 - 387 т., 13:36 - 400 т. Да кажем от 3:30 мин общо, 2 часа ми заминаха да мъча 2-ра, от тях 1 час борба конкретно с тест 8. 

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

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

mar0der, прав си за date_create. Промених си малко решението на първа задача в github. Доста кратка и лесна логически стана. И на мен ще ми е интересно защо на втора толкова време се мъчих с последния тест. Хубавото в случая беше, че като пуснах един submit само с принтиране на No matches видях, че на два теста вземам точки и единия беше именно 8-ми. Това доста помогна.

За regex-a на втора не е нужно да се използва lookahead, а вместо това може да се сложи само \d. Моят regex така съм го направил, че ако махна това \d вземам само 50 точки.

2
13/01/2015 15:25:03
Filkolev avatar Filkolev 4482 Точки

Както подозирах, има елемент на некоректност във 2-ра задача, и по-точно - пропуск в условието.

Ето какво е подадено в тест 8: Aa!@#$+-12

А ето условието за валидност на телефонен номер: The phone number should be at least two digits long, might start with + and might contain the following symbols in it: “(“ ”)” ”/” ”.” ”-“ ” “ (left and right bracket, slash, dot, dash and whitespace).

За изход се иска да няма мачове. Но според мен такъв има:

"Аа: +-12" -  никъде не се уточнява какъв е форматът на валидния телефон, т.е. мусака от типа "+-", ")(" и т.н. са валидни по буквата на условието. Не може да обмисляме всички възможни комбинации, да мислим кои може да са дадени в теста, и да преценяваме кои може авторът да е счел за валидни и кои не.

В този случай именно look-ahead-a върши цялата работа, защото казва, че плюсът е част от телефонен номер само ако е следван от цифра, иначе попадаме в хипотезата за + между името и номера, което е казано по-нагоре в условието, че е невалидно. Но идва друг въпрос: ако имаме комбинацията "+(" това не е ли валидно, да речем: "+(359)-2-999-999"?

Авторското решение казва, че номерът може да започва само с цифра или +, следван от цифра. Освен това трябва да звършва задължително с цифра. Това според мен е пропуск в условието и трябва да се каже, щеше да спести доста ходене по мъките и доста хора щяха да покажат, че знаят как да боравят с регекс и да вземат тестовете. 

При задаване на условие на задача с регулярен израз, най-важното е ясно да се каже какъв е форматът на валидния мач, което мисля, че тук не е налице. Регексът е мощен инструмент, който работи перфектно, когато знаеш точно какво искаш и го разпишеш, но може доста да те забие ако не си съвсем наясно с едно от двете (т.е. какво искаш или как да го напишеш).

Едит: Предполгам идеята на това "might contain the following symbols in it" е била да подскаже, но очевидно не се е получило. Да ти кажат, че нещо може да съдържа друго нещо в себе си, не означава, че то трябва да е във вътрешността и оградено от нещо друго, в случая цифри.

Едит 2: Разгледах и останалите тестове, всичко е точно в тях, т.е. неяснотата в условието не им влияе.

2
13/01/2015 15:52:26
mar0der avatar mar0der 191 Точки

Имаше подобна липса на информация в 1 ва задача. Там те карат да сортираш дати но не казват дали ще има еднакви дати. А един от тестовете беше с еднакви дати.

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

mar0der, при сортиране няма голямо значение дали има еднакви дати според мен. В тази задача се използва само sort, който автоматично си сортира както трябва. Ако се пише usort така или иначе стандартно се прави да може да връща 3 стойности: 1, -1 и 0.

0
13/01/2015 15:56:09
mar0der avatar mar0der 191 Точки

за сортирането не трябва но за това дали да ги дисплейнеш или не има значение моето първо решение пълнеше датите в асоциативен масив с ключ датата в текстов формат и после сортирам с ксорт проблема  при това решени е че повтарящите дати просто изчезват. И за това се наложи да направя двумерен масив в който да пазя броя на повторенията и после при принтирането да ги принтирам в съответния брой пъти

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