سلام بر تو ای کدنویس مبتدی جاوا اسکریپت! در این مقاله تعدادی از چالشهای کدنویسی را به شما پیشنهاد میکنم. این کار به شما کمک میکند ساختارها و الگوریتمهای اصلی جاوا اسکریپت را تمرین کنید.
این چالشهای کدنویسی، برای مبتدیان در نظر گرفته شده است. بنابراین راه حلهای پیشنهادی تنها با استفاده از عناصر برنامهنویسی ساده و کلاسیک اجرا میشوند. هر راه حل، با یک لینک آنلاین همراه است که به شما اجازه میدهد همان لحظه آن را در یک زمین بازی کد در codeguppy.com اجرا کنید.
اگر وقت دارید، به شما توصیه میکنم که چالشها را خودتان حل کنید و سپس راه حل خود را با راه حل ارائهشده مقایسه کنید. اگر زمانتان محدود است، فقط راه حلها را مرور کنید!
نکته: کد از یک تابع خاص codeguppy به نام println() برای چاپ نتایج استفاده میکند. اگر میخواهید این راه حلها را خارج از codeguppy.com اجرا کنید، تنها لازم است println() را با console.log() جایگزین کنید و سپس با استفاده از ابزار کنسول مرورگر خود یا node.js آنها را اجرا کنید.

