<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های ;{codeIsFun}</title>
        <link>https://virgool.io/feed/@codeisfun</link>
        <description>If you think you can do a thing or think you can&#039;t do a thing, you&#039;re right. Henry Ford</description>
        <language>fa</language>
        <pubDate>2026-06-07 08:54:09</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/79036/avatar/b3DTmu.png?height=120&amp;width=120</url>
            <title>;{codeIsFun}</title>
            <link>https://virgool.io/@codeisfun</link>
        </image>

                    <item>
                <title>چلنج باحال از سایت CodeWars شماره 2</title>
                <link>https://virgool.io/@codeisfun/%DA%86%D9%84%D9%86%D8%AC-%D8%A8%D8%A7%D8%AD%D8%A7%D9%84-%D8%A7%D8%B2-%D8%B3%D8%A7%DB%8C%D8%AA-codewars-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-2-zbpj94tpd5u6</link>
                <description>سلام و درود.فِرست تینگز فِرست حتما شماره 1 این مقاله رو بخوانید که با سبکش و اینکه کلا جریان این چلنجا چیه بیشتر آشنا بشید.یه چلنج کوتاه و مفید گیرم آمد گفتم با شما هم در میان بزارم خوبی چلنج های kyu 8 یا kyu 7 یا حتی kyu 6 اینه که باعث تقویت پایه زبان میشه معمولا زیاد وارد چیز های پیچیده نمیشه و به مرور زمان این باعث میشه که وقتی سراغ مبحث های پیشرفته میرید هم پایه قوی تری دارید و هم  قدرت حل مسئله شما بیشتره.چلنج شماره ۱برای حل این چلنج به چه چیزایی نیازه؟FUNDAMENTALS =&gt; چیزهای پایه ایBASIC LANGUAGE FEATURES =&gt;قابلیت های پایه ای زبانLOOPS =&gt; لوپ یا حلقه هاCONTROL FLOW =&gt; همون ایف اِلس خودمانخب حالا چلنج چه میگهاسم چلنج: Fix string caseدرجه سختی: kyu 7فکر کن که یه string یا یه کلمه داری که بعضی از حرف هاش بزرگ و بعضی هاشم کوچیکن مثل:coDEحلا تو یه برنامه بنویس که با کم ترین تغییر بقیه حروف هم به همون شکل تغییر بده و اگه مساوی بود تمام حروف رو کوچیک کن.این متن ترجمه شده سایته خودم اینجوری برای خودم به این صورت ساده ترش کردم که اگه بیشتر حروف بزرگ بودن بقیه حروف هم بزرگ کن و اگه بیشترشان کوچیک بودن بقیرو هم کوچیک کن و اگه مساوی بودن هم طبق گفته خود چلنج همه حروف رو کوچیک کن بزار چنتا مثال برنم:اگه تعداد بزگا بیشتر بود: CODe =&gt; CODEاگه تعداد کوچیکا بشتر بود: codE =&gt; codeو اگه مساوی بودن: DOde =&gt; codeخب همینطور که کار برنامه نویس حل مسئلس و از 100 درصد کار فقط 10 درصدش مربوط میشه به کد نویسی پس ما هم میریم سراغ چرک نویسچرک نویسstring -&gt; mixed of upper and lower
string --&gt;convert all of them to upper =&gt; if most of them upper
          --&gt;convert all of them to lower =&gt; if most of them lower
          --&gt;convert all of them to lower =&gt; if (upper = lower)
===============================================================
coDe =&gt; code   lower &gt; upper
CODe =&gt; CODE   upper &gt; lower
COde =&gt; code   equal
================================================================
loop
  if upper was bigger -&gt; upper++
  else lower++
