chore(i18n,learn): processed translations (#48152)

This commit is contained in:
camperbot
2022-10-20 17:13:17 +01:00
committed by GitHub
parent ac3fc2e7eb
commit 5f3b6b1807
3199 changed files with 377341 additions and 545 deletions

View File

@@ -0,0 +1,97 @@
---
id: a77dbc43c33f39daa4429b4f
title: ما هي المقارنة (Boo who)
challengeType: 1
forumTopicId: 16000
dashedName: boo-who
---
# --description--
تحقق مما إذا كانت القيمة تصنف كقيمة boolean المنطقية. أنتج القيم `true` أو `false`.
قيم المقارنة (Boolean primitives) تكون `true` و `false`.
# --hints--
يجب أن ينتج `booWho(true)` القيمة باسم `true`.
```js
assert.strictEqual(booWho(true), true);
```
`booWho(false)` يجب أن ينتج `true`.
```js
assert.strictEqual(booWho(false), true);
```
`booWho([1, 2, 3])` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho([1, 2, 3]), false);
```
`booWho([].slice)` يجب أن يتنج `false`.
```js
assert.strictEqual(booWho([].slice), false);
```
`booWho({ "a": 1 })` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho({ a: 1 }), false);
```
`booWho(1)` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho(1), false);
```
`booWho(NaN)` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho(NaN), false);
```
`booWho("a")` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho('a'), false);
```
`booWho("true")` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho('true'), false);
```
`booWho("false")` يجب أن ينتج `false`.
```js
assert.strictEqual(booWho('false'), false);
```
# --seed--
## --seed-contents--
```js
function booWho(bool) {
return bool;
}
booWho(null);
```
# --solutions--
```js
function booWho(bool) {
return typeof bool === "boolean";
}
booWho(null);
```

View File

@@ -0,0 +1,110 @@
---
id: a9bd25c716030ec90084d8a1
title: تقسيم المصفوفة إلي مجموعات
challengeType: 1
forumTopicId: 16005
dashedName: chunky-monkey
---
# --description--
كتابة وظيفة (function) تقسم القائمة (array) (الحَجَّة الأولى) إلى مجموعات لها طول `size` (الحَجَّة الثانية) وتنشئهما كقائمة (array) ثنائية الأبعاد.
# --hints--
`chunkArrayInGroups(["a", "b", "c", "d"], 2)` يجب أن ينتج `[["a", "b"], ["c", "d"]]`.
```js
assert.deepEqual(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2), [
['a', 'b'],
['c', 'd']
]);
```
`chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3)`> يجب أن ينتج `[[0, 1, 2], [3, 4, 5]]`.
```js
assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 3), [
[0, 1, 2],
[3, 4, 5]
]);
```
`chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2)` يجب أن ينتج `[[0, 1], [2, 3], [4, 5]]`.
```js
assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2), [
[0, 1],
[2, 3],
[4, 5]
]);
```
`chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4)` يجب أن ينتج `[[0, 1, 2, 3], [4, 5]]`.
```js
assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5], 4), [
[0, 1, 2, 3],
[4, 5]
]);
```
`chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3)` يجب أن ينتج `[[0, 1, 2], [3, 4, 5], [6]]`.
```js
assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6], 3), [
[0, 1, 2],
[3, 4, 5],
[6]
]);
```
`chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4)` يجب أن ينتج `[[0, 1, 2, 3], [4, 5, 6, 7], [8]]`.
```js
assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 4), [
[0, 1, 2, 3],
[4, 5, 6, 7],
[8]
]);
```
`chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2)` يجب أن ينتج `[[0, 1], [2, 3], [4, 5], [6, 7], [8]]`.
```js
assert.deepEqual(chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2), [
[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8]
]);
```
# --seed--
## --seed-contents--
```js
function chunkArrayInGroups(arr, size) {
return arr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
```
# --solutions--
```js
function chunkArrayInGroups(arr, size) {
let out = [];
for (let i = 0; i < arr.length; i += size) {
out.push(arr.slice(i, i + size));
}
return out;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
```

View File

