Loading...
anton_cholakov avatar anton_cholakov 88 Точки

[Homework] JavaScript Basics -Loops-Arrays-String

Здравейте, колеги! Представям Ви решенията си от последното домашно :) 

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

Ще се радвам на feedback :)

 

01. Number CheckerHTML + JS /честно казано тук имам някои питанки, които ще посоча по долу/

02. Find Min and Max NumberHTML + JS

03. PropertiesHTML + JS

04. Create ArrayHTML + JS

05. Compare CharsHTML + JS

06. Maximal SequenceHTML + JS

07. Maximal Increasing SequenceHTML + JS

08. Sort ArrayHTML + JS

09. Most Frequent NumberHTML + JS

10. Reverse StringHTML + JS

11. Check the BracketsHTML + JS

12. Substring CountHTML + JS

13. Replace the White-SpacesHTML + JS

14. PalindromesHTML + JS --> Определено имам нужда от помощ с регулярните изрази :( .. Ако някой ми помогне, ще съм много благодарен!

15. Most Frequent WordJS

16. Cards FrequencesJS

17. Extract Element Content: JS

18. Replace A TagsJS

19. Text ModifierJS

.. и специални благодарности към ZvetanIG за насоките с регулярните изрази! :)

 

edit: сега загрях, че всъщност html файловете са излишни, но така или иначе съм ги качил вече в github и линкнал

21
JavaScript Fundamentals
AlexKondov avatar AlexKondov 91 Точки

ТУК са и моите решения на задачките. Тъкмо доизмъчвам 16. с картите и ще кача и нея

2
StanDimitroff avatar StanDimitroff 90 Точки

12-та задача не ти работи коректно, пробвай я с първия пример.Ти проверяваш дали има абсолютни съвпадения със субстринга, но не и дали текущия стринг съдържа дадения субстринг.Затова първия ти пример връща 2, защото мачва само двата ''in"-a.Както примерно ако имаш даден субстринг ''th" в първия пример ще ти върне 0.Най-добре пробвай с един regex с опция да мачва на всички места по стринга.За целта обаче не трябва да го сплитваш laughing Поздрави!

1
AlexKondov avatar AlexKondov 91 Точки

Аз не съм разбрал задачката коректно. Ще я погледна ей сега и ще направя корекциите.

0
du4ko avatar du4ko 14 Точки
Здравей на 6 та задача, проверката ти   if (arr[i] == arr[i - 1]) не проверява за типа данни и на последния пример не вади точен резултат. Поздрави!
0
arsoman avatar arsoman 419 Точки

На трета задача е супер, само че трябва да се търси в document, ти си го направил за window...

1
Dominik avatar Dominik 82 Точки

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

 

Някой може ли да даде ъкъл как да принтя само резултата с най-много срещания на конзолата :(.

Става дума за 9 и 15 задача   ето го и сорс кода(на 15-та 9-та е с почти същия)--> линк-а . Решението не съм го измислил аз за жалост :/ видях го от една лекция из youtube , но ми изглежда лесно за разбиране ( казвам го като човек който се сблъсква сас JS за 1ви път :) ).

Търсих доста из нет-а , ноо не намирам начин как да го накарам да принти само думата с най-много срещания :(.

Моля за насоки/съвети :) 

0
aslv1 avatar aslv1 304 Точки

Ти си направил повечето работа smile

Просто намираш за кой word wordCount[word] е максимален и за него принтираш word.

Нещо такова:

var maxWordCount = 0;
for (var i in words) {
    var word = words[i];
    if (wordCount[word] > maxWordCount) {
        maxWordCount = wordCount[word];
    }
}
for (var i in words) {
    var word = words[i];
    if (wordCount[word] == maxWordCount) {
        console.log(word);
    }
}

Естествено, че не е оптималният вариант, но мисля, че така е по разбираемо.

П. П. Виж, сортирането по първо срещане се прави малко по-различно и програмата се усложнява...

Ето моят код

0
Dominik avatar Dominik 82 Точки

Ами след съвета ти да намеря макс-а , го докарах до тук - > http://pastebin.com/bwkFsLRP работи коректно за всички тестове без първият undecided . Аз лично не си го обеснявам защо :/. 

Някви идей tongue-out

0
aslv1 avatar aslv1 304 Точки

С едно обхождане няма как хем да намериш максималния брой, хем да изведеш думите с този брой laughing Просто няма как.

