Loading...
Filkolev avatar Filkolev 4482 Точки

[Exam] Java Basics - 21 September 2014 - впечатления, решения, резултати

Тъй като вече официално приключи и вторият изпит по Java Basics за днес, реших да отворя темата.

Първо, поздравления на успешно справилите се, а те не са малко.

Как ви се сториха задачите? По-лесни, по-трудни или на нивото, което очаквахте? Имаше ли по-кофти моменти, с които (не) сте се преборили?

 

По мое мнение задачите бяха на очакваното ниво; не бяха нито по-лесни, нито по-трудни от задачите, които са давани на предишните изпити. За разлика от някои спорни моменти, които установихме в предишни задачи, на днешния изпит аз поне не видях да има кой знае какви проблеми с условията или тестовете, т.е. доста по-шлифовани бяха.

Гледайки резултатите, около 20% от студентите имат 400 точки, което е съпоставимо с резултатите от изпитите по C# Basics на нашия випуск. Това означава според мен, че випуска като цяло се движи с очакваните от СофтУни темпове и се поддържа някакво постоянно ниво.

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

1-ва задача - стана ми лошо като видях името - Timespan. В Java времената са ми мъка; вярно, в Java 8 има доста по-кадърни класове за работа с такива обекти, но проблемът е, че имам малко практика с тях. Другият сериозен проблем е, че търсенето в гугъл често изкарва стари теми, в които се дават съвети с използването на остарялото и дървено java.util.Date. Неслучайно оставих тази задача и директно преминах към следващите. Без да преувеличавам, тук загубих най-много време, като накрая изтрих всичко и си реших задачата с int-ове, за щастие логиката не беше много сложна да се разпише и я направих сравнително бързо след като вдигнах ръце от разните парсвания към дати и т.н.

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

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

4-та задача - лесна за хората, които са решавали и схванали предните задачи с мапове. Вероятно непосилна за останалите. Имаше тук два по-трикови момента: 1) ядките трябваше да се принтират в реда, в който са получени на входа (т.е. TreeMap и HashMap отпадат като вариант), 2) трябваше да се взима substring преди парсването към число на количествата, за да се елиминира "kg" от входа. Третият по-важен момент е принтирането на изхода, като общо взето вариациите в този тип задачи идват основно в тази част. След последната лекция, на която бяха обяснени различните структури, подготовката, на която Асен реши задача с мап в мап, както и 1-2 самостоятелни решения, задачата я написах на един дъх, основно времето ми отиде, за да я изкодя. Няма особена вариативност в 4-тите задачи и наистина за тези, които са успели да отделят някакво време да се подготвят за нея, това е почти сигурно решена задача.

ТУК може да видите моите решения. Ще се радвам ако някой сподели по-различни начини за решения, най-вече на 1-ва задача, мисля, че на останалите няма кой знае колко място за творчество.

Тагове:
10
Java Advanced 21/09/2014 22:07:12
a.angelov avatar a.angelov 1316 Точки

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

Проблеми с измисляне на алгоритмите по задачите нямах и сравнително бързо ги реших. На 2-ра и 3-та при първите събмити имах по 70 и съответно 80 точки, но работих на прицнипа вземаш точките и бягаш на следващата. Реших и четвърта и тогава пак се върнах на предните две. На втората бързо намерих проблема и го оправих, но на трета 10-ти тест не спираше да ми гърми и така и не успях да разбера защо..., но като се качат тестовете ще видя :) Предполагам е нещо в регекса - и аз използвах два - с първия замествах скоби, наклонени черти, вертикална черта и empty spaces, а с втория сплитвах по [^A-Za-z]+.

Доволен съм от резултата си, не стоях до края, защото реших, че ми стигат 390 точки :)

ЕДИТ: Става дума за сутрешния изпит.

 

ЕДИТ 2: Ето и моите решения /четвърта задача е с 90 точки, като видя тестовете ще я оправя :)/:

Решения - Java Basics - 21 Sept 2014 Morning

3
22/09/2014 17:46:20
Filkolev avatar Filkolev 4482 Точки

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

0
21/09/2014 22:05:26
a.angelov avatar a.angelov 1316 Точки

Ето кода, казвайте какво съм объркал :)

http://pastebin.com/0t2DLf7b

 

ПС. Съжалявам за повторенията на постовете, GoobleChrome нещо ми прави мизерии...

0
21/09/2014 22:13:20
Filkolev avatar Filkolev 4482 Точки

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

Другото, което е можело да ползваш, вместо ArrayList, int[] за теглата. Аз така и не покрис случая да имам празен запис в масива с думите, но за щастие такъв явно не е имало.

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

0
andrey.blagoev avatar andrey.blagoev 62 Точки

Според мен задачите не бяха трудни, особено за тези, които са прегледали задачите от миналите изпити. 