@@ -0,0 +1,113 @@
---
id: acda2fb1324d9b0fa741e6b5
title: تيقن من الأخير
challengeType: 1
forumTopicId: 16006
dashedName: confirm-the-ending
---
# --description--
تحقق مما إذا كان string (الحَجَّة الأولى، `str`) أخر string المطلوب (الحَجَّة الثانية، `target`).
*يمكنك* حل هذا التحدي بطريقة `.endsWith()`، التي تم تقديمها في ES2015. لكن لغرض هذا التحدي، نود أن تستخدموا واحدة من طرق subnstrings فى JavaScript بدلاً من ذلك.
# --hints--
`confirmEnding("Bastian", "n")` يجب أن ينتج `true`.
```js
assert(confirmEnding('Bastian', 'n') === true);
```
`confirmEnding("Congratulation", "on")` يجب أن ينتج `true`.
```js
assert(confirmEnding('Congratulation', 'on') === true);
```
`confirmEnding("Connor", "n")` يجب أن ينتج `false`.
```js
assert(confirmEnding('Connor', 'n') === false);
```
`confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")` يجب أن ينتج `false`.
```js
assert(
confirmEnding(
'Walking on water and developing software from a specification are easy if both are frozen',
'specification'
) === false
);
```
`confirmEnding("He has to give me a new name", "name")` يجب أن ينتج `true`.
```js
assert(confirmEnding('He has to give me a new name', 'name') === true);
```
`confirmEnding("Open sesame", "same")` يجب أن ينتج `true`.
```js
assert(confirmEnding('Open sesame', 'same') === true);
```
`confirmEnding("Open sesame", "sage")` يجب أن ينتج `false`.
```js
assert(confirmEnding('Open sesame', 'sage') === false);
```
`confirmEnding("Open sesame", "game")` يجب أن ينتج `false`.
```js
assert(confirmEnding('Open sesame', 'game') === false);
```
`confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain")` يجب أن ينتج `false`.
```js
assert(
confirmEnding(
'If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing',
'mountain'
) === false
);
```
`confirmEnding("Abstraction", "action")` يجب أن ينتج `true`.
```js
assert(confirmEnding('Abstraction', 'action') === true);
```
برنامجك يجب ألا يستخدم طريقة مبنية داخلياً (built-in method) باسم `.endsWith()` لحل التحدي.
```js
assert(!/\.endsWith\(.*?\)\s*?;?/.test(code) && !/\['endsWith'\]/.test(code));
```
# --seed--
## --seed-contents--
```js
function confirmEnding(str, target) {
return str;
}
confirmEnding("Bastian", "n");
```
# --solutions--
```js
function confirmEnding(str, target) {
return str.substring(str.length - target.length) === target;
}
confirmEnding("Bastian", "n");
```

View File

@@ -0,0 +1,75 @@
---
id: 56533eb9ac21ba0edf2244b3
title: تحويل الدرجات المئوية (Celsius) إلى فهرنهايت (Fahrenheit)
challengeType: 1
forumTopicId: 16806
dashedName: convert-celsius-to-fahrenheit
---
# --description--
معادلة تحويل درجة الحرارة من الدرجة المئوية إلى درجة فهرنهايت هي: درجة الحرارة المئوية مضروبة في `9/5`, مضاف إليها `32`.
لديك المتغير `celsius` ويمثل درجة الحرارة المئوية. استخدم المتغير `fahrenheit` الذي سبق تعريفه وعيّن درجة حرارة فهرنهايت المعادلة لدرجة الحرارة المئوية المعطاة. استخدم المعادلة في السطر الأول، لتحويل درجة الحرارة المئوية إلى فهرنهايت.
# --hints--
`convertCtoF(0)` يجب أن ينتج رقماً
```js
assert(typeof convertCtoF(0) === 'number');
```
`convertCtoF(-30)` يجب أن ينتج قيمة `-22`
```js
assert(convertCtoF(-30) === -22);
```
`convertCtoF(-10)` يجب أن ينتج قيمة `14`
```js
assert(convertCtoF(-10) === 14);
```
`convertCtoF(0)` يجب أن ينتج قيمة `32`
```js
assert(convertCtoF(0) === 32);
```
`convertCtoF(20)` يجب أن ينتج قيمة `68`
```js
assert(convertCtoF(20) === 68);
```
`convertCtoF(30)` يجب أن ينتج قيمة `86`
```js
assert(convertCtoF(30) === 86);
```
# --seed--
## --seed-contents--
```js
function convertCtoF(celsius) {
let fahrenheit;
return fahrenheit;
}
convertCtoF(30);
```
# --solutions--
```js
function convertCtoF(celsius) {
let fahrenheit = celsius * 9/5 + 32;
return fahrenheit;
}
convertCtoF(30);
```

View File

