۱۲. تابعی بنویسید که یک رشته فرمت شده برگرداند. مقدار بازگشتی باید برابر با “Value is VALUE” باشد که در آن مقدار یک عدد ۵ رقمی است.
مثال:
solution(5); // should return "Value is 00005"
پاسخ:
مسئله را به دو روش مختلف حل می کنیم. در روش اول از تابع ()str_pad و در روش دوم از تابع ()sprintf استفاده می کنیم.
روش اول :
<?php
function solution($c)
{
return "Value is " . str_pad($c, 5, "0", STR_PAD_LEFT);
}
echo (solution("5"));

Value is 00005
معرفی تابع ()str_pad :
تابع ()str_pad یک رشته را با کاراکتر معینی از سمت راست یا چپ پر می کند.
سینتکس:
str_pad(string,length,pad_string,pad_type)
مثال:
<?php
$str = "Hello World";
echo str_pad($str,20,".");

Hello World.........
مقادیر پارامتر :
پارامتر | توضیحات |
string | ضروری. رشته به پد را مشخص می کند. |
length | ضروری. طول رشته جدید را مشخص می کند. اگر این مقدار کمتر از طول اصلی رشته باشد، کاری انجام نخواهد شد |
pad_string | اختیاری. رشته مورد استفاده برای padding را مشخص می کند. پیش فرض فضای خالی است |
pad_type |
|
روش دوم:
<?php
function solution($c)
{
return sprintf("Value is %05d",$c); // This in codewars.
}
echo (solution("5"));

Value is 00005
معرفی تابع ()sprintf :
تابع ()sprintf یک رشته فرمت شده را در یک متغیر می نویسد.
پارامترهای arg1، arg2، ++ در علائم درصد (%) در رشته اصلی درج خواهند شد. این تابع “گام به گام” کار می کند. در علامت % اول، arg1، در علامت % دوم، arg2 و غیره درج شده است.
توجه: اگر نشانه های % بیشتر از آرگومان ها وجود دارد، باید از متغیرهایی استفاده کنید. یک مکان نگهدار بعد از علامت % درج می شود و از آرگومان-عدد و “\$” تشکیل شده است. مثال دو را ببینید.
توابع مرتبط:
()printf() vprintf() vsprintf() fprintf() vfprintf
سینتکس:
sprintf(format,arg1,arg2,arg++)
مثال:
<?php
$number = 9;
$str = "Beijing";
$txt = sprintf("There are %u million bicycles in %s.",$number,$str);
echo $txt;

There are 9 million bicycles in Beijing.
مقادیر پارامتر :
پارامتر | توضیحات |
format |
ضروری. رشته و نحوه قالب بندی متغیرهای موجود در آن را مشخص می کند. مقادیر قالب ممکن:
مقادیر فرمت اضافی اینها بین % و حرف قرار میگیرند (مثال %2f):
توجه: اگر از چندین مقدار فرمت اضافی استفاده می شود، باید به همان ترتیب بالا باشند. |
arg1 | ضروری. آرگومانی که باید در اولین علامت %- در رشته قالب درج شود |
arg2 | اختیاری. آرگومانی که باید در دومین علامت %- در رشته قالب درج شود |
arg++ | اختیاری. آرگومانی که باید در سومین، چهارمین و غیره علامت %- در رشته قالب درج شود |
۱۳. شما به تازگی وارد یک خیابان کاملاً مستقیم شده اید که دقیقاً n خانه یکسان در دو طرف جاده دارد. طبیعتاً دوست دارید شماره خانه افراد آن طرف خیابان را بدانید. خیابان چیزی شبیه به این است:
Street
1| |6
3| |4
5| |2
زوج ها در سمت راست افزایش می یابند و فردها در سمت چپ کاهش می یابند. شماره خانه ها از ۱ شروع می شود و بدون قطع شدن افزایش می یابد. وقتی n = ۳ باشد، ۱ مقابل ۶، ۳ مقابل ۴ و ۵ مقابل ۲ است.
با توجه به آدرس شماره خانه و طول خیابان n، شماره خانه را در طرف مقابل خیابان به دست آورید.
مثال:
1, 3 --> 6
3, 3 --> 4
2, 3 --> 5
3, 5 --> 8
پاسخ:
<?php
function overTheRoad($address, $street)
{
return $street * 2 - $address + 1;
}
echo overTheRoad(5, 6);

