3 مهر 1402
تهران، خیابان آزادی، تقاطع قریب
برنامه نویسی نرم افزار

چالش‌های کدنویسی کاربردی جاوا اسکریپت برای مبتدیان

چالش‌های کدنویسی کاربردی جاوا اسکریپت برای مبتدیان

سلام بر تو ای کدنویس مبتدی جاوا اسکریپت! در این مقاله تعدادی از چالش‌های کدنویسی را به شما پیشنهاد می‌کنم. این کار به شما کمک می‌کند ساختارها و الگوریتم‌های اصلی جاوا اسکریپت را تمرین کنید.

این چالش‌های کدنویسی، برای مبتدیان در نظر گرفته شده است. بنابراین راه حل‌های پیشنهادی تنها با استفاده از عناصر برنامه‌نویسی ساده و کلاسیک اجرا می‌شوند. هر راه حل، با یک لینک آنلاین همراه است که به شما اجازه می‌دهد همان لحظه آن را در یک زمین بازی کد در codeguppy.com اجرا کنید.

اگر وقت دارید، به شما توصیه می‌کنم که چالش‌ها را خودتان حل کنید و سپس راه حل خود را با راه حل ارائه‌شده مقایسه کنید. اگر زمانتان محدود است، فقط راه حل‌ها را مرور کنید!

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

تمرین های کدنویسی جاوا اسکریپت برای مبتدیان

چالش کدنویسی شماره 1 : چاپ اعداد از 1 تا 10

https://codeguppy.com/code.html?mrgCtLGA90Ozr0Otrs5Z

				
					for(var i = 1; i <= 10; i++)
{
    println(i);
}
				
			

چالش کدنویسی شماره 2 : اعداد فرد کمتر از 100 را چاپ کنید.

https://codeguppy.com/code.html?eDLA5XPp3bPxP79H2jKT

				
					for(var i = 1; i <= 100; i += 2)
{
    println(i);
}
				
			

چالش کدنویسی شماره 3 : جدول ضرب را با عدد 7 چاپ کنید.

https://codeguppy.com/code.html?fpnQzIhnGUUmCUZy1fyQ

				
					for(var i = 1; i <= 10; i++)
{
    var row = "7 * " + i + " = " + 7 * i;
    println(row);
}
				
			

چالش کدنویسی شماره 4 : تمام جدول‌ضرب‌ها را با اعداد از 1 تا 10 چاپ کنید.

https://codeguppy.com/code.html?78aD4mWSCzoNEVxOQ8tI

				
					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 را محاسبه کنید.

https://codeguppy.com/code.html?Vy6u9kki2hXM4YjsbpuN

				
					var sum = 0;

for(var i = 1; i <= 10; i++)
{
    sum += i;
}

println(sum);
				
			

چالش کدنویسی شماره 6 : 10 را محاسبه کنید!

https://codeguppy.com/code.html?IIuJX4gnXOndNu0VrywA

				
					var prod = 1;

for(var i = 1; i <= 10; i++)
{
    prod *= i;
}

println(prod);
				
			

چالش کدنویسی شماره 7 : مجموع اعداد فرد بزرگتر از 10 و کمتر از 30 را محاسبه کنید.

https://codeguppy.com/code.html?DcOffOyoIArmNZHVNM2u

				
					var sum = 0;

for(var i = 11; i <= 30; i += 2)
{
    sum += i;
}

println(sum);
				
			

چالش کدنویسی شماره 8 : تابعی ایجاد کنید که درجه سانتی‌گراد را به فارنهایت تبدیل کند.

https://codeguppy.com/code.html?oI5mWm6QIMRjY1m9XAmI

				
					function celsiusToFahrenheit(n)
{
    return n * 1.8 + 32;
}

var r = celsiusToFahrenheit(20);
println(r);
				
			

چالش کدنویسی شماره 9 : تابعی ایجاد کنید که درجه فارنهایت را به سانتی‌گراد تبدیل کند.

https://codeguppy.com/code.html?mhnf8DpPRqqgsBgbJNpz

				
					function fahrenheitToCelsius(n)
{
    return (n - 32) / 1.8;
}

var r = fahrenheitToCelsius(68);
println(r);
				
			

چالش کدنویسی شماره 10 : مجموع اعداد در یک آرایه (array) از اعداد را محاسبه کنید.

https://codeguppy.com/code.html?TteeVr0aj33ZyCLR685L

				
					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) از اعداد را محاسبه کنید.