@@ -0,0 +1,73 @@
---
id: a302f7aae1aa3152a5b413bc
title: عامل الضرب للرَّقَم (Factorialize a Number)
challengeType: 1
forumTopicId: 16013
dashedName: factorialize-a-number
---
# --description--
أرجع عامل الضرب للرقم الصحيح الذي تم تزويدك به.
إذا كان الرَّقَم الصحيح مُمَثل بحرف `n`، عامل الضرب للرقم هو حاصل ضرب كل الأرقام الموجبة التي هي أصغر أو تساوي الرقم`n`.
عوامل الضرب غالبا ما يتم تمثيله كالترميز التالي `n!`
مثال: `5! = 1 * 2 * 3 * 4 * 5 = 120`
فقط الأرقام التي هي أكبر أو تساوي الصفر سيتم إدخالها في الوظيفة (function).
# --hints--
`factorialize(5)` يجب أن ينتج رقماً.
```js
assert(typeof factorialize(5) === 'number');
```
`factorialize(5)` يجب أن ينتج `120`.
```js
assert(factorialize(5) === 120);
```
`factorialize(10)` يجب أن ينتج `3628800`.
```js
assert(factorialize(10) === 3628800);
```
`factorialize(20)` يجب أن ينتج `2432902008176640000`.
```js
assert(factorialize(20) === 2432902008176640000);
```
`factorialize(0)` يجب أن ينتج `1`.
```js
assert(factorialize(0) === 1);
```
# --seed--
## --seed-contents--
```js
function factorialize(num) {
return num;
}
factorialize(5);
```
# --solutions--
```js
function factorialize(num) {
return num < 1 ? 1 : num * factorialize(num - 1);
}
factorialize(5);
```

View File

@@ -0,0 +1,71 @@
---
id: adf08ec01beb4f99fc7a68f2
title: التنقل بين قيم زائفة (Falsy Bouncer)
challengeType: 1
forumTopicId: 16014
dashedName: falsy-bouncer
---
# --description--
أزل جميع القيم الزائفة falsy من القائمة (array). أنتج قائمة (array) جديدة ولا تغير قيمة القائمة (array) الأصلية.
القيم الزائفة Falsy في لغة JavaScript هي `false`, `null`, `0`, `""`, `undefined`, و `NaN`.
تلميح: حاول تحويل كل قيمة إلى Boolean.
# --hints--
`bouncer([7, "ate", "", false, 9])` يجب أن ينتج `[7, "ate", 9]`.
```js
assert.deepEqual(bouncer([7, 'ate', '', false, 9]), [7, 'ate', 9]);
```
`bouncer(["a", "b", "c"])` يجب أن تنتج `["a", "b", "c"]`.
```js
assert.deepEqual(bouncer(['a', 'b', 'c']), ['a', 'b', 'c']);
```
`bouncer([false, null, 0, NaN, undefined, ""])`يجب أن تنتج `[]`.
```js
assert.deepEqual(bouncer([false, null, 0, NaN, undefined, '']), []);
```
`bouncer([null, NaN, 1, 2, undefined])` يجب أن تنتج `[1, 2]`.
```js
assert.deepEqual(bouncer([null, NaN, 1, 2, undefined]), [1, 2]);
```
لا يجب عليك تغيير `arr`.
```js
const arr = ['a', false, 0, 'Naomi'];
bouncer(arr);
assert.deepEqual(arr, ['a', false, 0, 'Naomi'])
```
# --seed--
## --seed-contents--
```js
function bouncer(arr) {
return arr;
}
bouncer([7, "ate", "", false, 9]);
```
# --solutions--
```js
function bouncer(arr) {
return arr.filter(e => e);
}
bouncer([7, "ate", "", false, 9]);
```

View File

