Разбор задачи про лифты в бизнес-центрах

Ещё одна задачка для собеседования на должность backend-разработчика. Адовость заключается в отсутствии и отказе предоставлять описание алгоритма выбора лифтов и пограничных случаев, а так же в отсутствии дополнительных сведений о работе подобных лифтов.

Есть в бизнес-центрах лифты, когда пассажир нажимает на кнопку нужного этажа, а на экране загорается номер лифта, на который нужно сесть пассажиру. Нужно смоделировать работу X подобных лифтов в Y этажном здании.

Читать далее Разбор задачи про лифты в бизнес-центрах

Cлучайные числа с плавающей точкой в PHP

Стандартные библиотеки PHP умеют генерировать только целые случайные числа. Однако, возникают задачи где нужно не целое рандомное число с максимально длинным хвостом, например, в диапазоне от 0 до 1. В таком случае можно воспользоваться таким способом:

$rnd = rand(0, getrandmax() ) / getrandmax();

Если же количество знаков после запятой должно быть, например, 2, то:

$rnd = rand(0, 100) / 100;

Отлично! А что, если нужно случайное число в диапазоне от 4 до 10 с тремя знаками после запятой? Пожалуйста:

$rnd = 4 + rand(0, 1000) / (1000 / (10 - 4) );

Или:

$rnd = 4 + rand( 0, (10 - 4) * 1000 ) / 1000;

Задача о диагонали и площади квадрата

Задача на декомпозицию, формулировка которой может направить по неверному пути. Есть квадрат со сторонами N, например, N = 5. У него есть диагональ, выделенная серым цветом. Нужно найти количество клеток на нижней половине, $cnt = f(N). Не обращайте внимание на рисунок, это просто визуализация для отвлечения внимания.

Читать далее Задача о диагонали и площади квадрата

Что не так с этим скриптом?

Очень крутая задача, в которой не всё так просто, как кажется на первый взгляд. Попробуйте найти в ней 2 логические ошибки. SQL-инъекция здесь служит отвлекающим манёвром.

<?php 
 $dest = $_POST['destination']; 
 $result = $_POST['data']['result']; 
 $output = ""; 
 
 if ($dest == 'file') { 
     $file = fopen('storage.txt', 'a+'); 
     fwrite($file, $result); 
     $output = "stored in file"; 
 } elseif ($dest == 'db') { 
     $db = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'user', 'pass'); 
     $db->exec("INSERT INTO storage (value) VALUES ('{$result}');"); 
     $output = "stored in db"; 
 } 
 
 echo $output;

Читать далее Что не так с этим скриптом?

Задача о длине двух строк

Это одна из тех задач, в которых формулировка может сбить человека с толку и направить по неверному пути. Начну с корректной формулировки. В абстрактном языке программирования имеется 2 строковых переменных и нужно найти сумму длин двух строк. И здесь в голову должен придти один и только один единственно правильный и логичный способ: посчитать длину первой строки, длину второй строки и сложить их сумму. Читать далее Задача о длине двух строк