https://codeguppy.com/code.html?7i9sje6FuJsI44cuncLh

				
					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 :

https://codeguppy.com/code.html?0eztj1v6g7iQLzst3Id3

				
					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 :

https://codeguppy.com/code.html?KefrPtrvJeMpQyrB8V2D

				
					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 :

https://codeguppy.com/code.html?qJBQubNA7z10n6pjYmB8

				
					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 : بالاترین عدد را در یک آرایه از اعداد بیابید.

https://codeguppy.com/code.html?THmQGgOMRUj6PSvEV8HD

				
					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) چاپ کنید.

https://codeguppy.com/code.html?rKOfPxHbVwxNWI2d8orH

				
					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) پیدا کند.

https://codeguppy.com/code.html?IneuIg9O0rRV8V76omBk

				
					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) را برمی‌گرداند و مشخص می‌کند که آیا عدد اول است یا خیر.

https://codeguppy.com/code.html?fRYsPEc2vcZTbIU8MKku

				
					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 : مجموع ارقام یک عدد صحیح مثبت را محاسبه کنید.

https://codeguppy.com/code.html?RHA714FYio8gWgmjWYPz

				
					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 عدد اول را چاپ کنید.

https://codeguppy.com/code.html?gnMVeOZXN6VhLekyvui8

				
					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” هستند را در یک آرایه برگرداند.

https://codeguppy.com/code.html?mTi7EdKrviwIn4bfrmM7

				
					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 بچرخانید.

https://codeguppy.com/code.html?MRmfvuQdZpHn0k03hITn

				
					var ar = [1, 2, 3];
rotateLeft(ar);
println(ar);

function rotateLeft(ar)
{
    var first = ar.shift();
    ar.push(first);
}
				
			

چالش کدنویسی شماره 21 : یک آرایه را به سمت right 1 بچرخانید.

https://codeguppy.com/code.html?fHfZqUmkAVUXKtRupmzZ

				
					var ar = [1, 2, 3];
rotateRight(ar);
println(ar);

function rotateRight(ar)
{
    var last = ar.pop();
    ar.unshift(last);
}
				
			

چالش کدنویسی شماره 22 : یک آرایه را معکوس (Reverse) کنید.

https://codeguppy.com/code.html?GZddBqBVFlqYrsxi3Vbu

				
					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) را معکوس کنید.

https://codeguppy.com/code.html?pGpyBz0dWlsj7KR3WnFF

				
					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 : تابعی ایجاد کنید که دو آرایه را ادغام کرده و نتیجه را به عنوان یک آرایه جدید برگرداند.

https://codeguppy.com/code.html?vcTkLxYTAbIflqdUKivc

				
					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) دریافت کند و یک آرایه متشکل از تمام اعدادی که در آرایه اول یا آرایه دوم هستند، اما در هر دو آرایه به طور همزمان وجود ندارند، برگرداند.

https://codeguppy.com/code.html?Y9gRdgrl6PPt4QxVs7vf

				
					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 : تابعی ایجاد کنید که دو آرایه را دریافت کند و یک آرایه را با عناصری که در آرایه اول هستند ولی در آرایه دوم نیستند، برگرداند.

https://codeguppy.com/code.html?bUduoyY6FfwV5nQGdXzH

				
					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 :

https://codeguppy.com/code.html?OkbtP1ZksGHXwqk7Jh3i

				
					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 :

https://codeguppy.com/code.html?NjGtyQdMP49QiaAkmwpU

				
					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 عدد اول را محاسبه کنید.

https://codeguppy.com/code.html?v0O9sBfnHbCi1StE2TxA

				
					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 عدد اول را چاپ کنید.

https://codeguppy.com/code.html?xKQEeKYF1LxZhDhwOH7V

				
					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 :

https://codeguppy.com/code.html?v5A0QBsdHaiAVA2CPN5y

				
					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 :

https://codeguppy.com/code.html?yMQXcPgfrYxuaIxqQmZc

				
					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 (الف) : تابعی ایجاد کنید که تعداد کلمات یک متن را برگرداند.

https://codeguppy.com/code.html?r4kwkcWiHfzQZkM1qrX4

				
					// 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 (ب) : تابعی ایجاد کنید که تعداد کلمات یک متن را برگرداند.

https://codeguppy.com/code.html?8pdZSfchSXNxBK1f7r7s

				
					// 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 : تابعی ایجاد کنید که حرف اول هر کلمه را در یک متن به حروف بزرگ تبدیل کند.