@@ -0,0 +1,87 @@
---
id: a26cbbe9ad8655a977e1ceb5
title: جد أطول كلمة في المقطع (String)
challengeType: 1
forumTopicId: 16015
dashedName: find-the-longest-word-in-a-string
---
# --description--
أرجع طول (length) أطول كلمة في الجملة المزودة.
يجب أن تكون القيمة التي إرجاعاتها رقما (number).
# --hints--
`findLongestWordLength("The quick brown fox jumped over the lazy dog")` يجب أن ينتج رقما.
```js
assert(
typeof findLongestWordLength(
'The quick brown fox jumped over the lazy dog'
) === 'number'
);
```
`findLongestWordLength("The quick brown fox jumped over the lazy dog")` يجب أن ينتج `6`.
```js
assert(
findLongestWordLength('The quick brown fox jumped over the lazy dog') === 6
);
```
`findLongestWordLength("May the force be with you")` يجب أن ينتج `5`.
```js
assert(findLongestWordLength('May the force be with you') === 5);
```
`findLongestWordLength("Google do a barrel roll")` يجب أن ينتج `6`.
```js
assert(findLongestWordLength('Google do a barrel roll') === 6);
```
`findLongestWordLength("What is the average airspeed velocity of an unladen swallow")`يجب أن ينتج `8`.
```js
assert(
findLongestWordLength(
'What is the average airspeed velocity of an unladen swallow'
) === 8
);
```
`findLongestWordLength("What if we try a super-long word such as otorhinolaryngology")` يجب أن ينتج `19`.
```js
assert(
findLongestWordLength(
'What if we try a super-long word such as otorhinolaryngology'
) === 19
);
```
# --seed--
## --seed-contents--
```js
function findLongestWordLength(str) {
return str.length;
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");
```
# --solutions--
```js
function findLongestWordLength(str) {
return str.split(' ').sort((a, b) => b.length - a.length)[0].length;
}
findLongestWordLength("The quick brown fox jumped over the lazy dog");
```

View File

@@ -0,0 +1,58 @@
---
id: a6e40f1041b06c996f7b2406
title: من يجد شيئا يحتفظ به Finders Keepers
challengeType: 1
forumTopicId: 16016
dashedName: finders-keepers
---
# --description--
أنشئ وظيفة تبحث في القائمة `arr` وترجع العنصر الأول فيها الذي يجتاز 'اختبار الحقيقة'. وهذا يعني أنه نظراً لعنصر `x`، يتم اجتياز 'اختبار الحقيقة' إذا كان `func(x)` صحيحا `true`. إذا لم ينجح أي عنصر في الاختبار، انتج `undefined`.
# --hints--
يجب إن `findElement([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; })` ينتج `8`.
```js
assert.strictEqual(
findElement([1, 3, 5, 8, 9, 10], function (num) {
return num % 2 === 0;
}),
8
);
```
يجب إن `findElement([1, 3, 5, 9], function(num) { return num % 2 === 0; })` ينتج `undefined`.
```js
assert.strictEqual(
findElement([1, 3, 5, 9], function (num) {
return num % 2 === 0;
}),
undefined
);
```
# --seed--
## --seed-contents--
```js
function findElement(arr, func) {
let num = 0;
return num;
}
findElement([1, 2, 3, 4], num => num % 2 === 0);
```
# --solutions--
```js
function findElement(arr, func) {
return arr.filter(func)[0];
}
findElement([1, 2, 3, 4], num => num % 2 === 0);
```

View File

@@ -0,0 +1,117 @@
---
id: af2170cad53daa0770fabdea
title: التحولات (Mutations)
challengeType: 1
forumTopicId: 16025
dashedName: mutations
---
# --description--
ققم يإرجاع `true` إذا كانت المقطع النصي (string) في العنصر الأول من القائمة تحتوي على جميع الأحرف من القطع النصي (string) في العنصر الثاني من القائمة.
على سبيل المثال، `["hello", "Hello"]`, يجب أن ينتج `true` لأن جميع الحروف في المقطع النصي (string) الثانية موجودة في المقطع النصي (string) الأولى، وذلك بتجاهل حالة الحروف سواء كانت كبيرة أو صغيرة.
الحجج `["hello", "hey"]` يجب أن ينتح `false` لأن المقطع النصي (string) باسم `hello` لا تحتوي على حرف `y`.
أخراً, يجب إن`["Alien", "line"]` ينتج `true` لان كل الحروف في `line` موجودة في `Alien`.
# --hints--
يجب إن `mutation(["hello", "hey"])` ينتج `false`.
```js
assert(mutation(['hello', 'hey']) === false);
```
يجب إن `mutation(["hello", "Hello"])` ينتج `true`.
```js
assert(mutation(['hello', 'Hello']) === true);
```
يجب إن `mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"])` ينتج `true`.
```js
assert(mutation(['zyxwvutsrqponmlkjihgfedcba', 'qrstu']) === true);
```
يجب إن `mutation(["Mary", "Army"])` ينتج `true`.
```js
assert(mutation(['Mary', 'Army']) === true);
```
يجب إن `mutation(["Mary", "Aarmy"])` ينتج `true`.
```js
assert(mutation(['Mary', 'Aarmy']) === true);
```
يجب إن `mutation(["Alien", "line"])` ينتج `true`.
```js
assert(mutation(['Alien', 'line']) === true);
```
يجب إن `mutation(["floor", "for"])` ينتج `true`.
```js
assert(mutation(['floor', 'for']) === true);
```
يجب إن `mutation(["hello", "neo"])` ينتج `false`.
```js
assert(mutation(['hello', 'neo']) === false);
```
يجب إن `mutation(["voodoo", "no"])` ينتج `false`.
```js
assert(mutation(['voodoo', 'no']) === false);
```
يجب إن `mutation(["ate", "date"])` ينتج `false`.
```js
assert(mutation(['ate', 'date']) === false);
```
يجب إن `mutation(["Tiger", "Zebra"])` ينتج `false`.
```js
assert(mutation(['Tiger', 'Zebra']) === false);
```
يجب إن `mutation(["Noel", "Ole"])` ينتج `true`.
```js
assert(mutation(['Noel', 'Ole']) === true);
```
# --seed--
## --seed-contents--
```js
function mutation(arr) {
return arr;
}
mutation(["hello", "hey"]);
```
# --solutions--
```js
function mutation(arr) {
let hash = Object.create(null);
arr[0].toLowerCase().split('').forEach(c => hash[c] = true);
return !arr[1].toLowerCase().split('').filter(c => !hash[c]).length;
}
mutation(["hello", "hey"]);
```