За първа задача изгубих цял час в търсене на библиотеки и накрая я направих с int-тове и с два if-a. Втора няма какво да я коментирам. Четвърта беше същата като от изпита на 27 юни, само се разменят местата на LinkedHashMap и TreeMap. Най-много време (около 90мин) ми уби 3-та задача, защото ми изкарваше 90 точки, гърмеше тест 6. Накрая проблема се оказа, че с RegEx като сплитваш по не думи, т.е. \W+ долната черта "_" я брой като буква от a-z. След като го преправих на "[\\W+\\d+_]+" даде 100/100.

 

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

Колега, за сплитването по думи като решавах старите изпитни теми винаги ползвах [\\W]+ докато една от задачите не искаше да ми даде 100 точки. Тогава се вгледах в условието и в авторското решение и забелязах, че по-удачно е в тези задачи да се използва като сплит [^a-zA-Z]+ 

0
salih1f1 avatar salih1f1 188 Точки

Задачите бяха с една идея по трудни, така е и редно. Но като цяло аз съм наистина много недоволен от резултата си. Очаквах да постигна повече и не разбирам къде точно съм сгрешил. Най - лесна ми беше последната а най - трудна първата. Съжалявам, че не можах да отделя повече време на 3тата задача, но след пътуване цяла вечер до София, и сън не повече от 30-60 минути, бях леко зомбясъл. Разбирасе това в никакъв случай не ме оправдава, но съм много разочарован от себе си. Очакванията ми бяха по големи, а и доста се подготвях за изпита. Все пак добрата новина е че има и поправка, надявам се поне там да съм по - доволен от резултата си.

Огромни поздрави за всички колеги доволни от резултатите си. Успех. :)

1
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

Аз бях в следобедната група. Задачите бяха изключително лесни. Смея да твърдя, че биха могли да бъдат много по-трудни. Като пример мога да дам 03.Valid Usernames -> валидните имена съдържат само букви, числа и _, а Regex-а за матчването им е "\w+"... Можеше да е леко по-предизвикателно, но и това е нещо.

Единственото, с което не се преборих, са нервите ми. Компютъра, на който бях седнал(21), циклеше сериозно и още на 10-тата минута ми изпраска син екран. -.-

6
RosenKrumov avatar RosenKrumov 203 Точки

Аз лично съм доволен от изпита. Бях сутринта. Задачите ми бяха приятни и не се оказаха сериозен проблем. Само на 2-ра се омотах със biggestSum, бях го занулил, когато го създадох и от там ми отидоха 10 точки, но за радост само тях изгубих. По останалите задачи се бях подготвил достатъчно добре, особено за 4-та, там реших всичките от миналите изпити. Общо взето само 2-ра ми беше неясна в смисъл каква ще се падне. Знаех си, че на 3-та ще има някакъв RegEx, а на 1-ва някакви сметки. Реших ги сравнително бързо и за мое щастие не се омотах на нито една освен 2-рата.

Ето и моите решения:

1. Timespan

2. Magic Sum

3. Weird Strings

4. Nuts

2
21/09/2014 22:15:11
Filkolev avatar Filkolev 4482 Точки

Това с нулата и аз го направих, но като погледнах ограниченията ми светна, че нищо не пречи да ни вкарат само отрицателни числа. Когато нещо не тръгва, особено като дава 90/100 примерно (т.е. алгоритъмът е очевидно верен, а пропускът - малък), първата ми работа е да погледна ограниченията, да вкарам малко въображение какво може да са решили да сложат в тестовете. Много често това се оказва успешна тактика и бързо премахвам бъгове.

1
VenelinGrozev avatar VenelinGrozev 130 Точки

Един апел към всички, които се явяват на изпити заедно с други хора - колеги, имайте предвид, че не сте сами в залата и ще е добре да се съобразявате с този факт!

Бях в следобедната група и зад мен имаше някакво момче, което не спря да си мрънка под носа. "А, тука що счупи?", "Лалалала", "Ааааа, не така, не така..", десет пъти извика квесторите да обсъжда условието на задачите. Единствената причина да не му направя забележка беше, че не исках да се разсейвам, затова го пиша това сега.

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

3
Slav.Slavchev avatar Slav.Slavchev 25 Точки

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

1
p.mitov avatar p.mitov 6 Точки

Ще споделя и аз накратко:

1. Не си единственият, на когото му е станало лошо от Timespan. Имаше в едно от домашните задача за разлика между две дати - борих се с някакви Date-ове - на единия пример от условието постоянно даваше отклонение с един ден. Проверих с Excel - отговорът в примера си е верен. Оставих я така и реших, че, ако ми се наложи на изпита да решавам дати или часове - само int-ове. След краткия шок прочетох задачата и за по-малко от 10 мин я написах - логиката в случая не беше сложна, както си отбелязал и ти. Добре, че Timespan беше в първа задача - тя по задание е сравнително лесна.

Но, ще трябва да се поработи повечко с тази материя, не може да се разчита само на int-ове (освен за изпита tongue-out).

