Loading...
Nick1R1 avatar Nick1R1 115 Точки

[Exam]JS Basics - 13 May 2015 Различни решения

Здравейте колеги, нали няма решения на последния изпит в джъдж-а, някой ще сподели ли решения на MagicGrid и Captain Obvious(ако искате и на другите), тъй като се наложи да гледам тестовете за 100точки и ме затрудниха. Моите няма да ги качвам, защото ме е срам поради липса на КПК.. 

Между другото не трябваше ли да има още една подготовка на изпита или може би предстои? Благодаря предварително !

:)

2
JavaScript Fundamentals 29/01/2016 00:48:08
nina75 avatar nina75 143 Точки

Споделям моите решения с уговорката да не коментираме quality&performance  :) . Има качено видео на втората подготовка тук, където Боги решава въпросния изпит.

2
Nick1R1 avatar Nick1R1 115 Точки

Мнооого съм ти благодарен за решенията и за това видео! Незнам как го намери, но аз нямаше да го намеря никога. :)

0
nina75 avatar nina75 143 Точки

Поради някакви причини е качено само в инстанцията на JS Basics в 'Отворени курсове'.  smiley

1
RoYaL avatar RoYaL Trainer 6849 Точки

Разцъках ги набързо задачите. Първата от 1вия път даде 100. Втората даде 83. Нещо не и разбирам условието, мисля?

Searching the texts is case insensitive.

Сигурна ли е работата? 3 часа е и може и да не чета добре условието, ама ми изглежда в първото изречение да има три от думите, а не 2. Т.е. не са нито 2, нито 4 и не би трябвало да се матчва?

Ето иначе какво скалъпих за нула време. Ще гледам да разбера защо вадя 83 точки и да оправя втората задачка. Опитах се да бъда описателен.

http://pastebin.com/As672GEu

На 1вата задачка съм екстрактнал функция, която вади реда и колоната. Там когато намирам верния сбор мога направо да събера rows/cols вместо да вадя този tupple и просто да събирам, но с цел да се разбере какво се случва го правя по този начин.

Флатвам матрицата, че по-лесно да обикаля всяка стойност без да влагам цикли. Тъй като матрицата е квадратна редът на който съм намерил число от верния сбор отговаря на това колко пъти се съдържа редовете в индекса. При 3х3 матрица, индекс=4 означава ред номер 1. (4 / 3 = 1) От своя страна колоната е остатъка от това.

Другото е тривиално.

 

Втората задачка също уж е тривиална, ама изисква много голям брой операции. За да изкарам думите от 1вия текст сплитвам по всичко, което не е дума. Евентуално може да ми върне празни пространства като елементи на масива затова ги чистя с Filter() (симулирам RemoveEmptyEntries от C#).

Правя си речник с думите и колко пъти съм ги намерил. Минавам по ключовете и после филтрирам множеството от ключове до тези, чиито стойности в речника са числото 3 или по-голямо.

От втория текст за да извадя изреченията сплитвам по препинателните знаци дадени в условието. Отново махам празните елементи от масива. Вадя думите от всяко изречение, да не правя indexOf на изечението, че ще почна да намирам неща като "he" в "the". После може би има по-добър вариант като например array intersect, обаче ми дойде на акъла да проверявам с indexOf. Та общо взето проверявам дали има такива думи в масива от 1вия текст, които се съдържат в масива от думи в изречението, в което съм в момента. Ако има - си записвам колко думи съм срещнал.

Тук е интересната част:

find and print all sentences from the second text containing at least two or all of those words

 

Две или ВСИЧКИ. Т.е. всички може да са повече от две. Може да са две. Може и да са по-малко от две.

Това, което ни интересува е да сме срещнали две думи. Ако не сме, да видим дали не сме срещнали толкова думи, колкото има в масива от 1вия текст. Например една. Защото при нула има друго съобщение за принтиране. Поне аз така го разбирам.

Заради сплита по препинателен знак ми изчезна препинателния знак :D Това, което ми дойде веднага на акъла е да си намеря препинателния знак (по условие е само един, така че ми се спестява главоболието с многоточие например) като просто взема позицията на това изречение и преместя курсора една позиция след него - в края на изречението. Там трябва да се намира знакът. Взимам го и него.

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

И от там нататък нещата пак са тривиални.

6
29/01/2016 05:55:26
Nick1R1 avatar Nick1R1 115 Точки

Ройал мерси за обяснението, иначе според мен в условието на 2та се е искало да се каже 2 или повече, но просто не е написано с правилен английски. Тук се вижда кой чете по-добре условията, аз даже не съм обърнал внимание на този момент :D,  но да не издребняваме. На мен проблема тук ми беше, че позлвам indexOf за мачване на думите във втория текст и хващам "the" в "there", трябваше да се сетя за този момент !  :(  А пък това парче код доста ме изкефи... :D 

wordsFirstText.forEach(function(word) {
            if (!(word in wordsFirstTextOccurences)) {
                wordsFirstTextOccurences[word] = 0;
            }
            wordsFirstTextOccurences[word]++;
        });
        var neededWords = Object.keys(
           wordsFirstTextOccurences

...

 

0
29/01/2016 04:11:17
malkstor avatar malkstor 348 Точки

Точно това е единственото логично обяснение, Боги стигна до същия извод. Или поне две думи, или всички, което значи че една също удовлетворява условието, ако е само тя. Условие с ***-капан ;)

0
RoYaL avatar RoYaL Trainer 6849 Точки

Явно обаче сме стигнали до грешно заключение. С case-insenstivie search и if (occurred >= 2) дава 100 точки. Значи е трябвало да пише "two or more" :D

 

 

3
EBojilova avatar EBojilova 330 Точки

Eто и моето решение на втора. Доста ме затрудниха задачите. Гледах и решешенията на колеги. За някои задачи са ми нужни над 3 часа/задача. С това темпо ще съм мах 2 задачи на изпита :)

Problem 2 – The Captain Obvious Tribulation

https://github.com/EBojilova/JavaScriptBasics/blob/master/Homeworks%20and%20Exams/ExamPreparation/2%20-%20Captain%20Obvious/solveEBregex.js

2
LoKSET avatar LoKSET 160 Точки

Ето и от мен

Трета - по принцип грозните цикли си ги бях изнесъл във функция, за да мога да return-на лесно, но след като намерих тази готина алтернатива на goto го оставям така devil

Четвърта - като оставим настрана факта, че решението е грозничко, единственият проблем се оказа регекса. Трябваше да гледам тестове, за да видя че в името на курса може да има всякакви знаци, интервали и т.н. - без такава информация (в условието нищо не пише) не мисля, че щях да добутам до 100 точки. Поне разбрах как да си правя по-сложни сорт функции, което несъмнено ще влезе в употреба.

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