6 Feb 2012 - PHP Variables


0
Здравейте! Ето линк към задачата в bgcoder. Ето и решението ми.

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

Много ще съм благодарен, ако някой ми подскаже.



Отговори



1

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

тук основният ти проблем не е да обърнеш редът на променливите, а защо ти е да използваш HashSet :) В този случай HashSet не ти е необходим, просто използвай тип данни които имат итератор, не мисля че има особено значение бързината на структура която ще използваш в тази задача.


от kizisoft (803 точки)


1

Можеш да копираш твоя HashSet() в масив от стрингове по този начин:

string[] output = existing.ToArray();

и след това да итерираш в reverse order.


от lnikod4s (6538 точки)


2

В Linq има методи за преобразуване на множество в масив или лист,  за да ползваш метода Reverse наготово

Hashset<> hs=...

List<> ls=hs.ToList()




1

Принципно можеш да си сортираш Hashset-a с ламбда израз и да запишеш резултата в един StringBuilder. Ето така. Смених ти обаче и първия ред на output-а, защото ти изкарваш counter-а, което е грешно. Тази променлива като цяло ти е излишна. Направо си даваш Count на Hashset-а и си готов. Обърни обаче внимание на това -  Bgcoder-ът ти сортира резултата, преди да го сравни с верните отговори, така че сортирането е напълно излишно в случая. Интересно обаче защо дава 70 точки... вероятно някъде допускаш още някаква грешка, но не съм задълбавала толкова в решението ти, защото точно тази задача не съм я решавала. 

Ако имаш време, порови се в архивите и изгледай видеото на Ивайло. Много добре обяснява тази задача. Всъщност обръща внимание и на сортирането и казва, че не е нужно. Мисля, че и той я решаваше с Hashset, но без да го сортира после и си вади 100 точки. :)


от IlianaB (1137 точки)


0
Мерси за бързите отговори, колеги! @lnikod4s, хич не ми хрумна да ползвам ToArray(), не съм го използвал много и не се сетих за него. По този начин изкарвам 60/100, явно имам неточности в кода. Същите точки изкарвам и с List<> ls=hs.ToList() - предложението на @viktorDimitrov.
Печеливша е @IlianaB :D , при нея са 70/100, както и сама е казала. Илиана, видеото на Ивайло го гледах само там, където започва да използва HashSet, колкото да разбера как проверява за вече съществуваща променлива, ама май ще трябва цялото да го изгледам. Мерси за инфото за Checker-a, не го бях поглеждал от първия изпит..
Ето и 3-те варианта  с HashSet - HashSet. При 2-рия се изкарват 70, при другите 60 точки.

@kizisoft, точно след като отворих темата се сетих за решение без HashSet. Заместих го с един лист, към който добавям променливите и после проверявам дали новите съществуват в него. Ето и решението по този начин (60/100).

от jumarto (808 точки)


0
Ъмм, пропуснах да кажа... другите варианти ти дават 60 точки, защото първият тест е с 0, т.е. няма валидни променливи, а ти имаш втори WriteLine при изписването на резултата, който ти изкарва един излишен ред и Bgcoder-ът не го харесва. :D От скрийншота, който качих горе, първите 60 точки ги изкарах с началния вариант на решението ти (несортиран), само count-а смених. :) С едно if-че можеш да си направиш случая с нула.

от IlianaB (1137 точки)


1
Вярно, вече не ми се връщаше нагоре по кода и си я оставих така. Мерси за изчерпателния отговор ;)

от jumarto (808 точки)