اذهب إلى المحتوى

Wael Aljamal

الأعضاء
  • المساهمات

    6975
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    218

كل منشورات العضو Wael Aljamal

  1. لحساب تكرار العناصر، يتوجب بناء بنية معطيات تمكننا من عد العناصر، مثل مصفوفة أو Map: يمكن حساب التكرار للعناصر قبل إضافتها للمكدس. #include<bits/stdc++.h> using namespace std; // حساب التكرارات map<int, int> freqMap; // تعريف المكدس stack<int> stack; // حساب التكرارات void push(int x) { // تكرار of x freqMap[x] = freqMap[x] + 1; stack.push(x); } int main() { // إضافة العناصر للمكدس push(4); push(6); push(7); push(6); push(4); push(8); } لطباعة عناصر Map تمر عليهم بحلقة for.. for (auto& t : freqMap) std::cout << t.first << " " << t.second << "\n"; يمكن الإعتماد على الشيفرة السابقة وإضافتها لشيفرة المكدس لديكِ. الطريقة السابقة هي أفضل طريقة لأنه في حال أردنا حساب نفس المنطق بعد إضافة العناصر سيتوجب علينا إفراغ المكدس و إعادة إضافة العناصر له، لأنه كما نعلم أننا نستطيع الوصول للعنصر القمي فقط في المكدس top
  2. السؤال ينقصه الكثير من التفاصيل. ما هي لغة البرمجية ونوع قاعدة البيانات؟ بشكل عام في الواجهة الأماية يمكن عمل form في HTML يرسل ملف الصورة إلى المخدم ليتم حفظها في قاعدة البيانات، ثم يتم استعراضها عند الطلب. كود HTML لإراسل ملف: <!DOCTYPE html> <html> <body> <!-- | الملف المستقبل للطلبية | طريقة الإرسال POST | هنا خاصية توزيع البيانات على عدة حزم صغيرة لنتمكن من إرسالها --> <form action="upload.php" method="post" enctype="multipart/form-data"> Select image to upload: <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> </body> </html> شيفرة PHP: <?php $target_dir = "uploads/"; // استقبال الملف $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // نتأكد من نوع الملف هل هو صورة if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "File is an image - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "File is not an image."; $uploadOk = 0; } } // هل الملف مخزن مسبقا if (file_exists($target_file)) { echo "Sorry, file already exists."; $uploadOk = 0; } // التأكد من حجم الملف if ($_FILES["fileToUpload"]["size"] > 500000) { echo "Sorry, your file is too large."; $uploadOk = 0; } // تحديد نوع اللاحقة المسموحة if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; $uploadOk = 0; } // التأكد من إكتمال رفع الملف if ($uploadOk == 0) { echo "Sorry, your file was not uploaded."; // كل شيئ بخير لذلك نخزن الملف } else { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } ?>
  3. ليكن لدينا قائمة select نحدد دالة لتتبع التغييرات فيها عند التغيير onchange تقوم هذه الدالة بتغيير الرابط link وهو متغير يخزن الرابط المراد فتحه. ونربط الزر button بحدث تغيير رابط الصفحة من خلال الخاصية location.href <html> <select id="sel" onchange='myFunction()'> <option value="http://www.google.com">google</option> <option value="http://www.w3schools.com">w3s</option> </select> <button onclick='openPage()'>Continue</button> <script> var link = "http://www.google.com"; function myFunction() { link = document.getElementById('sel').value; } function openPage() { window.location.href = link; } </script> </html>
  4. يمكن باستخدام الدالة linalg.norm import numpy point1 = numpy.array((a, b, c)) point2 = numpy.array((x, y, z)) dist = numpy.linalg.norm(point1-point2) أو عن طريق dot: temp = point1 - point2 sum_sq = np.dot(temp.T, temp) print(np.sqrt(sum_sq)) هذه هي الطرق للحساب في Euclidean distance
  5. تسريع البحث ضمن القاموس؟ إن تخزين البيانات في القاموس ضمن بايثون يأخذ فضاء زني سريع جداً: O(1) حيث يتم تخزين المفاتيح باستعمال خوارزميات التقطيع hashing algoriths وهي أسرع من البحث في القوائم (n)O وحتى set. لكنها تأخذ حجم تخزين أكبر نسبياً. # سؤال غير واضح
  6. تحدث المشكلة بسبب تغير طول القائمة خلال دوران الحلقة مع حذف العناصر المتكرر فعندما يقصر طول القائمة ويصبح أصغر من دليل المحرف o الأخير، لن تصل دليل الحلقة لهذا الدليل ضمن القائمة ما يمنع حذف العنصر. يمكن تطبيق نفس الشيفرة على المثال "oooo" مثلا الذي يحوي 4 محارف صوتية، ونتيجة التنفيذ أنه سيتم حذف فقط محرفين والنتيجة "oo" وعندها دليل الحلقة سيكون أكبر من طول المصفوفة و ستنتهي الحلقة قبل حذف كل المحارف. الحل بتطبيق دالة الاستبدال كما في الإجابة السابقة. أو استعمال الفلتر filter: text = "Hellooo, world! Words!" def removeVowel(text): textlist = list(text.lower()) for char in list('aeiou'): #textlist = [i for i in textlist if i != char] # ممكن هذه الطريقة أيضا textlist = list(filter(lambda a: a != char, textlist)) return "".join(textlist) print(removeVowel(text)) # hll, wrld! wrds!
  7. إن الدالة append لاتعيد أي قيمة، نمط الإعادة لها هو NONE والتي يتم تقييمها ل false فقط في هذه الحالة لأنها ليست true وعكس true هو false .. print u.append(1) None => print not None # not None == True True هذه الدالة تعدل على القائمة الأصلية التي تم الاستدعاء عليها، ولا تعيد شيئاً.
  8. يمكن حذف npm بشكل كامل للتخلص من مشاكل ال cache: npm rm npm -g ثم التثبيت بالأمر: curl https://www.npmjs.org/install.sh | sh الأفضل إلغاء تثبيت node وتثبيت الأحدث لأنها تحمل أحدث npm مباشرة. سبب المشكلة أن npm لم تعد تقوم بعمل التوقيع الذاتي SELF_SIGNED_CERT_IN_CHAIN
  9. عندما نفتح CMD يتم تحميل بيئة العمل ومتغيرات بيئة النظام في تلك اللحظة system environment ويتم تثبيت الإصدارات للبرامج، فإذا قمت بأي تعديل وكان CMD قيد التشغيل سيتم عرض البيانات القديمة. أي عليك إغلاق كافة نوافذ cmd قبل تجريب التعديلات. بالنسبة لإدارة إصدارات node يوجد برمجية NVM = node version manager يمكنك تثبيتها لمختلف أنظمة التشغيل ومنها windows وتسمح لك بتثبيت عدة إصدارات لـ node والتنقل بينهم. يمكنك تحميل البرمجية من هذا الرباط: nvm/releases. واتباع التوثيق من هنا: nvm-windows
  10. إن كنت تستخدم MacOs Catalina فيمكن اتباع الخطوات التالية: تعديل على الصلاحية sudo chown -R `id -un` /tmp/mongodb-27017.sock تحديد المسار mongod --dbpath /usr/local/var/mongodb ضبط الإعدادات mongod -f /usr/local/etc/mongod.conf //or أو mongod --config /usr/local/etc/mongod.conf ثم تشغيل الخدمة: brew services run mongodb-community
  11. يمكن تمرير ناتج تنفيذ تعليمة mongo باستخدام tee: mongo | tee somefile tee مسؤولة عن إعادة توجيه الخرج redirect output كما يمكن استخدام الدالة writeFile مباشرة: > writeFile("/home/for/output.txt", tojson(db.myCollection.find().toArray())) ^^^^^^^^^^ الاستعلام
  12. يمكن استعمال الدالة : encodeURIComponent لتخطي مشكلة الترميز const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`; وفي حال استخدامها لنفس الدالة مع mongose سنضطر لتمرير الخيار useNewUrlParser: true, بهذه الدالة سيتم تخطي كافة المحارف الخاصة
  13. علينا إضافة المجال الخاص بالأحرف العربية في Unicode format وهو كالتالي: ^[\u0621-\u064Aa-zA-Z\d\-_\s]+$ يدعم عربي-انكليزي-فراغات-أرقام ويوجد تعابير أخرى تستطيع تجربتها: ^[\p{Arabic}\s\p{N}]+$ ^[\u0621-\u064A\u0660-\u0669 ]+$ يمكنك الاستفادة أيضا من Arabic script in Unicode في ويكيبيديا
  14. يمكن الاعتماد على المؤشر iterator: حيث نقوم ببناء الصنف بطريقة مشابهة للتالي: class Counter(object): # تهيئة العنصر def __init__(self, start, stop): self.start = start self.stop = stop # تعريف المؤشر def __iter__(self): return self # الدالة لجلب العنصر التالي def __next__(self): # next in Python 2 # اختبار الشرط if self.start >= self.stop: raise StopIteration current = self.start * self.start self.start += 1 return current iterator = Counter(a, b) ولجلب العنصر الحالي يمكن إضافة الدالة current التي تعيد start ألمعدلة: def current(self): return self.start وبطريقة أخرى: كما يمكن الاستفادة من مفهوم المولد generator والكلمة المفتاحية yield: def counter(start, stop): for i in range(start, stop): yield i Counter = counter(3, 9)
  15. الخطأ ENOSPC يظهر عندما لا تتوفر مساحة على القرص. حاول التنفيذعن طريق هذا الأمر: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p ثم: // في حال Arch Linux أضف السطر التالي to /etc/sysctl.d/99-sysctl.conf: fs.inotify.max_user_watches=524288 // التنفيذ sysctl --system حاول حذف الملفات المؤقتة مثل temp كما يمكن حذف كاش npm: npm cache clear
  16. لايحدث استجابة عند نقر ctrl + c بسبب أن الحدث الخاص بها مختلف وليس exit بل هو SIGINT: //catches ctrl+c event process.on('SIGINT', exitHandler.bind(null, {exit:true})); يمكن أيضا استخادم الأحداث التالية: // catches "kill pid" قتل العملية // nodemon restart SIGUSR1 SIGUSR2 // حدوث استثناء uncaughtException يمكن اختصار جميع الحالات: [`exit`, `SIGINT`, `SIGUSR1`, `SIGUSR2`, `uncaughtException`, `SIGTERM`].forEach((eventType) => { process.on(eventType, cleanUpServer.bind(null, eventType)); })
  17. يمكن الإشارة للمؤلف بتعريف الحقل writtenBy أن يكون له مرجعية بهذه الطريقة populate: var bookSchema = new Schema({ title: String, writtenBy: {type: mongoose.Schema.Types.ObjectId, ref: 'Author'}, }); طريقة أخرى بإدراج authorSchema مباشرة في الحقل (نفس المستند) المطلوب باتباع مفهوم Subdocuments: var bookSchema = new Schema({ title: String, writtenBy: authorSchema , });
  18. المشكلة هنا تكمن في أن نمط البيانات ObjectId المعرف في mongo غير معرفه عليه عملية التسلسل serialization لذلك عليك تعريف طريقة التحويل الخاصة بك واستخدامها: from bson import ObjectId import json class JSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, ObjectId): return str(o) return json.JSONEncoder.default(self, o) res = json.dumps(DBResultMessage, cls=JSONEncoder) حيث أن هذه الدالة ستتعامل بشكل خاص مع النمط ObjectId وتحوله لسلسلة نصية قبل ترميزه على هيئة JSON
  19. إن هذه المسألة تصنف مع مسائل Egg Dropping Puzzle | DP (مسألة إسقاط البيضة) حيث يكون لديك عدد من البيوض (عدد محاولات السقوط) و عدد الطوابق التي تختبر منها أعلى طابق يمكن للبيضة تحمل هذا السقوط. أي غن حل المسألة هذه ليست بالبحث الثاني، بل البرمجة الديناميكية. أرجو تعلم هذه التقنية وإعادة محاولة حل المسألة. شرح مبسط للمشكلة: # k بيضة # N طابق # إرجاع أفضل نتيجة في هذه الحالة def dp(K,N): res = 10000 for i in range(1,N+1): res = min(res,رمي البيض على الطابق الأول هذه المرة) return res ولكل رمي، إما أن تنكسر البيضة أو تبقى سليمة: res = min(res,max(dp(K-1,i-1),# كسر عدد البيض -1 dp(K,N-i)# لم ينكسر ) + 1 ) في هذه الحالة يتم حساب جميع الإحتمالات اللممكنة لكل طابق، ثم يكون الجواب بالقيمة الأقل لعدد المحاولات.
  20. مشروعك ينقسم لجزئين: رفع التطبيق على متجر تطبيقات مثل Google Play وتكلف حساب مطور ب25$ الاستضافة التي سترفع عليها الفيديوهات والتي سيتصل عليها التطبيق لتحميل البيانات، حيث عليك الاشتراك باستضافة فيها مساحة تخزين كافية لحجم فيديوهاتك. يوجد استضافات خاصة ببث الفيديو تدعى Online Video Host مخصصة لعمل بث فيديو، ومعظمها يحوي مكتبات برمجية للتعامل مع هذه الاستضافات والتي يحتاجها التطبيق SDK = حزمة برمجيات مساعدة للتطوير، ابحث عنهم واعرض الميزات وكلفة الاشتراك بهم.. لمعرفة الكلفة بدقة، تحتاج لشخص يعمل بهذه التقنيات مثلاً مبرمج، ويمكنك أن تحجده على مواقع العمل الحر مثل مستقل وخمسات.
  21. عند تشغيل مخدم node كما هو الحال لبقية البرامج يتم تمرير البيانات للعملية process المسؤولة عن تشغيل البرنامج. يتم تخزين البيانات في مصفوفة ضمن: process.argv حيث عند كتابة الأمر البيانات الممرة تكون على شكل مصفوفة: $ node argv.js one two three four five =>>> [ 'node', '/home/avian/argvdemo/argv.js', 'one', 'two', 'three', 'four', 'five' ] للحفاظ على المتغيرات فقط يمكن تنفيذ slice: var myArgs = process.argv.slice(2); console.log('myArgs: ', myArgs); ==>> myArgs: [ 'one', 'two', 'three', 'four', 'five' ] بعدها يمكن الوصول للوسيط الأول ب myArgs[0] myArgs[1] // الثاني
  22. هل يمكنك توضيح بنية قاعدة البيانات لديك؟ وإضافة تفاصيل أكثر. ماذا تقصد بالصيغة؟
  23. يوجد خوارزمية باستخدام شجرة Trie وهي شجرة متعددة الأولاد و لكل مستوى لها سلف مطابق أي كل عقدة مشتركة بين سلسلتين نصيتين تمثل حرف مشترك بينهما مثلا: aaa aab السلسلتين السابقتين يتم تخزينهم في 4 عقد وهي الجذر a ثم أول ولد a وله ولدين a - b إذا شجرة من 3 مستويات و4 عقد. يمكن تعلمها من موسوعة حسوب: Algorithms/tries - شجرة البادئات وهي أفضل تمثيل للقاموس. root / \ \ t a b | | | h n y | | \ | e s y e / | | i r w | | | r e e | r ويمكن البحث عن Pattern Searching using a Trie of all Suffixes
  24. يمكن ذلك من خلال تطبيق aggregate: db.collection.aggregate([ {"$group" : { "_id": "$username", "count": { "$sum": 1 } } }, {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, {"$project": {"username" : "$_id", "_id" : 0} } ]); سيتم من خلال الاستدعاء السابق جلب جميع المستندات التي تعداد تجميع الخاصية username لها أكبر من 1
  25. في حالتك تحتاج لتشفير بسيط حيث تكون مكتبة التشفير من ضمن PHP حيث استخدم الدالة: str_rot13 حيث يمكن إدخال النص و عكسه فيها و سيتم التبديل بينهما <?php echo str_rot13("Hello World"); // -> Uryyb Jbeyq echo "<br>"; echo str_rot13("Uryyb Jbeyq"); // -> Hello World ?> الشخص الذي لديه النص المشفر في حال تطبيقه للدالة سيتم فك التشفير بشكل صحيح.
×
×
  • أضف...