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
Achev avatar Achev 53 Точки

Здравейте, аз бях от 2-рата група, и не останах много доволен от изпита си, очаквах повече от себе си, най-вероятно ще се ява на поправката за да си повиша успеха. Някой знае ли кога се очаква да излезнат резултатите (класиранията) с оценките ?

1
Filkolev avatar Filkolev 4482 Точки

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

1
Achev avatar Achev 53 Точки

А кога трябва да започне HTML/CSS курса ?

0
Filkolev avatar Filkolev 4482 Точки

По програма - утре вечер почваме. То и днес има някакви лекции. Време за отдих - по Коледа :D

0
velio84 avatar velio84 241 Точки

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

Аз ги почнах наред. Първата ми беше супер лесна, не съм си и помислял да ползвам DateTime - направо тръгнах да ги парсвам към числа. На няколко места прочетох, че е гърмяло с int променливи, аз я реших именно с int-ове и нямах проблеми, даде ми 100 точки (решенията ми в края на поста). Можи би от зор да я напиша по-бързо и щото ми се стори лесна, обърках името на 1 променлива и загубих доста време докато си намеря грешката и защо не ми показва правилно изтеклото време.

На втора задача нямаше драми, там си я написах и си тръгна от раз със 100 точки.

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

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

Оставаше ми само трета задача и започнах да се мъча да изчистя ненужните символи в сайта www.regexr.com експериментирайки. Сега от решенията дето сте публикували видях лесния начин, написквайки "[\/)(|]+" и замествайки тия символи с "".

Аз обаче случайно разбрах, че има символ | (ИЛИ), който може да се ползва и реално така си направих израза за чистене на тия знаци. Изгежда така:

String regex = "\\|\\/|\\(|\\)|\\|| "; cool

Изглежда супер недодялано, но важното е, че проработи. Реално на изпита и сега четейки други решения се научих да ползвам regular expressions...

Втория път го изчистих с pattern и matcher

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

char[] letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};

int[] weights = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};

Общо взето - супер първобитно решение се получи, но проработи накрая и ми даде 100 точки. Доста време стоях в залата - почти целия изпит, но учудващо и за мен изкарах 400 точки - тръгнах с нагласата да вържа поне 200 smile

С 2 думи съм пре-доволен от изпита и резултата. Ето ги и решенията ми както са събмитвани в judge:

https://github.com/velio84/JavaBasicExam/tree/master/src

2
22/09/2014 23:54:11
veselinsavov avatar veselinsavov 219 Точки

@velio84, на трета задача и аз така го разбрах, но на мен ми даде 80 точки.

0
velio84 avatar velio84 241 Точки

Пусни освен кода да го погледнем

0
veselinsavov avatar veselinsavov 219 Точки

Сега погледнах подробно твоя код и си намерих много тъпа грешка...

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

Малко си коригирах изпитните задачи от 21 Септември сутринта. На 1-ва задата Timespan използвах Date за да намеря разликата в часовете. В останалите задача разликата е по-скоро козметична. Все още не са пробвани дали след промените ще дадат 100т., защото още не са отворени изпитите за practice. Променените ми задачи са в github:

1. Timespan

2. MagicSum

3. WeirdStrings

4. Nuts

3
24/09/2014 17:23:09
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Туко що видях оригиналния ти пост в gmail, така че ще променя моя: 

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

Като за начало в условието на задачата си пишеше, че първия час винаги е >= от втория. Ако не го пишеше тогава се добавя Math.Abs и винаги ще връща положителен резултат. И в stackoverflow дават за пример този вариант.

Edit: коментара на totkai незнайно как изчезна :)

1
23/09/2014 16:55:13
totkai avatar totkai 3 Точки

Може би нещо друго съм объркала тогава с Date-a. И условието няма кой да чете явно:D Ще погледна по-късно условията.

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

 

Всеки случай го бях пуснала  така и резултатът беше 0 точки в judge-a. После с int го реших. 

0
23/09/2014 18:09:10
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

JodaTime явно е външна библиотека и най-вероятно judge системата не работи с външни библиотеки. Може би това е причината да ти даде 0 точки.

0
23/09/2014 22:27:48
spareva avatar spareva 12 Точки

Задачите бяха лесни за даденото време.

Ето как се решават от човек без познания по java, без гледани видеа, без писани домашни:

1. google "java console i/o". проверка за string .re.. откриваме че има такъв метод, проверяваме дали е string или void, за да знаем дали да го присвояваме на друга променлива - готово. Междувременно откриваме в google че в java bool e всъщност boolean. Благодарим че синтаксиса на масивите, .split и for(...) е като в c#.

2. Pишем баламската. Гугълваме как се изписват double в конзолата.

3. Шашкаме се при инициализация на лист и откриваме в гугъл List<> = new ArrayList<> и .get() синтаксиса. Откриваме, че foreach не е като в c# - не го ползваме, за да пестим време.