https://codeguppy.com/code.html?OJoMXT4GKasSfNeX4hjH

				
					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 : مجموع اعداد دریافت‌شده در یک رشته محدود شده با کاما را محاسبه کنید.

https://codeguppy.com/code.html?QL6H38rpqjGarwCfsbO3

				
					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 : تابعی ایجاد کنید که آرایه‌ای با کلمات داخل یک متن برگرداند.

https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf

				
					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 ایجاد کنید.

https://codeguppy.com/code.html?5Hqv93WXQ6OOjAYApLGw

				
					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 : تابعی ایجاد کنید که یک رشته را به آرایه‌ای از کاراکترها تبدیل کند.

https://codeguppy.com/code.html?XCD9vmSQ34HrascysDBL

				
					Coding challenge #36. Create a function that converts a string to an array of characters
https://codeguppy.com/code.html?XCD9vmSQ34HrascysDBL
				
			

چالش کدنویسی شماره 37 : تابعی ایجاد کنید که یک string را به یک آرایه شامل کدهای ASCII از هر کاراکتر را تبدیل کند.

https://codeguppy.com/code.html?suDlTrNYYmCpNJhZpPdB

				
					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 تبدیل کند.

https://codeguppy.com/code.html?QGWEPdBEVk4RFGn6UVhP

				
					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 را پیاده‌سازی کنید.

https://codeguppy.com/code.html?kextwiVVb9VwhKajJriG

				
					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 را برای آرایه‌ای از اعداد پیاده‌سازی کنید.

https://codeguppy.com/code.html?6bPnKHLhArSPdUPK2mqm

				
					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 ایجاد کنید.

https://codeguppy.com/code.html?mnAuF3BjhDaFwBtDUnI4

				
					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) را برگرداند که نشان دهد دو دایره با مختصات مرکز و شعاع از قبل تعریف‌شده متقاطع هستند یا خیر.

https://codeguppy.com/code.html?cTZiewHGAErNUjYRCE6f

				
					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 استخراج کند.

https://codeguppy.com/code.html?b22i9I5CUkFTdHF4Bod8

				
					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 شامل یک عدد باینری را به عدد معمولی تبدیل کند.

https://codeguppy.com/code.html?iDykr8pqeuTPgZjVAvWv

				
					println(binaryToNumber("11111111"));

function binaryToNumber(sBinary)
{
    return parseInt(sBinary, 2);
}
				
			

چالش کدنویسی شماره 45 : یک تابع برای محاسبه مجموع همه اعداد در یک آرایه دندانه‌دار (jagged) ایجاد کنید. (آرایه شامل اعداد یا دیگر آرایه‌های اعداد، در تعداد نامحدودی از لول‌های مختلف است).

https://codeguppy.com/code.html?3gu4jcQRpBQWu2EsJrv0

				
					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 (الف) : بالاترین عدد را در یک آرایه اعداد یا آرایه دندانه‌دار اعداد پیدا کنید.

https://codeguppy.com/code.html?oT5nrxux2yAgIRsuXBSK

				
					// 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 (ب) : بالاترین عدد را در یک آرایه اعداد یا آرایه دندانه‌دار اعداد پیدا کنید.

https://codeguppy.com/code.html?VvLiW0W3lwnMrbwC9epp

				
					// 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 کنید.

https://codeguppy.com/code.html?4eRqha7h7kjOLnDTyf00

				
					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 ایجاد کنید.

https://codeguppy.com/code.html?6O219iv12e5UaC30fcbG

				
					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 کنید.

https://codeguppy.com/code.html?EHvbHKy5uPvSKxsaeqWv

				
					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 را برگرداند.

https://codeguppy.com/code.html?GfCrzPkGSPKbvLuf6KyA

				
					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 فیلد باشد: کاراکتر و تعداد تکرارها.

https://codeguppy.com/code.html?e8wHQuJmeYCDKml5k07d

				
					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) با دقت بالا (تمام ارقام اعشار)

https://codeguppy.com/code.html?OD5GDYyCVo4wgTRCXzRU

				
					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 را با دقت بالا محاسبه کنید! (تمام ارقام)

https://codeguppy.com/code.html?m4AfgJmCABGNEvKlUNtM

				
					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

  • کیفیت
  • قیمت
  • خدمات

PROS

+
Add Field

CONS

+
Add Field
Choose Image
Choose Video
X