View File

@@ -0,0 +1,84 @@
---
id: afcc8d540bea9ea2669306b6
title: تكرار مقطع (String) نصي تكرار مقطع (String) نصي
challengeType: 1
forumTopicId: 16041
dashedName: repeat-a-string-repeat-a-string
---
# --description--
كرر مقطع (String) نصي معين `str` (الحجَّة الأولى) لعدد `num` مرات (الحِجَّة الثانية). انتج مقطع (String) نصي فارغ إذا كان `num` ليس رقماً موجباً. لأغراض هذا التحدي، *لا* تستخدم الوظيفة `.repeat()` المدمجة.
# --hints--
`repeatStringNumTimes("*", 3)` يجب أن ينتج المقطع `***`.
```js
assert(repeatStringNumTimes('*', 3) === '***');
```
`repeatStringNumTimes("abc", 3)` يجب أن ينتج المقطع `abcabcabc`.
```js
assert(repeatStringNumTimes('abc', 3) === 'abcabcabc');
```
`repeatStringNumTimes("abc", 4)` يجب أن ينتج المقطع `abcabcabcabc`.
```js
assert(repeatStringNumTimes('abc', 4) === 'abcabcabcabc');
```
`repeatStringNumTimes("abc", 1)` يجب أن ينتج المقطع `abc`.
```js
assert(repeatStringNumTimes('abc', 1) === 'abc');
```
`repeatStringNumTimes("*", 8)` يجب أن ينتج المقطع `********`.
```js
assert(repeatStringNumTimes('*', 8) === '********');
```
`repeatStringNumTimes("abc", -2)` يجب أن ينتج مقطع فارغة (`""`).
```js
assert(repeatStringNumTimes('abc', -2) === '');
```
لا ينبغي استخدام الوظيفة `repeat()` المدمجة.
```js
assert(!/\.repeat/g.test(code));
```
`repeatStringNumTimes("abc", 0)` يجب أن ينتج `""`.
```js
assert(repeatStringNumTimes('abc', 0) === '');
```
# --seed--
## --seed-contents--
```js
function repeatStringNumTimes(str, num) {
return str;
}
repeatStringNumTimes("abc", 3);
```
# --solutions--
```js
function repeatStringNumTimes(str, num) {
if (num < 1) return '';
return num === 1 ? str : str + repeatStringNumTimes(str, num-1);
}
repeatStringNumTimes("abc", 3);
```

View File