if      upper &gt; lower =&gt; loop -&gt; all to upper
else if upper &lt; lower =&gt; loop -&gt; all to lower
else    upper = lower =&gt; loop -&gt; all to lowerتوضیح چرک نویسخب توی قسمت اول چرک نویس ما تمام چیزایی که از صورت سوال فهمیدیم رو می نویسیماینکه اگه حروف بزرگ بیشتر باشه چه بشه اگه کوچیکا بشتر باشن و الا آخرتوی قسمت دوم خودم همیشه مثال هارو می نویسمو توی قسمت سوم هم راه حلی که به ذهنم برای حل این چلنج رسیده و اینکه از چه چیز هایی استفاده کنم مثل لوپ یا ایف السحل چلنج#include &lt;string&gt;
#include&lt;iostream&gt;
using namespace std;
// the main code
string solve(const string&amp; str){
    int upperCount = 0, lowerCount = 0, strLength;
    string newStr;
//length of str
    strLength = str.length();
//counting the lower and upper cases
    for(int i = 0; i &lt; strLength; i++){
        if(str[i] == toupper(str[i])){
            upperCount++;
        }
        else{lowerCount++;}
    }
//what to do if lower is bigger or smaller or equal
   18 if(upperCount &gt; lowerCount){
        for(int i = 0; i &lt; strLength; i++){
            newStr += toupper(str[i]);
        }
    }
    else if(upperCount &lt; lowerCount){
        for(int i = 0; i &lt; strLength; i++){
            newStr += tolower(str[i]);
        }
    }
    else{
        for(int i = 0; i &lt; strLength; i++){
            newStr += tolower(str[i]);
        }
    }
    return newStr;
}
//the main function we call the function that we&#039;ve made to do the job
int main(){
    string str = &amp;quotcoDE&amp;quot
    cout &lt;&lt;solve(str);
    return 0;
}توضیح راه حلخب به ترتیب از خط 1 تا 3 ما library(کتابخانه) و namespace رو داریم کتابخانه ها که یک سری کد ها هستن که یه بنده خدایی قبلن زحمتشو کشیده یا یه سری قابلیت هاست که اگه بخوایم ازشان استفاده کنیم باید اول با استفاده از &lt;&gt;include# اونارو صدا بزنیم و بکار بگیریم namespace هم توضیح زیاد نمیدم ولی بعضی از keuword ها برای استفاده به عنوان مثال cout نیاز داره که ::std پشتت قرار بگیره خب ما اینجا از namespace استفاده میکنیم خب توی خط 5 ما function اصلی رو مینویسیم که قراره تمام کارارو انجام بده و توی main صدا زده بشه این function اسمش solve یه string میگیره و یه string هم تحویل میدهتوی خط 6 ما 3 تا int میسازیم به اسم های lowerCount, upperCount که تعداد حروف کوچیک و بزرگ توی اینا ذخیره میشه و همیچنین strLength که طول string توش ذخیره میشهو توی خط 7 هم یه string جدید که تمام تغییراتی که میخایم اینجام بدیم رو توش کپی کنیم بعدا هم ما این string رو تحویل میدیم یا return میکنیمخب توی خط 9 همینطور که توی خب 8 کامنت گفته ما سایز یا طول string رو توی strLength که قبلا ساخته بودیم ذخیره میکنیمتوی خط 11 هم یه for loop میسازیم که به ترتیب حروف رو چک میکنه و با if else داخلش تعداد حروف بزرگ و کوچیک رو توی upperCount و lowerCount ذخیره میکنهتوی خط 18 میگیم که اگه تعداد بزرگا بیشتر بود به ترتیب حروف رو بزرگ کن و توی newStr که بعدا قراره تحویل بدیم ذخیره کن و توی خط 23 هم هیمکار رو برای حروف کوچیک انجام بدهو توی خط 28  اگه حروف مساوی بودن همرو به ترتیب کوچیک و در newStr ذخیره کنو در آخر هم newStr رو تحویل main بده و main هم کلمه مورد نظر رو توی function میزاره و جواب رو پرینت میکنه.روش های دیگه برای حل این چلنج#include &lt;string&gt;
#include &lt;numeric&gt;
#include &lt;cctype&gt;

