Проблеми с подготовката за изпит.
Здравейте колеги,
пиша за да разбера дали и други хора имат проблеми с подготовката за изпит. Визирам примерните изпити от февруари и март 2015 в Judge. Конкретен пример, с който да опиша положението е изпит Март 2015, задача 3. Погледнах я - казах си лесно - написах я, ползвайки регекс и получавам 40/100. Бъхтя се, мъча се, променям регекса, изчиствам каквото има да се изчисти - 40/100. Викам си - добрe, знам, че тоя изпит Божо го решава в exam prep-а на 13.04, така че. дай да видя. Качен е грешен сорс код, затова отварям видеото и гледам. Логиката на Божо е на 100% същата, аз съм направил 2 метода повече и ги контролирам от един switch, а той просто има if{}else.
Линк към Гит: https://github.com/achobanov/Java-exam-march/tree/master/src/exam
P03BasicMarkupLanguage.java - моето решение (40/100)
P03Bojo.java - решението на Божо (изненада).
Другото нещо което ме фрапира е, че когато пусна неговя код в Judge, той ми дава изтекло време на всички тестове ( пробвах 7-8 пъти ).
На всичкото отгоре в неговия код има една глупост, която съм изкоментирал. При така написан код, ако регекса не мачне нищо ще вкараме програмата в безран цикъл while() -> continue, защото не подаваме нова стойност на 'input'. Обаче ако махна този код Judge ми гърми на всеки тест. Пробвах нещата и локално си работи.
Може ли някой да каже - аз ли нещо не разбирам, judge ли не е в час. Моля прегледайте кода на двете решения и ако това на Божо трябва да работи, защото моето получава 40/100 при еднаква логика. Аз сега ще взема тестовете от архива и ще си ги пробвам всички ръчно и ще ъпдейтна поста с резултатите.
Post-testing: Разбрах за какво става въпрос. За решението на Божо нямам никаква представа как работи. Проблемът при мен произлизаше от поредното неуточнено условие. Copy-paste от условието: "You should not output empty lines. For the content tag to be considered non-empty, it must contain at least one character.". Тук изрично се казва "Не принтирай празни редове". Подчертавам редове. Да, в следващата част се казва, че content tag-a не е празен ако има поне един знак в него ( а whitespace си е знак ). Но в крайна сметка ако тага има само whitespace това пак ще резултира в празен ред и следователно НЕ трябва да се принтира. Моля кажете ми ако бъркам логически. Вица за програмиста, хляба и яйцата трябва да го знаете.. Не знам само на мен ли ми се струват много не-доуточнени повечето условия за изпит. Давам друг пример с Problem 2 Parking system. Там изобщо не е обяснено правилно какво трябва да направи колата, ако мястото и е заето. Аз лично смятам тези недоуточнения за доста неправилни, защото единствения начин да ги уловиш е да анализираш тестовете и резултатите в Judge.
Щом си го разбрал - браво за теб, но нека ти обясня какво имам предвид. Според мен има два пътя по които това може да се тълкува.
Условието е: "A car can enter from any cell of the first column and then decides to go to a specific spot. If that spot is not free, the car searches for the closest free spot on the same row. If all the cells on that specific row are used, the car cannot park and leaves. If two free cells are located at the same distance from the initial parking spot, the cell which is closer to the entrance is preferred."
Вариант 1) Колата не знае дали мястото е заето, докато стигне до там. Стига и мястото е заето.Тогава търси най-близкото място до себе си. Ако има две места на еднакво растояние тя паркира на по-близкото до входа. Така пътят на колата трябва да бъде всички квадратчета до паркомястото ( заетото) включително и после да измине още малко докато си намери място.
Вариант 2) Колата от влизането си знае, че мястото и е заето и трябва да намери най-близкото до себе си място на същия ред като заетото място.
Аз пробвах и с двата варианта и не ми се получаваше. Тогава дръпнах тестовете от Judge и разбрах, че е бил вариант 3 - Колата знае от началото, че мястото е заето, защото не ходи до там ( спямо растоянието, което минава ) обаче си намира място най-близко до оригиналното й заето място. Много се радвам, че си го разбрал правилно, ама не мислиш ли, че е добра идея нещата да са една идея по-конкретни, за да се избягва ненужно объркване?
Изобщо не коментирам, че X и Y са разменени в Judge. В условието са както трябва x, y. А в Judge стойностите на стестовете са първо y, после x.
братле, та ти дори си го направил болд. Ясно си пише, че става въпрос за разстояние от първоначалното парково място...Аз си нямам на идея защо разглеждаш този втори вариант който си опоменал.
Защо реши, че x и y са разменени? Ако имаше такова нещо доста хора щяха да забележат и да имат проблеми. Кое според теб е x и кое y? Защото по условието "Y is never on the first column" аз съдя, че y е колоната.
Условието кое място трябва да се заеме е доста ясно - това е мястото с подадените координати; ако то е заето, търси се най-близкото до него свободно място ("If that spot is not free, the car searches for the closest free spot on the same row"); ако има две места на реда на еднакво разстояние от желаното място, взима се това отляво, понеже е по-близо до изхода ("If two free cells are located at the same distance from the initial parking spot, the cell which is closer to the entrance is preferred. "). Ок, разбирам само по първата част да се объркаш и да решиш, че ако мястото е заето търсиш най-близкото до изхода (а не до желаното място), но това няма как да се навърже логически с второто условие - ако две свободни места са на еднакво разстояние (няма как да има две такива места ако следваме сбърканата логика).
Единственото, което наистина не е изрично казано, е че се брои само разстоянието от входната точка до мястото, където в крайна сметка е паркирала колата. Но за тази цел има нулев тест, от който ясно се вижда, че колата не обикаля напред-назад, иначе няма как вторият изход да е 2, трябваше да е 4, колкото и на третия (да отиде до желаното място са 3, след това да се върне обратно +1).
На изпит има квестори, ако не си сигурен, че разбираш условието питаш. Ако има място за различни интерпретации това бързо се вижда на място и в даден момент някой ще излезе да го обясни. Най-важното е да запазиш спокойствие, с нерви и обвинения, че имало двусмислици ще си изхабиш енергията и няма да покажеш максимумът, на който си способен.