return true to win - ответы на 11 php задач онлайн

11 задач по php: https://returntrue.win/

В каждом из заданий нужно написать код, который бы возвращал true.

Нужно указать аргумент функции, который при передаче в функцию гарантировал то, что функция вернет true. Решить нужно наименьшим количеством php кода.

В качестве аргумента может передаваться число, строка, массив или замыкание.

Тест по php: return true to win

Итак, что нужно передать в функцию foo()?

Уровень 1

<?php

function foo($x)
{
    return $x;
}
Ответ (символов 4):
true
Ответ (символов 2, лучший):
!0

Уровень 2

<?php

function foo($x)
{
    return $x('gehr') === 'true';
}

Передадим замыкание (анонимную функцию) в качестве аргумента $x, сделаем чтобы функция возвращала "true" строкой.

Ответ (символов 26):
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

Ответ (символов 9, лучший):
str_rot13

Уровень 3

<?php

function foo($x)
{
    return ($x >= 1) && ($x <= 1) && ($x !== 1);
}

Последняя проверка строгая (сравнивает еще и типы), следовательно можно передать единицу строкой, чтобы единица строка не была равно единице int.

Ответ (символов 3):
'1'

Уровень 4

<?php

function foo($x)
{
    $a = 0;
    switch ($a) {
        case $x:
            return true;
        case 0:
            return false;
    }
    return false;
}
Ответ (символов 1, лучший):
0

Уровень 5

<?php

function foo($x)
{
    return strlen($x) === 4;
}
Ответ (символов 6):
'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;
}

 

 
 
 
 

icon Комментарии 0

Ваш комментарий к статье.. (для авторизованных)

ctrl+enter

icon Вход в систему

зарегистрироваться
НОВЫЕ ПОЛЬЗОВАТЕЛИ