182 lines
11 KiB
Markdown
182 lines
11 KiB
Markdown
![]() |
---
|
|||
|
title: Pig Latin
|
|||
|
localeTitle: خنزير اللاتينية
|
|||
|
---
|
|||
|
 تذكر استخدام **`Read-Search-Ask`** إذا واجهتك مشكلة. حاول إقران البرنامج  واكتب الكود الخاص بك 
|
|||
|
|
|||
|
###  شرح المشكلة:
|
|||
|
|
|||
|
تحتاج إلى إنشاء برنامج من الإنجليزية إلى الخنزير اللاتينية. خنزير لاتيني يأخذ أول ساكن ساكن (أو ساكن الكتلة) لكلمة إنجليزية ، ينقلها إلى نهاية الكلمة ويضيف لاحقاً "أي". إذا كانت الكلمة تبدأ بحرف متحرك ، فما عليك سوى إضافة "way" إلى النهاية. قد لا يكون الأمر واضحًا ، لكنك بحاجة إلى إزالة جميع الحروف الساكنة حتى حرف العلة الأول في حالة عدم بدء الكلمة بحرف متحرك.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [خنزير اللاتينية](http://en.wikipedia.org/wiki/Pig_Latin)
|
|||
|
* [JS String Prototype Match](http://forum.freecodecamp.com/t/javascript-string-prototype-match/15941)
|
|||
|
|
|||
|
##  تلميح: 1
|
|||
|
|
|||
|
ربما تريد استخدام التعبيرات العادية. هذا سيسمح لك بتحويل الكلمات بسهولة.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
##  تلميح: 2
|
|||
|
|
|||
|
إذا كان الحرف الأول حرفًا متحركًا ، فخذ الكلمة بأكملها وأضف "طريقًا" في النهاية. خلاف ذلك يأتي الجزء صعب ، واتخاذ ساكن (ق) قبل حرف العلة الأول وتحريكه إلى النهاية وإضافة "ay". قد يكون هذا أمرًا مربكًا ، ولكنه ليس مجرد الحرف الساكن الأول ، بل كلهم قبل الحرف الأول.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
##  تلميح: 3
|
|||
|
|
|||
|
سوف تحتاج إلى استخدام كل ما تعرفه عن التلاعب بالسلسلة للحصول على الجزء الأخير بشكل صحيح. ومع ذلك ، يمكن القيام به مع `substr` وحده.
|
|||
|
|
|||
|
> _حاول أن تحل المشكلة الآن_
|
|||
|
|
|||
|
## تنبيه المفسد!
|
|||
|
|
|||
|

|
|||
|
|
|||
|
**الحل في المستقبل!**
|
|||
|
|
|||
|
##  الحل الأساسي للكود:
|
|||
|
|
|||
|
`function translatePigLatin(str) {
|
|||
|
// Create variables to be used
|
|||
|
var pigLatin = '';
|
|||
|
var regex = /[aeiou]/gi;
|
|||
|
|
|||
|
// Check if the first character is a vowel
|
|||
|
if (str[0].match(regex)) {
|
|||
|
pigLatin = str + 'way';
|
|||
|
|
|||
|
} else if(str.match(regex) === null) {
|
|||
|
// Check if the string contains only consonants
|
|||
|
pigLatin = str + 'ay';
|
|||
|
} else {
|
|||
|
|
|||
|
// Find how many consonants before the first vowel.
|
|||
|
var vowelIndice = str.indexOf(str.match(regex)[0]);
|
|||
|
|
|||
|
// Take the string from the first vowel to the last char
|
|||
|
// then add the consonants that were previously omitted and add the ending.
|
|||
|
pigLatin = str.substr(vowelIndice) + str.substr(0, vowelIndice) + 'ay';
|
|||
|
}
|
|||
|
|
|||
|
return pigLatin;
|
|||
|
}
|
|||
|
|
|||
|
// test here
|
|||
|
translatePigLatin("consonant");
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLmt/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* جعل سلسلة فارغة لعقد كلمة الخنزير اللاتينية.
|
|||
|
* قم بتعيين التعبير العادي المناسب للمتغير.
|
|||
|
* إذا كان الحرف الأول حرفًا متحركًا ، فما عليك سوى إضافة **طريقة** إلى نهاية السلسلة وإعادتها.
|
|||
|
* إذا لم يكن الحرف الأول حرفًا متحركًا:
|
|||
|
* العثور على عدد من الحروف الساكنة قبل الحرف الأول مع مساعدة من `indexOf()` ، `match()` و regex.
|
|||
|
* بدء سلسلة خنزير اللاتينية مع أول حرف علة حتى النهاية.
|
|||
|
* أضف الحروف قبل حرف العلة الأول لنهاية السلسلة.
|
|||
|
* `substr()` يستخدم للتلاعب بالسلسلة هنا.
|
|||
|
* أضف **ay** إلى نهاية السلسلة وأعدها.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* شبيبة ريجكس الموارد
|
|||
|
* [JS String Prototype IndexOf](http://forum.freecodecamp.com/t/javascript-string-prototype-indexof/15936)
|
|||
|
* [JS String Prototype Substr](http://forum.freecodecamp.com/t/javascript-string-prototype-substr/15945)
|
|||
|
|
|||
|
##  حل الشفرة المتوسطة:
|
|||
|
|
|||
|
`function translatePigLatin(str) {
|
|||
|
function check(obj) {
|
|||
|
return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj;
|
|||
|
}
|
|||
|
|
|||
|
return str.substr(check(0)).concat((check(0) === 0 ? 'w' : str.substr(0, check(0))) + 'ay');
|
|||
|
}
|
|||
|
|
|||
|
// test here
|
|||
|
translatePigLatin("consonant");
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLmw/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* هذا هو نهج تفسيري وكذلك تعاودي لهذه المشكلة.
|
|||
|
* `check()` هي وظيفة تقوم بفحص الحرف الأول من السلسلة ليكون في صفيف حروف العلة ، `['a','i','u','e','o']` .
|
|||
|
* في حالة الحروف الساكنة ، فإن `check()` يستدعي نفسه على الحروف التالية حتى يعثر على الحرف الأول.
|
|||
|
* سيعود المؤشر إلى أي شيء يجد أنه آخر حرف مبدئي ، أي أن Schmidtsville سيكون 3.
|
|||
|
* بعد ذلك ، يتم رفع الحروف إلى أن تتم إزالة هذا الفهرس من السلسلة وتتصل مع نفس الجزء من السلسلة التي تمت إزالتها أو **w** وفقا لذلك ، ثم **ay ay** بغض النظر.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [JS String Prototype CharAt](http://forum.freecodecamp.com/t/javascript-string-prototype-charat/15932)
|
|||
|
* [JS String Prototype Concat](http://forum.freecodecamp.com/t/javascript-string-prototype-concat/15935)
|
|||
|
|
|||
|
##  الحل المتقدم للكود:
|
|||
|
|
|||
|
`function translatePigLatin(str) {
|
|||
|
var strArr = [];
|
|||
|
var tmpChar;
|
|||
|
|
|||
|
// check if the char is consonant using RegEx
|
|||
|
function isConsonant(char) {
|
|||
|
return !/[aeiou]/.test(char);
|
|||
|
}
|
|||
|
|
|||
|
// return initial str + "way" if it starts with vowel
|
|||
|
// if not - convert str to array
|
|||
|
if (!isConsonant(str.charAt(0)))
|
|||
|
return str + "way";
|
|||
|
else
|
|||
|
strArr = str.split("");
|
|||
|
|
|||
|
// push all consonats to the end of the array
|
|||
|
while (isConsonant(strArr[0])) {
|
|||
|
tmpChar = strArr.shift();
|
|||
|
strArr.push(tmpChar);
|
|||
|
}
|
|||
|
// convert array to string and concatenate "ay" at the end
|
|||
|
return strArr.join("")+"ay";
|
|||
|
}
|
|||
|
|
|||
|
// test here
|
|||
|
translatePigLatin("consonant");
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLmv/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* يتم استخدام `isConsonant()` للتحقق ما إذا كان الحرف حرف ساكن.
|
|||
|
* إذا كان الحرف الأول حرفًا متحركًا ، فأضف **طريقًا** إلى نهاية السلسلة وأعده.
|
|||
|
* إذا لم يكن الحرف الأول حرفًا متحركًا:
|
|||
|
* تقسيم السلسلة إلى صفيف باستخدام `split()` .
|
|||
|
* دفع جميع الحروف الساكنة إلى نهاية مجموعة مع مساعدة من `shift()` `push()` .
|
|||
|
* تحويل مجموعة إلى سلسلة باستخدام `join()` وإضافة **ay** إلى نهاية السلسلة. أعده.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [JS String Prototype Split](http://forum.freecodecamp.com/t/javascript-string-prototype-split/15944)
|
|||
|
* [JS Array Prototype Shift](http://forum.freecodecamp.com/t/javascript-array-prototype-shift/14301)
|
|||
|
* [JS Array Prototype Push](http://forum.freecodecamp.com/t/javascript-array-prototype-push/14298)
|
|||
|
* [شبيبة صفيف النموذج](http://forum.freecodecamp.com/t/javascript-array-prototype-join/14292)
|
|||
|
|
|||
|
###  ائتمانات:
|
|||
|
|
|||
|
إذا وجدت هذه الصفحة مفيدة ، يمكنك أن تقول شكرا للمساهمين من خلال نسخ ولصق السطر التالي في الدردشة الرئيسية:
|
|||
|
|
|||
|
**`Thanks @Rafase282 @sabahang @aganita @Hallaathrad for your help with Algorithm: Pig Latin`**
|
|||
|
|
|||
|
##  ملاحظات للمساهمات:
|
|||
|
|
|||
|
*  **لا تقم** بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها **_مشابهة ولكن أفضل_** ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
|
|||
|
* أضف شرحًا لحلك.
|
|||
|
* تصنيف الحل في واحدة من الفئات التالية - **الأساسي** **والمتوسط** **والمتقدم** . 
|
|||
|
* الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي **محتويات رئيسية ذات صلة** . (  **_لا_** _تزيل أي أسماء مستخدمين حالية_ )
|
|||
|
|
|||
|
> نرى  [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) كمرجع.
|