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

[Exam] PHP Basics - 21 декември, 22 декември 2014 - решения, впечатления, резултати

Здравейте колеги. Явно заради празниците все още няма създадена такава тема. Какви са ви впечатленията от изпита? Доволни ли сте от резултата?

Аз се явих на изпита на 22-ри. 

Както винаги започнах от 1-ва задача. Оказа се много лесна без никакви подводни камъни и сложни сметки. Дори формулата ни беше дадена. Май досега на изпит не бях решавал задача за 10мин. 

Следващата задача беше втора. Бързо успях да направя regex и да пробвам решението и взех 50 точки. От този момент чак до края на изпита започнаха родилните мъки с тази задача, като така и не успях накрая да родя 100 точки.

След 1 час и 40 мин. мъки реших най-накрая да започна 3-та задача. Успях да си изградя логиката на задачата още в самото начало. Първият submit с реален код (винаги пускам още в самото начало var_dump na $_GET) не ми даде никакви точки. След 5 минути мина само 1 тест и след още 5 взех 100. 

Започнах 4-та. В началото като видях толкова много input полета и checkbox-ове не останах доволен. След внмателно прочитане на задачата успях да разбера какво точно се иска. Доста неприятно беше, защото се получи доста дълбок асоциативен масив и си беше объркващо. Бавно и внимателно сглобих кода и след 1 час взех с първия submit 87 точки. Най-гадното нещо в една задача е да е мине 1 тест. Ядосан се и си помислих, че и тук ще падне голямо копаене... Да ама веднага се сетих, че аз изобщо не съм използвам по никакъв начин полетата за min и max килограми и не съм сравнявал с получената сума. Останах доста изненадан, че с такава генерална грешка само 1 тест не ми мина :) След корекцията в логиката на програмата ми взех 100 точки и малко си отдъхнах. 

Върнах се пак на 2-ра задача. След като ни казаха да проверяваме и от двете страни дали числото има символ взех още 12 точки и вече станаха 62. Това бяха последните точки, които успях да взема до края на изпита. Какво ли не правих, как ли не променях решението си ама не... През цялото време си мислех, че за да не минат 3 последователни теста значи не намирам правилно числата от стринга. Дори написах нова логика за намиране на числата, този път без regex и пак 62 точки. По едно време реших все пак да подам дата, по-малка от 1970-та и пробвах с 1940-та година и пак си работеше. Трябвало е обаче да пробвам с < 1900..... За три реда код (вместо strtotime е трябвало да използвам DateTime класа) се лутах 4 часа общо на тази задача и така и не взех 100 точки. 

Ето решенията на 4-те задачи, но не във вида, в който ги предадох, а малко поизчистени:

22 Декември 2014

Понеже бях нощна смяна и за да ми мине по-бързо времето реших задачите и от другия изпит:

21 Декември 2014

 

 Пожелавам на всички колеги весели празници и посрещане на новата година с настроение и усмивка. Не на последно място и успех в новото ниво в SoftUni.

Тагове:
7
PHP Web Development Basics 24/12/2014 11:28:41
a.angelov avatar a.angelov 1316 Точки

Честита Коледа! smile

Ето моите решения на изпитните задачи: 21 декември 2014 и 22 декември 2014 /без 3-тата задача Message Decoder - опъна ми се нещо и дава само 66/100 точки - вече дава 100 точки, благодарение на усилията на Filkolev и nikola.m.nikolov/.

Моето мнение е, че трудността на задачите от втората дата е подобна на тази от първата дата. Единствено 4-та задача е малко по-обемиста, но пък сортирането на данните е по-лесно - само ksort и готово. На останалите задачи логиката и алгоритъма лесно се намират.

Радвам се, че задачите бяха по-изчистени и нямаше нужда да се гадае какво точно е мислил автора, както е било на задачите от изпитите на предния випуск /без тези от поправката на 5-ти септември/. На изпита отидох с нагласа да взема 250-300 точки, а стана така че успях да взема максимума :) В решенията си от 21-ви имам доста излишни неща, обаче имайки болезнения опит от решаване на предните изпитни задачи за подготовка се презастраховах за всичко :)

Курса ще запомня най-вече с екипния проект - от него научих много неща, случих на съотборници и накрая се получи страхотен резултат.

3
25/12/2014 16:36:21
Filkolev avatar Filkolev 4482 Точки

Message Decoder - know the feeling...

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

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

Що се отнася до сортирането - след JavaBasics изпита имам обеца на ухото и сортирането вече на сън го правя :)

1
25/12/2014 12:43:26
Filkolev avatar Filkolev 4482 Точки

Повярвай ми, проверявах по едно време за валидност на датата, но като видях, че не е там проблемът затрих, че да мога по-лесно да се ориентирам в осталата част от манджата :D

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

Фил, моят коментар е насочен към Анатоли :)

А ти успя ли да видиш защо ти гърми решението на 3-та задача с while цикъла? Аз погледнах за 5 минути ама не можах да разбера и ще задълбая като имам малко повече време. На Анатоли май му гърмят сищите тестове като и на теб.

0
25/12/2014 12:48:22
Filkolev avatar Filkolev 4482 Точки

Гърмяха ми 4 и 6-ти тест, после с промените гърмят 3-ти и 6-ти. Никаква идея. Правих и днес някакви отчаяни промени. Докато не видя входните данни да дебъгна с тях според мен няма да разбера откъде идва проблемът. 

0
a.angelov avatar a.angelov 1316 Точки