8
۱۴. تابعی بنویسید که اگر اولین آرگومان ارسال شده به آرگومان دوم ختم شود، مقدار true را برگرداند. (هر دو آرگومان رشته هستند)
مثال:
solution('abc', 'bc') // returns true
solution('abc', 'd') // returns false
پاسخ:
<?php
function solution($str, $ending)
{
if (substr($str, -strlen($ending)) == $ending)
return true;
}
echo(solution("samurai", "ai"));

1
یا:
<?php
function solution($str, $ending)
{
return substr($str, -strlen($ending), strlen($ending)) == $ending;
}
echo(solution("samurai", "ai"));

1
معرفی تابع ()substr :
تابع ()substr بخشی از یک رشته را بر می گرداند.
سینتکس:
substr(string,start,length)
مثال:
<?php
echo substr("Hello world",6);

world
مقادیر پارامتر :
پارامتر | توضیحات |
string | ضروری. رشته ای را برای بازگشت بخشی از آن مشخص می کند. |
start |
ضروری. مشخص می کند که در رشته از کجا شروع شود.
|
length |
اختیاری. طول رشته برگشتی را مشخص می کند. پیش فرض تا انتهای رشته است.
|
معرفی تابع ()strlen :
تابع ()strlen طول یک رشته را برمی گرداند.
سینتکس:
strlen(string)
مثال:
<?php
echo strlen("Hello");

5
مقادیر پارامتر :
پارامتر | توضیحات |
string | ضروری. رشته مورد بررسی را مشخص می کند. |
۱۵. اسید دئوکسی ریبونوکلئیک (DNA) یک ماده شیمیایی است که در هسته سلول ها یافت می شود و حاوی “دستورالعمل” برای رشد و عملکرد موجودات زنده است.
در رشته های DNA، نمادهای “A” و “T” مکمل یکدیگر هستند، مانند “C” و “G”. تابع شما یک طرف DNA (رشته، به جز Haskell) را دریافت می کند. باید طرف مکمل دیگر را برگردانید. رشته DNA هرگز خالی نیست یا اصلاً DNA وجود ندارد .
مثال:
"ATTGC" --> "TAACG"
"GTAT" --> "CATA"
پاسخ:
مسئله را به سه روش مختلف حل می کنیم:
روش اول:
<?php
function DNA_strand($dna)
{
$ar1 = str_split($dna);
for ($x = 0; $x < strlen($dna); $x++) {
if ($ar1[$x] == "A") $ar1[$x] = "T";
elseif ($ar1[$x] == "T") $ar1[$x] = "A";
elseif ($ar1[$x] == "C") $ar1[$x] = "G";
elseif ($ar1[$x] == "G") $ar1[$x] = "C";
}
return implode($ar1);
}
echo(DNA_strand("ACTA"));

TGAT
روش دوم:
<?php
function DNA_strand($dna)
{
return strtr($dna, ['A' => 'T', 'T' => 'A', 'C' => 'G', 'G' => 'C']);
}
echo(DNA_strand("ACTA"));

TGAT
روش سوم:
<?php
function DNA_strand($dna)
{
return strtr($dna, 'ACGT', 'TGCA');
}
echo(DNA_strand("ACTA"));

TGAT
تابع های ()str_split و ()strlen در تمرینات قبلی معرفی شدند.
معرفی تابع ()strtr :
تابع ()strtr کاراکترهای خاصی را در یک رشته ترجمه می کند.
توجه: اگر پارامترهای from و to از نظر طول متفاوت باشند، هر دو به طول کوتاهترین فرمت میشوند.
سینتکس:
strtr(string,from,to)
مثال:
<?php
echo strtr("Hilla Warld","ia","eo");