std::string solve(std::string str) {
    bool bLower = str.size() &lt;= 2 * std::count_if(str.cbegin(), str.cend(), ::islower);

    std::transform(str.begin(), str.end(), str.begin(), [&amp;] (auto x) {
        return bLower ? std::tolower(x) : std::toupper(x);
    });

    return std::move(str);
}#include &lt;string&gt;
#include &lt;cctype&gt;

std::string solve(const std::string&amp; str){

    std::string result = str;
    int count_upper = 0;
    int count_lower = 0;

    for(int i=0; i &lt; str.size(); i++){
        if(std::isupper(str[i])) count_upper++;
        else count_lower++;
        if( (count_upper &gt; (str.size()/2 +1)) || (count_lower &gt;= (str.size()/2 +1) ) ) break;
    }

    for(int i=0; i &lt; str.size(); i++) (count_lower &lt; count_upper)? result[i] = toupper(result[i]): result[i] = tolower(result[i]);

    return result;
}#include &lt;algorithm&gt;
#include &lt;cctype&gt;
#include &lt;string&gt;
#include &lt;utility&gt;

std::pair&lt;int, int&gt; count_cases(const std::string&amp; str)
{
    int lower = 0, upper = 0;
    for (const char &amp;c : str) {
        if (std::isupper(c)) upper++;
        else if (std::islower(c)) lower++;
    }
    return { upper, lower };
}