چالش کدنویسی شماره 1 : چاپ اعداد از 1 تا 10
for(var i = 1; i <= 10; i++)
{
println(i);
}
چالش کدنویسی شماره 2 : اعداد فرد کمتر از 100 را چاپ کنید.
for(var i = 1; i <= 100; i += 2)
{
println(i);
}
چالش کدنویسی شماره 3 : جدول ضرب را با عدد 7 چاپ کنید.
for(var i = 1; i <= 10; i++)
{
var row = "7 * " + i + " = " + 7 * i;
println(row);
}
چالش کدنویسی شماره 4 : تمام جدولضربها را با اعداد از 1 تا 10 چاپ کنید.
for(var i = 1; i <= 10; i++)
{
printTable(i);
println("");
}
function printTable(n)
{
for(var i = 1; i <= 10; i++)
{
var row = n + " * " + i + " = " + n * i;
println(row);
}
}
چالش کدنویسی شماره 5 : مجموع اعداد از 1 تا 10 را محاسبه کنید.
var sum = 0;
for(var i = 1; i <= 10; i++)
{
sum += i;
}
println(sum);
چالش کدنویسی شماره 6 : 10 را محاسبه کنید!
var prod = 1;
for(var i = 1; i <= 10; i++)
{
prod *= i;
}
println(prod);
چالش کدنویسی شماره 7 : مجموع اعداد فرد بزرگتر از 10 و کمتر از 30 را محاسبه کنید.
var sum = 0;
for(var i = 11; i <= 30; i += 2)
{
sum += i;
}
println(sum);
چالش کدنویسی شماره 8 : تابعی ایجاد کنید که درجه سانتیگراد را به فارنهایت تبدیل کند.
function celsiusToFahrenheit(n)
{
return n * 1.8 + 32;
}
var r = celsiusToFahrenheit(20);
println(r);
چالش کدنویسی شماره 9 : تابعی ایجاد کنید که درجه فارنهایت را به سانتیگراد تبدیل کند.
function fahrenheitToCelsius(n)
{
return (n - 32) / 1.8;
}
var r = fahrenheitToCelsius(68);
println(r);
چالش کدنویسی شماره 10 : مجموع اعداد در یک آرایه (array) از اعداد را محاسبه کنید.
function sumArray(ar)
{
var sum = 0;
for(var i = 0; i < ar.length; i++)
{
sum += ar[i];
}
return sum;
}
var ar = [2, 3, -1, 5, 7, 9, 10, 15, 95];
var sum = sumArray(ar);
println(sum);
چالش کدنویسی شماره 11 : میانگین اعداد موجود در یک آرایه (array) از اعداد را محاسبه کنید.
function averageArray(ar)
{
var n = ar.length;
var sum = 0;
for(var i = 0; i < n; i++)
{
sum += ar[i];
}
return sum / n;
}
var ar = [1, 3, 9, 15, 90];
var avg = averageArray(ar);
println("Average: ", avg);
چالش کدنویسی شماره 12 : تابعی ایجاد کنید که آرایهای از اعداد را دریافت کند و آرایهای را که فقط شامل اعداد مثبت باشد برگرداند.
راه حل 1 :
function getPositives(ar)
{
var ar2 = [];
for(var i = 0; i < ar.length; i++)
{
var el = ar[i];
if (el >= 0)
{
ar2.push(el);
}
}
return ar2;
}
var ar = [-5, 10, -3, 12, -9, 5, 90, 0, 1];
var ar2 = getPositives(ar);
println(ar2);
چالش کدنویسی شماره 12 : تابعی ایجاد کنید که آرایهای از اعداد را دریافت کند و آرایهای را که فقط شامل اعداد مثبت باشد برگرداند.
راه حل 2 :
function getPositives(ar)
{
var ar2 = [];
for(var el of ar)
{
if (el >= 0)
{
ar2.push(el);
}
}
return ar2;
}
var ar = [-5, 10, -3, 12, -9, 5, 90, 0, 1];
var ar2 = getPositives(ar);
println(ar2);
چالش کدنویسی شماره 12 : تابعی ایجاد کنید که آرایهای از اعداد را دریافت کند و آرایهای را که فقط شامل اعداد مثبت باشد برگرداند.
راه حل 3 :
function getPositives(ar)
{
return ar.filter(el => el >= 0);
}
var ar = [-5, 10, -3, 12, -9, 5, 90, 0, 1];
var ar2 = getPositives(ar);
println(ar2);
چالش کدنویسی شماره 13 : بالاترین عدد را در یک آرایه از اعداد بیابید.
function findMax(ar)
{
var max = ar[0];
for(var i = 0; i < ar.length; i++)
{
if (ar[i] > max)
{
max = ar[i];
}
}
return max;
}
var ar = [-5, 10, -3, 12, -9, 5, 90, 0, 1];
var max = findMax(ar);
println("Max: ", max);
چالش کدنویسی شماره 14 : 10 عدد اول فیبوناچی را بدون بازگشت (recursion) چاپ کنید.
var f0 = 0;
println(f0);
var f1 = 1;
println(f1);
for(var i = 2; i < 10; i++)
{
var fi = f1 + f0;
println(fi);
f0 = f1;
f1 = fi;
}
چالش کدنویسی شماره 15 : تابعی ایجاد کنید که nمین عدد فیبوناچی را با استفاده از تابع بازگشت (recursion) پیدا کند.
function findFibonacci(n)
{
if (n == 0)
return 0;
if (n == 1)
return 1;
return findFibonacci(n - 1) + findFibonacci(n - 2);
}
var n = findFibonacci(10);
println(n);
چالش کدنویسی شماره 16 : تابعی ایجاد کنید که یک عدد بولی (Boolean) را برمیگرداند و مشخص میکند که آیا عدد اول است یا خیر.
function isPrime(n)
{
if (n < 2)
return false;
if (n == 2)
return true;
var maxDiv = Math.sqrt(n);
for(var i = 2; i <= maxDiv; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
println(2, " is prime? ", isPrime(2));
println(3, " is prime? ", isPrime(3));
println(4, " is prime? ", isPrime(4));
println(5, " is prime? ", isPrime(5));
println(9, " is prime? ", isPrime(9));
چالش کدنویسی شماره 17 : مجموع ارقام یک عدد صحیح مثبت را محاسبه کنید.
function sumDigits(n)
{
var s = n.toString();
var sum = 0;
for(var char of s)
{
var digit = parseInt(char);
sum += digit;
}
return sum;
}
var sum = sumDigits(1235231);
println("Sum: ", sum);
چالش کدنویسی شماره 18 : نخستین 100 عدد اول را چاپ کنید.
printPrimes(100);
// Function prints the first nPrimes numbers
function printPrimes(nPrimes)
{
var n = 0;
var i = 2;
while(n < nPrimes)
{
if (isPrime(i))
{
println(n, " --> ", i);
n++;
}
i++;
}
}
// Returns true if a number is prime
function isPrime(n)
{
if (n < 2)
return false;
if (n == 2)
return true;
var maxDiv = Math.sqrt(n);
for(var i = 2; i <= maxDiv; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
چالش کدنویسی شماره 19 : تابعی ایجاد کنید که نخستین اعداد اول “nPrimes” که بزرگتر از یک عدد خاص “startAt” هستند را در یک آرایه برگرداند.
println(getPrimes(10, 100));
function getPrimes(nPrimes, startAt)
{
var ar = [];
var i = startAt;
while(ar.length < nPrimes)
{
if (isPrime(i))
{
ar.push(i);
}
i++;
}
return ar;
}
// Returns true if a number is prime
function isPrime(n)
{
if (n < 2)
return false;
if (n == 2)
return true;
var maxDiv = Math.sqrt(n);
for(var i = 2; i <= maxDiv; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
چالش کدنویسی شماره 20 : یک آرایه را به سمت left 1 بچرخانید.
var ar = [1, 2, 3];
rotateLeft(ar);
println(ar);
function rotateLeft(ar)
{
var first = ar.shift();
ar.push(first);
}
چالش کدنویسی شماره 21 : یک آرایه را به سمت right 1 بچرخانید.
var ar = [1, 2, 3];
rotateRight(ar);
println(ar);
function rotateRight(ar)
{
var last = ar.pop();
ar.unshift(last);
}
چالش کدنویسی شماره 22 : یک آرایه را معکوس (Reverse) کنید.
var ar = [1, 2, 3];
var ar2 = reverseArray(ar);
println(ar2);
function reverseArray(ar)
{
var ar2 = [];
for(var i = ar.length - 1; i >= 0; i--)
{
ar2.push(ar[i]);
}
return ar2;
}
چالش کدنویسی شماره 23 : یک رشته (string) را معکوس کنید.
var s = reverseString("JavaScript");
println(s);
function reverseString(s)
{
var s2 = "";
for(var i = s.length - 1; i >= 0; i--)
{
var char = s[i];
s2 += char;
}
return s2;
}
چالش کدنویسی شماره 24 : تابعی ایجاد کنید که دو آرایه را ادغام کرده و نتیجه را به عنوان یک آرایه جدید برگرداند.
var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];
var ar = mergeArrays(ar1, ar2);
println(ar);
function mergeArrays(ar1, ar2)
{
var ar = [];
for(let el of ar1)
{
ar.push(el);
}
for(let el of ar2)
{
ar.push(el);
}
return ar;
}
چالش کدنویسی شماره 25 : تابعی ایجاد کنید که دو آرایه از اعداد را به عنوان آرگومان (argument) دریافت کند و یک آرایه متشکل از تمام اعدادی که در آرایه اول یا آرایه دوم هستند، اما در هر دو آرایه به طور همزمان وجود ندارند، برگرداند.
var ar1 = [1, 2, 3, 10, 5, 3, 14];
var ar2 = [1, 4, 5, 6, 14];
var ar = mergeExclusive(ar1, ar2);
println(ar);
function mergeExclusive(ar1, ar2)
{
var ar = [];
for(let el of ar1)
{
if (!ar2.includes(el))
{
ar.push(el);
}
}
for(let el of ar2)
{
if (!ar1.includes(el))
{
ar.push(el);
}
}
return ar;
}
چالش کدنویسی شماره 26 : تابعی ایجاد کنید که دو آرایه را دریافت کند و یک آرایه را با عناصری که در آرایه اول هستند ولی در آرایه دوم نیستند، برگرداند.
var ar1 = [1, 2, 3, 10, 5, 3, 14];
var ar2 = [-1, 4, 5, 6, 14];
var ar = mergeLeft(ar1, ar2);
println(ar);
function mergeLeft(ar1, ar2)
{
var ar = [];
for(let el of ar1)
{
if (!ar2.includes(el))
{
ar.push(el);
}
}
return ar;
}
چالش کدنویسی شماره 27 : تابعی ایجاد کنید که آرایهای از اعداد را به عنوان آرگومان دریافت کند و یک آرایه جدید با عناصر متفاوت بازگرداند.
راه حل 1 :
var ar = getDistinctElements([1, 2, 3, 6, -1, 2, 9, 7, 10, -1, 100]);
println(ar);
function getDistinctElements(ar)
{
var ar2 = [];
for(let i = 0; i < ar.length; i++)
{
if (!isInArray(ar[i], ar2))
{
ar2.push(ar[i]);
}
}
return ar2;
}
function isInArray(n, ar)
{
for(let i = 0; i < ar.length; i++)
{
if (ar[i] === n)
return true;
}
return false;
}
چالش کدنویسی شماره 27 : تابعی ایجاد کنید که آرایهای از اعداد را به عنوان آرگومان دریافت کند و یک آرایه جدید با عناصر متفاوت بازگرداند.
راه حل 2 :
var ar = getDistinctElements([1, 2, 3, 6, -1, 2, 9, 7, 10, -1, 100]);
println(ar);
function getDistinctElements(ar)
{
var ar2 = [];
var lastIndex = ar.length - 1;
for(let i = 0; i <= lastIndex; i++)
{
if (!isInArray(ar[i], ar, i + 1, lastIndex))
{
ar2.push(ar[i]);
}
}
return ar2;
}
function isInArray(n, ar, fromIndex, toIndex)
{
for(var i = fromIndex; i <= toIndex; i++)
{
if (ar[i] === n)
return true;
}
return false;
}
چالش کدنویسی شماره 28 : مجموع نخستین 100 عدد اول را محاسبه کنید.
var n = 10;
println("Sum of first ", n, " primes is ", sumPrimes(10));
function sumPrimes(n)
{
var foundPrimes = 0;
var i = 2;
var sum = 0;
while(foundPrimes < n)
{
if (isPrime(i))
{
foundPrimes++;
sum += i;
}
i++;
}
return sum;
}
// Returns true if number n is prime
function isPrime(n)
{
if (n < 2)
return false;
if (n == 2)
return true;
var maxDiv = Math.sqrt(n);
for(var i = 2; i <= maxDiv; i++)
{
if (n % i === 0)
{
return false;
}
}
return true;
}
چالش کدنویسی شماره 29 : فاصله بین نخستین 100 عدد اول را چاپ کنید.
printDistances(100);
// Print distances between the first n prime numbers
function printDistances(n)
{
var lastPrime = 2;
var i = lastPrime + 1;
var foundPrimes = 1;
while(foundPrimes < n)
{
if (isPrime(i))
{
println(i - lastPrime, "\t", i, " - ", lastPrime);
foundPrimes++;
lastPrime = i;
}
i++;
}
}
// Returns true if number n is prime
function isPrime(n)
{
if (n < 2)
return false;
if (n == 2)
return true;
var maxDiv = Math.sqrt(n);
for(var i = 2; i <= maxDiv; i++)
{
if (n % i === 0)
{
return false;
}
}
return true;
}
چالش کدنویسی شماره 30 (الف) : تابعی ایجاد کنید که دو عدد مثبت با اندازه نامعین اضافه کند. اعداد به صورت string دریافت میشوند و نتیجه نیز باید به صورت string دریافت شود.
راه حل 1 :
var n1 = "2909034221912398942349";
var n2 = "1290923909029309499";
var sum = add(n1, n2);
println(n1, "\n", n2, "\n", sum);
function add(sNumber1, sNumber2)
{
var s = "";
var carry = 0;
var maxSize = Math.max(sNumber1.length, sNumber2.length);
for(var i = 0; i < maxSize; i++)
{
var digit1 = digitFromRight(sNumber1, i);
var digit2 = digitFromRight(sNumber2, i);
var sum = digit1 + digit2 + carry;
var digitSum = sum % 10;
carry = sum >= 10 ? 1 : 0;
s = digitSum.toString() + s;
}
if (carry > 0)
s = carry + s;
return s;
}
function digitFromRight(s, digitNo)
{
if (digitNo >= s.length)
return 0;
var char = s[ s.length - 1 - digitNo ];
return parseInt(char);
}
چالش کدنویسی شماره 30 (ب) : تابعی ایجاد کنید که دو عدد مثبت با اندازه نامعین اضافه کند. اعداد به صورت string دریافت میشوند و نتیجه نیز باید به صورت string دریافت شود.
راه حل 2 :
var n1 = "2909034221912398942349";
var n2 = "1290923909029309499";
var sum = add(n1, n2);
println(n1);
println(n2);
println(sum);
function add(sNumber1, sNumber2)
{
var maxSize = Math.max(sNumber1.length, sNumber2.length);
var s1 = sNumber1.padStart(maxSize, "0");
var s2 = sNumber2.padStart(maxSize, "0");
var s = "";
var carry = 0;
for(var i = maxSize - 1; i >= 0; i--)
{
var digit1 = parseInt(s1[i]);
var digit2 = parseInt(s2[i]);
var sum = digit1 + digit2 + carry;
var digitSum = sum % 10;
carry = sum >= 10 ? 1 : 0;
s = digitSum.toString() + s;
}
if (carry > 0)
s = carry + s;
return s;
}
چالش کدنویسی شماره 31 (الف) : تابعی ایجاد کنید که تعداد کلمات یک متن را برگرداند.
// Solution 1
function countWords(text)
{
var wasSeparator = true;
var words = 0;
for(var c of text)
{
// if current character is separator then advance and
// set that the previous character was separator
if (isSeparator(c))
{
wasSeparator = true;
continue;
}
// if current character is not separator
// ... but if previous was separator...
if (wasSeparator)
{
words++;
wasSeparator = false;
}
}
return words;
}
function isSeparator(c)
{
var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?"];
return separators.includes(c);
}
println(countWords(""));
println(countWords(" "));
println(countWords("JavaScript!!! "));
println(countWords(" JavaScript"));
println(countWords(" JavaScript is cool "));
println(countWords("I like to learn JavaScript with codeguppy"));
چالش کدنویسی شماره 31 (ب) : تابعی ایجاد کنید که تعداد کلمات یک متن را برگرداند.
// Solution 2
function countWords(text)
{
var words = 0;
if (text.length > 0 && !isSeparator(text[0]))
words++;
for(var i = 1; i < text.length; i++)
{
var currChr = text[i];
var prevChr = text[i - 1];
if (!isSeparator(currChr) && isSeparator(prevChr))
{
words++;
}
}
return words;
}
function isSeparator(c)
{
var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?"];
return separators.includes(c);
}
println(countWords(""));
println(countWords(" "));
println(countWords("JavaScript!!! "));
println(countWords(" JavaScript"));
println(countWords(" JavaScript is cool "));
println(countWords("I like to learn JavaScript with codeguppy"));
چالش کدنویسی شماره 32 : تابعی ایجاد کنید که حرف اول هر کلمه را در یک متن به حروف بزرگ تبدیل کند.
println(captializeWords("Create a function that will capitalize the first letter of each word in a text"));
function captializeWords(text)
{
var text2 = "";
for(var i = 0; i < text.length; i++)
{
var currChr = text[i];
var prevChr = i > 0 ? text[i - 1] : " ";
if (!isSeparator(currChr) && isSeparator(prevChr))
{
currChr = currChr.toUpperCase();
}
text2 += currChr;
}
return text2;
}
function isSeparator(c)
{
var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?"];
return separators.includes(c);
}
چالش کدنویسی شماره 33 : مجموع اعداد دریافتشده در یک رشته محدود شده با کاما را محاسبه کنید.
println(sumCSV("1.5, 2.3, 3.1, 4, 5.5, 6, 7, 8, 9, 10.9"));
function sumCSV(s)
{
var ar = s.split(",");
var sum = 0;
for(var n of ar)
{
sum += parseFloat(n);
}
return sum;
}
چالش کدنویسی شماره 34 : تابعی ایجاد کنید که آرایهای با کلمات داخل یک متن برگرداند.
var text = "Create a function, that will return an array (of string), with the words inside the text";
println(getWords(text));
function getWords(text)
{
let startWord = -1;
let ar = [];
for(let i = 0; i <= text.length; i++)
{
let c = i < text.length ? text[i] : " ";
if (!isSeparator(c) && startWord < 0)
{
startWord = i;
}
if (isSeparator(c) && startWord >= 0)
{
let word = text.substring(startWord, i);
ar.push(word);
startWord = -1;
}
}
return ar;
}
function isSeparator(c)
{
var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?", "(", ")"];
return separators.includes(c);
}
چالش کدنویسی شماره 35 : یک تابع برای تبدیل یک متن CSV به یک آرایه bi-dimensional ایجاد کنید.
var data = "John;Smith;954-000-0000\nMich;Tiger;305-000-0000\nMonique;Vasquez;103-000-0000";
var ar = csvToArray(data);
println(JSON.stringify(ar));
function csvToArray(data)
{
var arLines = data.split("\n");
for(var i = 0; i < arLines.length; i++)
{
var arLine = arLines[i].split(";");
arLines[i] = arLine;
}
return arLines;
}
چالش کدنویسی شماره 36 : تابعی ایجاد کنید که یک رشته را به آرایهای از کاراکترها تبدیل کند.
Coding challenge #36. Create a function that converts a string to an array of characters
https://codeguppy.com/code.html?XCD9vmSQ34HrascysDBL
چالش کدنویسی شماره 37 : تابعی ایجاد کنید که یک string را به یک آرایه شامل کدهای ASCII از هر کاراکتر را تبدیل کند.
println(getCharCodes("I like JavaScript"));
function getCharCodes(s)
{
var ar = [];
for(var i = 0; i < s.length; i++)
{
var code = s.charCodeAt(i);
ar.push(code);
}
return ar;
}
چالش کدنویسی شماره 38 : تابعی ایجاد کنید که یک آرایه شامل کدهای ASCII را به یک string تبدیل کند.
println(codesToString([73,32,108,105,107,101,32,74,97,118,97,83,99,114,105,112,116]));
function codesToString(ar)
{
return String.fromCharCode(...ar);
}
چالش کدنویسی شماره 39 : Caesar cypher را پیادهسازی کنید.
var text = "I LOVE JAVASCRIPT";
var textEnc = encrypt(text, 13);
var textDec = decrypt(textEnc, 13);
println(text);
println(textEnc);
println(textDec);
// Decrypt a message by using the same encrypt function
// ... but using the inverse of the key (e.g. rotate in the other direction)
function decrypt(msg, key)
{
return encrypt(msg, key * -1);
}
// Function will implement Caesar Cipher to
// encrypt / decrypt the msg by shifting the letters
// of the message acording to the key
function encrypt(msg, key)
{
var encMsg = "";
for(var i = 0; i < msg.length; i++)
{
var code = msg.charCodeAt(i);
// Encrypt only letters in 'A' ... 'Z' interval
if (code >= 65 && code <= 65 + 26 - 1)
{
code -= 65;
code = mod(code + key, 26);
code += 65;
}
encMsg += String.fromCharCode(code);
}
return encMsg;
}
// Modulo function: n mod p
function mod(n, p)
{
if ( n < 0 )
n = p - Math.abs(n) % p;
return n % p;
}
چالش کدنویسی شماره 40 : الگوریتم bubble sort را برای آرایهای از اعداد پیادهسازی کنید.
var ar = [23, 1000, 1, -1, 8, 3];
println(ar);
bubbleSort(ar);
println(ar);
function bubbleSort(ar)
{
var shouldSort = true;
var length = ar.length;
while(shouldSort)
{
shouldSort = false;
length--;
for(var i = 0; i < length; i++)
{
var a = ar[i];
if ( a > ar[i+1] )
{
ar[i] = ar[i+1];
ar[i+1] = a;
shouldSort = true;
}
}
}
}
چالش کدنویسی شماره 41 : یک تابع برای محاسبه فاصله بین دو نقطه تعریفشده با مختصات x و y ایجاد کنید.
println(getDistance(100, 100, 400, 300));
function getDistance(x1, y1, x2, y2)
{
var l1 = x2 - x1;
var l2 = y2 - y1;
return Math.sqrt(l1 * l1 + l2 * l2);
}
چالش کدنویسی شماره 42 : تابعی ایجاد کنید که یک مقدار بولی (Boolean) را برگرداند که نشان دهد دو دایره با مختصات مرکز و شعاع از قبل تعریفشده متقاطع هستند یا خیر.
println(collisionCircleCircle(200, 200, 100, 300, 300, 50));
function collisionCircleCircle(circle1X, circle1Y, circle1R, circle2X, circle2Y, circle2R)
{
return getDistance(circle1X, circle1Y, circle2X, circle2Y) <= circle1R + circle2R;
}
// Calculate the distance between the two specified points
function getDistance(x1, y1, x2, y2)
{
var l1 = x2 - x1;
var l2 = y2 - y1;
return Math.sqrt(l1 * l1 + l2 * l2);
}
چالش کدنویسی شماره 43 : تابعی ایجاد کنید که یک آرایه bi-dimensional را به عنوان آرگومان و یک عدد دریافت کند و ستون مشخصشده با عدد را به عنوان یک آرایه unidimensional استخراج کند.
var ar = [ ["John", 120],
["Jane", 115],
["Thomas", 123],
["Mel", 112],
["Charley", 122]
];
var numbers = extractCol(ar, 1);
println(numbers);
function extractCol(ar, colNo)
{
var arCol = [];
for(var i = 0; i < ar.length; i++)
{
arCol.push(ar[i][colNo]);
}
return arCol;
}
چالش کدنویسی شماره 44 : تابعی ایجاد کنید که یک string شامل یک عدد باینری را به عدد معمولی تبدیل کند.
println(binaryToNumber("11111111"));
function binaryToNumber(sBinary)
{
return parseInt(sBinary, 2);
}
چالش کدنویسی شماره 45 : یک تابع برای محاسبه مجموع همه اعداد در یک آرایه دندانهدار (jagged) ایجاد کنید. (آرایه شامل اعداد یا دیگر آرایههای اعداد، در تعداد نامحدودی از لولهای مختلف است).
var ar = [1, 2, [15, [23], [5, 12]], [100]];
println(sumArray(ar));
function sumArray(ar)
{
var sum = 0;
for(var el of ar)
{
if (Array.isArray(el))
{
el = sumArray(el);
}
sum += el;
}
return sum;
}
چالش کدنویسی شماره 46 (الف) : بالاترین عدد را در یک آرایه اعداد یا آرایه دندانهدار اعداد پیدا کنید.
// Solution 1
var ar = [2, 4, 10, [12, 4, [100, 99], 4], [3, 2, 99], 0];
var max = findMax(ar);
println("Max = ", max);
// Use recursion to find the maximum numeric value in an array of arrays
function findMax(ar)
{
var max = -Infinity;
// Cycle through all the elements of the array
for(var i = 0; i < ar.length; i++)
{
var el = ar[i];
// If an element is of type array then invoke the same function
// to find out the maximum element of that subarray
if ( Array.isArray(el) )
{
el = findMax( el );
}
if ( el > max )
{
max = el;
}
}
return max;
}
چالش کدنویسی شماره 46 (ب) : بالاترین عدد را در یک آرایه اعداد یا آرایه دندانهدار اعداد پیدا کنید.
// Solution 2
var ar = [2, 4, 10, [12, 4, [100, 99], 4], [3, 2, 99], 0];
var max = findMax(ar);
println("Max = ", max);
// Use a stack to find the maximum numeric value in an array of arrays
function findMax(arElements)
{
var max = -Infinity;
// This is the stack on which will put the first array and then
// all the other sub-arrays that we find as we traverse an array
var arrays = [];
arrays.push(arElements);
// Loop as long as are arrays added to the stack for processing
while(arrays.length > 0)
{
// Extract an array from the stack
ar = arrays.pop();
// ... and loop through its elements
for(var i = 0; i < ar.length; i++)
{
var el = ar[i];
// If an element is of type array, we'll add it to stack
// to be processed later
if ( Array.isArray(el) )
{
arrays.push(el);
continue;
}
if ( el > max )
{
max = el;
}
}
}
return max;
}
چالش کدنویسی شماره 47 : یک آرایه دندانهدار از اعداد یا آرایههای دیگر آرایهها را در یک آرایه جدید Deep copy کنید.
var ar1 = [2, 4, 10, [12, 4, [100, 99], 4], [3, 2, 99], 0];
var ar2 = copyArray(ar1);
println(ar2);
function copyArray(ar)
{
var ar2 = [];
for(var el of ar)
{
if (Array.isArray(el))
{
el = copyArray(el);
}
ar2.push(el);
}
return ar2;
}
چالش کدنویسی شماره 48 : یک تابع برای بازگرداندن طولانیترین کلمه (های) یک string ایجاد کنید.
var text = "Create a function to return the longest word(s) in a sentance.";
println(getLongestWords(text));
function getLongestWords(text)
{
var words = getWords(text);
var maxSize = 0;
var maxPositions = [];
for(var i = 0; i < words.length; i++)
{
var currWordSize = words[i].length;
if (currWordSize > maxSize)
{
maxSize = currWordSize;
maxPositions = [ i ];
}
else if (currWordSize === maxSize)
{
maxPositions.push(i);
}
}
return getElements(words, maxPositions);
}
// Get only the elements from specified positions from the array
function getElements(ar, arPositions)
{
var arNew = [];
for(var pos of arPositions)
{
arNew.push(ar[pos]);
}
return arNew;
}
// Returns an array with the words from specified text
function getWords(text)
{
let startWord = -1;
let ar = [];
for(let i = 0; i <= text.length; i++)
{
let c = i < text.length ? text[i] : " ";
if (!isSeparator(c) && startWord < 0)
{
startWord = i;
}
if (isSeparator(c) && startWord >= 0)
{
let word = text.substring(startWord, i);
ar.push(word);
startWord = -1;
}
}
return ar;
}
function isSeparator(c)
{
var separators = [" ", "\t", "\n", "\r", ",", ";", ".", "!", "?", "(", ")"];
return separators.includes(c);
}
چالش کدنویسی شماره 49 : آرایهای از string ها را Shuffle کنید.
var ar = ["Shuffle", "an", "array", "of", "strings"];
println(shuffleArray(ar));
// Shuffle array implemented using Fisher–Yates shuffle algorithm
function shuffleArray(ar)
{
for(var i = ar.length - 1; i > 0; i--)
{
var j = randomInt(0, i - 1);
var t = ar[i];
ar[i] = ar[j];
ar[j] = t;
}
return ar;
}
// Get a random int between min and max (both included)
function randomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1) ) + min;
}
چالش کدنویسی شماره 50 : تابعی ایجاد کنید که n را به عنوان آرگومان دریافت کند و آرایهای از n عدد تصادفی منحصر به فرد از 1 تا n را برگرداند.
println(getRandomNumbers(10));
function getRandomNumbers(n)
{
var ar = [];
for(var i = 1; i <= n; i++)
{
ar.push(i);
}
shuffleArray(ar);
return ar;
}
// Shuffle array implemented using Fisher–Yates shuffle algorithm
function shuffleArray(ar)
{
for(var i = ar.length - 1; i > 0; i--)
{
var j = randomInt(0, i - 1);
var t = ar[i];
ar[i] = ar[j];
ar[j] = t;
}
return ar;
}
// Get a random int between min and max (both included)
function randomInt(min, max)
{
return Math.floor(Math.random() * (max - min + 1) ) + min;
}
چالش کدنویسی شماره 51 : میزان تکرار کاراکترهای درون یک string را پیدا کنید. نتیجه را به صورت آرایهای از object ها برگردانید. هر object باید دارای 2 فیلد باشد: کاراکتر و تعداد تکرارها.
var ar = getCharFrequency("Find the frequency of characters inside a string");
println(JSON.stringify(ar));
function getCharFrequency(text)
{
var ar = [];
for(var chr of text)
{
updateFrequency(ar, chr);
}
return ar;
}
function updateFrequency(ar, chr)
{
for(var el of ar)
{
if (el.chr === chr)
{
el.count++;
}
}
ar.push({ chr : chr, count : 1 });
}
چالش کدنویسی شماره 52 : محاسبه فیبوناچی (500) با دقت بالا (تمام ارقام اعشار)
println(fibonacci(500));
function fibonacci(n)
{
if (n === 0)
return "0";
if (n === 1)
return "1";
var n1 = "0";
var n2 = "1";
for(var i = 2; i <= n; i++)
{
var sum = add(n1, n2);
n1 = n2;
n2 = sum;
}
return n2;
}
function add(sNumber1, sNumber2)
{
var maxSize = Math.max(sNumber1.length, sNumber2.length);
var s1 = sNumber1.padStart(maxSize, "0");
var s2 = sNumber2.padStart(maxSize, "0");
var s = "";
var carry = 0;
for(var i = maxSize - 1; i >= 0; i--)
{
var digit1 = parseInt(s1[i]);
var digit2 = parseInt(s2[i]);
var sum = digit1 + digit2 + carry;
var digitSum = sum % 10;
carry = sum >= 10 ? 1 : 0;
s = digitSum.toString() + s;
}
if (carry > 0)
s = carry + s;
return s;
}
چالش کدنویسی شماره 53 : 70 را با دقت بالا محاسبه کنید! (تمام ارقام)
println(factorial(70));
// Calculate factorial(n) ... using big number calculations
function factorial(n)
{
var prod = "1";
for(var i = 2; i <= n; i++)
{
prod = mult(prod, i.toString());
}
return prod;
}
// Multiplies sNumber1 * sNumber2
// Each number is provided as string
function mult(sNumber1, sNumber2)
{
// Calculate partial results according to multiplication algorithm
var partialResults = [];
for(var i = sNumber2.length - 1; i >= 0; i--)
{
var digit = parseInt(sNumber2[i]);
var partialResult = multDigit(sNumber1, digit);
partialResult += "0".repeat(partialResults.length);
partialResults.push(partialResult);
}
// Sum partial results to obtain the product
var sum = "";
for(var r of partialResults)
{
sum = add(sum, r);
}
return sum;
}
// Multiplies number sNumber (as string) with a single digit number
function multDigit(sNumber, digit)
{
var p = "";
var carry = 0;
for(var i = sNumber.length - 1; i >= 0; i--)
{
var numberDigit = parseInt(sNumber[i]);
var prod = digit * numberDigit + carry;
var prodDigit = prod % 10;
carry = Math.floor(prod / 10);
p = prodDigit.toString() + p;
}
if (carry > 0)
p = carry + p;
return p;
}
function add(sNumber1, sNumber2)
{
var maxSize = Math.max(sNumber1.length, sNumber2.length);
var s1 = sNumber1.padStart(maxSize, "0");
var s2 = sNumber2.padStart(maxSize, "0");
var s = "";
var carry = 0;
for(var i = maxSize - 1; i >= 0; i--)
{
var digit1 = parseInt(s1[i]);
var digit2 = parseInt(s2[i]);
var sum = digit1 + digit2 + carry;
var digitSum = sum % 10;
carry = sum >= 10 ? 1 : 0;
s = digitSum.toString() + s;
}
if (carry > 0)
s = carry + s;
return s;
}
اگر در github اکانت دارید، میتوانید کل repository را با چالشهای لینک زیر fork کنید.
https://github.com/CodeGuppyPrograms/CodingChallenges
امیدوارم از مرور این چالشهای کدنویسی لذت برده باشید. اگر آنها را دوست دارید و میخواهید چالشهای بیشتری برای مبتدیان دریافت کنید، لطفا درخوست خود را در کامنتها مطرح کنید!
کدنویس شدنتان مبارک!
منبع: hackernoon نویسنده: codeguppy
Leave feedback about this