Hello World
مقادیر پارامتر :
پارامتر | توضیحات |
string | ضروری. رشته ای را برای ترجمه مشخص می کند. |
from | مورد نیاز (مگر اینکه از آرایه استفاده شود). مشخص می کند چه کاراکترهایی را تغییر دهید. |
to | مورد نیاز (مگر اینکه از آرایه استفاده شود). مشخص می کند که به چه کاراکترهایی تغییر دهید. |
array | مورد نیاز (مگر اینکه از to و from استفاده شود). آرایه ای که شامل چه چیزی به عنوان کلید و چه چیزی به عنوان مقدار تغییر می کند. |
۱۶. در این تمرین به شما یک رشته از اعداد جدا شده با فاصله داده می شود و باید بزرگ ترین و کوچک ترین عدد را برگردانید.
مثال:
highAndLow("1 2 3 4 5"); // return "5 1"
highAndLow("1 2 -3 4 5"); // return "5 -3"
highAndLow("1 9 3 4 -5"); // return "9 -5"
توجه:
- همه اعداد Int32 معتبر هستند، نیازی به اعتبارسنجی آنها نیست.
- همیشه حداقل یک عدد در رشته ورودی وجود خواهد داشت.
- رشته خروجی باید دو عدد باشد که با یک فاصله از هم جدا شده اند و بالاترین عدد اول است.
پاسخ:
مسئله را به دو روش مختلف حل می کنیم:
روش اول:
<?php
function highAndLow($numbers)
{
$ar1 = explode(" ", $numbers);
sort($ar1);
foreach ($ar1 as $key => $val) {
$ar1[$key] = $val;
}
return $ar1[count($ar1) - 1] . " " . $ar1[0];
}
echo(highAndLow("8 3 -5 42 -1 0 0 -9 4 7 4 -4"));

42 -9
روش دوم:
<?php
function highAndLow($numbers)
{
$a = explode(' ', $numbers);
return max($a) . " " . min($a);
}
echo(highAndLow("8 3 -5 42 -1 0 0 -9 4 7 4 -4"));

42 -9
تابع ()explode در تمرینات قبلی معرفی گردید.
معرفی تابع ()count :
تابع ()count تعداد عناصر یک آرایه را برمی گرداند.
سینتکس:
count(array, mode)
مثال:
<?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);

3
مقادیر پارامتر :
پارامتر | توضیحات |
array | ضروری. آرایه را مشخص می کند. |
mode |
اختیاری. حالت را مشخص می کند. مقادیر ممکن:
|
معرفی تابع ()max :
تابع ()max بالاترین مقدار در یک آرایه یا بالاترین مقدار چند مقدار مشخص شده را برمی گرداند.
سینتکس:
max(array_values);
or
max(value1,value2,...);
مثال:
<?php
echo(max(2,4,6,8,10) . "<br>");
echo(max(22,14,68,18,15) . "<br>");
echo(max(array(4,6,8,10)) . "<br>");
echo(max(array(44,16,81,12)));

10
68
10
81
مقادیر پارامتر :
پارامتر | توضیحات |
array_values | ضروری. یک آرایه حاوی مقادیر را مشخص می کند. |
value1,value2,… | ضروری. مقادیر مورد مقایسه را مشخص می کند. (باید حداقل دو مقدار باشد) |
معرفی تابع ()min :
تابع ()min کمترین مقدار را در یک آرایه یا کمترین مقدار چند مقدار مشخص شده را برمی گرداند.
سینتکس:
min(array_values);
or
min(value1,value2,...);
مثال:
<?php
echo(min(2,4,6,8,10) . "<br>");
echo(min(22,14,68,18,15) . "<br>");
echo(min(array(4,6,8,10)) . "<br>");
echo(min(array(44,16,81,12)));