std::string solve(const std::string&amp; str)
{
    auto case_counts = count_cases(str);
    auto str_cpy = str;
    if (case_counts.first &gt; case_counts.second) { // upper &gt; lower
        std::transform(str_cpy.begin(), str_cpy.end(), str_cpy.begin(), ::toupper);
    }
    else { // upper &lt; lower || upper == lower
        std::transform(str_cpy.begin(), str_cpy.end(), str_cpy.begin(), ::tolower);
    }
    return str_cpy;
}این میم بالایه واقعا حقیقته XDیا علی.</description>
                <category>;{codeIsFun}</category>
                <author>;{codeIsFun}</author>
                <pubDate>Sat, 05 Sep 2020 21:46:33 +0430</pubDate>
            </item>
                    <item>
                <title>چلنج باحال از سایت CodeWars شماره 1</title>
                <link>https://virgool.io/coderlife/codewars-c-%DA%86%D9%84%D9%86%D8%AC-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-%DB%8C%DA%A9-y0gdjffvjkka</link>
                <description>سلام دوستان.سری مقاله ها رو می خوام شروع کنم فیض ببریم از حل چلنج های وب سایت CodeWars.خب کد وارز (Codewars) اصلا چی هست؟ کد وارز یه سایت آموزشیه که پر از چلنج های مختلف با درجه سختی های مختلفه که برنامه نویسا ازش برای آمادگی برای مسابقات یا یادگیری یه زبان جدید و یا هدف های دیگه استفاده می کنن.درجه سختی های چلنجا توی سایت خیلی جالب درجه بندی شدن اینجوریه که از آسان به سخت با نمادی به اسم kyu از عدد ۸ که آسان ترین چلنج هاست تا ۱ که  ۲۰ نفر هم به زور یکیشو حل نمیکنن D:kyu 8 &lt; kyu 7 &lt; kyu 6 &lt; kyu 5 &lt; kyu 4 &lt; kyu 3 &lt; kyu 2 &lt; kyu 1حالا چرا ++C !? اول بگم که اگه ++C بلد نیستید هیچ مشکلی نیست شما فقط روش حلشو نگاه کن سعی کن راه حل رو یاد بگیری چون برنامه نویس در اصل کارش حل مسءلس زبان برنامه نویسی فقط یه ابزاره. دلیل اصلی که ++C رو انتخاب کردم اینه که سخته!!!تو نگاه اول ممکنه خنده دار به نظر بیاد ولی یه شخصیت جالب دارم اونم اینه که همیشه دنبال سختی ها میرم.D:خب ++C خیلی سریعه معمولا ازش توی کار ها  پروژه ها بزرگ استفاده میشه مثل بازی ها و یا حتی همین             photoshop خودمان ولی این به این معنی نیست که برای کارای دیگه نمیشه ازش استفاه کنیم ولی ++C  قضیه اش فرق داره چون Object oriented یا همون شی گرا هست پس دست کمی از Java توی App Development  یا توسعه نرم افزار نداره و به زیبایی از پس همچین چیزایی بر میاد در کل مثل یه آچر فرانسه میمانه.چلنج شماره ۱این چلنجی که الان میریم درجه سختیش توی سایت kyu 7 هست که زیاد سخت نیست معمولا با ۱ هفته تمرین مداوم و stackoverflow(سایت پرسش و پاسخ برنامه نویسا) میشه حل کرد اینارو XDبرای حل این چلنج به چه چیزایی نیازه؟FUNDAMENTALS =&gt; چیزهای پایه ایNUMBERS =&gt;نحوه کارکردن با اعدادMATHEMATICS =&gt;فقط یه تیکه کوچیک قول میدم XDBASIC LANGUAGE FEATURES =&gt;قابلیت های پایه ای زبانLOOPS =&gt; لوپ یا حلقه هاCONTROL FLOW =&gt;  همون ایف اِلس خودمانحالا چلنج چیه؟اسم چلنج: Balanced numberدرجه سختی: kyu 7میگه که یه function(تابع) بساز که هر عددی رو بهش میدی اگه جمع عدد های سمت چپ و سمت راست عدد برابر باشه به ما &quot;Balanced&quot; رو میده در غیر این صورت &quot;Not balanced&quot; رو میده.اگه عدد ما فرد بود خب وسطش معلومه ولی اگه زوج بود ۲ تا عدد وسط رو وسط در نذر بگیر(با این توضیحی که من دادم XD)بزار چنتا مثال بزنم: اول برای اون زوج و فرد و وسط اونهااگه سایز یا بلندای عددمان فرد بود مثل ۶۴۵ که ۳رقمیه پس وسط عدد ۴ هستولی سایز عددمان زوج بود  مثل ۱۳۷۰ که ۴رقمیه پس اینجا وسط عدد ۳۷ هستبزار اول از جایی که همه ی برنامه نویسا شروع میکنن ما هم شروع کنیم سوالو که کامل فهمیدیم پس بریم سراغ چرک نویسچرک نویس/*  is it balanced or not
 left to middle == middle to right
if odd middle is a single number   34 5 7
if even midle is a two digit number 322 54 52
 number ----&gt; string --&gt; &amp;quotBalanced&amp;quot
                                |
                                 ---&gt; &amp;quotNot Balanced&amp;quot
 for even or odd:
 devide string length by 2
  odd divide by 2 - 1 ==&gt; 1234567 -&gt;len 7 / 2 + 1 = 4 =&gt; middle
                                ==&gt; 12345   -&gt;len 5 / 2 + 1 = 3 =&gt; middle
even divide by 2 - 1 ==&gt; 12345678 -&gt; len 8 / 2 = 4 but for adding
                                                                                 right side start from + 1
                                ==&gt; 1234     -&gt; len 4 / 2 = 4 but for adding
                                                                             right side start from + 1
 if else statement --&gt; if odd{...} else{...}
     for loop in if else
 adding begin to middle = left
adding middle to end   = right
 return left == right? &amp;quotbalanced&amp;quot : &amp;quotNot Balanced&amp;quot
string to number function
number % 2 ==0
 int sum function
 */این چیه دیگه؟اگه خوب دقت کنین این همون صورت سوالاس که توی ذهن خودم مرور کردمو خواستم چیزایی که فهمیدمو روی چرک نویس پیاده کنمنظرتان چیه که اینقدر کشش ندمو جوابشو بزارم و بعدش توضیحش بدم.کد رو کامل کامنت گذاری کردم کسایی که کار کردن کامل میفهمنشجواب چلنج#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;utility&gt;