Аз не смея да си покажа сега кода на Message Decoder щото такова мазане падна в търсене на проблема... На мен ми гърмят ми 3 и 5 тест laughing

ПС. Мда, прав си Никола, че нямам проверка за валидна дата... и ако е подадена невалидна създаването на DateTime обект ще ми гръмне..., честно казано не се и сетих да сложа проверка за това :) 

За сортирането в PHP много се кефя на array_multisort, за сортиране на масиви по няколко критерия. В общи линии много неща се правят значително по-лесно отколкото примерно в Java...

2
25/12/2014 13:34:14
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Анатоли, а твоята логика подобна на логиката на Фил ли е?

0
a.angelov avatar a.angelov 1316 Точки

Ох, айде, ето последното мазало: http://pastebin.com/upZwkaPU, а това е първото /по-малко/ мазало, което даде 66/100: http://pastebin.com/pPmiJ9ti

Ама моля ви, не се смейте много smile 

0
25/12/2014 13:39:25
Filkolev avatar Filkolev 4482 Точки

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

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

Май разбрах грешката.... я пробвайте ако последния подаден елемент е * и ако е така го изрежете с substr.

Хм явно не подават такъв тест, който да завършва с *.

0
25/12/2014 13:52:36
a.angelov avatar a.angelov 1316 Точки

Мисля, че не е това...

Този код, мисля покрива случая:

} elseif ($miliseconds[$currentPosition] == '*') {
for ($k = 0; $k < $cols - $j; $k++) {
echo '<td></td>';
}
$currentPosition++;
break;
}

отделно като ми свършат елементите също допълвам с празни клетки:

} else {
echo '<td></td>';
}
0
Filkolev avatar Filkolev 4482 Точки

Не е от звездите накрая, пробвах да тримвам празни места и звезди в краищата.

Освен да почнем да тормозим празнично авторите на задачите да ни пратят тестовете :D Аз ги знам кои са.

1
Filkolev avatar Filkolev 4482 Точки

Оп, хванах още един тест като заместих всички празни места в стринга с едно празно място, остава още един: 

$string = preg_replace("/\s+/", " ", $string);
2
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Фил, дам сега само 5-ти гърми. Нали каза, че първо са ти гърмяли 4-ти и 6-ти и след промени 3-ти и 5-ти. Дай първия код, при който 5-ти тест ти е минавал.

0
a.angelov avatar a.angelov 1316 Точки

Браво - и на мен това ми оправи един от тестовете - остана да гърми 5-ти :)

Извинявам се, ама както го пише в условието никога нямаше да се сетя да търся повече от едно празно място:

The second row of the matrix holds an array of strings which hold the pinging information. There won’t be more than one space. The input data will always be valid and in the format described. There is no need to check it explicitly.

0
25/12/2014 14:36:20
Filkolev avatar Filkolev 4482 Точки

Никола, объркал съм се, 5-ти никога не съм го хващал. Гърмяха ми 3 и 5, а с някакви корекции ми гърмяха 2 и 5. Ама 5 си стои непоклатим.

Анатоли, това за единичния спейс мисля се отнася само до входните данни, т.е. за формата, в който ни подават данните, а не за спейсовете в самите думи, които трябва да пълним в таблицата.

0
a.angelov avatar a.angelov 1316 Точки

Ок, така да е - но в такъв случай никъде не виждам да пише, че ако има повече от един whitespace да печатаме само една празна клетка, а не по клетка за всеки whitespace... Тук си трябва гадателство :)

0
Filkolev avatar Filkolev 4482 Точки

Аз на изпита доста време отделих за random промени, днес продължих с други такива. Наистина и аз не виждам къде в условието е казано да правим такова нещо, тъй че по-скоро някаква случайност. Опитах да затрия и всички спейсове, но дава обратен ефект.

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

Не съм сигурен, че проблемът е в празните символи. Сега си тествах моето решение, което дава 100т. Никъде не замествам празните space-ове с нищо. Просто използвам preg-split като разделям само по '*' и си запазвам space-овете както са си и си ги принтирам накрая.

Промених стринга ръчно на 

$string = 'Nik 0la   *   Marinov   *  ' .

Повадам му 4 колони да принтира.

Първата дума 'Nik 0la   ' ми я принтира на 2 реда с една празна клетка между 'k' и '0' и три празни клетки след 'a'.

Втората дума  '   Marinov   ' ми я принтира на 3 реда. Преди 'M' 3 празни клетки и след 'v' също 3 празни клетки.

За последната дума '  ' принтира 1 ред с 4 празни клетки само.

 

Edit: сега тествах кода на Фил със същия стринг и неговия код принтира 1 ред в повече за първата дума.

1
25/12/2014 15:01:18
Filkolev avatar Filkolev 4482 Точки

Значи, открих къде е проблемът - оказва се, че звездата не се счита за част от думата, което никъде в условието не е казано, а според мен трябва. Т.е. ако се случи звездата да е в началото на реда, този ред не следва да се запълва с празни клетки. Махнах последната промяна, с която зачиствам спейсове и се оказа ненужна, явно просто помага за единия тест по случайност (което предполагах, че е така).

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

Ето кодът за 100/100 - ЦЪК.

П.П. Специални благодарности на Никола, който намери всъщност къде се получава този бъг. Все пак я преборихме задачата без тестовете.

2
25/12/2014 15:58:08
a.angelov avatar a.angelov 1316 Точки

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

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