Loading...

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

vani4ka66 avatar vani4ka66 24 Точки

[Exam Problems] Java Fundamentals 23.04.2016 - problem {1} - Melrah Shake

Здравейте, на първата задача от вчерашния изпит Джъджа ми дава 30 от 100 точки, и не мога да разбера защо. Ето кода ми, ако може някой да ме светне какво изпускам  - 

https://github.com/vani4ka66/Melrah-Shake/blob/master/Problem%201%20Melrah%20Shake

Тагове:
1
Java Advanced
kaloyannikov avatar kaloyannikov 531 Точки

Не проверяваш колко match groups имаш , а трябва да са поне 2 за да може да се shake-va . 

http://pastebin.com/Wv9N8GuW някой ако може да ме светне за 10т липсващи

1
24/04/2016 13:01:30
NickSU avatar NickSU 3 Точки

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

2
kaloyannikov avatar kaloyannikov 531 Точки

защо се получава като проблем аз не се мъча да ескейпвам нищо получавам patterna като sc.nextLine() 

0
NickSU avatar NickSU 3 Точки

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

1
GeorgiSK avatar GeorgiSK 5 Точки

Мисля , че проблема идва от сформирането на pattern след всяка итерация, или от това че първо махаш първия pattern и след това ако няма втори казваш No Shake, а би трябвало ако няма втори да не махаш първия instance на патерна.

Погледни моя код ако това би ти помогнало: 

https://github.com/GeorgiSK/ExamsAndHomeworks/blob/master/Exams/ActualExam/src/MerlahShake.java

1
EvgeniyaL avatar EvgeniyaL 35 Точки

Здравей,

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

Edit: Това е за решение на задачата със регулярен израз.

Поздрави

0
24/04/2016 13:27:31
krisitown avatar krisitown 45 Точки

Не съм се задълбочавал много, но като погледнах мисля че проблема идва от начина, по който взимаш първия и последния occurance на pattern-а. По начина, който си го направил се създава проблем когато патерна го има само веднъж в стринга. Ти заместваш винаги първия път който се появи със "input = input.replaceFirst(pattern, "");" но не си сигурен, че патерна го има и 2ри път във стринга. Тествах като подадох инпут **а** с патерн а, и получих резултат ****, който е грешен, защото трябва да махаш появите на патерна в стринга по двойки. Незнам, дали разбра какво исках да кажа, малко лошо го обясних, ако имаш някакви въпроси ще ти отговоря с удовлоствие.

1
vani4ka66 avatar vani4ka66 24 Точки

Опитах се да избегна проблема, като написах следното - 

int lastIndex = input.lastIndexOf(pattern);
if (lastIndex < 0){
    System.out.println("No shake.");
    break;
}

тоест, след проверката за първия индекс, проверявам дали има последен индекс с IndexOf. Ако няма такъв, ще ми даде отрицателно число, следователно се принтира No shake.Вчера уж тествах този вариант и ми се получаваше, но е възможно да не съм го доизпипала. Ще тествам пак, мерси

1
krisitown avatar krisitown 45 Точки

Проблема не е в това, дали изписваш "No shake." или не. По-скоро е това, че махаш първата поява на патерна, но може да няма втора. А по условие трябва винаги да ги махаш по двойки. Следователно ако стринга ти е нещо от сорта на *аа*а*аа* и му дадеш патерн аа, трябва крайния стринг да е **а**, а не ****. Защото първо махаш пъровто и последното аа и оставаш с **а**. Патерна става само 'а'. Но тъй като нямаш двойка 'а'-та а само 1 'а' не трябва да го махаш. По условие трябва да махаш патерна винаги по двойки.

1
vani4ka66 avatar vani4ka66 24 Точки

Аха, разбрах сега. Много тъпа грешка и очевидна, но....Мерси за разясненията!

1
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

Здравей,

Нямам време да разгледам кода ти, но ти прилагам моето решение от снощи ... 100/100

ЦЪК

Успех

2
raging avatar raging 92 Точки

http://pastebin.com/XpfzEB68 90/100 

0
Dean788 avatar Dean788 4 Точки

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

0
24/04/2016 22:22:56
kristian.georgiev avatar kristian.georgiev 15 Точки

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

0
Dean788 avatar Dean788 4 Точки

https://github.com/DeanBojinov77/Java-/blob/master/MerlahShake :)

Аз я направих с replace първоначално, но ми гръмнаха и на мен 7 теста за време

0
25/04/2016 11:30:16
todor11 avatar todor11 6 Точки

Става със субстринг и частите ги събираш в StringBuilder.

1
mbeleva88 avatar mbeleva88 69 Точки

Значи не може да не е написано в условието, че трябвa да се принтира No Shake и когато свършат буквите от pattern-a, и на всичкото на отгоре да няма нулев тест за това.... тази тъпа грешка дава 70т. 

In case you have found at least two matches, and you have successfully shaken them off, you print “Shaked it.” on the console. Otherwise you print “No shake.”, the remains of the main string, and you end the program. See the examples for more info.

Никъде не се споменава за случай когато pattern-а е празен.......

Тука явно е трябвало да съм медиум, а не програмист.

Аз съм я решавала с regex и съответно 9-ти тест ми хвърля exception...

1
stela.iv avatar stela.iv 115 Точки

Then you continue to shake off the border occurrences of the new pattern until the pattern becomes empty or until there is less than the - needed for shake, matches in the remaining string.

Написано е какво се случва, ако pattern-a остане празен, но не и ако си е празен принципно. Никъде в условието няма ясна опция да няма инпут изобщо, какъвто е случая с 10-ти тест. Напротив даже:

Input

  • The input will consist only of two lines.

  • On the first line you will get a string of random characters.

  • On the second line you will receive the pattern and that ends the input sequence.

А другото...

  • The two strings may contain ANY ASCII character.

  Мдааа...ANY...ама не и никакви... :)

И аз пробвах с regex, но ако нямах тестовете...нямаше шанс да схвана къде и защо гърми. С тестовете го докарах до 100, но въпреки това успях да го счупя с мoй, измислен такъв, което ми доказа, че явно не е опция regex-а в случая.

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

0
03/05/2016 18:09:22
RoYaL avatar RoYaL Trainer 6849 Точки

Ами той този изпит реално спъна хората с тестове, не толкова с алгоритмите в задачите. Lesson learnt от наша страна за тестовете. Btw. null (нищо) също е част от ASCII character-ите

0
stela.iv avatar stela.iv 115 Точки

Хмм...виж, това, че null е в ASCII таблицата не го знаех.

Благодаря :)

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