@@ -0,0 +1,92 @@
---
id: a789b3483989747d63b0e427
title: أنشئ أكبر أعداد في القوائم (Arrays)
challengeType: 1
forumTopicId: 16042
dashedName: return-largest-numbers-in-arrays
---
# --description--
أنشئ قائمة تتكون من أكبر رَقَم من كل قائمة فرعية. من أجل البساطة، سوف تحتوي القائمة على 4 قوائم فرعية بالضبط.
تذكر، يمكنك المرور علي قائمة باستخدام for loop البسيطة، والوصول إلى كل عنصر باستخدام اسم القائمة `arr[i]`.
# --hints--
`largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]])` يجب أن ينتج القائمة.
```js
assert(
largestOfFour([
[4, 5, 1, 3],
[13, 27, 18, 26],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]).constructor === Array
);
```
`largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])` يجب أن ينتج `[27, 5, 39, 1001]`.
```js
assert.deepEqual(
largestOfFour([
[13, 27, 18, 26],
[4, 5, 1, 3],
[32, 35, 37, 39],
[1000, 1001, 857, 1]
]),
[27, 5, 39, 1001]
);
```
`largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]])` يجب أن ينتج `[9, 35, 97, 1000000]`.
```js
assert.deepEqual(
largestOfFour([
[4, 9, 1, 3],
[13, 35, 18, 26],
[32, 35, 97, 39],
[1000000, 1001, 857, 1]
]),
[9, 35, 97, 1000000]
);
```
`largestOfFour([[17, 23, 25, 12], [25, 7, 34, 48], [4, -10, 18, 21], [-72, -3, -17, -10]])` يجب أن ينتج `[25, 48, 21, -3]`.
```js
assert.deepEqual(
largestOfFour([
[17, 23, 25, 12],
[25, 7, 34, 48],
[4, -10, 18, 21],
[-72, -3, -17, -10]
]),
[25, 48, 21, -3]
);
```
# --seed--
## --seed-contents--
```js
function largestOfFour(arr) {
return arr;
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
```
# --solutions--
```js
function largestOfFour(arr) {
return arr.map(subArr => Math.max.apply(null, subArr));
}
largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
```

View File

@@ -0,0 +1,63 @@
---
id: a202eed8fc186c8434cb6d61
title: قلب المقطع النصي String
challengeType: 1
forumTopicId: 16043
dashedName: reverse-a-string
---
# --description--
أقلب المقطع النصي المقدم.
قد تحتاج إلى تحويل المقطع النصي (string) إلى قائمة قبل أن تتمكن من قلبها.
يجب أن تكون نتيجتك مقطع نصي (string).
# --hints--
`reverseString("hello")` يجب أن ينتج مقطع نصي.
```js
assert(typeof reverseString('hello') === 'string');
```
`reverseString("hello")` يجب أن ينتج مقطع `olleh`.
```js
assert(reverseString('hello') === 'olleh');
```
`reverseString("Howdy")` يجب أن ينتج مقطع `ydwoH`.
```js
assert(reverseString('Howdy') === 'ydwoH');
```
`reverseString("Greetings from Earth")` يجب أن ينتج المقطع `htraE morf sgniteerG`.
```js
assert(reverseString('Greetings from Earth') === 'htraE morf sgniteerG');
```
# --seed--
## --seed-contents--
```js
function reverseString(str) {
return str;
}
reverseString("hello");
```
# --solutions--
```js
function reverseString(str) {
return str.split('').reverse().join('');
}
reverseString("hello");
```

View File

@@ -0,0 +1,98 @@
---
id: 579e2a2c335b9d72dd32e05c
title: Slice و Splice
challengeType: 1
forumTopicId: 301148
dashedName: slice-and-splice
---
# --description--
يتم منحك قائمتين وترتيب (index).
انسخ كل عنصر من القائمة الأولى إلى القائمة الثانية، بالترتيب.
ابدأ في إدراج عناصر بالترتيب `n` في القائمة الثانية.
انتج القائمة الناتجة عن ذلك. وينبغي أن تظل قائمات المدخلات (input arrays) على حالها بعد تشغيل الوظيفة (function).
# --hints--
`frankenSplice([1, 2, 3], [4, 5], 1)` يجب أن ينتج `[4, 1, 2, 3, 5]`.
```js
assert.deepEqual(frankenSplice([1, 2, 3], [4, 5], 1), [4, 1, 2, 3, 5]);
```
`frankenSplice([1, 2], ["a", "b"], 1)` يجب أن ينتج `["a", 1, 2, "b"]`.
```js
assert.deepEqual(frankenSplice(testArr1, testArr2, 1), ['a', 1, 2, 'b']);
```
`frankenSplice(["claw", "tentacle"], ["head", "shoulders", "knees", "toes"], 2)` يجب أن ينتج `["head", "shoulders", "claw", "tentacle", "knees", "toes"]`.
```js
assert.deepEqual(
frankenSplice(
['claw', 'tentacle'],
['head', 'shoulders', 'knees', 'toes'],
2
),
['head', 'shoulders', 'claw', 'tentacle', 'knees', 'toes']
);
```
يجب إضافة جميع العناصر من القائمة الأولى إلى القائمة الثانية بالترتيب الأصلي. `frankenSplice([1, 2, 3, 4], [], 0)` يجب أن ينتج `[1, 2, 3, 4]`.
```js
assert.deepEqual(frankenSplice([1, 2, 3, 4], [], 0), [1, 2, 3, 4]);
```
وينبغي أن تظل القائمة الأولى على حالها بعد تشغيل الوظيفة.
```js
frankenSplice(testArr1, testArr2, 1);
assert.deepEqual(testArr1, [1, 2]);
```
وينبغي أن تظل القائمة الثانية على حالها بعد تشغيل الوظيفة.
```js
frankenSplice(testArr1, testArr2, 1);
assert.deepEqual(testArr2, ['a', 'b']);
```
# --seed--
## --after-user-code--
```js
let testArr1 = [1, 2];
let testArr2 = ["a", "b"];
```
## --seed-contents--
```js
function frankenSplice(arr1, arr2, n) {
return arr2;
}
frankenSplice([1, 2, 3], [4, 5, 6], 1);
```
# --solutions--
```js
function frankenSplice(arr1, arr2, n) {
// It's alive. It's alive!
let result = arr2.slice();
for (let i = 0; i < arr1.length; i++) {
result.splice(n+i, 0, arr1[i]);
}
return result;
}
frankenSplice([1, 2, 3], [4, 5], 1);
```

