Entries Tagged ‘задачи’:

partial distinct

предлагаю SQL-задачку. не надуманная, возникла на работе.

контекст: музыкальный сайт, таблица (mysql) с плейлистами юзера

playlists:
{
int id, //автоинкремент
int song_id, //id самой песни
int user_id, //id юзера, который добавил себе песню
datetime added, //время, когда добавлена песня в его плейлист
}

song_id не уникальны, т.к. песню могли добавить несколько юзеров.

задача: написать SQL для выборки: “последние песни, добавленные в плейлисты пользователей”. для песен нужно вывести кто и когда их добавил в последний раз. дубликаты песен выводить не нужно, если песню добавили два юзера – вывести последнее добавление.

иными словами, нужно выбрать “последние N неповторяющихся песен в плейлистах с указанием того, кто последний и когда её добавил”.

то, что пока придумал я, имеет 4 select’а в запросе и 3й уровень вложенности этих select’ов. сможешь лучше?

P.S. конечно же, должно работать максимально быстро. в наличии есть индекс по added.

Напрягай мозги!

Юра Зновьяк сегодня подкинул забавную задачку. Цитирую:

Interview question: f(f(n)) == -n
Design a function f, such that:
f(f(n)) == -n
Where n is a 32 bit signed integer; you can’t use complex numbers arithmetic.
If you can’t design such a function for the whole range of numbers, design it for the largest range possible.

В двух словах: нужно написать int f(int n) {…} такую что f(f(n))==-n.

Я написал для всего диапазона int, кроме 3х чисел. Мне понадобилась 2 минуты чтобы придумать и минуты 3 чтобы закодить. А ты?