#include &lt;sstream&gt;
using namespace std;
// a function to convert strings to integers
int stringToInt(string str){
    int leftSideNum = 0;
    stringstream s(str);
    s &gt;&gt; leftSideNum;
    return leftSideNum;
}
// a function to add up the digits of an integer
int digitSum(int num){
    int sum = 0;
    while (num != 0) {
        sum = sum + num % 10;
        num = num / 10;
    }
    return sum;
}
/* the main function checks if the number is odd or even
and finds the middle of the number calls the other functions
and return the strings based on the instructions*/
string balancedNum (unsigned long long int number ){
    string str = to_string(number);
    long int middleIndex;
    long int strLength = str.length();
    //----------------------------------------------
    //the if else statement for finding the middle of the odd or the even number
    if(strLength % 2 == 0){
        middleIndex = strLength / 2 - 1;
    }
    else{
        middleIndex = strLength / 2;
    }

    int l, r;
    //---------------------------------------------
    // pulling left side and right side of the number as string
    string leftSide = str.substr(0, middleIndex);
    string rightSide = str.substr(strLength % 2 == 0 ? (middleIndex + 2) : (middleIndex + 1), str.length() - 1);
    // ---------------------------------------------
    // turning our left side and right side to integer
    l = stringToInt(leftSide);
    r = stringToInt(rightSide);
    // ---------------------------------------------
    // calculating the sum of both sides
    int leftSum = digitSum(l);
    int rightSum = digitSum(r);
    //---------------------------------------------
    return leftSum == rightSum ? &amp;quotBalanced&amp;quot : &amp;quotNot Balanced&amp;quot
}اونجوری نگاه نکنید بزارید توضیح بدم کامل همه چی رو خط هایی که با // شروع میشن رو کامنت میگن فقط برای توضیخ هستنخب از خط ۱ به ترتیب اولین چیزی که میبینید خط هایی هستن که با # شروع میشن خب چی هستن اینا؟ به اینا میگن liberary یا کتابخانهکتابخانه ها کد ها قابلیت های و ویژگی های از قبل نوشته شده ای هست که برای ما کسایی که از قبل زحمت کدشو کشیدن  و ما فقط بالای صفحه اضافشون میکنیم که کارمان رو راحت میکننخب خط 5 چیه این ;using namespace std؟ وارد جزءیات نمیشم ولی اینو بدونید که بعضی از keyword  ها نیاز دارند که یه ::std جلوشان بزاریم پس برای همین از namespace کمک میگیریم که کارمان راحت تر شه حالا دلایل دیگه ای هم داره ولی خب بمانه برای مقاله های دیگه.خب همینجور که توی خط 6 گفتم توی خط 7 ما یه function ساختیم به اسم stringToInt که کار ش چیهکارش اینه که یه string بگیره و به integer یا عدد تبدیلش کنه من از stringstream استفاده کردم. خب الان که چی به چه درد چلنج ما میخوره؟ این function توی خط های بعدی به کمک ما میاد.خب توی خط ۱۴ میریم سراغ ساخت یه function به اسم digitSum همینجور که از اسمش معلومه برای جمع عددهاس و ساختارش اینجوریه که از عددمان % میگیریم و هرچی باقی ماند رو به یه عدد که تعیین کردیم که صفر باشه(int sum = 0) میکنیم و در ادامه عددو بر ۱۰ تقسیم میکنیم که از عدد اصلی ما رقمی رو که جمع کردیم کم شه که دوباره با % به سراغ رقم بعدی بریم و این همینجوری ادامه داره تا همه ی رقم ها با هم جمع شن و در پایان هم عدد رو به ما میدهخب توی خط 25 با function آخر رو داریم به اسم balancedNum که تمام محاسبات قراره اینجا انجام میشه اول function ما یه string به اسم str می سازیم که عددمان رو به string تبدیل میکنه1234 =&gt; &amp;quot1234&amp;quotبعدش یه integer می سازیم به اسم strLength با استفاده از ()str.length ما سایز string رو داخلش قرار میدیمخب اینجاس که سراغ چپ و راست میایم با یه if else statement میگیم که اگه % سایز string(که همون strLength بود)  مساوی با ۲ بود(یعنی اگه ذوج بود) یه سایز جدید میسازیم و string که داشتیم تقسیم بر ۲ منهای ۱ میکنیم(middleIndex = strLength / 2 - 1;)و یا اگه مساوی ۲ نبود پس فرده و string رو فقط تقسیم بر ۲ میکنیم(middleIndex = strLength / 2;)خب حالا ما میدونیم وسط عددمان کجاس حالا باید تعیین کنیم که از کجا تا کجا میشه سمت چپ و از کجا تا کجا میشه سمت راست(خط 41 تا 42)خب حالا توی خط 46 و 47 اینجاست که ما از function که قبلا ساخته بودیم استفاده میکنیم همون stringToInt صداش میزنیم و سمت چپ رو میزاریم توش که کارشو بسازه و بعد نتیجه رو توی یه integer دیگه ذخیره میکنیم و همین کار رو برای سمت راست هم انجام میدیم حالا اینجا جالب میشه نتیجه های function های قبلی رو توی function  دومی که ساخته بودیم (digitSum)میزاریم همون function جمع اعدادو در آخر هم نتیجه  نتیجه function جمع اعداد رو مقایسه میکنیم اگه برابر بودن &quot;Balanced&quot; رو پرینت کنه و گر نه &quot;Not Balanced&quot; رو پرینت کنهخب تمام شد نمیتانم بگم کم بود یا سخت نبود ولی روند لذت بخشی بود منکه از نوشتن ++C لذت میبرمحالا برای کسایی که علاقه دارن بدونن که ممکنه به روش های دیگه حل شه چند تا روش دیگه میزارمروش هایی دیگه برای حل چلنجconst char* balancedNum(unsigned long long int n)
{
    auto str = std::to_string(n);
    int balance = 0;
    for (size_t i = 0, j = str.size() / 2 + 1; j &lt; str.size(); ++i, ++j)
    {
        balance += str[i];
        balance -= str[j];
    }
    return (balance == 0)? &amp;quotBalanced&amp;quot : &amp;quotNot Balanced&amp;quot#include &lt;numeric&gt;

using namespace std;

template&lt;typename T, T s, typename I1,typename I2,typename F&gt;
auto acc(I1 b,I2 e,F f){
    return accumulate(b,e,(T)s, f);
}

string balancedNum (unsigned long long int number )
{
    if (number &lt; 100) return &amp;quotBalanced&amp;quot
    auto s = to_string(number);
    auto l = s.length();
    auto f = [](size_t a, char c){return a + (c-&#039;0&#039;);};
    auto a = acc&lt;size_t,0&gt;(s.begin(), s.end() - l/2-1, f);
    auto b = acc&lt;size_t,0&gt;(s.begin() + l/2+1, s.end(), f);
    return a == b ? &amp;quotBalanced&amp;quot : &amp;quotNot Balanced&amp;quot ;std::string balancedNum (unsigned long long int n)
{
    int i[18], d, l=0, s=0, c=-1;
    while (n) {i[d=++c]=n%10; n/=10;}
    while (c-l&gt;(d&amp;1)) s+=i[c--]-i[l++];
    return s?&amp;quotNot Balanced&amp;quot:&amp;quotBalanced&amp;quot
}و جمله آخر که خیلی دوستش دارمIf you think you can do a thing or think you can&#x27;t do a thing, you&#x27;re right.Henry Fordیا علی.</description>
                <category>;{codeIsFun}</category>
                <author>;{codeIsFun}</author>
                <pubDate>Fri, 04 Sep 2020 10:57:11 +0430</pubDate>
            </item>
            </channel>
</rss>