4. Откриваме HashMap. Представяме си KeyValuePair<string, KeyValuePair<>> и опитваме да подражаваме. Става мазало със синтаксиса, особено при принтирането - откриваме Iterator в google. Все пак се налага да гугълнем foreach синтаксиса (излез еот крайното решение). После търсим "order HashMap by key" и стигаме то TreeMap = 70 точки. Ако не ни мързи да гугълваме още търсим "HashMap value preserve order" и откриваме LinkedHashMap. Заменяме на 3 места в кода = 100 точки.

Време за подготовка - 0мин (от отборната работа единственото общо беше как се сетъпва проект) - 400т.

3
dim4o avatar dim4o 288 Точки

Хахах :D, направо ме комплексира - браво ! Аз бях изрешил доста задачи - и пак 400т. Май нямаше смисъл да се подготвям толкова, а по-добре да си бях направил екипния проект. Но на мен така или иначе ми е голям кеф да решавам задачи, така че не съжалявам толкова. Иначе да - паднаха се наистина лесни проблеми. Може на изпита по JavaScript да пробвам твоя номер.

0
23/09/2014 18:43:45
spareva avatar spareva 12 Точки

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

2
stanislav.bozhanov avatar stanislav.bozhanov 34 Точки

Аз по-скоро искам да направя обръщение към курса като цяло. Изпитът ми хареса като формат и като задачки. Имам 390 и съм доволен, въпреки че така и така не разбрах кой тест ми гръмна на 3та, но 100% е нещо тъпо :D

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

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

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

3
23/09/2014 20:35:34
dim4o avatar dim4o 288 Точки

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

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

Еее, по-елементара грешка сигурно нямаше как да направя на трета задача Wierd Strings smile

Кодът с грешката: линк

На ред 21 където смятам тежестите на всяка една от думите съм написал: 

sum += alphabet.indexOf(word.charAt(i) + 1);

а трябва да бъде: sum += alphabet.indexOf(word.charAt(i)) + 1;

Една скобка сложена не където трябва от бързане /а си имаше още 3 часа и половина до края на изпита/ и 90 точки..., пак е късмет, че не е имало и други тестове с повечко букви "z" в тях, че щеше да има още гърмежи :)

Сега малко ме е яд, защото си мислех през цялото време, че проблема ми е в първия регекс, а той си е наред макар и малко поусложнен. Изобщо не заподозрях, че може да има проблем в смятането на тежестите и съответно не дебъгнах тази част на решението. Ще ми е обица на ухото :)

1
24/09/2014 14:07:49
dim4o avatar dim4o 288 Точки

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

_01_MirrorNumbers

_02_PossibleTriangles

_03_ValidUsernames

_04_OfficeStuff

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

Туко що реших задачите от вечерния изпит на 21-ви за точно 1 час и 13 мин. Задачите определено са аналогични с нашите и според мен няма да има скалиране.

Първа задача се решава най-лесно само със стрингове като се използва reverse().toString(). Дори в домашните имаше такава задача.

Втора задача я реших с ArrayList, в който пълня 3-те числа от реда и след това го сортирам с sort(). Накрая проверявам дали сбора от първите 2 числа е по-голям от третото число.

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

Четвърта задача я реших за 7 мин. и то като си копирах кода от нашата 4-та задача и направих само 3-4 промени по него. Тези 4-ти задачи се решават почти с един и същи код... 

Решенията ми може да ги видите тук:

1. MirrorNumbers

2. PossibleTriangles

3. ValidUsernames

4. OfficeStuff

2
dim4o avatar dim4o 288 Точки

Браво за regex-а на 3-та! Понеже трябваше да бързам(и аз ги направих за около час) си направих един метод по първия възможен начин, който ми хрумна още докато чета задачата :). Хубаво е, че си ги научил добре тези regex-ове, защото изглеждат доста мощно средство.

1
24/09/2014 19:04:38
Filkolev avatar Filkolev 4482 Точки

Освен, че са мощно средство, са все по-застъпени в курсовете нататък. Аз хванах 2-3 туториала и в рамките на един следобед научих нещата на достатъчно добро за момента ниво. Рано или късно трябва да ги научим, по-добре рано.

1
Filkolev avatar Filkolev 4482 Точки

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

Сториха ми се доста лесни, може би защото доста си приличат с тези от сутрешния (а и този път не се уплетох в условията). Реших за точно половин час всичките, което досега не ми се е случвало. Единствено проблем срещнах с 3-та, където първия събмит даде 70/100, но там и нулев тест гърмеше. Оказа се, че в регекса който ползвах, трябваше да ескейпна наклонената черта с още n на брой наклонени черти и всичко тръгна.

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

1
KirilManin avatar KirilManin 7 Точки

Здравейте колеги, 

Имам една бърза питанка относно задачите от отминалия изпит - условията има ли ги качени в Judge-a всъщност? Питам, защото при мен не излизат когато се логна, а виждам че тук колегите постват решение след решение, a пък искам и аз да измъдря едно за 4-та задача, макар и а фю дейс лейт... :) 

EDIT:

//А, намерих ги, те били качени на страницата на курса...My bad! :) 

 

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