View File

@@ -0,0 +1,64 @@
---
id: ab6137d4e35944e21037b769
title: تكبير الحرف الأول لكل كلمة في الجملة
challengeType: 1
forumTopicId: 16088
dashedName: title-case-a-sentence
---
# --description--
أنشئ مقطع (string) مقدم مع تكبير الحرف الأول (capitalize) من كل كلمة في الجملة. تحقق أن بقية حروف الكلمة في حالة عادية (lower case).
لأغراض هذا التمرين، يجب عليك أيضًا تكبير حروف كلمات التوصيل مثل `the` و `of`.
# --hints--
`titleCase("I'm a little tea pot")` يجب أن ينشئ مقطع نصية.
```js
assert(typeof titleCase("I'm a little tea pot") === 'string');
```
`titleCase("I'm a little tea pot")` يجب أن ينتج المقطع `I'm A Little Tea Pot`.
```js
assert(titleCase("I'm a little tea pot") === "I'm A Little Tea Pot");
```
`titleCase("sHoRt AnD sToUt")` يجب أن ينشئ المقطع `Short And Stout`.
```js
assert(titleCase('sHoRt AnD sToUt') === 'Short And Stout');
```
`titleCase("HERE IS MY HANDLE HERE IS MY SPOUT")` يجب أن ينشئ المقطع `Here Is My Handle Here Is My Spout`.
```js
assert(
titleCase('HERE IS MY HANDLE HERE IS MY SPOUT') ===
'Here Is My Handle Here Is My Spout'
);
```
# --seed--
## --seed-contents--
```js
function titleCase(str) {
return str;
}
titleCase("I'm a little tea pot");
```
# --solutions--
```js
function titleCase(str) {
return str.split(' ').map(word => word.charAt(0).toUpperCase() + word.substring(1).toLowerCase()).join(' ');
}
titleCase("I'm a little tea pot");
```

View File

@@ -0,0 +1,91 @@
---
id: ac6993d51946422351508a41
title: اقتطاع (Truncate) القطع (String) النصي
challengeType: 1
forumTopicId: 16089
dashedName: truncate-a-string
---
# --description--
اقتطع المقطع النصي (الحَجَّة الأولى) إذا كانت أطول من الحد الأقصى المحدد لطول المقطع النصي (الحَجَّة الثانية). أنشئ المقطع النصي المتقطع حيث ينتهي بـ `...` ثلاث نُقَط.
# --hints--
`truncateString("A-tisket a-tasket A green and yellow basket", 8)` يجب أن يُنشئ المقطع النصي `A-tisket...`.
```js
assert(
truncateString('A-tisket a-tasket A green and yellow basket', 8) ===
'A-tisket...'
);
```
`truncateString("Peter Piper picked a peck of pickled peppers", 11)` يجب أن يُنشئ المقطع `Peter Piper...`.
```js
assert(
truncateString('Peter Piper picked a peck of pickled peppers', 11) ===
'Peter Piper...'
);
```
`truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length)` يجب أن ينشئ المقطع `A-tisket a-tasket A green and yellow basket`.
```js
assert(
truncateString(
'A-tisket a-tasket A green and yellow basket',
'A-tisket a-tasket A green and yellow basket'.length
) === 'A-tisket a-tasket A green and yellow basket'
);
```
`truncateString("A-tisket a-tasket A green and yellow basket", "A-tisket a-tasket A green and yellow basket".length + 2)` يجب أن يرجع المقطع `A-tisket a-tasket A green and yellow basket`.
```js
assert(
truncateString(
'A-tisket a-tasket A green and yellow basket',
'A-tisket a-tasket A green and yellow basket'.length + 2
) === 'A-tisket a-tasket A green and yellow basket'
);
```
`truncateString("A-", 1)` يجب أن ينشئ المقطع `A...`.
```js
assert(truncateString('A-', 1) === 'A...');
```
`truncateString("Absolutely Longer", 2)` يجب أن ينشئ المقطع `Ab...`.
```js
assert(truncateString('Absolutely Longer', 2) === 'Ab...');
```
# --seed--
## --seed-contents--
```js
function truncateString(str, num) {
return str;
}
truncateString("A-tisket a-tasket A green and yellow basket", 8);
```
# --solutions--
```js
function truncateString(str, num) {
if (num >= str.length) {
return str;
}
return str.slice(0, num) + '...';
}
truncateString("A-tisket a-tasket A green and yellow basket", 8);
```