Виж в горния ми коментар примера. Иначе добре се ориентираш.

За първия пример - така ти извежда, защото отначало програмата си мисли, че максималният брой е 1, и понеже in се среща веднъж - извежда го. След това вижда, че има „по-добър“ максимален брой - извежда и the. Направи два for-а.

0
aslv1 avatar aslv1 304 Точки

Здравейте!

Нали за седма задача става дума за редица от последователни елементи?

Защото, иначе задачата става много по-трудна и се решава с динамично програмиране.

Успех!

0
ZvetanIG avatar ZvetanIG 907 Точки

Да става въпрос за последователни елементи. От  примерите на задачата става ясно, че е така.

Поредицата е [3, 2, 3, 4, 2, 2, 4] в  нея най-дългата субпоредица е [2, 3, 4].

Втория пример  поредицата е  [3, 5, 4, 6, 1, 2, 3, 6, 10, 32]  Отговорът е [1, 2, 3, 6, 10, 32].

0
Dekameron avatar Dekameron 481 Точки

Осма задача може да се направи по следния начин:

function sortArray(value) {

     value = value.sort(function (a, b) {

          return a - b;

     })

     return value;

}

0
ZvetanIG avatar ZvetanIG 907 Точки

Да така, но в задачата се иска да направим собствен "selection sort" алгоритъм.

1
ZvetanIG avatar ZvetanIG 907 Точки

Ето и моето домашно. Някои неща съм ги направил като колегите, други не.

Решенията може да видите ТУК.

 

Задачи със звезда:

17. Extract Element Content    - Оказа се че innerText не се поддържа от всички браузъри.  Задачата може да се реши прекрасно със регулярни изрази.

18. Replace <a> Tag

19. Text Modifier

От последните 3 задачи научих доста за регулярните изрази. Препоръчвам ви ги!!!

 

 

4
HPetrov avatar HPetrov 822 Точки

Мммда супер са решенията. Аз си играя повече с indexOf и substring да ги сменям нещата но с regex изглежда по-приятно решението.

0
anton_cholakov avatar anton_cholakov 88 Точки

Здравей! Би ли ми казал дали разбирам израза на 18 задача правилно?

var re = /<a([\w\W]*)>([\w\W]*)<\/a>/gi;

при replace: '[URL $1]$2[/URL]'

Значи търсим <a ... > ... </a> общо взето. Звездичките би трябвало да са свързани с $1 и $2 съответно, един вид placeholders?

0
ZvetanIG avatar ZvetanIG 907 Точки

/<a([\w\W]*)>([\w\W]*)<\/a>/gi

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

Логиката е следната:
1. С регулярния израз му казваме намери подобен низ.
2. После замени намерения  израз с '[URL $1]$2[/URL]'

Като на мастото на $1 сложи първата група ( това което е в тага). На мястото на $2 сложи втората група (това което е между таговете).

$1 и $2 са placeholders,  а  това, което е в скобите  е  променивата (това  е образно казано).

Регулярния израз [\w\W]*   означава нула или повече символа без значение какви. 

Защо нула или повече?  Защото сме използвали "*".

Ако използваме "+" това означава един или повече.

 

4
borislavml avatar borislavml 368 Точки

Задачите без звезди от мен: ЛИНК. Последната задача с cardfrequency доста ме узори  това условие да се принтят картите по реда им на появяване в инпута, но селската с една "крадена"  функция от stackoverflow успях да я натъмъня. Разгледах кода на колегите за последните 2 задачи, които всъщност са по-интересни, но така и не успях да разбера в дълбочина алгоритмите, но вероятно и моте са неразбираеми за останалите. За да хвана повторенията на всички елементи(послдните 2 задачи) си правя обект(асоциативен масив, на който хубавото му поне в този случай е, че може да има само един key с определена стойност).После сортирам масива и с един for цикъл и counter броя кой елемент колко пъти се появява и пълня обекта. Усещам, че това не е правилното и оптимално решение(да сортирам), но с два for цикъла, както виждам, че го правят останалите колеги така и не успяввам....нещо ми убягва и това  е laughing

2
ZvetanIG avatar ZvetanIG 907 Точки

Задачите, в които се търси колко пъти се повтаря нещо (дума или число няма значение) се решава лесно като се изпалзват масивите като речници със следния алгоритъм.

