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
RumenVasilev avatar RumenVasilev 103 Точки

Изпита беше ок, първа беше лесна, 3-та и 4- та абсолютно решими. Мен лично ме е яд за 2- ра, която ми изяде 2/3 от времето и така и не заработи на повече от 80 точки. Просто ми беше крива още докато четях условието. Толкова се ядосах, което беше огромна грешка и просто си загубих времето, а трябваше да я оставя като ми заработваше 60 точки и да си реша напълно 3-та и 4-та. Резултата ми, като резултат става, но 100% ще се явя на повишителния, защото мисля, че мога повече. 
За пореден път съвет- не си губете времето за едни пусти 20-30-40 точки! Освен това на мен лично преминаването от С# на Java не ми се отрази добре и чак последната седмица наистина включих за какво, аджеба, иде реч и като цяло се радвам, че завърши този курс! 
Успех и до вторник :)

1
21/09/2014 23:27:33
Filkolev avatar Filkolev 4482 Точки

Ми аз съм на мнение, че май-май е по-добре ако обучението в СофтУни започва с Java и след това се минава на C#. По-лесно е да се усвоят простотиите на Java за 2-та месеца, които имат хората за подготовка в ниво 0, отколкото за 3-те седмици, които й се отделят в ниво 1. Също, Java като език е по-търсен на пазара, защото е open source, така че и интересът на кандидатите може да се повиши, защото е по-вероятно с това да си намерят работа. Разбира се, трудно е да се правят такива генерални промени в учебния план, но лично за мен щеше да е по-полезно ако сега учехме по-изпипания C#, за да се кефим как са оправили повечето глупости на Java-та.

1
RumenVasilev avatar RumenVasilev 103 Точки

Точно това имах предвид ФиКолев, за 2 месеца Java- та ще се усъвършенства доста добре, а след нея 3 седмици за C#, по мое мнение предостатъчни. 
Наистина сега Java- та изглежда, като крайно абуригенски език, сравнение със C# и може би това е причината много от хората да се затруднят. Още повече, ако някой е гледал лекции и на Наков, където всяка трета дума е хейт към Java :D 

0
veselinsavov avatar veselinsavov 219 Точки

@Filkolev, до някъде си прав, че за 2 месеца по- лесно ще се усвоят простотиите на Java, но C# е много по- лесен и по- подходящ за начинаещи. Също едва ли ще е добре за човек, който за първи път ще пише "Hello world" на конзолата  да му обясняват, че трябва да мине на линкус,  да си инсталира eclipse,ja... и т.н. По- добре ще е, ако се вземе от времето за html/css, така няма да има нужда от генерални промени :)

0
21/09/2014 23:55:56
Petar_Belberov avatar Petar_Belberov 41 Точки

Аз бях в следобедната група. Не ми стана ясно на 3-та задача след като отделя отделните думи, как да побдера тези които не започват с число. Пример: "ds3bhj y1ter/wfsdg 1nh_jgf ds2c_vbg\4htref" - 1nh_jgf, 4htref бяха невалидни, но ми ги отделяше и тях. Използвах "([A-Za-z0-9\\-\\_]+)";. Въпроса ми е какво трябваше да допълня като regex за да изключа тези започващи с число?

1
Filkolev avatar Filkolev 4482 Точки

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

[^0-9][\w\-]+

Зависи точно какво са искали по условие; трябва да се прецени дали да се ползва отрицание, както правя горе, или да се дефинират позволените стойности на първия знак. За следващата част, слагам \w, което е по-кратко, то включва букви, цифри и долна черта, т.е. аналогично е на [a-zA-Z0-9_], което оставя само "-" за добавяне. Не знам дали така точно ще проработи, опитът ми с регекс не е голям, в най-лошия случай трябва да се разпишат както си направил, а w-то да отпадне.

0
22/09/2014 01:02:11
micro3x avatar micro3x 135 Точки

Колега аз си го направих бабешката.

Първо си разделих по сепараторите и после си превъртях масива и си го налях отново в друг валидирайки всеки Usernname.

Ето разгледай моето решение дава 100т.

http://pastebin.com/gwed5EZv

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

0
22/09/2014 17:08:03
Petar_Belberov avatar Petar_Belberov 41 Точки

Аз бях в следобедната група. Не ми стана ясно на 3-та задача след като отделя отделните думи, как да побдера тези които не започват с число. Пример: "ds3bhj y1ter/wfsdg 1nh_jgf ds2c_vbg\4htref" - 1nh_jgf, 4htref бяха невалидни, но ми ги отделяше и тях. Използвах "([A-Za-z0-9\\-\\_]+)";. Въпроса ми е какво трябваше да допълня като regex за да изключа тези започващи с число?

0
zerefel avatar zerefel 70 Точки

За RegEx не знам какво трябва да допълниш, но аз не се и затормозявах, за да не става твърде тромав. Просто после викнах един if (Character.isDigit(inputArray[i].charAt(0))) и ако е цифра continue, където inputArray[i] ми е стрингът след RegEx, тоест alphanumeric char & underscore.

