Главная | Все статьи | Дневник студента

Грёбаные два нуля ... или мне надо выговориться

Время чтения статьи ~2 минуты
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Грёбаные два нуля ... или мне надо выговориться главное изображение

Данная Запись перекочевала из обсуждения задачи "Без двух нулей" доп испытаний "Введения в программирование"

собсно сама задача

>Реализуйте и экспортируйте по умолчанию функцию, которая принимает на вход два аргумента - количество нулей и количество единиц, и определяет сколько есть способов размещения этих нулей и единиц так, что бы не было двух нулей идущих подряд. > >Например, определим все способы размещения двух нулей и двух единиц. Существует шесть возможных способов размещения: 0011, 0101, 0110, 1001, 1010, 1100. В трех случаях содержится два нуля, идущих подряд: 0011, 1001 и 1100. Вычитаем их из общего числа и получаем три возможных способа: 0101, 0110 и 1010. Ответ - 3.

Шли третьи сутки ...

Легкий lo-fi сменили жесткие треки The Prodigy, банка кофе заканчивалась, пепельница напоминала супер саяна из японских мультиков, пол был завален записями с нулями и единицами, квартира походила на палату сумасшедшего .....

enter image description here

Комбинаторика поддавалась крайне туго, из обсуждений не было понятно ровным счетом ничего. Несколько обсуждающих указывали на треугольник Паскаля, про который я узнал в первый день изучения комбинаторики. Смотрел на него, как баран на новые ворота, с единственной мыслью "И чё???". Конечно, было понятно сразу, что это просто наглядный способ посчитать количество перестановок, но это я мог и без треугольника, функция факториала была написана за первые пять минут. Другое дело, что это никак не подходило под два нуля.

После ознакомления со статьёй Павла Кима (спасибо ему за проделанную работу), "И ЧЁ!!?" не покидала меня никак, треугольник тот же, подобранные ответы казались мне случайным совпадением, и я продолжал искать общую формулу. Сегодня, проснувшись, ко мне пришло озарение, и хотя из-за плохого абстрактного мышления я всё еще считаю, что моя рабочая формула просто подгонка под результаты, она работает.

Решение учителя я понял сразу, так как после того, как нашел общий принцип решения, подумывал посчитать именно так, но на первый взгляд было не понятно, какой способ лучше - просчитать значения в треугольнике или взять общую формулу перестановок. При вычислении треугольника рекурсия грозила переполнить стек при неверной настройке и более высоких значениях нулей и единиц, а в общей формуле были высокие значения факториалов. К моему решению склонила лень - функция факториала была уже написана, и оставалось дописать всего одну строчку с формулой.

Пы. Сы. После всего этого осталось чувство какой-то не завершенности, так как до конца не разобрался в комбинаторике, и как уже говорил - просто подогнал формулу под набор ответов. Наверное именно так чувствуют себя ученые первооткрыватели законов, когда есть просто набор значений и надо их привести к общему закону.

пойду забудусь сном ...

Аватар пользователя Макс Лантинов
Макс Лантинов 31 мая 2019
7
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка фронтенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 25 апреля
профессия
от 6 183 ₽ в месяц
Ручное тестирование веб-приложений
4 месяца
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка веб-приложений на Laravel
10 месяцев
с нуля
Старт 25 апреля
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 25 апреля
профессия
от 9 900 ₽ в месяц
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
16 месяцев
с нуля
Старт 25 апреля
профессия
от 6 300 ₽ в месяц
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 25 апреля
профессия
новый
Автоматизированное тестирование веб-приложений на JavaScript
8 месяцев
c опытом
в разработке
Старт 25 апреля
профессия
Верстка с использованием последних стандартов CSS
5 месяцев
с нуля
Старт в любое время