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; }
Комментарии 0