0
22/09/2014 01:38:10
Wintersnow avatar Wintersnow 7 Точки

[^a-zA-Z] ми свърши работа поне на мен. Търси всичко което не отговаря на двата интервала.

0
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

String word = "9asdfdd";

boolean startsWithDigit = word.substring(0, 1).matches("\\d");

1
akaynarov avatar akaynarov 13 Точки

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

0
Bi0GaMe avatar Bi0GaMe Trainer 389 Точки

Здравейте, намерили сме ви зарядното. В офиса попитайте и ще ви го дадат :)

0
gstoyanov90 avatar gstoyanov90 99 Точки

Аз може да се каже, че съм недоволен от резултата си - 290 точки :/  Задачите не бяха кой знае какво, аз сам се прецаках :/ 

Първа задача беше лесна, макар че я написах по много баламски начин, не исках да си губя време в мислене на "хитрини". http://pastebin.com/YahpAG1Q (малко ме е срам, че го поствам :D)

Решението ми на 2 задачата: http://pastebin.com/jRJYDAGS и мен ми гърми на 1 тест, не мога да разбера защо :/ като излязат тестовете ще си го оправя :) 

4-та я реших с 2 дървесни мапа, обаче ми даваше само 50 точки. Оказа се, че трябва вътрешния ми мап да е LinkedHashMap, за който дори не бях чувал, но се оказа изключително полезен като пази реда на постъпване :)  http://pastebin.com/ky2NZHhz

3 задачата 1 час се опитвах просто да пусна 1 принт, а се оказа че компилирам грешна задача и затова входа ми гърми :/ Както и да е, в последните 30 мин я написах, но нещо май ми се препълваха някакви масиви и си гърмеше "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept..." http://pastebin.com/5v4vBngj - това е кода, тия дни ще го погледна и ще си го оправя. Като гледам на колеги, идеята ни е една и съща, но при мен си гърми :/ Може би  щото се метнах с някви мапове да сортирам да пиша там блах блах нз :D

 

 

1
22/09/2014 09:19:38
nedjo avatar nedjo 53 Точки

Задачите бяха със средно ниво на трудност. Мога да кажа, че за човек, който се е подготвил и е решавал задачите от предишните изпити не представаляваха проблем. Е, разбира се всеки може да се спъне на някой от тестовете. И на мен на втора задача ми гърмяха първо последните три и след това последните два теста докато се сетя сумата да я инициализирам на MIN.VALUE, но това са неща за които ако накрая ти остане време ги оправяш. За щастие ми остана. Ето ги и моите решения:

1. Timespan - http://pastebin.com/wff5dMhf

2. Magic Sum - http://pastebin.com/NkcadpCp

3. Weird Strings - http://pastebin.com/5gUaHQLb

4. Nuts - http://pastebin.com/hK039c6A

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

 

2
mihayloff14 avatar mihayloff14 824 Точки

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

github

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

Бях от сутрешната група. Единствено трета задача изглеждаше по-трудна за мен. Първа я реших с int-ове както предполагам всички са направили laughing

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

0
Filkolev avatar Filkolev 4482 Точки

Предвид, че имахме само 3 седмици за този курс, не е много логично да очакваме кой знае колко по-голяма сложност от тази на C# изпита. Идеята е хората да се учат, малко трудно ще стане ако сложността на задачите се повиши рязко, тогава отиваме към концепцията за отсяване, която не мисля, че е правилната. 

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

Като цяло до петък имах някакво чувство, че може и да не се справя добре на този изпит, просто не бях никак уверен. По време на Java курса изкарах една гнойна ангина и 4 дена бях по цял ден на легло, а 4 дена са си доста загубено време. Team проекта и той изяде доста време и в крайна сметка едва в петък вечерта започнах да си правя последното домашно и да вниквам по-добре в материята от тази лекция. Не бях поглеждал нито една изпитна задача до този момент. Едва в събота на обяд започнах да решавам изпитни задачи, но те не се оказаха трудни и до полунощ реших всички Java теми. 

За изпита бях в сутрешната група. Цел N1 ми беше да се махна от залата колкото се може по-бързо, защото трябваше да пътувам за сватба до Сливен(лош късмет да се паднат и двете изпитни групи в неделя)...

Първа задача ми се стори доста лесна и започнах от нея. Изобщо не мислех да се ровя в интернет как се решава с DateTime и директно я започнах с int-ове.  След като ми изгърмяха последните 2 теста бързо се усетих и смених на long. За по-малко от 10 минути взех 100 точки.

