как скинуть яйцо со второго этажа чтобы оно не разбилось
Логические задачи и головоломки
Как может брошенное яйцо пролететь три метра и не разбиться?
Ответ: Главное бросать его так, чтобы оно летело больше 3 метров (например, подкинуть вверх), тогда оно разобьется не когда пролетит 3м, а когда упадет.
Комментарии
яйцо не разобьется-если бросать его сразу с курицей, тобишь внутри оно
Ну-ну не факт что не разобьется =)
не яйцо надо завернуть в прочную ёмкость и дело в шляпе правда я не проверел
А мы ккк то с другом кидали яйцо, он короче со всей дури замахнулся и пнул куриное яйцо! Оно мало того, что не разбилось, дак еще подлетело на пять метров в высоту и 4-дальность, упало хоть и в навоз, но сухой и все равно не разбилось! Мы повторили и замарали кеды)))
Я,конечно,точно не знаю.Но-откуда ты знаешь,на сколько метров бросаешь это дурацкое яйцо. Можно бросить и вверх,и в длину!Главное-замахнуться хорошо,чтоб далеко полетело.Оно по-любому разобьется,только если его сварить и почистить-раскрошится.И число 3 здесь просто так взяли.Могли ведь взять и 5,и 10.И зачем его вобще кидать.
брошeнноe яйцо нe можeт дaжe пролeтeть,оно жe брошeнноe,eго дaжe кинуть нe кто нe можeт,т.к нeкому
я это знаю надо бросить с 5 метров тогда первые 3 метра оно пролетит целым
Сила поверхносного натяжения против нас (Проверено)
Или если бросать яйцо на толстый слой пароллона
да ну.Зачем его в паралон кидать?
надо подбросить яйцо вверх
а лучше вообще не кидать)))
Мне кажется что реальней его кинуть вврх на три метра
Задача с небоскрёбом и яйцами — не бином Ньютона?
На самом деле, он самый. Но обо всём по порядку.
Постановка задачи
Осваиваю питон, решаю всякое на Codewars. Сталкиваюсь с известной задачей про небоскрёб и яйца. Разница лишь в том, что исходные данные — не 100 этажей и 2 яйца, а чуть побольше.
Дано: N яиц, M попыток их бросить, бесконечный небоскрёб.
Определить: максимальный этаж, с которого можно бросить яйцо, не разбив. Яйца сферические в вакууме и, если одно из них не разбилось, упав, например, с 99-го этажа, то остальные тоже выдержат падение со всех этажей меньше сотого.
0 А заодно и тех, когда яиц больше.
Но тут всё очевидно — нам не пригодятся яйца сверх тех, что разобьются, даже если каждый бросок будет неудачным. f(n, m) = f(m, m), если n > m. И вот всего поровну, 3 яйца, 3 броска. Если первое яйцо разбивается, то проверить можно f(2, 2) этажей к низу, а если не разбивается, то f(3,2) этажей к верху, то есть те же f(2, 2). Итого f(3, 3) = 2*f(2, 2) + 1 = 7. А f(4, 4), по аналогии, сложится из двух f(3, 3) и единицы, и будет равно 15. Всё это напоминает степени двойки, так и запишем: f(m, m) = 2^m — 1.
Выглядит, как бинарный поиск в физическом мире: начинаем с этажа номер 2^(m-1), в случае успеха поднимаемся на 2^(m-2) этажа вверх, а в случае неудачи — спускаемся на столько же вниз, и так, пока не кончатся попытки. В нашем случае, всё время поднимаемся.
Вернёмся к f(3, 10). По сути, на каждом шаге всё сводится к сумме f(2, m-1) — количеству этажей, которые можно определить в случае неудачи, единицы и f(3, m-1) — количеству этажей, которые можно определить в случае успеха. И становится понятно, что от увеличения количества яиц и попыток вряд ли что-то изменится. f(n, m) = f(n — 1, m — 1) + 1 + f(n, m — 1). И это универсальная формула, можно воплощать в коде.
Разумеется, предварительно я наступил на грабли немемоизирования рекурсивных функций и узнал, что f(10, 40) выполняется почти 40 секунд с количеством вызов самой себя — 97806983. Но и мемоизация спасает только на начальных интервалах. Если f(200,400) выполняется за 0.8 секунды, то f(200, 500) уже за 31 секунду. Забавно, что при замере времени выполнения с помощью %timeit, то результат получается куда меньше реального. Очевидно, что первый прогон функции занимает большую часть времени, а остальные просто пользуются результатами его мемоизации. Ложь, наглая ложь и статистика.
Рекурсия не нужна, ищем дальше
Итак, в тестах фигурирует, например, f(9477, 10000), а у меня жалкая f(200, 500) уже не укладывается в нужное время. Значит есть другое решение, без рекурсии, продолжим его поиски. Дополнил код подсчетом вызовов функции с определёнными параметрами, чтобы посмотреть на что она в итоге раскладывается. Для 10 попыток получились такие результаты:
f(3,10) = 7+ 1*f(2,9)+ 1*f(2,8)+ 1*f(2,7)+ 1*f(2,6)+ 1*f(2,5)+ 1*f(2,4)+ 1*f(2,3)+ 1*f(3,3)
f(4,10) = 27+ 1*f(2,8)+ 2*f(2,7)+ 3*f(2,6)+ 4*f(2,5)+ 5*f(2,4)+ 6*f(2,3)+ 6*f(3,3)+ 1*f(4,4)
f(5,10) = 55+ 1*f(2,7)+ 3*f(2,6)+ 6*f(2,5)+ 10*f(2,4)+ 15*f(2,3)+ 15*f(3,3)+ 5*f(4,4)+ 1*f(5,5)
f(6,10) = 69+ 1*f(2,6)+ 4*f(2,5)+ 10*f(2,4)+ 20*f(2,3)+ 20*f(3,3)+ 10*f(4,4)+ 4*f(5,5)+ 1*f(6,6)
f(7,10) = 55+ 1*f(2,5)+ 5*f(2,4)+ 15*f(2,3)+ 15*f(3,3)+ 10*f(4,4)+ 6*f(5,5)+ 3*f(6,6)+ 1*f(7,7)
f(8,10) = 27+ 1*f(2,4)+ 6*f(2,3)+ 6*f(3,3)+ 5*f(4,4)+ 4*f(5,5)+ 3*f(6,6)+ 2*f(7,7)+ 1*f(8,8)
f(9,10) = 7+ 1*f(2,3)+ 1*f(3,3)+ 1*f(4,4)+ 1*f(5,5)+ 1*f(6,6)+ 1*f(7,7)+ 1*f(8,8)+ 1*f(9,9)
Какая-то закономерность просматривается:
Коэффициенты эти теоретически рассчитываются. Каждый голубой — сумма верхнего и левого. А фиолетовые — те же самые голубые, только в обратном порядке. Рассчитать можно, но это же опять рекурсия, а в ней я разочаровался. Скорее всего, многие (жаль, что не я) уже узнали эти числа, но я пока сохраню интригу, следуя своему пути решения. Решил на них плюнуть и зайти с другой стороны.
Серая диагональ это N=M и тут наглядно видно, что справа от неё (при N > M) ничего не меняется. Видно — да иначе и быть не может, ведь это все результаты работы формулы, в которой так и задано- что каждая ячейка равна сумме верхней, верхней слева и единицы. Но какой-то универсальной формулы, куда можно подставить N и M и получить номер этажа, найти не удалось. Спойлер: её и не существует. Но зато так просто создание этой таблицы в экселе выглядит, может быть можно сгенерировать такую же питоном и таскать из неё ответы?
NumPy, вам нет
Вспоминаю, что существует NumPy, который как раз предназначен для работы с многомерными массивами, почему бы не попробовать его? Для начала нам понадобится одномерный массив из нулей размером в N+1 И одномерный массив из единиц размером в N. Берём первый массив от нулевого до предпоследнего элемента, складываем поэлементно с первым же массивом от первого элемента до последнего и с массивом единиц. К получившемуся массиву в начало добавляем ноль. Повторять M раз. Элемент номер N получившегося массива и будет ответом. Первые 3 шага выглядят так:
Итерировал, итерировал, да не выитерировал
44 секунды на расчет f(9477, 10000), многовато. Но зато абсолютно точно. Что можно оптимизировать? Первое — нет нужды считать всё, что правее диагонали M,M. Второе — ни к чему считать последний массив целиком, ради одной-то ячейки. Для этого сгодятся две последние две ячейки предыдущего. Для вычисления f(10, 20) будет достаточно только вот этих серых ячеек:
И так это выглядит в коде:
И что вы думаете? f(9477, 10000) за 2 секунды! Но эти входные данные слишком хороши, длина массива на любом этапе будет не больше 533 элементов (10000-9477). Проверим на f(5477, 10000) — 11 секунд. Тоже хорошо, но только по сравнению с 44 секундами — двадцать тестов с таким временем не пройдёшь.
Всё не то. Но раз есть задача, значит есть и решение, поиски продолжаются. Я снова стал смотреть в экселевскую таблицу. Ячейка слева от (m, m) всегда на единицу меньше. А ячейка слева от неё уже нет, в каждой строке разность становится больше. Ячейка снизу от (m, m) всегда вдвое больше. А ячейка снизу от неё — уже не вдвое, а чуть меньше, но для каждого столбца по разному, чем дальше, тем больше. А ещё числа в одной строке сначала растут быстро, а после середины медленно. Дай-ка я построю таблицу разностей между соседними ячейками, может там какая закономерность появится?
Теплее
Ба, знакомые числа! То есть сумма N этих числе в строке номер M это и есть ответ? Правда, считать их — примерно то же самое, что я уже делал, вряд ли это сильно ускорит работу. Но надо попробовать:
Не сказать, что более оптимальное решение. На каких-то данных работает быстрее, на каких-то медленнее. Надо отправляться глубже. Что это за треугольник с числами, что появился в решении дважды? Стыдно признаться, но высшую математику, где треугольник наверняка фигурировал, я благополучно позабыл, так что пришлось гуглить.
Бинго!
Треугольник Паскаля, так он официально называется. Бесконечная таблица биномиальных коэффициентов. Так что ответом на задачу с N яйцами и M бросками является сумма первых N коэффициентов в разложении бинома Ньютона M-ой степени, кроме нулевого.
Произвольный биномиальный коэффициент может быть вычислен через факториалы номера строки и номера коэффициента в строке: bk = m!/(n!*(m-n!)). Но самое приятное — можно последовательно рассчитать числа в строке, зная её номер и нулевой коэффициент (всегда единица): bk[n] = bk[n-1] * (m — n + 1) / n. На каждом шаге числитель уменьшается на единицу, а знаменатель увеличивается. И лаконичное финальное решение выглядит так:
33 мс. на расчёт f(9477, 10000)! Это решение тоже можно оптимизировать, хотя в заданных диапазонах и оно отлично работает. Если n лежит во второй половине треугольника, то можно инвертировать его в m-n, посчитать сумму первых n коэффициентов и отнять её от 2^m-2. Если n близко к середине и m нечётное, то расчеты тоже можно сократить: сумма первой половины строки будет равна 2^(m-1)-1, последний коэффициент в первой половине можно рассчитать через факториалы, его номер это (m-1)/2, а дальше либо продолжаем прибавлять коэффициенты, если n в правой половине треугольника, либо отнимать, если в левой. Если m чётное, то половину строки уже не посчитаешь, но можно найти сумму первых m/2+1 коэффициентов, посчитав через факториалы средний и прибавив половину его к 2^(m-1)-1. На входных данных в районе 10^6 это очень заметно уменьшает время выполнения.
Уже после успешного решения, стал искать чьи-нибудь ещё изыскания по этому вопросу, но нашёл только то самое, с собеседований, с всего лишь двумя яйцами, а это не спортивно. Интернет будет неполон без моего решения, решил я, и вот оно.
Как разбить сырые яйца правильно – без кусочков скорлупы в белке и растёкшегося желтка
Если посмотреть кулинарные программы, сырые яйца там бьют немилосердно часто и довольно просто. Шефы разбивают яйца о край миски или сковородки, умело управляясь только одной рукой, и лихо отбрасывая половинки скорлупы в сторону, словно маги, вынимающие и выбрасывающие шёлковые платки из карманов. Одри Хепберн в фильме «Сабрина» тоже преуспела в разбивании десятка яиц о край миски. Да и Джулия Чайлд в исполнении Мэрилл Стрип («Джули и Джулия: Готовим счастье по рецепту») не делала длительную паузу во время приготовления очередного торта, чтобы разок-другой разбить яйца.
Если вы не хотите видеть кусочки скорлупы в разбитом яйце, бейте их об стол! Конечно, это не идеальный на все 100% метод. Вездесущая скорлупа встречается и при таком способе. Но, по словам шеф-поваров, использование столешницы является наиболее надёжной техникой разбивания сырых яиц.
Не так давно сотрудники Reader’s Digest, американского журнала для семейного чтения, провели ряд тестов на своей кухне и стали большими поклонниками такого способа. Они назвали его лучшим способом разбивания яиц для новичков и домашних кулинаров.
Почему столешница лучше края миски
Американцы называют 3 причины:
Как правильно разбить сырое яйцо о стол
Всё очень просто. Представьте, что яйцо стоит вертикально. Его середина или «экватор» – самое слабое место. Именно на него и надо нацелиться, когда вы его будете разбивать.
Всеми пятью пальцами аккуратно, но крепко возьмите яйцо, лежащее горизонтально. Стукните его об стол (вспомнив, куда вы должны попасть). Будьте спокойны и уверены в себе – агрессии не надо и проявления силы тоже. При этом, лучше получить один уверенный разлом, чем несколько мелких и «осторожных» трещин. Они увеличат попадание скорлупы в белок. В идеале можно стукнуть ещё раз, но не переусердствуйте!
Как только скорлупа сломается, вам нужно доделать работу и «выпустить» яйцо в миску или на сковородку. Используя большие пальцы, слегка нажмите на трещину и разделите половинки скорлупы, а затем используйте яйцо по назначению.
Разделяем половинки скорлупы разбитого сырого яйца
СОВЕТ: Перед тем, как смешивать сырые яйца с другими ингредиентами, готовить яичницу или яйца пашот, их надо разбивать по одному в отдельную маленькую миску. Это избавит вас от случайного попадания скорлупы в общее блюдо.
Конечно, есть такие люди, как Гордон Рамзи и другие великие, рукастые и талантливые шефы. Им, скорее всего, разбивать яйца об стол будет неудобно и не с руки. Но если кусочки скорлупы и растекшийся желток являются частой проблемой для вас, не стесняйтесь – переходите на вышеописанный способ разбивания сырых яиц, как сделали и мы.
Все способы разбить яйцо и оставить желток целым
Сырые яйца – один из базовых ингредиентов многих блюд, в ряде рецептов требуется отделить желтки от белков. Поэтому важно уметь их правильно вскрывать – чтобы в продукте не было осколков скорлупы или он не перемешался. Есть много простых способов, как разбивать яйца.
В том числе – как вскрывать одновременно две штуки, чтобы не повредить желток, оставляя скорлупу целой и одной рукой. Также есть определенные рекомендации, как правильно разбивать перепелиные и страусиные яйца.
Простые способы разбить яйцо и не повредить желток
Частая ошибка домашних кулинаров – это раскалывание скорлупы о край посуды, где замешивают тесто, взбивают омлет или готовят что-то другое. Итогом в этом случае выступает появление в готовом блюде небольших частиц твердой оболочки или растекание желтка, тогда как его в ряде рецептов требуется сохранить целым.
Чтобы предотвратить это, не стоит разбивать оболочку о край посуды или вскрывать их ножом – даже самым острым, так как правильный угол удара рассчитать сложно. При таком способе даже у опытных кулинаров скорлупа может попадать в блюдо и часто повреждается желток. Есть другие, уже отработанные и проверенные приемы, помогающие быстро и просто справиться с поставленной задачей.
На самом деле это не сложно, главное – понять принцип.
Вскрывают скорлупу так:
Разбиваем, чтобы скорлупа не попала в яичницу
Чтобы предотвратить попадание скорлупы в блюдо, требуется аккуратно сжать яйцо в ладони. Его заостренный конец направляют книзу и несильно бьют 2-4 раза по столешнице или другой твердой плоской поверхности. Затем ищут вмятину на яичной скорлупе, немного на нее надавливают большими пальцами – чтобы раскрыть разлом, и аккуратно разделяют на 2 половины. После выливают на сковороду (или в другую подготовленную посуду) и готовят яичницу.
Как разбить яйцо, не повредив желток
Способ раздвигания половинок скорлупы не самый лучший. Если вскрывать яйцо таким путем, все еще сохраняется вероятность, что желток заденет острые края и растечется. Чтобы это предотвратить, надо несильно ударить острой частью лезвия тяжелого ножа поперек яйца, которое в это время лежит на ладони.
Должна возникнуть небольшая трещина с ровными краями. Яйцо переворачивают «тупой» стороной книзу. Двумя руками скорлупу немного раскрывают, а после убирают небольшую часть. Через получившееся отверстие сливают яйцо на ладонь, сложенную «лодочкой», дают белку с нее стечь в подготовленную посуду, а желток останется на руке.
Сохраняем скорлупу целой
Для этого можно просто разбить яйцо о твердую поверхность. Но, когда требуется сохранить оболочку целой, не раскалывая ее сильно, и при этом извлечь яйцо, используют метод выдувания. Берут тонкое шило или толстую иглу – инструмент предварительно дезинфицируют – и делают прокол скорлупы с 2 сторон – на «остром» и «тупом» концах.
В отверстие вставляют зубочистку и перемешивают внутри оболочки желток с белком. Располагают яйцо над подготовленной посудой и медицинской спринцовкой закачивают в него воздух через верхний прокол. Через нижнее отверстие станет выходить содержимое скорлупы. Когда уже оболочка пустая, ее промывают теплой водой, которую заливают медицинским шприцем.
Правильно разбиваем 2 яйца одновременно
Есть два способа «открывания» 2 яиц одновременно. Первый заключен в том, что каждое берут в отдельную руку, а после одно разбивают об другое, ударяя их в самом широком месте. Затем «добивают» и оставшееся об столешницу классическим методом. Есть способ разбить скорлупу пары яиц и одной рукой, но это достаточно смелый вариант.
Сначала первое берут в ладонь так, чтобы указательный и большой пальцы были с одной стороны, а средний и безымянный – с другой. Мизинец можно не использовать, отставив его, как удобно. Так как скорлупу придется открывать одной рукой, правильность хвата крайне важна.
Ударяют яйца боком о плоскую поверхность и начинают раскрывать скорлупу. Это делают плавно, но уверенно. Если человек начнет суетиться, то есть вероятность, что в продукт попадут частицы скорлупы, желток растечется или содержимое яйца будет разбрызгано (если переусердствовать во время вскрытия оболочки).
Чтобы работать одинаково быстро каждой рукой, кулинару нужно потренироваться, но способ значительно сокращает время, требующееся на то, чтобы аккуратно, без осколков, разбивать яйца.