Задача суммирования двух чисел — это абсолютно стандартная задача на платформах с автоматическим тестированием; встречал её неоднократно. Она проверяет не способность реализовать алгоритм, а то, что новичок освоил платформу: запуск тестов, сабмит кода. С этой задачей можно экспериментировать: как поведёт себя платформа, если реализовать функцию заведомо неправильно, или зациклиться, и т.п.
В каких-то контекстах может быть полезно трактовать войну как «спецоперацию» — такой формальный статус позволяет военнослужащим и тем более всяким росгвардейцам обоснованно отказываться ехать в «командировку».
«Проблема в том, что приказов об участии в боевых действиях на заграничной территории не существует, ведь у нас не введено военное положение. Военнослужащих просто ставят перед фактом — едем туда, открываем огонь там...» — https://zona.media/article/2022/04/06/ombudsman
Человек, который мыслит рационально, как раз не ведётся на...
Человек, который мыслит рационально, как раз понимает, что он так же подвержен подобным манипуляциям и предубеждениям. Предсказуемая иррациональность. А иллюзия контроля, мол, я начитался Юдковского, Чалдини и Канемана а потому для искажений не уязвим — суть гордыня и проявление иррациональности.
Каждая фигура, как вы правильно сказали, «дает ветвление не только своими ходами, но и тем, что мешает остальным». Т.е. каждая фигура на доске является источником увеличения размера пространства состояния.
Вы, кажется, пропустили фрагмент «мешает остальным». То есть уменьшает пространство поиска. У голого ферзя в центре доски без остальных фигур ходов больше, чем у всех 16 фигур/пешек вместе взятых в начальном положении.
Ещё раз: нет прямой монотонной зависимости между количеством фигур и фактором ветвления. Может быть мало ходов при большом количестве фигур и много ходов при малом количестве фигур.
Метод либо объективно полиморфный, либо объективно не полиморфный.
abstract class Pet
{
public void NonPolymorphicNonVirtual()
{
Console.WriteLine("I'm pet");
}
public void PolymorphicNonVirtual()
{
Console.WriteLine($"{Virtual} {Virtual}");
}
protected abstract string Virtual { get; }
}
sealed class Cat : Pet
{
protected override string Virtual => "Meow";
}
sealed class Dog : Pet
{
protected override string Virtual => "Bow!";
}
...
{
Pet pet = new Cat();
pet.NonPolymorphicNonVirtual(); // I'm pet
pet.PolymorphicNonVirtual(); // Meow Meow
}
{
Pet pet = new Dog();
pet.NonPolymorphicNonVirtual(); // I'm pet
pet.PolymorphicNonVirtual(); // Bow! Bow!
}
Он полиморфный по поведению, с точки зрения пользователя класса (которому недоступен виртуальный метод NonPublic() напрямую). Он был бы мономорфным, если бы использовал только функционал базового класса и не обращался к виртуальным методам, переопределённым в потомках.
Cat cat = new Cat();
cat.NonVirtual();
Dog dog = new Dog();
dog.NonVirtual();
В обоих случаях вызывается один и тот же невиртуальный метод базового класса Pet.NonVirtual(). Но поведение будет разным, будет напечатано Meow и Bow!
Полиморфизм в методе public void NonVirtual() { NonPublic(); } Его реализация тут состоит из одного вызова, но может кроме этого содержать и какую-то общую для наследников логику. Паттерн Template method.
они выхотят на сцену, когда появляются указатели. virtual нужен, чтобы указатель на базовый класс...
Не совсем точно. Полиморфного поведения можно добиться, даже работая с конкретным классом наследника и невиртуальным API. Конечно, указатели на базовый класс появляются, но неявно. Идею проиллюстрирую на C#. Но на C++ то же самое, называется NVI; может работать просто через стековую переменную наследника, без явных ссылок/указателей.
abstract class Pet
{
public void NonVirtual() { NonPublic(); }
protected abstract void NonPublic();
}
sealed class Cat : Pet
{
protected override void NonPublic() { Console.WriteLine("Meow"); }
}
sealed class Dog : Pet
{
protected override void NonPublic() { Console.WriteLine("Bow!"); }
}
...
Cat cat = new Cat();
cat.NonVirtual();
Добавьте к ответам комментарии от авторов вопросов, пожалуйста?
Задача суммирования двух чисел — это абсолютно стандартная задача на платформах с автоматическим тестированием; встречал её неоднократно. Она проверяет не способность реализовать алгоритм, а то, что новичок освоил платформу: запуск тестов, сабмит кода. С этой задачей можно экспериментировать: как поведёт себя платформа, если реализовать функцию заведомо неправильно, или зациклиться, и т.п.
Это веса, которые применяются ко входным аргументам нейронов.
В каких-то контекстах может быть полезно трактовать войну как «спецоперацию» — такой формальный статус позволяет военнослужащим и тем более всяким росгвардейцам обоснованно отказываться ехать в «командировку».
«Проблема в том, что приказов об участии в боевых действиях на заграничной территории не существует, ведь у нас не введено военное положение. Военнослужащих просто ставят перед фактом — едем туда, открываем огонь там...»
— https://zona.media/article/2022/04/06/ombudsman
Что это за авторы, и какие работы имеются в виду?
Много причин. Но как минимум не хочется раздувать объём за счёт скачивания на клиент натренированной модели.
Подобная логика применима только к однопользовательским играм «для себя».
К соревновательным играм такое оправдание не применимо.
Как программно проверить, когда протухнет корневой сертификат на Android-устройстве?
Чтобы оптимизировать локальность данных — снизить число кэш-миссов.
Человек, который мыслит рационально, как раз понимает, что он так же подвержен подобным манипуляциям и предубеждениям. Предсказуемая иррациональность. А иллюзия контроля, мол, я начитался Юдковского, Чалдини и Канемана а потому для искажений не уязвим — суть гордыня и проявление иррациональности.
Не забудьте: Microsoft.CodeQuality.Analyzers, Microsoft.NetCore.Analyzers.
Причём Гудини родил т.н. «пушку Алехина» далеко не сразу.
https://www.youtube.com/watch?v=aj-K2o_RNXY
Вы, кажется, пропустили фрагмент «мешает остальным». То есть уменьшает пространство поиска. У голого ферзя в центре доски без остальных фигур ходов больше, чем у всех 16 фигур/пешек вместе взятых в начальном положении.
Ещё раз: нет прямой монотонной зависимости между количеством фигур и фактором ветвления. Может быть мало ходов при большом количестве фигур и много ходов при малом количестве фигур.
В общем случае это не так — фигуры дают вклад в ветвление не только своими ходами, но и тем, что мешают друг друг.
Например, в стартовой позиции число допустимых ходов только увеличится, если выкинуть слонов.
Наследник в силах изменить поведение второго метода. А первого — не в силах.
Он полиморфный по поведению, с точки зрения пользователя класса (которому недоступен виртуальный метод
NonPublic()
напрямую). Он был бы мономорфным, если бы использовал только функционал базового класса и не обращался к виртуальным методам, переопределённым в потомках.Это если бы я использовал паттерн CRTP. А здесь полиморфизм на основе динамического связывания.
В обоих случаях вызывается один и тот же невиртуальный метод базового класса
Pet.NonVirtual()
. Но поведение будет разным, будет напечатаноMeow
иBow!
Полиморфизм в методе
public void NonVirtual() { NonPublic(); }
Его реализация тут состоит из одного вызова, но может кроме этого содержать и какую-то общую для наследников логику. Паттерн Template method.Не совсем точно. Полиморфного поведения можно добиться, даже работая с конкретным классом наследника и невиртуальным API. Конечно, указатели на базовый класс появляются, но неявно. Идею проиллюстрирую на C#. Но на C++ то же самое, называется NVI; может работать просто через стековую переменную наследника, без явных ссылок/указателей.