2
14
4
12
مقادیر پارامتر :
پارامتر | توضیحات |
array_values | ضروری. یک آرایه حاوی مقادیر را مشخص می کند. |
value1,value2,… | ضروری. مقادیر مورد مقایسه را مشخص می کند (باید حداقل دو مقدار باشد) |
۱۷. به شما یک رشته از n خط داده می شود که هر زیر رشته دارای n کاراکتر است. مثلا:
s = “abcd\nefgh\nijkl\nmnop”
ما مقیاس بندی “افقی” و “عمودی” این مربع از رشته ها را مطالعه خواهیم کرد.
مقیاس بندی افقی k یک رشته شامل تکرار k برابر هر کاراکتر رشته (به جز ‘n\’) است.
n\ برای رفتن به خط بعدی است و چاپ نمی شود.
Example: 2-horizontal scaling of s: => “aabbccdd\neeffgghh\niijjkkll\nmmnnoopp”
مقیاس بندی v-vertical یک رشته شامل تکرار V برابر هر قسمت از رشته مربع است.
Example: 2-vertical scaling of s: => “abcd\nabcd\nefgh\nefgh\nijkl\nijkl\nmnop\nmnop”
مقیاس تابع (strng، k، v) یک مقیاس بندی افقی K و یک مقیاس بندی عمودی V را انجام می دهد.
مثال:
a = "abcd\nefgh\nijkl\nmnop"
scale(a, 2, 3) --> "aabbccdd\naabbccdd\naabbccdd\neeffgghh\neeffgghh\neeffgghh\
niijjkkll\niijjkkll\niijjkkll\nmmnnoopp\nmmnnoopp\nmmnnoopp"
چاپ:
abcd -----> aabbccdd
efgh aabbccdd
ijkl aabbccdd
mnop eeffgghh
eeffgghh
eeffgghh
iijjkkll
iijjkkll
iijjkkll
mmnnoopp
mmnnoopp
mmnnoopp
تابعی به نام scale(strng, k, v) بنویسید. k و v اعداد صحیح مثبت خواهند بود.
If strng == ""
return ""
پاسخ:
برای حل این تمرین باید با مفهوم عبارات با قاعده یا Regular Expression که به اختصار RegEx نامیده می شود آشنایی داشته باشید.
این عبارت ها برای جستجو و یافتن مطابقت یک الگوی خاص در یک متن مورد استفاده قرار می گیرند. با استفاده از RegEx می توان کاراکترهای خاص یا کلمات معین را در یک متن پیداکرده و آنها را حذف یا جایگزین یا تکرار و یا . . . کرد.
در این تمرین رشته داده شده شامل چند کلمه می باشد. صورت مسئله از ما خواسته است که تعداد حروف هر کلمه را k بار تکرار کرده و هر کلمه را v بار تکرار کنیم.
برای درج کامنت در کد از // استفاده می کنیم. کامنت ها برای توضیح کدها استفاده شده و توسط مفسر php اجرا نمی شوند.
<?php
function scale($strng, $k, $v)
{
// duplicate every character:
//https://stackoverflow.com/questions/9550769/passing-additional-arguments-to-preg-replace-callback-using-php-5-2-6?noredirect=1&lq=1
$yyy = preg_replace_callback('/[a-zA-Z]/',
function ($matches) use ($k) {
return str_repeat($matches[0], $k);
},
$strng);
// duplicate words:
$zzz = preg_replace_callback('/[a-zA-Z]+/',
function ($matches) use ($v) {
return str_repeat(($matches[0] . "\n"), $v);
},
$yyy);
// remove blank lines from text in PHP?
// https://stackoverflow.com/questions/709669/how-do-i-remove-blank-lines-from-text-in-php
$aaa = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $zzz);
// Remove trailing newline.
// https://stackoverflow.com/questions/3530099/remove-trailing-newline
return preg_replace('/\n$/', '', $aaa);
}
echo "<pre>";
print_r(scale("abcd\nefgh\nijkl\nmnop", 2, 3));
echo "</pre>";

aabbccdd aabbccdd aabbccdd eeffgghh eeffgghh eeffgghh iijjkkll iijjkkll iijjkkll mmnnoopp mmnnoopp mmnnoopp
معرفی تابع ()preg_replace_callback :
تابع ()preg_replace_callback که یک عبارت و یک callback به آن داده میشود، رشتهای را برمیگرداند که در آن همه مطابقتهای عبارت با زیررشتهای که توسط تابع callback برگردانده شده است جایگزین میشوند.
سینتکس:
preg_replace_callback(pattern, callback, input, limit, count)
مثال:
<?php
function countLetters($matches) {
return $matches[0] . '(' . strlen($matches[0]) . ')';
}
$input = "Welcome to W3Schools.com!";
$pattern = '/[a-z0-9\.]+/i';
$result = preg_replace_callback($pattern, 'countLetters', $input);
echo $result;

Welcome(7) to(2) W3Schools.com(13)!
مقادیر پارامتر :
پارامتر | توضیحات |
pattern | ضروری. یک عبارت منظم یا آرایه ای از عبارات منظم که نشان می دهد چه چیزی باید جستجو شود. |
replacements |
ضروری. یک تابع فراخوانی که جایگزین را برمی گرداند. تابع callback دارای یک پارامتر است که شامل آرایه ای از موارد مشابه است. اولین عنصر در آرایه حاوی تطابق برای کل عبارت است در حالی که عناصر باقی مانده برای هر یک از گروه های عبارت مطابقت دارند. |
input | ضروری. رشته یا آرایه رشته هایی که جایگزینی در آنها انجام می شود. |
limit | اختیاری. پیشفرض -1 به معنای نامحدود است. محدودیتی برای تعداد جایگزینی که می توان در هر رشته انجام داد تعیین می کند. |
count | اختیاری. پس از اجرای تابع، این متغیر حاوی عددی خواهد بود که نشان می دهد چند جایگزین انجام شده است. |
معرفی تابع ()str_repeat :
تابع ()str_repeat یک رشته را چند بار مشخص تکرار می کند.
سینتکس:
str_repeat(string,repeat)
مثال:
<?php
echo str_repeat("Wow",13);

WowWowWowWowWowWowWowWowWowWowWowWowWow
مقادیر پارامتر :
پارامتر | توضیحات |
string | ضروری. رشته ای را برای تکرار مشخص می کند. |
repeat | ضروری. تعداد دفعات تکرار رشته را مشخص می کند. باید بزرگتر یا مساوی 0 باشد. |
معرفی تابع ()preg_replace :
تابع ()preg_replace رشته یا آرایه ای از رشته ها را برمی گرداند که در آن تمام تطابقات یک الگو یا لیست الگوهای موجود در ورودی با رشته های فرعی جایگزین می شوند.
- یک الگو و یک رشته جایگزین. مطابقت های الگو با رشته جایگزین جایگزین می شود.
- آرایه ای از الگوها و یک رشته جایگزین. مطابق با هر یک از الگوها با رشته جایگزین جایگزین می شود.
- آرایه ای از الگوها و آرایه ای از رشته های جایگزین. مطابقت های هر الگو با رشته جایگزین در همان موقعیت در آرایه جایگزین جایگزین می شود. اگر موردی در آن موقعیت یافت نشد، منطبق با یک رشته خالی جایگزین می شود.
سینتکس:
preg_replace(patterns, replacements, input, limit, count)
مثال:
<?php
$str = 'Visit Microsoft!';
$pattern = '/microsoft/i';
echo preg_replace($pattern, 'W3Schools', $str);

Visit W3Schools!
مقادیر پارامتر :
پارامتر | توضیحات |
patterns |
ضروری. شامل یک عبارت منظم یا آرایه ای از عبارات منظم است.
|
replacements |
ضروری. یک رشته جایگزین یا آرایه ای از رشته های جایگزین.
|
input |
ضروری. رشته یا آرایه رشته هایی که جایگزینی در آنها انجام می شود.
|
limit |
اختیاری. پیشفرض -1 به معنای نامحدود است. محدودیتی برای تعداد جایگزینی که می توان در هر رشته انجام داد تعیین می کند.
|
count |
اختیاری. پس از اجرای تابع، این متغیر حاوی عددی خواهد بود که نشان می دهد چند جایگزین انجام شده است.
|
۱۸. تابعی بنویسید که یک عدد صحیح فرد می گیرد (0 < n < 1000000
) که تفاوت بین دو مربع کامل متوالی است و این مربع ها را به عنوان یک رشته در قالب “بزرگتر-کوچکتر” برمی گرداند.
مثال:
9 --> "25-16"
5 --> "9-4"
7 --> "16-9"
پاسخ:
<?php
function findsquares($num)
{
$a = intval($num / 2);
$b = $num - $a;
return $b * $b . "-" . $a * $a;
}
echo(findsquares(9));

25-16
معرفی تابع ()intval :
سینتکس:
intval(variable, base);
مثال:
<?php
$a = 32;
echo intval($a) . "<br>";
$b = 3.2;
echo intval($b) . "<br>";
$c = "32.5";
echo intval($c) . "<br>";
$d = array();
echo intval($d) . "<br>";
$e = array("red", "green", "blue");
echo intval($e) . "<br>";

32
3
32
0
1
مقادیر پارامتر :
پارامتر | توضیحات |
variable |
ضروری. متغیری را برای بررسی مشخص می کند.
|
base |
اختیاری. پایه مورد استفاده برای تبدیل را مشخص می کند. فقط زمانی اثر دارد که متغیر یک رشته باشد. پایه پیش فرض 10 است.
|
۱۹. لیستی از اعداد صحیح داریم. مشخص کنید که مجموع عناصر آن فرد است یا زوج.
Input: [0]
Output: "even"
Input: [0, 1, 4]
Output: "odd"
Input: [0, -1, -5]
Output: "even"
پاسخ:
<?php
function odd_or_even(array $a)
{
if (array_sum($a) % 2 == 0)
return "even";
else return "odd";
}
echo(odd_or_even([2, 5, 34, 6]));

odd
یا به طور خلاصه:
<?php
function odd_or_even(array $a)
{
return array_sum($a) % 2 ? 'odd' : 'even';
}
echo(odd_or_even([2, 5, 34, 6]));

odd
معرفی تابع ()array_sum :
سینتکس:
array_sum(array)
مثال:
<?php
$a=array(5,15,25);
echo array_sum($a);

45
مقادیر پارامتر :
پارامتر | توضیحات |
array |
ضروری. یک آرایه را مشخص می کند.
|
۲۰. ورودی تابع یک عدد صحیح است. خروجی شکلی است که طول و عرض آن به اندازه عدد صحیح باشد. عدد صحیح بین 1 تا 50 خواهد بود.
مثال:
+++
+++
+++
پاسخ:
روش اول:
<?php
function generateShape($int)
{
for ($x = 0; $x < $int; $x++) {
for ($y = 0; $y < $int; $y++) {
$ar1[$y] = "+";
}
$ar2[$x] = (implode($ar1)) . "\n";
}
$a = implode($ar2);
// Remove trailing newline.
// https://stackoverflow.com/questions/3530099/remove-trailing-newline
return preg_replace('/\n$/', '', $a);
}
echo "<pre>";
print_r(generateShape(8));
echo "</pre>";
خروجی:
++++++++
++++++++
++++++++
++++++++
++++++++
++++++++
++++++++
++++++++
روش دوم:
<?php
function generateShape($int)
{
return trim(str_repeat(str_repeat('+', $int) . "\n", $int));
}
echo "<pre>";
print_r(generateShape(8));
echo "</pre>";
تابع ()preg_replace و تابع ()str_repeat در تمرینات قبل معرفی شدند.
معرفی تابع ()trim :
توابع مرتبط:
- ()ltrim – فضای خالی یا سایر کاراکترهای از پیش تعریف شده را از سمت چپ رشته حذف می کند.
-
()rtrim – فضای خالی یا سایر کاراکترهای از پیش تعریف شده را از سمت راست رشته حذف می کند.
سینتکس:
trim(string,charlist)
مثال:
<?php
$str = "Hello World!";
echo $str . "<br>";
echo trim($str,"Hed!");

Hello World!
llo Worl
مقادیر پارامتر :
پارامتر | توضیحات |
string |
ضروری. رشته مورد بررسی را مشخص می کند.
|
charlist |
اختیاری. مشخص می کند کدام کاراکتر از رشته حذف شود. در صورت حذف، تمام کاراکترهای زیر حذف می شوند:
|