2. Направих грешка, която вече веднъж бях допускал при решаване на задачи от предходни изпити - maxSum трябваше да се нулира на Integer.Min_value, а аз бях я нулирал буквално - на нула. Усетих се бързо. От една от първите лекции в #0 си спомням, че трябва да се нулира на min за съответния тип данни, но тогава не разбрах защо (май не слушах добре в тоя момент). Някои от тестовете са само с отрицателни числа и нулирането с нула не сработва.

3. Тук направих две грешки.

Първата беше, че по навик търсех leftmost, а се искаше rightmost - това изгърмя на третия пример от условието, само че в judge, щото специално на тая задача преписването на примерите беше времеемко и направих само първия.

Втората беше, че вместо ASCII кода на "a" ползвах кода на "A", т.е. вместо да изваждам 96 от кода, изваждах 64. Изгубих доста време преди да се усетя.

4. За тази задача си казал достатъчно - въпрос на практика, а и след решаването на подобна на живо от лектора, нещата станаха доста ясни. Не си уточнил как си направил поредността на nuts - аз го направих с LinkedHashMap.

Edit: Моля за извинение - дублирах поста няколко пъти, но chrome май нещо не е в ред. А и постът се оказа леко outdated, щото го писах дълго и някои неща се бяха променили, наприме Filkolev вече е качил решенията.

2
21/09/2014 23:19:53
Filkolev avatar Filkolev 4482 Точки

По 4-та, да, LinkedHashMap ползвах, сложих вече линк към решенията ми в оригиналния пост.

По 3-та, има "хак" с тези задачи и не е нужно да се запомнят кодовете в ASCII. Схемата да обърнеш цифра от char в число например е: ch - '0'. За да вземеш номера на буквата в азбуката правиш: ch - 'a' + 1 (в случая предварително обработих стринга с ToLowerCase(), за да не мисля и за главните букви).

По 2-ра задача, всичко зависи от задачата, понякога 0 си е напълно приемлива начална стойност. Например в 3-та задача, където знаеш, че със сигурност ще добавяш само положителни стойности, 0-та е резонна; или ако в Restrictions са казали, че ще подават числа от 1 до нещо-си, пак е ОК да сложиш 0 на променлива, която смята сума. За 2-ра задача обаче, където диапазона съдържа и отрицателни числа, вече трябва да се сложи MinValue.

 

0
p.mitov avatar p.mitov 6 Точки

Ха, това първото не се бях сетил, но едва ли ще го забравя. wink.

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

0
axl894 avatar axl894 38 Точки

Още едно решение на 3.Weird Strings . Може би е малко по-неугледно, но работи

1
verito898 avatar verito898 265 Точки

Ейй тази заветна 1ва задача (timespan) останах без нерви на нея ... Прекалено много се омотах и аз с нея ,а решението е елементарно.. 2ра почти я докарах аaaма разбира се не с пълния брой точки ,а трета задача за съжаление нямах време да завърша .

пп: не споменавам 4та ,защото така и не ги научих тея мапове и хич не я отразих , но за следващия път ще си знам undecided

Anyway поздравления на доволно справилите се , а пък ние недоволните ще се видим на поправката евентуално laughing

3
21/09/2014 22:55:06
veselinsavov avatar veselinsavov 219 Точки

И аз на тази първа изгубих доста време.... пробвах много от простотиите на Java за парсване на време и не стана... и накрая си я напрвих като бял човек с int-ове :D. Иначе с изпита се справих 380/400, на 3-та задача имах малка грешка в regex-a.. 

2
Filkolev avatar Filkolev 4482 Точки

Аз си мисля, че трябва специално внимание на лекции да се обърне на работата с дати в Java 8, да се покажат добрите и лошите подходи, защото и в домашните имаше задачи с дати, и те ми взеха малко от здравето. Сам да се бориш да търсиш в нета кое-как не ми се струва ефективно, специално с тия типове данни, специално в Java...

За поправката - научи ги маповете, Асен ги обясни за 15 минути перфектно на лекцията. Там можеш с копи-пейст от предишна 4-та задача да ръчнеш някои неща и да си вземеш лесни 100 точки от иначе задача, която изглежда сложна. Рисувай си ако трябва кръгчета да се ориентираш кое е ключ, кое стойност. Това са точки, които може да се вземат с малко усилия, защото няма много мислене. Съвет към всички, които ще ходят на поправката.

2
mclaud85 avatar mclaud85 28 Точки

За малкото време за което се подготвих съм доволен от изпита.Ако си пререшавал задачите от миналите изпити ,мисля че без проблем 200 точки се вадят като начало.Имаше и някои тънкости  ,жалко че не ми остана време да оправя 1-ва задача TimeSpam

Някой да има идея последните 2 теста защо "гърмят" :)

 

 

1
Filkolev avatar Filkolev 4482 Точки

Подозирам, че проблемът идва от препълване на int-a. Умножаваш потенциално голямо число (не помня ограниченията, но за часа беше големичък максимумът) по 3600. Иначе като сметки изглежда ОК. Ако сложиш един long би трябвало да хванеш и тия два теста.

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