Професионална програма
Loading...
+ Нов въпрос
lyubamarinova avatar lyubamarinova 13 Точки

Задача Nether Realms oт изпита Programming Fundamentals /23.10.2016г.

Здравейте,

Тъй като днес много се измъчих с тази задача , дали някой може да ми каже като разгледа кода къде всъщност греша и дали изобщо съм била на прав път , защото 2 от нулевите тестове ми даваха верен резултат , а там където имам 2 inputa - грешен , в Judge не получих никакви точки. Моето решение е : http://pastebin.com/2wGvZfDJ

Благодаря.

0
Fundamentals Module
koksibg avatar koksibg 895 Точки

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

https://softuni.bg/forum/12552/programming-fundamentals-exam-part-1-and-2-23-october-2016

0
lyubamarinova avatar lyubamarinova 13 Точки

 Мерси за отговора , но ме интересува конкретно с моето решение , дали изобщо съм била на прав път. :)

0
petlv avatar petlv 5 Точки

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

При сплитването на инпута трябва да добавиш и RemoveEmptySpaces, а в регекса на numberPattern да запишеш плюс или минус [-|+]?, тъй като двата знака не могат да съществуват едновременно пред дадено число.

Ако регексът се оптимизира, задачата се решава с много малко код, там е разковничето :)

0
lyubamarinova avatar lyubamarinova 13 Точки

Аз реших в началото да разделя задачата на два случая - когато имам само 1 елемент в масива и вече в else , сложих for цикъл да обхожда масива , когато дължината на масива е по-голяма от 1 , но явно не е бил на правилното място , както казваш. :)

0
petlv avatar petlv 5 Точки

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

Използваният вложен цикъл (с 'к' и 'j') нещо не разбрах каква му е целта. Ако се прави за някаква проверка, то по-добре още горе в регекса да се извърши тя. Идеята е после да вземеш стойността от match-a, да я парснеш и да я добавиш към общата сума на съответния показател. Дано съм бил от помощ.

0
lyubamarinova avatar lyubamarinova 13 Точки

Вложените цикли с 'к' и 'j ги направих , за да си преброя колко пъти имам символа ' * ' и ' \ '  и да знам колко пъти трябва да умножавам или разделям на 2.Аз в началото не исках да правя if-else конструкция и да повтарям кода , но след като не успях да взема никакви точки , реших да пробвам да мина някои от тестовете , където има само един input , защото в тези случаи нулевите тестове ми минаваха.

0
petlv avatar petlv 5 Точки

Аз казуса с ' * ' и ' \ ' го реших по следния начин - събираш ги в един MatchCollection, след което обхождаш с един foreach всеки match и вкарваш в цикъла един if-else (ако е '*' да умножава по 2, а ако е '/' да дели на две).

Могат да се създадат отделни регекс шаблони, както в твоя случай, за буквите, цифрите и умножението-делението. Но можеш да оптимизираш с един единствен regex pattern, който да разделиш на групи - група 1 за числата, група 2 за буквите и др. символи нечисла, и група 3 за ' * ' и ' \ '.

0
lyubamarinova avatar lyubamarinova 13 Точки

Ами да , в моя код също е така  , буквите, цифрите и знаците са в отделни Math Collections :

  1. MatchCollection digitCollection = digitRgx.Matches(input[0]);

  2.                 foreach (Match match in digitCollection)

  3.                 {

  4.  

  5.                     string newDigits = match.ToString();

  6.                     string cleanDigits = newDigits.Trim('-', ' ', '.');

  7.                     char[] last = cleanDigits.ToCharArray();

  8.  

  9.                     for (int k = 0; k < last.Length; k++)

  10.                     {

  11.  

  12.                         for (int j = 0; j < last.Length; j++)

  13.                         {

  14.  

  15.                             if (last[k] == last[j])

  16.                                 count = count + 1;

  17.  

  18.                         }

  19.                         if (last[0] == '*')

  20.                         {

  21.                             damage = newSum * count * 2;

  22.                         }

  23.  

  24.                         else

  25.                         {

  26.                             damage = (newSum) / (count * 2);

  27.                         }

  28.  

  29.                     } 

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

0
Stanislav.Petrov avatar Stanislav.Petrov 12 Точки

Здравейте,

Някой мове ли да ми помогне с решението на задачата.

Това е моето решение:https://pastebin.com/mVYcfWi7

В Judge ми даша 90/100 и ми гърми на 5 тест. Някой знае ли какъв е input-a?

Знам, че повечето/ако не всички са реяавали задачата с reget , но ние още не сме го взели, а очевидно, че може да се реши без него.

0
YavorGrancharov avatar YavorGrancharov 0 Точки

Имам същия проблем като lyubamarinova при вход M3ph1st0** изхода е M3ph1st0** - 524 health, 16.00 damage, както и при вход Azazel изхода е Azazel - 615 health, 0.00 damage , но когато входа е M3ph1st0**, Azazel получавам - Azazel - 1139 health, 16.00 damage, M3ph1st0** - 1139 health, 16.00 damage, сумират се health и damage на първия и втория демон и не мога да разбера откъде идва проблема!?

Код:

https://pastebin.com/aRfb8yFV

0