Почему? Количество шаблонов равно количеству чисел, деленному на размер алфавита из цифр (потому что n цифр заменяем одним джокером), и умноженному на количество разрядов в числе (потому что делаем это для каждого разряда).
Имеем регулярный двудольный граф степени 10, задающий отображение двух множеств. Одно множество -- все последовательности десятичных цифр длиной 10 (далее чисел); другое множество -- все "шаблоны" (последовательности цифр, в которых ровно одна из цифр заменена на символ-джокер; далее шаблоны). Размер каждой из долей 10^10, при этом каждое число связано с 10 разными шаблонами, а каждый шаблон -- с 10 разными числами.
Незнайка выбирает шаблон, после чего Винтик выбирает одно из чисел, связанных с этим шаблоном, после чего Шпунтик должен выбрать из шаблонов, связанных с этим числом, тот же шаблон, что был выбран Незнайкой изначально.
Для того чтобы последнее было возможно, необходимо и достаточно выбрать в упомянутом графе регулярный подграф степени 1 (или, иными словами, совершенное паросочетание). Иначе говоря, из каждых 10 ребер, инцидентных одному и тому же числу, оставить ровно одно, но при этом так, чтобы и из каждых 10 ребер, инцидентных одному и тому же шаблону, осталось тоже ровно одно.
Число совершенных паросочетаний в двудольном графе равно перманенту его матрицы смежности. (Перманент -- это как детерминант, но все слагаемые со знаком "+").
В теории, этого достаточно. На практике, вычисление перманента -- вычислительно сложная задача и при n=10^10 ловить нечего.
У Винтика на выходе одна цифра, и у Шпунтика на выходе одна цифра. […] Число возможных взаимно-однозначных комбинаций этих двух цифр сверху ограничено 10!
Откуда взялось требование взаимной однозначности этих цифр? Почему Шпунтик не может для одной и той же цифры Винтика вернуть разные цифры в зависимости от контекста?
Позвольте, заданный вопрос существенно полагается на формат коммуникации между Винтиком и Шпунтиком -- а именно на возможность однозначно восстановить прообраз продемонстрированной Шпунтику комбинации. Не любое отображение годится, а лишь то, которое обладает таким свойством.
И разумеется, номер пропущенного разряда кодируется не просто одной цифрой, которую пишет Винтик, а этой цифрой, взятой в контексте, заданным Незнайкой.
Винтик и Шпунтик имеют на входе таблицу из всех возможных комбинаций 10 цифр – 9 написанных Незнайкой плюс номер пропущенного разряда.
Не совсем так. Это Винтик имеет такую таблицу. А Шпунтик имеет другую таблицу: синтаксически это всё те же комбинации 10 цифр, но семантически это 9 цифр, написанных Незнайкой, плюс одна, написанная Винтиком, -- а номер пропущенного разряда как раз ему неизвестен.
Винтик отображает первую таблицу во вторую, а Шпунтик -- вторую в первую. Поэтому и требуется взаимная однозначность.
Ошибка в том, что подменяют понятия. В [верном] утверждении "квадрат есть частный случай прямоугольника" речь идет об иммутабельных объектах, а в примерах нарушения LSP — уже об имеющих состояние.
А компания запрашивает выплаченную стипендию назад только для тех, кто прошел стажировку, но отказался работать, или все-таки для всех непрошедших тоже?
Да, по аналогии. Если работает так: пришёл в парикмахерскую, заплатил денег, полчаса посидел – вышел с причёской, значит, должно работать и так: пришёл на курсы, заплатил денег, полтора месяца походил – и ты специалист.
Причём маркетологи курсов сами создают такое впечатление, когда пишут: специалисты в этой области зарабатывают <подставьте сумму>. Ведь подразумевается: заплатил 100 тысяч один раз – и получай каждый месяц по 300. Выгодная инвестиция! То, что платить придётся не за коробочное решение, а за сырьё для самостоятельной обработки, обычно скромно умалчивается.
Ну, антипаттерн по определению – часто встречающийся в реальной жизни подход, здесь никакого противоречия нет. Само по себе это наблюдение не отвечает на вопрос, насколько адекватна предлагаемая альтернатива.
Пользовательская история: Как пользователь, я хочу использовать поле поиска для ввода названия города, отеля или улицы, чтобы я мог найти подходящие варианты отелей.
Критерии приемки базового интерфейса поиска
Поле поиска размещено в верхней панели.
Поиск начинается, когда пользователь щелкает "Поиск".
Поле содержит подсказку серым текстом: "Куда вы направляетесь?"
Подсказка исчезает, как только пользователь начинает вводить текст.
Насколько я понимаю, такая детализация пользовательских историй – это антипаттерн. На этапе их составления определяется, ЧТО делать (какие потребности пользователя закрывать). Решения о том, КАК делать (какие средства использовать), принимаются на этапе "Вся команда обсуждает истории и КП".
А если не ограничиваться этой конструкцией, как можно сформулировать лучше?
А то ведь "по желанию" тоже не вполне точно: пользователь может и не желать выполнять резервное копирование и вообще в гробу его видать, а необходимость есть.
Почему? Количество шаблонов равно количеству чисел, деленному на размер алфавита из цифр (потому что n цифр заменяем одним джокером), и умноженному на количество разрядов в числе (потому что делаем это для каждого разряда).
Да. Скачал Python-скриптик где-то на SO. Могу прислать файл
В общем, так.
Имеем регулярный двудольный граф степени 10, задающий отображение двух множеств. Одно множество -- все последовательности десятичных цифр длиной 10 (далее чисел); другое множество -- все "шаблоны" (последовательности цифр, в которых ровно одна из цифр заменена на символ-джокер; далее шаблоны). Размер каждой из долей 10^10, при этом каждое число связано с 10 разными шаблонами, а каждый шаблон -- с 10 разными числами.
Незнайка выбирает шаблон, после чего Винтик выбирает одно из чисел, связанных с этим шаблоном, после чего Шпунтик должен выбрать из шаблонов, связанных с этим числом, тот же шаблон, что был выбран Незнайкой изначально.
Для того чтобы последнее было возможно, необходимо и достаточно выбрать в упомянутом графе регулярный подграф степени 1 (или, иными словами, совершенное паросочетание). Иначе говоря, из каждых 10 ребер, инцидентных одному и тому же числу, оставить ровно одно, но при этом так, чтобы и из каждых 10 ребер, инцидентных одному и тому же шаблону, осталось тоже ровно одно.
Число совершенных паросочетаний в двудольном графе равно перманенту его матрицы смежности. (Перманент -- это как детерминант, но все слагаемые со знаком "+").
В теории, этого достаточно. На практике, вычисление перманента -- вычислительно сложная задача и при n=10^10 ловить нечего.
(Для тернарного случая мои расчеты дали 10752)
Откуда взялось требование взаимной однозначности этих цифр? Почему Шпунтик не может для одной и той же цифры Винтика вернуть разные цифры в зависимости от контекста?
"Иногда усердие превозмогает и рассудок" (с)
Позвольте, заданный вопрос существенно полагается на формат коммуникации между Винтиком и Шпунтиком -- а именно на возможность однозначно восстановить прообраз продемонстрированной Шпунтику комбинации. Не любое отображение годится, а лишь то, которое обладает таким свойством.
И разумеется, номер пропущенного разряда кодируется не просто одной цифрой, которую пишет Винтик, а этой цифрой, взятой в контексте, заданным Незнайкой.
Не совсем так. Это Винтик имеет такую таблицу. А Шпунтик имеет другую таблицу: синтаксически это всё те же комбинации 10 цифр, но семантически это 9 цифр, написанных Незнайкой, плюс одна, написанная Винтиком, -- а номер пропущенного разряда как раз ему неизвестен.
Винтик отображает первую таблицу во вторую, а Шпунтик -- вторую в первую. Поэтому и требуется взаимная однозначность.
Ошибка в том, что подменяют понятия. В [верном] утверждении "квадрат есть частный случай прямоугольника" речь идет об иммутабельных объектах, а в примерах нарушения LSP — уже об имеющих состояние.
The glocky kuzdra shteckly budled the bocker and is kurdyaking the bockerling.
Спасибо за подробный и чёткий ответ!
А компания запрашивает выплаченную стипендию назад только для тех, кто прошел стажировку, но отказался работать, или все-таки для всех непрошедших тоже?
Да, по аналогии. Если работает так: пришёл в парикмахерскую, заплатил денег, полчаса посидел – вышел с причёской, значит, должно работать и так: пришёл на курсы, заплатил денег, полтора месяца походил – и ты специалист.
Причём маркетологи курсов сами создают такое впечатление, когда пишут: специалисты в этой области зарабатывают <подставьте сумму>. Ведь подразумевается: заплатил 100 тысяч один раз – и получай каждый месяц по 300. Выгодная инвестиция! То, что платить придётся не за коробочное решение, а за сырьё для самостоятельной обработки, обычно скромно умалчивается.
Ну, антипаттерн по определению – часто встречающийся в реальной жизни подход, здесь никакого противоречия нет. Само по себе это наблюдение не отвечает на вопрос, насколько адекватна предлагаемая альтернатива.
Насколько я понимаю, такая детализация пользовательских историй – это антипаттерн. На этапе их составления определяется, ЧТО делать (какие потребности пользователя закрывать). Решения о том, КАК делать (какие средства использовать), принимаются на этапе "Вся команда обсуждает истории и КП".
Спасибо!
Это в planttext отрисовывалось? Можно в виде кода тогда?
Я пока не очень понимаю, какую альтернативу вы предлагаете. Можете привести пример? (Для любого из вариантов)
А если не ограничиваться этой конструкцией, как можно сформулировать лучше?
А то ведь "по желанию" тоже не вполне точно: пользователь может и не желать выполнять резервное копирование
и вообще в гробу его видать, а необходимость есть.А если заменить "при необходимости" на "в случае необходимости"? Станет понятнее, что именно пользователь определяет, когда этот случай наступает?