Обновить
3

Пользователь

0,1
Рейтинг
Отправить сообщение
Мне также. Но еще мне кажется, что дело именно в «кто знаком с SQL»
Неизвестно как пошло бы дело, если бы я вместо SQL учил бы какой-нибудь LINQ и только его.
Дело привычки, мне кажется.
признаю свою вину, средняя таблица albums_musicians все испортила
и пока «сходу» без подзапроса не вышло:
select distinct m.name
from musicians as m
left join 
  (select am.musician_id, a.year, a.id
  from albums_musicians as am 
  left join albums as a on (a.id = am.album_id)) as temptable
on (m.id = temptable.musician_id) and (temptable.year = 2020)
where temptable.id is null
order by m.name

а вот более извращенное, но почему бы и нет:
select m.name
from musicians as m
left join albums_musicians as am on m.id = am.musician_id
left join albums as a on (a.id = am.album_id) 
group by m.name, m.id
having count(case when a.year = 2020 then a.id end)=0
order by m.name

нет, он попадет в эту выборку со своим альбомом 2020 года
select distinct m.name
from musicians as m
left join albums_musicians as am on m.id = am.musician_id
left join albums as a on (a.id = am.album_id) and (a.year = 2020)

и тут его «настигнет» условие
where a.id is null

которое он не преодолеет и в итоге его не будет
Увидел. Тогда я предложу немного другое решение:
select distinct m.name
from musicians as m
left join albums_musicians as am on m.id = am.musician_id
left join albums as a on (a.id = am.album_id) and (a.year = 2020)
where a.id is null
order by m.name
Что-то мне кажется в п.10 не решается вопрос «все исполнители, которые не выпустили альбомы в 2020 году»
Код
select distinct m.name
from musicians as m
left join albums_musicians as am on m.id = am.musician_id
left join albums as a on a.id = am.album_id
where not a.year = 2020
order by m.name

выдаст музыкантов, у которых есть альбомы не в 2020, независимо от того, выпускали они альбом в 2020 или нет
Я считаю, что денормализации здесь нет, но присутствует избыточность данных.

P.S. В данном случае эта избыточность вполне оправдана

Так уже не пишут.
В асинхронном стиле:
ДиалогВыбора.Показать(...)
В интернете полно примеров

1С Конфигуратор признан уже не модным. Копают в сторону EDT на Eclipse.
Интерфейс управляемых форм — как-то неудачно вышло, хотя идея отличная.

Нет. (a+b)/2=sqrt(x1x2...*xk) где xi — какие то карточки

Не пересекались с решениями от https://lsfusion.org/ ?

А какие ограничения не позволили в LINQ завезти left join и произвольный предикат соединения таблиц, а не только эквивалентность?
Согласен. Правда это никак не спасает от «удивления», что указанных данных в коллекции не будет. Наконец, почему нельзя допустить коллекцию в которую можно положить и извлечь, а перебрать нельзя?
Он может быть использован с любым типом, удовлетворяющим следующим условиям:

тип имплементирует интерфейс IEnumerable
тип имеет метод с сигнатурой void Add(T item)


Вопрос: а зачем понадобился IEnumerable у результата?

Были найдены на острове Java в санScriptских рунах

Справедливости ради у шарпов тоже скорость добавления фич ого…
Ну и вспомнить сколько лет c++ развивался каждым компилятором кто во что горазд. Только в последние 10 лет (ну и плюсы не молоды) стандарт начал развиваться и тоже понеслись все быстрее.

модифицировал ваш алгоритм, а потом увидел ваш комментарий:

public static int GCD(int a, int b)
        {
            if(a<b)
            {
                int c = a;
                a = b;
                b = c;
            }
            int d = a % b;
            return (d == 0) ? b : ShaleSequence.GCD(b, d);
        }

if (a==b || ShaleSequence.GCD(a,b)!=1) continue; //вместо if (a==b) continue;

ну вообще говоря и при прямом заполнении используется проверка:
(x[n]+x[n-1])%x[n-2] == 0
using System;
using System.Collections.Generic;

public class Test
{
    static int n;

    static IEnumerable<IEnumerable<int>> Solution(List<int> SubResult)
    {
        var count = SubResult.Count;
        if (count == n)
        {
            yield return SubResult;
            yield break;
        }
        for (var i = 1; i <= n; i++)
        {            
            if (SubResult.Contains(i))
            {
                continue;
            }
            if ((count >= 2) && ((i+SubResult[count-1]) % SubResult[count-2] != 0))
            {
                continue;
            }
            SubResult.Add(i);
            foreach (var c in Solution(SubResult))
            {
                yield return c;
            }
            SubResult.RemoveAt(count);
        }
    }

    public static void Main()
    {
        var s = Console.ReadLine();
        n = Int32.Parse(s);
        var count = 0;
        foreach (var c in Solution(new List<int>()))
        {
            foreach (var num in c)
            {
                Console.Write($"{num} ");
            }
            count++;
            Console.WriteLine();
        }
        Console.WriteLine($"Count = {count}");
        Console.ReadKey();
    }
}
Не знаком с Хаскелем, но тупо взял ваш код и попытался запустить в онлайн-сервисах.
Так вот, все они ругаются, что не понимают вот этого подключения:
import Control.Parallel.Strategies

Информация

В рейтинге
3 839-й
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность