11 задач по php: https://returntrue.win/
В каждом из заданий нужно написать код, который бы возвращал true.
Нужно указать аргумент функции, который при передаче в функцию гарантировал то, что функция вернет true. Решить нужно наименьшим количеством php кода.
В качестве аргумента может передаваться число, строка, массив или замыкание.
Итак, что нужно передать в функцию foo()?
Уровень 1
<?php
function foo($x)
{
return $x;
}
true
!0
Уровень 2
<?php
function foo($x)
{
return $x('gehr') === 'true';
}
Передадим замыкание (анонимную функцию) в качестве аргумента $x, сделаем чтобы функция возвращала "true" строкой.
function(){return 'true';}
Как решить более коротко? Разве возможно записать анонимную функцию в php более кратко?
На самом деле, надо посмотреть в сторону строки 'gehr', она тут не просто так. Это шифр Цезаря, смещение на 13 символов. Надо передать имя функции "str_rot13" как параметр. php ругнется с варнингом, но отработает и с "gehr" вернет строку "true":
Notice: Use of undefined constant str_rot13 - assumed 'str_rot13' in -(8) : eval()'d code on line 1
str_rot13
Уровень 3
<?php
function foo($x)
{
return ($x >= 1) && ($x <= 1) && ($x !== 1);
}
Последняя проверка строгая (сравнивает еще и типы), следовательно можно передать единицу строкой, чтобы единица строка не была равно единице int.
'1'
Уровень 4
<?php
function foo($x)
{
$a = 0;
switch ($a) {
case $x:
return true;
case 0:
return false;
}
return false;
}
0
Уровень 5
<?php
function foo($x)
{
return strlen($x) === 4;
}
'1234'
strlen считате количество байт, для кириллицы, японских, китайских символов - символ может занимать до 4-х байт utf8. Следовательно, нужно передать 4-х байтный символ, чтобы strlen вернул 4.
Ответ (1 символ, лучший):
Уровень 6
<?php
function foo($x)
{
return $x === $x();
}
Уровень 7
<?php
function foo(stdClass $x)
{
$x = (array) $x;
return $x[0];
}
Уровень 8
<?php
class Bar {}
function foo(Bar $x)
{
return get_class($x) != 'Bar';
}
Уровень 9
<?php
function foo($x)
{
$y = $x + 1;
return ++$x != $y;
}
Уровень 10
<?php
class Bar
{
private $a;
public function __construct($a)
{
$this->a = (bool) $a;
}
public function a()
{
return $this->a;
}
}
function foo(callable $x)
{
$object = new Bar(false);
$x($object);
return $object->a();
}
Уровень 11
<?php
function foo(array $x)
{
return $x[0] === null;
}