View File

@@ -0,0 +1,143 @@
---
id: a24c1a4622e3c05097f71d67
title: أين انتمي
challengeType: 1
forumTopicId: 16094
dashedName: where-do-i-belong
---
# --description--
انتج أدنى الترتيب حيث إدراج قيمته (الحَجَّة الثانية) في القائمة (الحَجَّة الأولى) بمجرد ترتيبها. القيمة المنتجة يجب أن تكون رقما.
على سبيل المثال، `getIndexToIns([1,2,3,4], 1.5)` يجب أن ينتج `1` لأنه أكبر من `1` (الترتيب 0)، ولكن أقل من `2` (الترتيب 1).
كذلك، `getIndexToIns([20,3,5], 19)` يجب أن ينتج `2` لأنه بمجرد ترتيب القائمة سوف تبدو مثل `[3,5,20]`, و `19` هي أقل من `20` (الترتيب 2) وأكثر من `5` (الترتيب 1).
# --hints--
`getIndexToIns([10, 20, 30, 40, 50], 35)` يجب أن ينتج `3`.
```js
assert(getIndexToIns([10, 20, 30, 40, 50], 35) === 3);
```
`getIndexToIns([10, 20, 30, 40, 50], 35)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([10, 20, 30, 40, 50], 35) === 'number');
```
`getIndexToIns([10, 20, 30, 40, 50], 30)` يجب ينتج `2`.
```js
assert(getIndexToIns([10, 20, 30, 40, 50], 30) === 2);
```
`getIndexToIns([10, 20, 30, 40, 50], 30)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([10, 20, 30, 40, 50], 30) === 'number');
```
`getIndexToIns([40, 60], 50)` يجب أن ينتج `1`.
```js
assert(getIndexToIns([40, 60], 50) === 1);
```
`getIndexToIns([40, 60], 50)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([40, 60], 50) === 'number');
```
`getIndexToIns([3, 10, 5], 3)` يجب أن ينتج `0`.
```js
assert(getIndexToIns([3, 10, 5], 3) === 0);
```
`getIndexToIns([3, 10, 5], 3)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([3, 10, 5], 3) === 'number');
```
`getIndexToIns([5, 3, 20, 3], 5)` يجب أن ينتج `2`.
```js
assert(getIndexToIns([5, 3, 20, 3], 5) === 2);
```
`getIndexToIns([5, 3, 20, 3], 5)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([5, 3, 20, 3], 5) === 'number');
```
`getIndexToIns([2, 20, 10], 19)` يجب أن ينتج `2`.
```js
assert(getIndexToIns([2, 20, 10], 19) === 2);
```
`getIndexToIns([2, 20, 10], 19)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([2, 20, 10], 19) === 'number');
```
`getIndexToIns([2, 5, 10], 15)` يجب أن ينتج `3`.
```js
assert(getIndexToIns([2, 5, 10], 15) === 3);
```
`getIndexToIns([2, 5, 10], 15)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([2, 5, 10], 15) === 'number');
```
`getIndexToIns([], 1)` يجب أن ينتج `0`.
```js
assert(getIndexToIns([], 1) === 0);
```
`getIndexToIns([], 1)` يجب أن ينتج رَقَم.
```js
assert(typeof getIndexToIns([], 1) === 'number');
```
# --seed--
## --seed-contents--
```js
function getIndexToIns(arr, num) {
return num;
}
getIndexToIns([40, 60], 50);
```
# --solutions--
```js
function getIndexToIns(arr, num) {
arr = arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= num) {
return i;
}
}
return arr.length;
}
getIndexToIns([40, 60], 50);
```