Втора задача беше лесна логически и веднага реших да използвам вложени цикли. И понеже исках променливите на 3-те вложени цикъла да са ми n1, n2 и n3 си направих първия с n1 и го сложих още 2 пъти. Написах целия код, но не ми връщаше правилни резултати. Знаех, че в бързината съм допуснал тъпа грешка и пуснах debug. Тук дойде интересната част :). Понеже бях на стационарен компютър на SoftUni, на който нямаше Eclipse Luna, то аз го свалих. Да ама в debug не се виждаше variables прозореца.... А без него не мога да разбера какво става с програмата. Тръгнах да търся в интернет от къде се пуска. Видях в програмата, че си има меню show pane и в него variables. Явно това беше, но колкото и пъти да го натисках, все не се появяваха. Накрая реших да debug-вам с println :))))) Малко след като започнах реших, че това е просто абсурдно и реших да си прегледам кода. Е бързо видях, че като съм копирал и paste-нал след това 2 пъти for цикъла не бях сменил навсякъде променливите. усетих се и max променливата да я инициализирам с Integer.MIN_VALUEТака за малко под 40 минути реших и тази задача. Самите стационарни компютри са много мощни и удобни поне за мен.

 Трета задача също беше лесна логически. За да отделя думите ползвах 2 пъти regex. В първия replaceAll на [\\/()| ]+ с "". При втория си направих масив като split-нах по [^a-zA-Z]+. С тази задача нямах никакви проблеми и след 40 мин. от първия опит взех 100т. 

 Четвърта задача... Още като започна изпита и я видях доста се зарадвах на нея. Докато решавах вкъщи изпитните задачи 4-те ги решавах като вземах код-а ми от друга такава задача и само го променях. И на изпита така направих и си взех мое готово решение и само го промених малко. Така за 15 минути взех 100 точки.

Така постигнах целта си да свърша бързо и за 1 час и 50 минути бях готов. И хванах сватбата сравнително рано. А ето това са ми решенията, които предадох:

1. Timespan

2. MagicSum

3. WeirdStrings

4. Nuts

3
22/09/2014 12:54:28
dim4o avatar dim4o 288 Точки

Задачите ми се сториха лесни. Първите 3 задачи бяха на ниво C#Basics + малко regex, а четвъртата беше супер стандартна. Чесно казано очаквах да са по-трудни, да има повече задачи с мапове и комбинаторика. Вероятно това е нарочно, защото времето за подготовка беше малко. Така е по-справедливо наистина, защото покрай груповия проект едва ли някой е успял да отдели по-сериозно време за подготовка. Задачите бяха с ясни условия, а неяснотите по 2-ра и грешния изход на 3-та бяха бързо и своевременно изгладени. Радвам се, че нямаше задачи като трета от изпита на 27 Май, където не само условието е неясно, но и решението според мен е грешно, защото дава правилен изход само в някои частни случаи (тестовете например).

Първа задача този път беше доста стандартна. На много места в нета може да се намери направо решена. Първите пъти ми гърмя докано не правих всичките променливи от тип long - нещо което трябваше да се съобрази от самото начало.

За втората понеже има отрицателни стойности беше важно maxSum да се инициализира с Integer.MIN_VALUE. Тук трябва да се спомене едно от странните неща в Java, което е "анти" интуитивно. Double.MIN_VALUE не е най-малката стойност на типа double, а е най-малкото положително число, което може да се представи с този тип, т.е. нещо много близо до 0, но не 0.

Има и още едно странно нещо, което забелязах за double. Държи се много нелогично при закръглянето. Например 1.955 ако се закръгли с %.2f stawa 1.95, а не 1.96. Просто алгоритъма на закръглянето за double не е такъв какъвтно почечето хора очакват. Това може да бъде оправено ако типа се прекара през BigDecimal. Радвам се, че на изпита нямаше задачи с double. Кой знае какви още подводни камъни има, които не съм забелязал.

За подготовка изреших и задачите от изпитите по JavaScript (само че с Java) и там се натъкнах на друга фрустрация. Като копирам стойностите на един двумерен масив във друг двумерен масив с цикъл се получава нещо много странно: двата масива си пазят някакви референции един към друг. Като промениш стойност в единия тя се променя и в другия. Изключително странна аномалия. За да се избегне масива трябва да се копира ред по ред с Arrays.copyOf().

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

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

Ето и решенията ми от изпита без никакви промени. Не съм ги редактирал и съм оставил даже тестовете, които съм си правил закоментирани.

_01_Problem

_02_Problem

_03_Problem

_04_Problem

 

1
22/09/2014 15:53:52
micro3x avatar micro3x 135 Точки

Не видях решения за втората група.

Ето моите дават 400т.

01. Mirror Numbers

02. Possible Triangles

03. Valid Usernames

04. Office Stuff

 

И отново на първа задача нулевия тест не минава, но дава 100т. tongue-out

на С# пак имах една такава задача.... 

2
22/09/2014 17:17:14
Filkolev avatar Filkolev 4482 Точки

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

-1
micro3x avatar micro3x 135 Точки

Ох прав си май гладен ще си остана...

Ще трябва да науча малко вицове, че да мога да го забавлявам шефа. :)

П.П. Току що ми напомни защо не бива да поствам в подобни теми.

1
Filkolev avatar Filkolev 4482 Точки

Just sayin', има разлика между това да си вземеш изпита и да правиш нещата както трябва. В твоя случай (сега, както и на C#, където с два сериозни бъга на задачата пак имаше 100) проблемът е на СофтУни, ти си направил, каквото се е очаквало от теб. А и задачите ти ги разгледах, съвсем кадърно написани решения, така че гладен няма да останеш в никакъв случай ;)

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