Для объяснения паттерна пример хороший. Но такое применение в реальном приложении означало бы создание нового класса каждый раз, когда требуется поменять хотя бы один из множества шагов. Если каждый из шагов имеет по два одновременно доступных варианта, это уже 2^5 классов, которые еще и как-то придется выбирать в зависимости от выбора пользователя и других факторов. Для примера лучше подошли бы другие паттерны, позволяющие реализовать варианты каждого такого шага по отдельности, а потом объединить их в общий процесс. Например, паттерн стратегия.
Конкретно в этом случае и GPT не помогли, предлагали Зоотопию, Маугли, и всякие мультфильмы про динозавров. Хотя по другим вопросам результаты приемлемые были.
Пытался на днях вспомнить мультфильм, который видел давно в детстве. Там вроде бы на другой планете девушка бегала по джунглям и рисовала на каком-то устройстве динозавроподобных существ с натуры, а потом возвращалась в свою деревню где ее отчитывали. Как я только не составлял поисковые запросы, сколько минус-слов не добавлял, ни один из поисковиков (Яндекс/Гугл/УткаГо) не смог выдать ничего получше чем бесконечную кучу сгенерированных картинок с девушками-инопланетянками и прочего треша с pinterest и миллиона его вариаций. И аналогичную по полезности текстовую выдачу. Это при том, что десять лет назад я в SEO работал, и с поиском работать умею.
выводятся из принципа единственной ответственности
Не выводятся. Потому что SRP это вообще не про то, что у функции/класса должна быть одна ответственность. О чем этот принцип лучше прочитать от его создателя напрямую.
Учеток пользователей маркетплейсов на два-три порядка меньше, чем реальных людей в стране. Забанили твою - берешь жены, сына, брата, свата, мамы, папы, деда, соседа и т.д.. Среднему человеку за всю жизнь не понадобится столько возвратов, чтобы за это все перебанить.
Такая симуляция не может выполнять более сложные и практичные задачи для квантового компьютера. Например, полноценный квантовый компьютер можно использовать для взлома некоторых видов шифрования. Тот же самый алгоритм запущенный на симуляции квантого компьютера справится с этой задачей хуже, чем просто перебор запущенный на классическом компьютере.
Ну так это и есть стандартный способ биндинга. В свое время я кучу сишных и пару плюсовых библиотек к luajit через ffi прибиндил. Практически нигде не требовалось прокидывать лейаут структуры. Из исключений сходу могу только Windows API вспомнить, но там структуры изначально сишные и их код просто в неизменном виде копировался в текст биндинга.
Меня это ограничение не волнует, потому что я никогда не использую виртуальные методы и это моя наименее любимая функция в любом языке программирования.
Тем временем современный идиоматический ООП: существует ради полиморфизма подтипов, который реализуется виртуальными методами.
И еще этот ужасный непереносимый type punning с переходом от плюсовых строк в массив непойми чего. Можно же просто дописать сишную обертку передаваемую как непрозрачный указатель, функции доступа к полям, и уже их прибиндить в требуемый язык, в данном случае в Rust.
Что бы вы сделали, если бы обнаружили, что ваш код работает быстрее, чем ожидалось?
Проверил бы на ошибки, потому что если код работает намного быстрее ожидаемого, он скорее всего работает некорректно. А вот что такое "чрезмерная оптимизация" в контексте "написал код и он оказался быстрым" я не знаю. Бывает преждевременная оптимизация, оптимизация в ущерб другим характеристикам, и оптимизация на которую потрачено слишком много времени.
И бинарный поиск в задаче определения фальшивой монеты например никогда не требовал подтверждающего взвешивания- всегда было достаточно просто указать на фальшифку.
Потому что задача - указать на фальшивку, а не посчитать сколько в худшем случае нужно ходов. Во всех задачах на количество ходов считается последняя проверка. И формулы которые аналитически выводят количество шагов алгоритма тоже ее включают.
за сколько шагов решается задача, если диапазоны чисел [0 1], [0 2], [0 127] и как получается ответ в каждом случае?
За 2, 2, и 8 ходов. А 101 за 7. Ответ получается по формуле floor(log2(n) + 1), асимптотике худшего числа итераций для стандартного бинарного поиска. Поскольку по условиям новые ответы загадывающего не могут противоречить старым, итог всех его перезагадываний эквивалентен изначальному загадыванию числа, которое он загадал в последний раз. Т.е. перезагадывание не меняет по итогу худшую асимптотику.
Для объяснения паттерна пример хороший. Но такое применение в реальном приложении означало бы создание нового класса каждый раз, когда требуется поменять хотя бы один из множества шагов. Если каждый из шагов имеет по два одновременно доступных варианта, это уже 2^5 классов, которые еще и как-то придется выбирать в зависимости от выбора пользователя и других факторов. Для примера лучше подошли бы другие паттерны, позволяющие реализовать варианты каждого такого шага по отдельности, а потом объединить их в общий процесс. Например, паттерн стратегия.
Можно 11кг принести, чтобы наверняка. Главное - нести в отдельных пакетах.
Конкретно в этом случае и GPT не помогли, предлагали Зоотопию, Маугли, и всякие мультфильмы про динозавров. Хотя по другим вопросам результаты приемлемые были.
Это была шутка про индусский код.
Пытался на днях вспомнить мультфильм, который видел давно в детстве. Там вроде бы на другой планете девушка бегала по джунглям и рисовала на каком-то устройстве динозавроподобных существ с натуры, а потом возвращалась в свою деревню где ее отчитывали. Как я только не составлял поисковые запросы, сколько минус-слов не добавлял, ни один из поисковиков (Яндекс/Гугл/УткаГо) не смог выдать ничего получше чем бесконечную кучу сгенерированных картинок с девушками-инопланетянками и прочего треша с pinterest и миллиона его вариаций. И аналогичную по полезности текстовую выдачу. Это при том, что десять лет назад я в SEO работал, и с поиском работать умею.
Как-то странно вы заглянули в википедию, открыли версию восьмилетней давности вместо сегодняшней.
Ты не поверишь... Ну, почти.
Не выводятся. Потому что SRP это вообще не про то, что у функции/класса должна быть одна ответственность. О чем этот принцип лучше прочитать от его создателя напрямую.
Учеток пользователей маркетплейсов на два-три порядка меньше, чем реальных людей в стране. Забанили твою - берешь жены, сына, брата, свата, мамы, папы, деда, соседа и т.д.. Среднему человеку за всю жизнь не понадобится столько возвратов, чтобы за это все перебанить.
А мне вот эта отличная статья из 2014 вспомнилась. На хабре вроде был ее перевод.
Девиз "Don't_be_evil" c 2000-го года был.
Такая симуляция не может выполнять более сложные и практичные задачи для квантового компьютера. Например, полноценный квантовый компьютер можно использовать для взлома некоторых видов шифрования. Тот же самый алгоритм запущенный на симуляции квантого компьютера справится с этой задачей хуже, чем просто перебор запущенный на классическом компьютере.
Ну так это и есть стандартный способ биндинга. В свое время я кучу сишных и пару плюсовых библиотек к luajit через ffi прибиндил. Практически нигде не требовалось прокидывать лейаут структуры. Из исключений сходу могу только Windows API вспомнить, но там структуры изначально сишные и их код просто в неизменном виде копировался в текст биндинга.
Тем временем современный идиоматический ООП: существует ради полиморфизма подтипов, который реализуется виртуальными методами.
И еще этот ужасный непереносимый type punning с переходом от плюсовых строк в массив непойми чего. Можно же просто дописать сишную обертку передаваемую как непрозрачный указатель, функции доступа к полям, и уже их прибиндить в требуемый язык, в данном случае в Rust.
Проверил бы на ошибки, потому что если код работает намного быстрее ожидаемого, он скорее всего работает некорректно. А вот что такое "чрезмерная оптимизация" в контексте "написал код и он оказался быстрым" я не знаю. Бывает преждевременная оптимизация, оптимизация в ущерб другим характеристикам, и оптимизация на которую потрачено слишком много времени.
Но воообще все вопросы к С# отношения не имеют.
Взял в готовом виде из библии алгоритмов - The Art of Computer Programming Дональда Кнута. Но вообще она широко известна в широких кругах.
Потому что ChatGPT обучен на открытых источниках, где может быть написано что угодно, а сама ChatGPT склонна галюцинировать.
Есть зарубежный проект z-library. Но периодически меняет адреса, пытаются блочить.
Потому что задача - указать на фальшивку, а не посчитать сколько в худшем случае нужно ходов. Во всех задачах на количество ходов считается последняя проверка. И формулы которые аналитически выводят количество шагов алгоритма тоже ее включают.
За 2, 2, и 8 ходов. А 101 за 7. Ответ получается по формуле floor(log2(n) + 1), асимптотике худшего числа итераций для стандартного бинарного поиска. Поскольку по условиям новые ответы загадывающего не могут противоречить старым, итог всех его перезагадываний эквивалентен изначальному загадыванию числа, которое он загадал в последний раз. Т.е. перезагадывание не меняет по итогу худшую асимптотику.
1) В абсолютно всех задачах подобного типа учитывается последняя проверка, даже если уже понятен ее результат.
2) Стандартная реализация алгорима бинарного поиска уже учитывает все три варианта - больше, меньше, равно. Это не "тринарный" поиск.
Хотим.