Git Hub
коротко
3 заметки с тегом

#Тестовое задание

SQL: Важность учёта

29 мая 2016, 19:01

Задачка: Важность учёта

Дана таблица поступлений товаров на склады компании следующего формата:

create table incoming (
    storage_id integer not null,
    category_id integer not null,
    quantity integer not null,
    time datetime not null
);

Напишите запрос, который выведет список последнего поступившего количества для каждого склада и категории товара. Таблица должна быть отсортирована по номеру склада (по возрастанию) и категории товара (по возрастанию). Например, для следующей таблицы:

storage_id | category_id | quantity | time
-----------------------------------------------------
1 | 32 | 3 | 2015-03-17 13:55:32
1 | 32 | 8 | 2015-03-17 13:15:22
3 | 32 | 23 | 2015-03-17 14:45:57
1 | 7 | 13 | 2015-03-17 15:56:12
1 | 32 | 7 | 2015-03-17 17:05:37
2 | 17 | 1 | 2015-03-18 13:13:22
1 | 7 | 13 | 2015-03-19 21:53:17

запрос должен возвращать

storage_id | category_id | quantity
----------------------------------------------
1 | 7  | 13
1 | 32 | 7
2 | 17 | 1
3 | 32 | 23

Решение

select storage_id,category_id,quantity
from (select *, DATE_FORMAT(`time`,'%Y%m%d%H') as sortOnTime,  CONCAT(DATE_FORMAT(`time`,'%Y%m%d'), storage_id ) as days 
from incoming  ORDER BY sortOnTime DESC )s 
GROUP BY days
ORDER BY storage_id , category_id

в запросах для production запросы вида select *,.. лучше не использовать а перечислять жёстко все необходимые поля

#SQL   #Тестовое задание

Задание: Рекурсия

25 мая 2016, 14:02

Дано

Нужно написать код, который из массива выведет то что приведено ниже в комментарии.

$x = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
/*


print_r($x) - должен выводить это:
Array
(
    [h] => Array
        (
            [g] => Array
                (
                    [f] => Array
                        (
                            [e] => Array
                                (
                                    [d] => Array
                                        (
                                            [c] => Array
                                                (
                                                    [b] => Array
                                                        (
                                                            [a] =>
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

);*/

Решение

$x = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');

function d($arg){
    echo '<pre>';
    print_r($arg);
    echo '</pre>';
}

class Recurse{
    public static function get($x){
        $y = array_pop($x);

        if (!empty($x)){
            return  array( $y=>self::get($x));
        }
        else {
            return array($y=>false);
        }
    }

}

d(Recurse::get($x));

Вывод

#Тестовое задание

Задание: Анаграмма

24 мая 2016, 12:24

Дано:

Число 128574 примечательно тем, что, будучи удвоенным, образует число 257148, которое состоит из тех же цифр, только в другом порядке.

Напишите программу, которая находит и выводит минимальное натуральное число, которое, будучи умноженным на 2, 3, 4, 5 и 6, образует числа, состоящие из тех же цифр, что и исходное.

Решение:

<?php

set_time_limit(0);


function dr($arg){
    echo '<pre>';
    echo var_dump($arg);
    echo '</pre>';
}

/**
 * Class Anagramm
 * класс поиска "анаграмм"
 */
class Anagramm {


    const MIN_LIMIT = 999;
    const MAX_LIMIT = 99999;

    /**
     * основной метод поиска анаграмм
     * @return возвращает наименьшую анаграмму из найденных
     */
    public static function search(){

        $arOperands = array(2,3,4,5,6);
        $arResult  = array();

        for ($in = self::MIN_LIMIT; $in <= self::MAX_LIMIT;$in++){

            foreach($arOperands as $operand)
            {
                $result = self::get($in,$operand);
                if (self::isCorrect($in,$result)){
                    $arResult[] = $in;

                }

            }
        }

         return min($arResult);
    }

    protected  static function  get($in,$operand){
        return ($in*$operand);
    }

    /**
     * метод проверки анаграммы на корректность
     * @param $in
     * @param $out
     * @return bool
     */
    protected  static function isCorrect($in, $out){

        $arIn = str_split($in);
        $arOut = str_split($out);

        sort($arIn);
        sort($arOut);

        $resultIn =  implode($arIn);
        $resultOut = implode($arOut);

        if (strcasecmp($resultIn,$resultOut)==0)
            return true;
        else
            return false;
    }

}



dr(Anagramm::search()); // выводим найденную анаграмму
#Тестовое задание