Printable Version of Topic
Click here to view this topic in its original format |
თბილისის ფორუმი > Web Programming > JS მარტივი includes() |
Posted by: levan88 2 Jul 2020, 05:42 |
გამარჯობათ , მოკლედ ასეთ რამეს წავაწყდი და ცოტა გაუკრვევლობაში დამტოვა . მაქვს ფუნქცია სადაც functi0n isPangram(sentence) { let lowerCased = sentence.toLowerCase(); for (let char of 'abcdefghijklmnopqrstuvwxyz') { if (!lowerCased.includes(char)) { return false; } } return true; } // მოკლედ ეს ფუქცია მუშაობს ჩვეულებრივად (ყველას ასოს მთხოვს შეიცავდეს) , მაგრამ როცა ამ მონაკვეთს ვცვლი if ( lowerCased.includes(char)) { return true; ანუ თუ შეიცავს , მაშინ დააბრუნოს true . რატო ხდება რომ 2 ასო მაინც რო დაემთხვას მაინც True აბრუნებს ? ანუ იდეას მივხვდი , თუ რომელიმე ასოს მაინც შეიცავს (2 იქნება თუ ყველა) True მიბრუნებს , უბრალოდ იმას ვერ მივხვდი რატო აკეთებს ამას მხოლოდ includes() შემთხვევაშია ასე თუ სადმე კიდე შემხვდება მსგავსი სიტუაცია |
Posted by: ქარრერა 2 Jul 2020, 16:58 |
ტყუილად ცვლი ლოგიკას და იმიტომ. რა ვარიანტიც გიწერია , თუ რომელიმე კონკრეტულ ასოს არ შეიცავს ადრე დაბრუნება false, და თუ გაივლის ამ ყველაფერს true დაბრუნება , სწორია. თუ არცერთხელ არ დააბრუნა ფუნქციამ ადრევე, მაშინ ყველა ასო უპოვნია. მაგრამ შებრუნებული, რასაც ცვლი, ადრე აბრუნებს თუ რომელიმე კონკრეტული ასო იპოვნა. ასეთ შემთხვევაში ადრე დაბრუნდება a-ზე ან b-ზე ... z-ზე მაგრამ სხვებს აღარ ამოწმებს. თან თუ წინა ასოზე ჩავარდა ამას გავლენა შემდგომ პროცესზე არ აქვს , შესაბამისად თუ a-ზე გაიმაზა , შემდგომი ციკლზე char b-ს აიღებს და თუ იპოვა true-ს დააბრუნებს ადრე. includes არაფერ შუაშია აქ. |
Posted by: levan88 2 Jul 2020, 18:53 |
ქარრერა მივხვდი მერე მგონი , დაახლოებით ასე იკითხე თუ ერთ ასოს მაინც შეიცავს აბრუნებს True , თუ ერთ ასოს მაინც არ შეიცავს აბრუნებს False . უბრალოდ , რა მაინტერესებს იცი (ასე ვფიქრობ მეც ) ფუნქციის დაწერისას ჯობია if (რაღაც ბრძანებები){ return false } else {return true } ვიდრე if (რაღაც ბრძანებები){ return true } else {return false } |
Posted by: DoomDev 11 Jul 2020, 15:02 | ||||||
იმიტომ რომ როდესაც ლუპს აკეთებ ამომწემ თუ რომელიმე შემოსული ასოს შეიცავს მომაცემები გიბრუნებს თრუს ანუ ფუნქცია რეთურნს აკეთებს და აღარ გააგრჩელებს მოქმედებას ამიტომ ერთი დაემთხვევა თუ ჩვიდმეტი არ აქვს მნიშვნელობა დააბრუნებ True -s და გაჩერედება როგორც ვხედავ დამწყები ხარ ჯს ში და ჩემი პირადი რჩევა იქნება time complexity ის მიაქციე ყურადღება(იგივე big O notation ალგორითმი) აღარ ვისაუბრებ ხსენებულ ალგორითმზე დაგუგლე ამ შემთხვევაში როდესაც აკეთებ ლუპს და შიგნით იყენებ ინქლუდ მეთოდს ჩეკისთვის ხდება კიდევ ლუპი ანუ რელაურად 2 ლუპი კეთდება მანდ რეალურად O(n²) ხსენებული ალგორითმის მიხედვით რაც შეგიძლია გააუმჯობესო და O(n) გააკეთო რაშიც დაგვეხმარება Set ობიექტი. შესამოწმებლად შეიცავს თუ არა ჩაშვებულ ასოს სეთის has მეთოდი რომელიც ინქლუდისგან განსხვავებით ითერეიშენს არ აკეთებს ამიტომ მივიღებთ O(n) ნოთეიშენს ინქლუდ მეთოდის პილიფილი
ეს შენი ვარიანტი ინქლუდის გამოყენებით
ეს better solution სეთის გამოყენებით
|
Posted by: DoomDev 20 Mar 2021, 17:40 | ||
ედითედ ფაქტიურად იგივე დავწერე !lowerCased.includes(char) ნიშნავს რომ მხოლოდ მაშინ გააჩერებს ლუპს თუ !false => true ყველა ჩარს არ შეიცავს რეთარნს ლუპის გარეთ რომ აკეთებ მაგას დააბრუნებს როდესაც მორჩება ლუპს რაც იმას ნიშნავს რომ გავიდა ბოლოში და ყველა ასოს შეიცავს ზევით სულ სხვა რამე გიპასუხე თუმცა შესრულების დროზე იგივე აზრზე დავრჩები ასევე ევერი მეთოდით შეიძლება მაგ ამოცანის ამოხსნა
btw თემაში შევამჩნიე ჩემი სახელი და ამოვქექე |