Всяка дума е ключ, който сочи към брояч.

Минаваш през всички думи с цикъл и проверяваш дали съществува такъв ключ. Ако не съществува съсдаваш елемент с такъв ключ и стойност 1. Ако съществува увеличаваш стойността на елемента с 1.

for (i in words) {
        if (words[i] in results) {
            results[words[i]]++;   //ако същесвува увеличава с 1
        } else {
            results[words[i]] = 1;   // ако  не същесвува създава нов елемент и му дава стойност 1
        }
}

В посочения пример ще имаш като резултат масив results, който ще  съдържа всички думи (като ключове) и колко пъти се среща всяка.

9
Valleri avatar Valleri 304 Точки

Колеги, как to match [, {, ( с един регекс?
var res = str.match(/\(/g); така е за един.

var res = str.match(/\(\[\{/g);
Това не работи...

0
HPetrov avatar HPetrov 822 Точки

Няколко елемента се match-ват с [elementelementelement]. В твоя случай /[\(\[\{]/g поне така работи за повечето неща, не знам дали и при теб ще сработи така, че пробвай :P

1
Dominik avatar Dominik 82 Точки

Здравейте колеги и колежки :) ,

След няколко часа мъка и кафета успях да направя следното решение за 16-та задачка ->> http://pastebin.com/FryD1jNu 

Но проблема е , че като го изпринтя (принти оутпут-а който си е ок поне с трите дадени тест-а ) , но от доло ми излиза един ред който не му е там мястото, регекса който ползвам би трябвало да маха празните редове.. , честно казано никва идея . Може ли някой по разбиращ да му хвърли едно око и да даде някаква насока/ хакче с което да оправим код-а ( но ако може и да е по-лесно разбираемо , защото съм още зелен в тази област :) 

0
StanDimitroff avatar StanDimitroff 90 Точки

Сложи едно poker.pop() след сплитването, за да ти махне празния елемент накрая  и len =poker. length  :) Успех!

2
Dominik avatar Dominik 82 Точки

Благодаря , получи се. И на мен ми хрумна тази идея с pop(); , но пишех poker = poker.pop(); ... :D И то маха целият оутпут. Anyways благодаря за бързият feedback ;)

0
Ventsislav avatar Ventsislav 343 Точки

Здравейте колеги и колежки ето линк и към моето домашно laughing

3
ZvetanIG avatar ZvetanIG 907 Точки

В 8 задача се иска да напишем "selection sort" алгоритъм.

И 12 задача не ти работи коректно. В нея трябва да направиш LowerCase  и кеу, защото ако търсиш нещо с главна буква няма да го намериш (но в тези примери това не се отразява на крайния резултат).   Грешката ти е, че сравняваш думите с key, а трябва да търсиш substring в тях.

Например 
"in" === "living"  няма да ти увеличи брояча, а всъщност думата съдържа "in"  и трябва да се увеличи брояча. Използвай indexOf .

Друг начин за решение е   text = text.split(key).  key се среща (text.length - 1) пъти.

 

Друго, което забелязах, че 11 задача дава correct  при входен израз  ')(( ( a + b ) / 5 – d )'.

 

Извнявам се за коментарите, но просто се загледах...laughing

 

2
anton_cholakov avatar anton_cholakov 88 Точки

Хареса ми решението ти на 15 задача - наистина това, че масивите в JS са едновременно масиви, хаш-таблици и т.н. има своите плюсове!

Липсваше ми добър и лесен начин за сортиране на масива, който се получава (т.нар. bestWords). Би ли ми обяснил как точно работи тази част от кода ти, не искам да използвам код, който не разбирам :) Изглежда сравняваме всеки елемент със следващия вътре в sort функцията, така ли е?

А и да добавя нещо друго, с което се сблъсках в тази задача: Понеже опитвам на всички задачи да return-вам value и след това да го принтирам като резултат от функцията. Ако тук направим return на стринга съдържащ думата -> брой пъти, ще получим само един резултат на последния пример. Ако пък използваме console.log още във функцията - тогава няма да имаме проблеми :)

1
Ventsislav avatar Ventsislav 343 Точки

ZvetanIG , мерси за забележките , вече са оправени . 
anton_cholakov , в bestWords запазвам най-срещаните думи защото по условие е така че ако имаме няколко думи с еднаква срещаемост , да се изпринтят всичките.

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