10 KiB
title | localeTitle |
---|---|
Missing Letters | حروف ناقصة |
تذكر استخدام Read-Search-Ask
إذا واجهتك مشكلة. حاول إقران البرنامج واكتب الكود الخاص بك
شرح المشكلة:
سوف تقوم بإنشاء برنامج سيعثر على الحرف المفقود من سلسلة وإعادته. إذا لم يكن هناك حرف مفقود ، يجب أن يقوم البرنامج بإرجاع غير محدد. لا توجد حالياً حالة اختبار للسلسلة المفقودة لأكثر من حرف واحد ، ولكن إذا كان هناك حرف ، فسيتم استخدام العودية. أيضا ، يتم دائمًا توفير الأحرف بالترتيب ، لذلك لا توجد حاجة لفرزها.
روابط ذات صلة
- كائن عالمي السلسلة
- JS String Prototype CharCodeAt
- String.fromCharCode
تلميح: 1
ستحتاج إلى التحويل من رمز إلى رمز ASCII باستخدام الطريقتين المقدمتين في الوصف.
حاول أن تحل المشكلة الآن
تلميح: 2
سيكون عليك التحقق من الاختلاف في كود ASCII كما هي بالترتيب. استخدام الرسم البياني سيكون مفيدا للغاية.
حاول أن تحل المشكلة الآن
تلميح: 3
ستحتاج إلى معرفة مكان الرسالة المفقودة ، مع التعامل مع الحالة التي لا يوجد بها حرف مفقود لأنه يحتاج إلى قيمة إرجاع محددة.
حاول أن تحل المشكلة الآن
تنبيه المفسد!
الحل في المستقبل!
الحل الأساسي للكود:
`function fearNotLetter(str) {
for(var i = 0; i < str.length; i++) { /* code of current character */ var code = str.charCodeAt(i);
/* if code of current character is not equal to first character + no of iteration
hence character has been escaped */
if (code !== str.charCodeAt(0) + i) {
/* if current character has escaped one character find previous char and return */
return String.fromCharCode(code - 1);
}
} return undefined; }
// test here fearNotLetter("abce"); `
شرح الشفرة:
- تستفيد هذه الحلول من حلقة
for
. - يتم تخزين رمز الحرف المصادفة في التعليمات البرمجية .
- يتم التحقق إذا كان رمز الحرف الحالي هو الحرف المتوقع (لا يتم تخطي أي حرف) باستخدام
code of current character = code of first character + number of iterations
منطقيcode of current character = code of first character + number of iterations
. - إذا كان الحرف مفقودًا ، يتم العثور على الحرف المفقود ويتم إرجاع السلسلة النهائية.
- يتم إرجاع
undefined
إذا لم يكن هناك حرف مفقود في السلسلة.
روابط ذات صلة
- شبيبة لشرح الحلقات
- طول سلسلة
حل الشفرة المتوسطة:
`// Adding this solution for the sake of avoiding using 'for' and 'while' loops. // See the explanation for reference as to why. It's worth the effort.
function fearNotLetter(str) { var compare = str.charCodeAt(0), missing;
str.split('').map(function(letter,index) { if (str.charCodeAt(index) == compare) { ++compare; } else { missing = String.fromCharCode(compare); } });
return missing; }
// test here fearNotLetter("abce"); `
شرح الشفرة:
- أولاً ، نحدد المتغيرات لتخزين رمز الحرف للحرف الأول في السلسلة ، ولتخزين أي أحرف مفقودة قد نجدها.
- ننتقل السلسلة إلى مجموعة من أجل تعيين من خلال ذلك بدلا من استخدام
for
وwhile
الحلقات. - بينما
map
خلال رموز الأحرف الخاصة بالحروف ، نذهب إلى المقارنة مع تلك التي يجب أن تكون في هذا الموقف. - إذا تطابق الحرف الحالي ، فإننا ننقل متغير المقارنة إلى موضعه التالي حتى يمكننا المقارنة في الدورة التالية.
- إذا لم يكن الأمر كذلك ، سيتم تعيين الحرف المفقود إلى المتغير
missing
، والذي سيتم إرجاعه بعد الانتهاء من الخريطة. - إذا لم تكن هناك أحرف مفقودة ،
undefined
.
روابط ذات صلة
حل رمز متقدم مبسط:
function fearNotLetter(str) { for (let i = 1; i < str.length; ++i) { if (str.charCodeAt(i) - str.charCodeAt(i-1) > 1) { return String.fromCharCode(str.charCodeAt(i - 1) + 1); } } }
شرح الشفرة:
- حلقة فوق السلسلة
- تحقق مما إذا كان الاختلاف في رموز char بين الأحرف المتجاورة في السلسلة أكثر من 1 (جدول ASCII chack)
- إرجاع الحرف المفقود (1+ من حيث تم اكتشاف الفجوة)
الحل المتقدم للكود:
`function fearNotLetter(str) { var allChars = ''; var notChars = new RegExp('[^'+str+']','g');
for (var i = 0; allChars[allChars.length-1] !== str[str.length-1] ; i++) allChars += String.fromCharCode(str[0].charCodeAt(0) + i);
return allChars.match(notChars) ? allChars.match(notChars).join('') : undefined; }
// test here fearNotLetter("abce"); `
شرح الشفرة:
- يتم إنشاء سلسلة جديدة allChars .
- قم بإنشاء التعبير العادي notChars الذي يحدد كل شيء باستثناء str .
- يتم استخدام حلقة
for
لإضافة كافة الأحرف في النطاق إلى كافة Chars . - يتم استخدام
match()
لإلغاء تجريد الأحرف str من السلسلة التي تم إنشاؤها حديثًا ويتم إرجاعها. - إذا لم تكن هناك أحرف مفقودة ،
undefined
.
روابط ذات صلة
- شبيبة ريجكس الموارد
- JS Ternary
- JS String Prototype Match
- شبيبة صفيف النموذج
ملاحظات للمساهمات:
- لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
- أضف شرحًا لحلك.
- تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم .
- الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( لا تزيل أي أسماء مستخدمين حالية )
نرى
Wiki Challenge Solution Template
كمرجع.