<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Головоломки</title>
    <description>Формулировки и решения необычных головоломок, которые наверняка вас озадачат.</description>
    <link>https://tproger.ru/tag/brain-teasers</link>
    <atom:link href="https://tproger.ru/tag/brain-teasers/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sat, 03 Oct 2026 15:14:36 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Головоломки</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Программист с 40-летним стажем проверил, заменит ли его ChatGPT — и сделал неожиданный вывод</title>
      <link>https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod</link>
      <comments>https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod</guid>
      <description><![CDATA[<p>Программист с 40-летним опытом проверил ChatGPT и другие ИИ в разработке: ИИ ускоряет работу и вдохновляет, но не заменяет опыт инженера</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/programmist-s-40-letnim-stazhem-proveril--zamenit-li-ego-chatgpt---i-sdelal-neozhidannyj-vyvod">Программист с 40-летним стажем проверил, заменит ли его ChatGPT — и сделал неожиданный вывод</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Искусственный интеллект]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[OpenAI]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Aug 2025 03:38:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>Марко Бенедетти, разработчик с 40 годами опыта, <a href="https://levelup.gitconnected.com/vibe-coding-as-a-coding-veteran-cd370fe2be50">провел</a> необычный эксперимент: в течение двух недель он писал проект вместе с ИИ-ассистентами.<b> </b></p><p>Его цель — понять, заменяет ли ИИ навыки, которые он оттачивал всю жизнь. Ответ оказался несколько сложнее, чем «да» или «нет».</p><h2>«Я позволил ИИ писать весь код. Сам я не написал ни строчки»</h2><p>Проект, над которым работал разработчик, — решатель головоломки «Ханойская башня», написанный на Python. Объем — около 5000 строк кода, 50 файлов, 20 классов.</p><p>Все идеи, архитектура, логи и алгоритмы были созданы через диалог с ИИ: <b>Claude Sonnet 4</b>, <b>OpenAI GPT-o3</b> и <b>Google Gemini Pro 2.5</b>. Бенедетти использовал <b>IDE Cursor</b>, которая интегрирует ИИ в рабочий процесс.</p><blockquote>Я не писал код. Я вел диалог с ИИ, задавал вопросы, уточнял детали, направлял. Это было похоже на парное программирование с очень умным напарником, который говорит на моем языке — и думает быстрее меня.</blockquote><h2>«ИИ удивлял — и ошибался. Но вместе мы сделали больше»</h2><p>Разработчик отмечает, что <b>код, создаваемый ИИ, часто превосходит по качеству</b> то, что он написал бы сам. Однако 20% времени уходило на исправление ошибок и «творческих решений» ассистента:</p><ul><li>ИИ предлагал слишком сложные архитектуры;</li><li>создавал громоздкий и дублирующийся код;</li><li>делал логические ошибки — например, неверно определял оптимальность алгоритма;</li><li>добавлял баги, которые прошли юнит-тесты из-за ошибок самих тестов.</li></ul><p>Тем не менее, скорость работы, по его оценке, <b>выросла как минимум вдвое</b>.</p><blockquote>Где-то ИИ спасал мне 10 минут, где-то экономил часы. Главное — я постоянно учился у него</blockquote><h2>«Вместе мы вошли в поток — но на другом уровне»</h2><p>Бенедетти подчеркивает: программирование с ИИ вызывает то же ощущение «потока», как и классическая разработка. Только теперь этот поток — не от строчек кода, а от <b>идей к готовой реализации</b> через диалог.</p><blockquote>Я задавал вопрос — и получал не просто решение, а грамотную, порой даже остроумную реализацию. Временами я чувствовал, что говорю не с ассистентом, а с равным коллегой.</blockquote><h2>«ИИ — не замена, а усилитель. Но только если ты сам понимаешь, что делаешь»</h2><p>По мнению разработчика, ИИ может быть опасен для новичков, которые <b>не в силах критически оценивать результат</b>. Он подчеркивает: нельзя «просто доверять коду» — нужно <b>уметь читать, понимать и направлять ИИ</b>.</p><blockquote>ИИ — это как мощный велосипед. Он может разогнаться до бешеной скорости. Но в руках неподготовленного — приведет к аварии.</blockquote><p>Также он отмечает, что <b>ИИ склонен навязывать «индустриальные» решения</b> даже там, где проект требует простоты и ясности — и это стоит учитывать.</p><h2>«Я больше не буду программировать без ИИ»</h2><p>Эксперимент завершился положительным выводом: <b>ИИ стал для него незаменимым помощником</b>. Он помог писать быстрее, увереннее и с бóльшим удовольствием.</p><blockquote>Я, пожалуй, больше никогда не буду писать код без ИИ-ассистента. Это слишком эффективно. И слишком увлекательно.</blockquote><p>Однако Бенедетти подчеркивает, что ИИ не «заменил» его как программиста. Напротив — <b>помог стать лучше</b>.</p><blockquote>Именно взаимодействие с ИИ сделало меня сильнее как разработчика. Он — мой собеседник, помощник, оппонент. А не инструмент, который пишет за меня.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Cicada 3301: что это вообще такое было</title>
      <link>https://tproger.ru/articles/cicada-3301--chto-eto-voobshhe-takoe-bylo-255425</link>
      <comments>https://tproger.ru/articles/cicada-3301--chto-eto-voobshhe-takoe-bylo-255425?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/cicada-3301--chto-eto-voobshhe-takoe-bylo-255425</guid>
      <description><![CDATA[<p>Продолжаем нашу серию о хакерах и тайнах программирования. Сегодняшние пациенты — Cicada 3301.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/cicada-3301--chto-eto-voobshhe-takoe-bylo-255425">Cicada 3301: что это вообще такое было</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Хакеры]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Взлом]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Apr 2025 14:03:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2012 одна загадка свела интернет с ума: это была странная игра в виде картинки с текстом на 4chan. В ней говорилось, что самые умные и подкованные в программировании ребята должны отыскать в сообщении секретное послание. И это было дело рук Cicada 3301.</p><p>Почитать предыдущие части серии можно <a href="https://tproger.ru/articles/za-sebya-i-za-internet--kto-takie-cypherpunks">здесь</a> (шифропанки) и <a href="https://tproger.ru/articles/vzlomat-mir--kto-takie-chaos-computer-club">здесь</a> (CCC).</p><h2>Первый пост и начало головоломок</h2><p>Первый пост появился на сайте 4ch (0% удивления) 4 января 2012 года. Вот он:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/fdcb0fe3-077e-43ef-82e9-8b9fae7f0509.png" alt="" /><figcaption>«Привет. Мы ищем высокоинтеллектуальных людей. Для этого мы создали тест. В этой картинке спрятано сообщение. Найдите его, и оно приведет вас к нам»</figcaption></figure><p>На первый взгляд выглядит полной чушью, но прогеры поумнее скачали этот файл, открыли его в формате TXT и увидели следующее:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/77ee9a5e-4e22-463c-a564-d211cd94966f.png" alt="" /></figure><p>Сообщение здесь гласило:<i> «Тиберий Клавдий Цезарь говорит: «lxxt&gt;33m2mqkyv2gsq3q=j02ntk»</i>. Вы уже все поняли — это опять шифрование и, как нам подсказывает Тиберий Клавдий, еще и шифр Цезаря, в котором нужно сдвигать буквы вправо или влево на определенную цифру.</p><p>Расшифровав эту картинку и получив ссылку, гики попадали на следующую. Здесь уже была утка:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/a2a1694a-8cee-4b1a-a420-be3e5cbb345d.png" alt="" /></figure><p>Если вы хотя бы раз смотрели детективы и слышали/видели фразу «Ха-ха, это ложный след», то знаете, что именно по нему и нужно идти. С уткой такая же история. На самом деле загадка крылась как раз в словах guess и out — оно отсылает к утилите OutGuess, которая с помощью стенографии скрывала данные.</p><p>Утку нужно было прогнать через эту программу и на выходе получить еще один шифр, а потом еще один и еще один — подробнее можно почитать в расследовании <a href="https://www.rollingstone.com/culture/culture-news/cicada-solving-the-webs-deepest-mystery-84394/">Rolling Stone</a>. Кстати, его журналисту удалось взять интервью у одного из таких высокоинтеллектуалов — Маркуса Уоннера. Правда, непонятно, что из его слов правда. А еще Маркус рассказывал, что он и другие дешифровщики(из одного чата) в какой-то момент начали сходить с ума.</p><p>Одна из последних загадок вела к телефонному номеру, позвонив по которому, вы могли услышать следующее:</p><p><i>«Очень хорошо. Вы отлично постарались. Есть три простых числа, связанных с оригинальным изображением final.jpg. 3301 — одно из них. Нужно найти еще два. Перемножьте все три числа и добавьте .com, чтобы сделать следующий шаг. Удачи. Пока».</i></p><p>Здесь все было просто: нужно было перемножить размеры картинки 509х503 и 3301. Получилось: 845145127.com. На сайте был таймер и очередная картинка, которую нужно было закинуть в OutGuess и получить сообщение, что нужно вернуться на сайт в 5 вечера 9 января 2012 года.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/5a22f4dd-e5af-4895-9c68-aacca7639fa1.png" alt="" /></figure><p>И здесь гиков ждала самая интересная часть: в назначенное время по этой ссылке появились координаты в 14 городах мира. Среди них даже была Москва.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/53117f8f-1772-4d0c-bb5f-0276e2082717.png" alt="" /></figure><p>В этих городах были развешаны листы с изображением цикады и qr-кодом. По ним можно было найти стихотворение и страницу «Цикада» из британской энциклопедии. Но оба сообщения содержали информацию о том, что нужно перейти на сайт, оставить email и избранными будут ли первые, а не последователи.</p><h2>Отправили email — а что дальше</h2><p>Постепенно у участников этого замечательного квеста началась паранойя особенно после того, как по всему миру появились реальные постеры с элементами игры. В чатах царило недоверие: всех подозревали в шпионстве, одни игроки подставляли других ложными подсказками, кто-то получал странные звонки, а один из участников — Текк (друг Маркуса) — после слива его личных данных стал шарахаться от любого звука и взгляда.</p><p>Некоторые прошли отбор и получили индивидуальные задачи: расшифровать число, зашифрованное с помощью RSA. Нужно было разложить 112-значное число на два простых — для этого применялись сложные алгоритмы и инструменты вроде CADO-NFS. Получив ключ, нужно было ввести расшифрованное число на том же сайте.</p><p>Следующим этапом стало расшифровывание midi-файла: комбинации высоты и длины звука соответствовали буквам. Это привело к финальному сообщению.</p><p>В феврале 2012 года «Цикада» объявила, что нужные люди найдены. Остальным предложили ждать новых заданий.</p><p>Маркус был одним из немногих, кто получил сообщение о том, что прошел отбор. Ему нужно было лишь ответить на несколько вопросов о цензуре, анонимности и свободе и отказаться от участия в преступных группировках (если он в них состоял). Так он попал в закрытый чат в даркнете где «ветераны» группы делились уклончивой информацией и поручали новые задачи. Их выводок b.0h занимался проектом CAKES — системой автоматического распространения секретной информации в случае ареста информаторов.</p><p>Однако со временем участники выгорели: проект оказался сложным, скучным и без какой-либо видимой отдачи. К концу 2012 года в группе остался один Уоннер, а в начале 2013-го его доступ к внутреннему ресурсу «Цикады» был закрыт.</p><h2>Цикады после 2012 года</h2><p>Вторая волна головоломок началась началась 5 января 2013 года, а третья — 6 января 2014 года. Тогда появилась новая загадка в Хвиттере:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/800205cc-891c-4d48-bdd9-2e838149fd0b.png" alt="" /></figure><p>В 2015 году все было тихо, а в 2016 появился еще один пост, но головоломки в нем не было:</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2025-04-18/8c843540-7913-4882-aebe-4962c66fafa8.png" alt="" /></figure><p>В 2017 году на Pastebin было обнаружено новое сообщение:</p><p>Остерегайтесь ложных путей. Всегда проверяйте PGP подпись от 7A35090F. 3301.</p><p>Это предназначалось для всех, кто пытался отыскать настоящих Цикад по словам Cicada 3301. На самом деле они натыкались на подражателей. Оригинальные послания всегда содержали цифровую <b>PGP-подпись</b>, подтверждающую их подлинность. У подделок либо подпись отсутствовала, либо использовались фальшивые ключи.</p><h2>Кто они?</h2><p>Теорий полно:</p><ul><li>Спецслужбы (АНБ, ЦРУ) — вербовка криптографов? Но слишком открыто.</li><li>Хакеры — Cypherpunk или Anonymous? Победители 2012 года работали над системой защиты информаторов, но связи нет.</li><li>Тайное общество — масоны 2.0? Отсылки к Блейку и рунам добавляют мистики.</li><li>Тролли — эксперимент? Кстати, вполне возможно и довольно смешно. Может, Цикады задумали показать, что такое найм в айти. Есть ощущение, что в 2012 году все происходило именно так: не взломал Пентагон — пошел вон.</li></ul><p>В 2015 году хакеры под именем «3301» атаковали Planned Parenthood, но «Цикада» открестилась через PGP. А в июне 2024 года появилась хакерская группа Cicada3301, которая занимается ransomware-атаками. Они используют код, похожий на ALPHV/BlackCat, и даже запустили партнерскую программу на форуме Ramp. Но это точно не та «Цикада». Сообщество и старые участники уверены: настоящая «Цикада» не стала бы заниматься вымогательством. Это просто кто-то, кто решил использовать легендарное имя. В целом за время своего существования они пока ничего не сделали, но кто знает, может, нас ждет новый цикл в будущем?</p><p>Хотя культурный след «Цикады» по истине огромен. Она вдохновила эпизод сериала «Грань», игру Assassin’s Creed Origins и даже других подражателей, вроде Cicada Detroit. Пазлы «Цикады» стали эталоном для ARG (альтернативных реальностей), где виртуальное смешивается с реальным.</p><p>Мы считаем, что у Цикад получилось очень круто. По крайней мере, они неплохо разбираются в пиаре — создать такой ажиотаж вокруг себя. Да и такие задачи решать тоже вполне полезно, можете на досуге немного погрузиться в шифрование. Начать можете с шифра Цезаря.</p><p>В качестве домашнего задания — разгадайте наше послание и отпишитесь в комментах:</p><p><b>3, сруфгеяфж огно</b></p><p>Тайны тайнами, а кодить надо. Все о программировании — в нашем <a href="https://t.me/+ajgz7pDecB4xZTI6">тг-канале</a>!</p>]]></content:encoded>
    </item>
    <item>
      <title>Специальный сервис Google покажет, где находится Санта Клауса прямо сейчас</title>
      <link>https://tproger.ru/news/specialnyj-servis-google-pokazhet--gde-nahoditsya-santa-klausa-pryamo-sejchas</link>
      <comments>https://tproger.ru/news/specialnyj-servis-google-pokazhet--gde-nahoditsya-santa-klausa-pryamo-sejchas?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/specialnyj-servis-google-pokazhet--gde-nahoditsya-santa-klausa-pryamo-sejchas</guid>
      <description><![CDATA[<p>Отследите Санта-Клауса в реальном времени с помощью NORAD Tracks Santa и Google Santa Tracker. Узнайте, где он сейчас, и окунитесь в праздничное волшебство</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/specialnyj-servis-google-pokazhet--gde-nahoditsya-santa-klausa-pryamo-sejchas">Специальный сервис Google покажет, где находится Санта Клауса прямо сейчас</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Новый Год]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Dec 2024 09:44:48 GMT</pubDate>
      <content:encoded><![CDATA[<p>Каждый год Санта-Клаус отправляется из своего дома на Северном полюсе, чтобы доставить подарки детям по всему миру.</p><p>Традиция отслеживания его пути стала неотъемлемой частью рождественского веселья, доступной как для детей, так и для взрослых.</p><h2>NORAD Tracks Santa: Классический способ отслеживания</h2><p>Один из самых популярных инструментов — <a href="https://www.noradsanta.org/">NORAD Tracks Santa</a>, созданный Североамериканским командованием воздушно-космической обороны (NORAD). Этот трекер существует уже более двух десятилетий и недавно получил обновление в виде чат-бота с ИИ.</p><p>NORAD использует спутниковые снимки и компьютерную графику для отображения пути Санты на интерактивной 3D-карте.</p><p>Идея трекера родилась ещё в 1955 году, когда волонтёры начали принимать звонки от детей, желающих узнать местонахождение Санты. Эта традиция сохраняется и по сей день.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-12-25/3d733598-98e2-4e8e-8e45-7180c9a7c5fd.jpeg" alt="" /></figure><h2>Google Santa Tracker: Современный взгляд на путешествие Санты</h2><p>Вдохновившись успехом NORAD, Google в 2004 году запустил <a href="https://santatracker.google.com/">Google Santa Tracker</a>. Он использует технологии визуализации, разработанные после приобретения сервиса Keyhole (ныне Google Earth).</p><p>Google Santa Tracker демонстрирует пройденное расстояние, количество доставленных подарков и следующую точку остановки Санты.</p><p>Вы можете нажать на кнопку с красной шапкой в правом верхнем углу, чтобы точно определить местоположение Санты, или свободно перемещаться по карте, исследуя его маршрут.</p><p>Помимо трекинга, Google добавила на сайт игры, головоломки и анимационные видео на рождественскую тематику, что делает использование сервиса ещё более увлекательным.</p><figure><img src="https://media.tproger.ru/user-uploads/98945/2024-12-25/0c02c5a3-37d8-450b-8ae6-75f9b70fdcbc.jpeg" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Задача от Tprogera: на счет в уме</title>
      <link>https://tproger.ru/articles/zadacha-ot-tprogera--na-procenty</link>
      <comments>https://tproger.ru/articles/zadacha-ot-tprogera--na-procenty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/zadacha-ot-tprogera--na-procenty</guid>
      <description><![CDATA[<p>Очередное развлечение на вечер: проверьте, сможете ли вы посчитать в уме нужный процент</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/zadacha-ot-tprogera--na-procenty">Задача от Tprogera: на счет в уме</a>»</p>]]></description>
      <category><![CDATA[faq]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 29 Aug 2024 14:30:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сегодня в повестке дня крайне простая задачка — нужно банально посчитать в уме. В общем, начальная школа.</p><p>Найдите общий процент закрашенной площади на рисунке ниже.</p><figure><img src="https://media.tproger.ru/user-uploads/101078/2024-08-27/accc93d0-a4d3-4475-9de1-5f4cfdd069de.png" alt="" /></figure>]]></content:encoded>
    </item>
    <item>
      <title>Задача от Tproger: на вероятность</title>
      <link>https://tproger.ru/problems/zadachka-ot-tproger--na-veroyatnost--iteraciya-2-</link>
      <comments>https://tproger.ru/problems/zadachka-ot-tproger--na-veroyatnost--iteraciya-2-?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/zadachka-ot-tproger--na-veroyatnost--iteraciya-2-</guid>
      <description><![CDATA[<p>Небольшое развлечение на вечер: вспомните школу и решите простенькую задачку на вероятность</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/zadachka-ot-tproger--na-veroyatnost--iteraciya-2-">Задача от Tproger: на вероятность</a>»</p>]]></description>
      <category><![CDATA[faq]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 20 Aug 2024 14:30:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы думали, что математика, а уж тем более знание теории вероятности, вам больше никогда не пригодятся (дата сайентисты и другие причастные, про вас знаем), не тут-то было. Но мы уверены, что вы справитесь — задачка совсем не сложная.</p><p>Вы бросаете два игральных кубика. Найдите вероятность того, что сумма двух выпавших очков будет простым числом.</p>]]></content:encoded>
    </item>
    <item>
      <title>Объяснение: ученые рассказали о разгадке самого сложного шифра маньяка-Зодиака спустя 55 лет</title>
      <link>https://tproger.ru/news/obyasnenie--uchenye-rasskazali-o-razgadke-samogo-slozhnogo-wifra-manyaka-zodiaka-spustya-55-let</link>
      <comments>https://tproger.ru/news/obyasnenie--uchenye-rasskazali-o-razgadke-samogo-slozhnogo-wifra-manyaka-zodiaka-spustya-55-let?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/obyasnenie--uchenye-rasskazali-o-razgadke-samogo-slozhnogo-wifra-manyaka-zodiaka-spustya-55-let</guid>
      <description><![CDATA[<p>Группа ученых рассказала о методе, который помог им расшифровать загадочный текст, отправленный маньяком-убийцей Зодиаком полиции еще 55 лет назад</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/obyasnenie--uchenye-rasskazali-o-razgadke-samogo-slozhnogo-wifra-manyaka-zodiaka-spustya-55-let">Объяснение: ученые рассказали о разгадке самого сложного шифра маньяка-Зодиака спустя 55 лет</a>»</p>]]></description>
      <category><![CDATA[Криптография]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 05 Apr 2024 14:03:41 GMT</pubDate>
      <content:encoded><![CDATA[<p>Зодиак наводил ужас на Калифорнию в конце 60-х — на его счету минимум 5 убийств.</p><p>Помимо своих жутких преступлений, он издевался над полицией и прессой, отправляя послания с загадочными шифрами. Пожалуй, самым сложным из них был Z340, который оставался неразгаданным 51 год!</p><h2>Неуловимый убийца... пока</h2><p>В 2020 году международная команда криптографов, наконец, взломала Z340. Но подробности своего труда они опубликовали только сейчас, и это поразительное чтение:</p><ul><li><b>Массивная атака:</b> Потребовались годы проб и ошибок, суперкомпьютеры, и специально созданное ПО.</li><li><b>Перехитрил сам себя?</b> Скорее всего, Зодиак не планировал настолько сложный шифр. Криптографы полагают, что в 1969 году вычислительных мощностей, чтобы его раскрыть, просто не существовало.<br /></li><li><b>«Надеюсь, вам весело меня ловить»:</b> Жуткие послания Зодиака раскрываются впервые. В них он говорит, что не боится газовой камеры, ведь для него она — прямой путь в рай, где его ждет «армия рабов».<br /></li></ul><h2>Что было в послании Зодиака</h2><p>Зодиак насмехается над полицией и обещает рай себе и вечное рабство другим. Это классический ход серийных убийц, пытающихся доказать свое превосходство и всесилие.</p><blockquote>ЭТО БЫЛ НЕ Я В ТЕЛЕШОУ. ЧТО НАВОДИТ МЕНЯ НА МЫСЛЬ: Я НЕ БОЮСЬ ГАЗОВОЙ КАМЕРЫ, ПОТОМУ ЧТО ОНА ОТПРАВИТ МЕНЯ В РАЙ ЕЩЕ РАНЬШЕ. ТЕПЕРЬ У МЕНЯ ДОСТАТОЧНО РАБОВ, ЧТОБЫ РАБОТАТЬ НА МЕНЯ, КОГДА ВСЕ ОСТАЛЬНЫЕ НИЧЕГО НЕ ПОЛУЧАЮТ, ДОСТИГАЯ РАЯ. ПОЭТОМУ ОНИ БОЯТСЯ СМЕРТИ.  Я НЕ БОЮСЬ, ПОТОМУ ЧТО ЗНАЮ – МОЯ НОВАЯ ЖИЗНЬ БУДЕТ ЛЕГКОЙ В РАЮ. СМЕРТЬ.</blockquote><h2>Как удалось его расшифровать</h2><p>Десятилетия кропотливой работы — криптографы перепробовали множество методов, прежде чем добиться успеха. Им помог специальный софт — AZDecrypt. Программа создана Ярлом Ван Эйком. Именно она смогла расшифровать гомофонные подстановки.</p><p>И хоть шифры раскрыты, личность Зодиака официально не установлена. Но криптографы помогли следствию приблизиться к раскрытию этой жуткой загадки длинною в полвека.</p>]]></content:encoded>
    </item>
    <item>
      <title>7 легендарных уравнений на JavaScript</title>
      <link>https://tproger.ru/articles/10-legendarnyh-uravnenij-na-javascript</link>
      <comments>https://tproger.ru/articles/10-legendarnyh-uravnenij-na-javascript?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Ирина Тюльпакова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/10-legendarnyh-uravnenij-na-javascript</guid>
      <description><![CDATA[<p>Математика и компьютерные науки идут рука об руку. Подобрали 7 математических формул разного уровня сложности для проверки — сможете ли вы их реализовать? И на всякий случай снабдили статью нашими решениями.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/10-legendarnyh-uravnenij-na-javascript">7 легендарных уравнений на JavaScript</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 31 Mar 2024 10:45:56 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы нашли несколько математических формул, которые в своё время внесли значимый вклад в развитие математики, геометрии и физики. Предлагаем разминку для ума: сможете ли вы справиться и реализовать все перечисленные нами формулы?</p><p>Кстати, Kata Academy набирает студентов на обучение JavaScript. Это отличная возможность, так как вы не платите за обучение, пока не устроитесь Javascript-разработчиком! Подробности здесь → <a href="https://tproger.ru/courses/kurs-po-javascript-razrabotke-ot-kata-academy?erid=LjN8KcGuo">Курс по JavaScript-разработке от Kata Academy.</a></p><h2>Теорема Пифагора</h2><p>Начнём с простенькой формулы. Известная всем со школьной скамьи теорема, которая гласит: квадрат гипотенузы равен сумме квадратов катетов в прямоугольном треугольнике. Она широко используется в инженерии (например, архитектуре), физике и информатике.</p><p>Возьмем c как длину гипотенузы, а a и b — длины катетов. Получаем запись a^2 + b^2 = c^2.</p><h2>Логарифмы</h2><p>С логарифмами сталкивались все в старших классах школы — эта функция возведения в степень, только наоборот: у нас есть возведённое в степень число, и мы хотим узнать, в какую степень нужно возвести основание.</p><p>Звучит определение логарифма примерно так: результат логарифма по основанию a от b будет являться такое число c, для которого справедливо a^c = b. Логарифмы, которые записываются без основания как log(x) — натуральные, то есть в его основание будет константа e.</p><p>Сможете реализовать функцию, которая бы проверяла достоверность log(xy)=log(x)+log(y)?</p><h2>Математический анализ</h2><p>f'(x)=lim(h→0)h</p><p>Теперь пример посложнее. Перед вами уравнение определения производной. Сможете реализовать код, который бы аппроксимировал бы производную функцию в заданной точке, вычисляя наклон секущей линии через две точки функции? При условии, что эти две точки находятся очень близко друг к другу.</p><p>Функция derivative() аппроксимирует производную функцию f в точке x. На выходе в примере мы получаем наклон касательной к f(x) = x^2 при заданном x=3. А поскольку производная для квадратичной функции от x всегда равна 2x, мы ожидаем, что скрипт выдаст ответ 6. В реальности, реализованная функция должна выдать очень близкий к нашему значению результат.</p><h2>Универсальный закон всемирного тяготения Ньютона</h2><p>Закон сформулирован следующим образом: сила притяжения прямо пропорциональна произведению их масс и обратно пропорциональна квадрату расстояния между их центрами. Для</p><ul><li>F — вычисляемая сила притяжения;</li><li>G — гравитационная постоянная (6,674 * 10^(-11) Н(м^2)/кг^2);</li><li>m1 и m2 — масса двух объектов;</li><li>r — расстояние между центрами двух масс;</li></ul><p>будет справедлива запись F=G(m1*m2/r^2).</p><h2>Комплексные числа</h2><p>Комплексные числа вселяли в нас ужас — i^2 = -1. Между тем, они часто используются для решения полиномиальных уравнений (то есть таких, в которых используются многочлены типа x^2=x^3).</p><p>Комплексные числа упрощают анализ электрических цепей, облегчают описание квантовой механики и играют ключевую роль в обработке сигналов.</p><p>Реализация комплексных чисел на JavaScript предполагает создание структуры для обработки как действительной, так и мнимой частей комплексных чисел, поскольку JavaScript изначально не поддерживает комплексные числа.</p><p>В нашем примере мы создаём мнимую единицу i в виде комплексного числа с 0 действительной частью и 1 в качестве мнимой, затем возводим i в квадрат чтобы доказать, что результатом будет -1.</p><h2>Нормальное распределение</h2><figure><img src="https://media.tproger.ru/user-uploads/88534/2024-03-29/2aeb39d3-56c8-4873-950b-dc0d38aee765.jpg" alt="" /><figcaption>Тут уж без картинки не обойдёшься</figcaption></figure><p>Основополагающая формула в статистике и теории вероятностей. Она описывает разброс данных вокруг среднего значения.</p><p>Теорема утверждает: сумма многих независимых случайных величин будет приблизительно соответствовать нормальному распределению. Приведенное выше уравнение представляет функцию плотности вероятности нормального распределения, где:</p><ul><li>x — переменная;</li><li>μ — среднее значение распределения;</li><li>σ — стандартное отклонение распределения;</li><li>e — основа натурального логарифма (~2.71828);</li><li>π приблизительно равно 3.14159.</li></ul><p>Сможете написать функцию для вычисления математического ожидания для заданного x?</p><h2>Уравнение Шрёдингера</h2><figure><img src="https://media.tproger.ru/user-uploads/88534/2024-03-29/f27cea60-c373-4e67-8807-3b1d0e0b35f5.jpg" alt="" /></figure><p>Возьмём формулу из квантовой механики. Уравнение Шрёдингера описывает, как квантовое состояние физической системы изменяется со временем. Уравнение предоставляет способ вычисления амплитуды вероятности положения и импульса частиц, позволяя предсказывать множество физических свойств и явлений, таких как уровни энергии, структуры связей и поведение электронов в атомах.</p><p>Реализация этого уравнения на JavaScript, определенно, выходит за рамки простых функций языка. Сможете с ним справиться? Мы не справились, поэтому приводим концептуальное решение.</p><p>Делитесь в комментариях, какие хитрые формулы вы ещё знаете. А если приложите код — то мы обязательно дополним материал вашим примером.</p><p>Интересуетесь новыми возможностями и языками программирования? Возможно, позиция <a href="https://tproger.ru/jobs/sre-inzhener-deckhouse">SRE-инженера в Deckhouse, компании Флант</a>, станет для вас отличным шансом применить свои знания на практике и участвовать в разработке инновационных проектов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Логические задачи для программистов, которые бесят своей простотой</title>
      <link>https://tproger.ru/articles/logicheskie-zadachi-po-programmirovaniyu-kotorye-tolko-kazhutsya-slozhnymi</link>
      <comments>https://tproger.ru/articles/logicheskie-zadachi-po-programmirovaniyu-kotorye-tolko-kazhutsya-slozhnymi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/logicheskie-zadachi-po-programmirovaniyu-kotorye-tolko-kazhutsya-slozhnymi</guid>
      <description><![CDATA[<p>Собрали каверзные логические задачи с собеседований для SDE. Они кажутся сложными, но на деле довольно простые. Испытайте себя!</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/logicheskie-zadachi-po-programmirovaniyu-kotorye-tolko-kazhutsya-slozhnymi">Логические задачи для программистов, которые бесят своей простотой</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 06 Dec 2023 12:33:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>Составили список каверзных задач по программированию, которые часто встречаются на собеседованиях Software Development Engineer (SDE).</p><p>Сперва они кажутся сложными, и хочется искать мудреные ответы со сложными алгоритмами, но на самом деле они такие простые, что, узнав решение, начинаешь беситься.</p><p>Испытайте себя и узнайте, сможете ли вы найти быстрое и простое решение.</p><p>Оригинальные задачки можно прочесть на сайте <a href="https://www.geeksforgeeks.org/">Geeksforgeeks</a>. В этой статье приведен адаптированный перевод, который мы сделали куда более литературным и чуть более мемным. :)</p><h2>Последний шар в мешке</h2><p>У вас есть мешок, внутри которого 20 красных и 16 синих шаров. Вы должны вытаскивать по два шара из этого мешка за один раз.</p><p>Если шары одного цвета, то вы заменяете их синим шаром, но если они разного цвета, то вы кладете в мешок красный шар. Те шары, которые вы вытащили, в мешок не возвращаются, поэтому их количество в мешке постоянно уменьшается.</p><p>Какого цвета будет последний шар в мешке?</p><h2>Деньрожденный тортик</h2><p>У вас есть День рождения! Поздравляем, черт возьми!</p><p>Гости принесли вам тортик, и его нужно разрезать на 8 равных частей, чтобы каждому гостю достался кусочек. Но вот незадача (или все же задача?..): вы можете сделать только 3 разреза. Как вы это сделаете?</p><h2>Пчела и крушение поездов</h2><p>Два поезда выехали из депо навстречу друг другу. К сожалению, стрелку на путях не перевели, и поезда рано или поздно столкнутся. Железнодорожники этого не заметили, зато заметила прозорливая пчелка. Она летит между поездами, от одного к другому, пытаясь предупредить машинистов.</p><p>Скорость первого поезда составляет 50 км/ч, а скорость второго поезда – 70 км/ч. На старте расстояние между поездами составляет 100 км.</p><p>Сначала пчела летит от первого поезда ко второму. Как только она достигает второго поезда, она сразу же летит обратно к первому поезду. Рассчитайте общее расстояние, которое придется пролететь пчеле. Ее скорость составляет 80 км/ч.</p><h2>Охранник и 100 дверей</h2><p>Охранник работает в большом здании, в котором целых 100 кабинетов и 100 дверей соответственно. Все они изначально закрыты. Поскольку проверить каждый кабинет в течение ночи охранник не успеет, он придумал хитрую систему. Раз в пять минут он проходит вдоль всех кабинетов и открывает или закрывает двери в них следующим образом:</p><ul><li>На первом проходе охранник открывает каждую дверь.</li><li>На втором проходе человек закрывает каждую вторую дверь.</li><li>На третьем проходе человек закрывает каждую третью дверь.</li><li>…</li><li>На 100-м проходе человек открывает или закрывает 100-ю дверь.</li></ul><p>В конце смены охранник должен запереть все двери. Как ему рассчитать, какие двери останутся открытыми в конце?</p><h2>Перепутанные этикетки</h2><p>У вас есть 3 банки с соленьями A, B и C. Вы знаете, что этикетки на них расклеены неправильно. К примеру:</p><ol><li>На банке А висит этикетка “Соленые огурчики”.</li><li>На банке В висит этикетка “Маринованные помидоры”.</li><li>На банке С висит этикетка “Огурчики и помидорки”.</li></ol><p>Вы можете только раз попробовать содержимое одной банки. К примеру, если вы взяли банку “Огурчики и помидорки” и достали помидор, достать второе соленье из той же банки уже не выйдет.</p><p>Каким будет минимальное количество солений, которые вам придется съесть, чтобы понять, как правильно пометить банки?</p><h2>Муравьи в треугольнике</h2><p>На трех углах треугольника сидят 3 муравья. Все муравьи случайным образом выбирают направление и начинают двигаться вдоль края треугольника. Какова вероятность того, что два муравья встретятся?</p><h2>Возраст дочерей</h2><p>Известно, что у синьора Саши есть три дочери. Джун Илюша решил узнать, сколько лет дочкам Саши. Тогда синьор решил загадать джуну загадку, дав три подсказки:</p><ol><li>Произведение их возрастов равно 72.</li><li>Сумма их возрастов равна номеру моего дома.</li><li>Старшая девочка любит клубничное мороженое.</li></ol><p>Подумав, джун Илюша смог угадать возраст. Можете ли вы угадать, сколько лет дочкам Саши?</p><h2>Заключение</h2><p>Надеемся, вам удалось решить все задачки. :)</p><p>Пишите в комментариях, если вы нашли другие, нестандартные решения для задач: они точно есть.</p><p>Если вы сталкивались с логическими задачками на собеседованиях, расскажите, что именно вам встречалось, обсудим! :)</p>]]></content:encoded>
    </item>
    <item>
      <title>5 логико-математических задач, которые поставят в тупик</title>
      <link>https://tproger.ru/articles/5-logiko-matematicheskih-zadach-kotorye-postavjat-v-tupik</link>
      <comments>https://tproger.ru/articles/5-logiko-matematicheskih-zadach-kotorye-postavjat-v-tupik?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/5-logiko-matematicheskih-zadach-kotorye-postavjat-v-tupik</guid>
      <description><![CDATA[<p>Собрали для вас пять интересных логико-математических задач, которые кажутся сложными лишь на первый взгляд. Сумеете решить?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/5-logiko-matematicheskih-zadach-kotorye-postavjat-v-tupik">5 логико-математических задач, которые поставят в тупик</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 23 Mar 2023 12:52:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>А давайте отвлечёмся от кода и перещёлкаем 5 логико-математических задач. Попробуйте решить их в уме и напишите свои ответы в комментариях.</p><h2>1. Возраст мальчика</h2><p>Обилечивая человека, кондуктор поинтересовался, сколько лет его сыну. Человек ответил уклончиво:</p><p>– Моя дочь в пять раз младше моего сына, а моя жена — в 5 раз его старше. Я, в свою очередь, вдвое старше своей жены. Моя мама сегодня отмечает день рождения — ей исполнился 81 год — столько, сколько мне, жене, дочери и сыну вместе взятым.</p><p>Так сколько же лет мальчику?</p><h2>2. Вёдра с водой</h2><p>Стоит два ведра ёмкостью 5 л и 9 л. Из реки необходимо набрать 3 литра воды. Как это сделать, если в распоряжении есть только эти два ведра?</p><h2>3. Лампочки и переключатели</h2><p>Есть две комнаты с низкими потолками. В первой висит три лампы накаливания, а в другой установлено три переключателя. Можно сколько угодно раз щёлкать переключатели, но в комнату с лампочками разрешено перейти только один раз.</p><p>Как узнать, к какому переключателю подсоединена каждая из лампочек?</p><h2>4. Время по верёвкам</h2><p>А как насчёт такой логико-математической задачи? Предположим, у нас есть две верёвки и бесконечное множество спичек. Каждая из этих верёвок сгорает за один час. Но вот беда — горят они неравномерно, поэтому невозможно узнать наверняка, за какое время сгорит какая-то часть веревки.</p><p>Можно ли отмерить этими двумя верёвками 45 минут, и если да, то как это сделать?</p><h2>5. Баночки с таблетками</h2><p>Есть двадцать баночек с таблетками. Почти во всех таблетки весят по 1 г, и только в одной — по 1,1 г. У нас есть точные кухонные весы, с помощью которых нужно определить баночку, каждая таблетка которой весит 1,1 г. Как это сделать, если можно взвесить только 1 раз?</p><p>Понравилось решать логико-математические задачи? Тогда вас могут заинтересовать <a href="https://tproger.ru/articles/10-logicheskih-zadach-s-sobesedovanij-kotorye-zastavjat-zastrelitsja/">хитрые задания на логику с собеседований</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Логическая задача про бракованные батарейки</title>
      <link>https://tproger.ru/problems/logicheskaja-zadacha-pro-brakovannye-batarejki</link>
      <comments>https://tproger.ru/problems/logicheskaja-zadacha-pro-brakovannye-batarejki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/logicheskaja-zadacha-pro-brakovannye-batarejki</guid>
      <description><![CDATA[<p>Анализируем и решаем логическую задачу про бракованные батарейки, которую любят задавать на собеседованиях.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/logicheskaja-zadacha-pro-brakovannye-batarejki">Логическая задача про бракованные батарейки</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Jan 2023 08:30:01 GMT</pubDate>
      <content:encoded><![CDATA[<p>Эту логическую задачу про батарейки порой задают на собеседованиях по программированию, чтобы проверить умение кандидата находить правильное решение в стрессовых ситуациях. Также задача про батарейки попадается на ЕГЭ. Давайте разберём условие и решим её.</p><h2>Условие</h2><p>Перед программистом завода по производству батареек поставлена задача: разработать программное обеспечение, которое могло бы контролировать качество выпускаемой продукции. При этом есть два немаловажных нюанса:</p><ol><li>Каждая изготовленная батарейка может оказаться бракованной с вероятностью 2%.</li><li>Система контроля качества в 98% случаев обнаруживает неработающие батарейки и в 1% случаев бракует работающие.</li></ol><p>Разработчик должен определить среднее количество забракованных батареек на партию в 10 000 штук.</p><h2>Решение</h2><p>Сначала выясним, с какой вероятностью система забракует любую батарейку, а затем применим результат к десятитысячной партии.</p><ol><li>Вероятность брака = 0,02, тогда вероятность рабочей батарейки = 0,98.</li><li>Система контроля забракует рабочую батарейку с вероятностью 0,01 (вероятность ошибки) * 0,98 (вероятность изготовления рабочей батарейки) = 0,0098.</li><li>Система контроля забракует нерабочую батарейку с вероятностью 0,98 (вероятность обнаружения брака) * 0,02 (вероятность выпуска брака) = 0,0196.</li><li>Для нахождения вероятности отбраковки любой батарейки выполним сложение этих значений: 0,0098 + 0,0196 = 0,0294.</li></ol><p>Наша партия составляет 10 000 батареек. Применим к этому числу полученный результат:</p><p>10 000 * 0,0294 = 294</p><p>Это и есть среднее количество забракованных батареек на партию в 10 000 штук. Если в одной из таких партий объём отбракованной продукции будет сильно больше, следует проверить корректность работы оборудования.</p><p>Понравилось решение логической задачи про батарейки? Держите ещё несколько <a href="https://tproger.ru/problems/batteries-series-conferences/">задач для программистов</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Угадать число от 0 до 100 за 7 попыток — математический трюк</title>
      <link>https://tproger.ru/articles/matematicheskij-fokus-ugadat-chislo-ot-0-do-100-za-7-popytok</link>
      <comments>https://tproger.ru/articles/matematicheskij-fokus-ugadat-chislo-ot-0-do-100-za-7-popytok?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Марина Александровна]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/matematicheskij-fokus-ugadat-chislo-ot-0-do-100-za-7-popytok</guid>
      <description><![CDATA[<p>Математический фокус, который способен удивить. Объясним алгоритм и напишем на Java простенькую программу для решения.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/matematicheskij-fokus-ugadat-chislo-ot-0-do-100-za-7-popytok">Угадать число от 0 до 100 за 7 попыток — математический трюк</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 11 Feb 2022 08:30:41 GMT</pubDate>
      <content:encoded><![CDATA[<p>Этот математический фокус не так сложен, как может показаться на первый взгляд. Более того, решение мы реализуем программно на языке Java. Приступим?</p><h2>Условие</h2><p>Если расписать весь процесс поэтапно, выглядит это следующим образом:</p><ol><li>Вы загадываете число от 0 до 100.</li><li>Программа выводит целое число в рамках данного диапазона.</li><li>Вы отвечаете, ваше число больше, меньше или равно тому, что вывела программа.</li><li>Если число больше либо меньше, программа продолжает предлагать варианты.</li><li>За 7 или менее попыток число гарантированно угадывается.</li></ol><h2>Решение</h2><p>На самом деле, никакого особого секрета здесь нет, и решение строится на бинарном поиске. Это простая алгоритмическая задача, смысл которой в том, чтобы каждый раз делить оставшийся диапазон на 2. Таким образом мы с каждой попыткой вдвое сокращаем область поиска, увеличивая шансы на успех. Вот и весь математический фокус.</p><p>Допустим, первой догадкой алгоритма будет число 50, после чего становится понятно, в какую сторону исходного диапазона «шагать» дальше: это будет область 0–50 либо 51–100. Если первый вариант, то далее алгоритм предложит число 25 и так далее. Математические законы предполагают, что если число 100 делить вдвое 7 раз, мы гарантированно получим результат в районе единицы.</p><p>Можно найти число и в диапазоне побольше — от 0 до 127 или от 1 до 128. Всё потому, что 27=128. Соответственно, если у нас будет 8 попыток, область можно увеличить до 256, если 9 — до 512 и т. д. По этому же принципу работают <a href="https://tproger.ru/articles/dvoichnoe-binarnoe-derevo-sozdanie-i-obhod/">бинарные деревья</a>.</p><p>Но решать всё вручную с калькулятором наперевес — прошлый век. Давайте подключим код и посмотрим, как с этим справится программа.</p><h2>Решение кодом</h2><p>Воспроизведём решение с помощью Java без использования графического интерфейса. При желании всегда можно подключить Swing или JavaFX.</p><p>Для начала определимся с переменными, которые нам потребуются:</p><p>Поскольку мы будем работать с терминалом, подключим слушатель событий с помощью класса Scanner:</p><p>И объявим переменную слушателя:</p><p>Далее всё просто: программа выводит варианты, а пользователь отправляет +, - или =, в зависимости от того, больше загаданное число, меньше или идентично. Пока введённое значение не = (while (!strInput.equals("="))), продолжаем вычислять и делить заданный диапазон:</p><p>Понравилась задачка? Держите ещё один математический фокус в виде <a href="https://tproger.ru/articles/gipoteza-kollatca-samyj-krutoj-matematicheskij-fokus-vseh-vremjon/">гипотезы Коллатца</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит поиграть: обзор головоломки Keep Talking and Nobody Explodes</title>
      <link>https://tproger.ru/articles/stoit-poigrat-obzor-golovolomki-keep-talking-and-nobody-explodes</link>
      <comments>https://tproger.ru/articles/stoit-poigrat-obzor-golovolomki-keep-talking-and-nobody-explodes?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Олег Борисенков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/stoit-poigrat-obzor-golovolomki-keep-talking-and-nobody-explodes</guid>
      <description><![CDATA[<p>Парная игра студии Steel Crate Games: один игрок обезвреживает бомбу, второй читает мануал с описанием модулей. Доступна с 2015 года и в VR.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/stoit-poigrat-obzor-golovolomki-keep-talking-and-nobody-explodes">Стоит поиграть: обзор головоломки Keep Talking and Nobody Explodes</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Виртуальная реальность]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 30 Mar 2021 13:19:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Keep Talking and Nobody Explodes — это головоломка разработанная канадской инди студией <a href="https://steelcrategames.com/">Steel Crate Games</a>. Игра рассчитана минимум на двух человек.</p><p>Первый – взаимодействует с бомбой, пытаясь разминировать её за отведённое время, под руководством второго игрока.</p><p>Второй — может только читать мануал, в котором описаны все возможные модули из которых состоит бомба.</p><p>Игра вышла в 2015 году, сейчас она доступна для Windows, Mac OS, Linux, PlayStation 4, iOS и Android. В Keep Talking and Nobody Explodes можно играть в VR.</p><h2>Геймплей для сапёра</h2><figure><img src="https://media.tproger.ru/uploads/2021/03/table-autoconverted.jpeg" alt="" /><figcaption>На этой бомбе помимо модулей находятся две батарейки и параллельный порт.</figcaption></figure><p>Перед вами на столе лежат бомба и часы, которые могут внезапно запищать. Вы можете осматривать бомбу со всех сторон и сообщать то, что видите эксперту. Каждая бомба состоит из модулей и имеет чисто визуальные особенности (элементы питания, порты, индикаторы и т.д.), которые нужно описывать эксперту, чтобы получить от него нужные указания.</p><p>Кроме этого на бомбе есть таймер и счетчик ошибок.</p><p>Цель игры — обезвредить бомбу за определённое время, не совершив слишком много ошибок (что приведёт к взрыву). Каждая допущенная ошибка ускоряет таймер.</p><p>Каждый модуль имеет свои органы управления и никак не связан с другими. На одной бомбе может находиться до 11 модулей.</p><p>В игре довольно много модулей, каждый из которых требует совершенно разного подхода: от перерезания проводов до дешифровки азбуки Морзе. Также вам могут попасться нестабильные модули, которые невозможно полностью обезвредить, поэтому к ним придётся периодически возвращаться во время игры.</p><p>В процессе разминирования игра будет мешать вам разными способами. То отключится свет в комнате, то внезапно зазвучит сигнал тревоги, в общем, здесь не расслабишься ?</p><h2>Геймплей для эксперта</h2><figure><img src="https://media.tproger.ru/uploads/2021/03/bomb.png" alt="" /></figure><p>В вашем распоряжении находится лишь инструкция к игре, в которой описаны все возможные варианты модулей. Для более аутентичного опыта советуем её распечатать. А если вас несколько человек, то удобно будет распределить листки между собой.</p><p>Полагаясь на описания сапёра вам нужно быстро находить в мануале описания нужных модулей и давать указания по их разминированию. Модули бывают как очень простые, так и довольно сложные: иногда нужно запоминать все шаги по разблокировке модуля и возвращаться к ним, а иногда разбираться со схемами и таблицами.</p><p>В Keep Talking and Nobody Explodes есть несколько уровней сложности, в каждом из которых бомбы генерируются случайным образом.</p>]]></content:encoded>
    </item>
    <item>
      <title>Отмеряем минуты фитилями и доказываем прямоугольность треугольника — две логические задачи</title>
      <link>https://tproger.ru/problems/otmerjaem-minuty-fitiljami-i-dokazyvaem-prjamougolnost-treugolnika-dve-logicheskie-zadachi</link>
      <comments>https://tproger.ru/problems/otmerjaem-minuty-fitiljami-i-dokazyvaem-prjamougolnost-treugolnika-dve-logicheskie-zadachi?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/otmerjaem-minuty-fitiljami-i-dokazyvaem-prjamougolnost-treugolnika-dve-logicheskie-zadachi</guid>
      <description><![CDATA[<p>Как отмерить 7 минут 30 секунд четырьмя фитилями, каждый из которых горит 60 минут неравномерно, и доказать прямоугольность треугольника.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/otmerjaem-minuty-fitiljami-i-dokazyvaem-prjamougolnost-treugolnika-dve-logicheskie-zadachi">Отмеряем минуты фитилями и доказываем прямоугольность треугольника — две логические задачи</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 30 Dec 2020 14:53:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>У меня есть две любимые логические задачи.</p><h2>Задача 1</h2><p>Вы специалист-подрывник. Вам нужно уничтожить объект с помощью заряда, который должен сдетонировать ровно через 7 минут 30 секунд. Но вот беда, саму взрывчатку вы взяли, а детонатор забыли. Но в вашем распоряжении есть 4 фитиля одинаковой длины. Каждый из них горит ровно 60 минут, но неравномерно (т.е. если поделить фитиль пополам, то время горения не будет равным 30 минутам). Как отмерить 7,5 минут с помощью этих фитилей? Скручивать, складывать, резать и рвать можно, но это бесполезно.</p><h2>Задача 2</h2><p>Доказать, что вписанный в полуокружность треугольник с диаметром в основании всегда будет прямоугольным треугольником. <a href="https://media.tproger.ru/uploads/2020/12/123464_423d109b_CtngjCYF_1607251041.png"></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Японская головоломка KenKen: разбор задачи и алгоритм автоматической генерации таблиц</title>
      <link>https://tproger.ru/problems/japonskaja-golovolomka-kenken-razbor-zadachi-i-algoritm-avtomaticheskoj-generacii-tablic</link>
      <comments>https://tproger.ru/problems/japonskaja-golovolomka-kenken-razbor-zadachi-i-algoritm-avtomaticheskoj-generacii-tablic?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/japonskaja-golovolomka-kenken-razbor-zadachi-i-algoritm-avtomaticheskoj-generacii-tablic</guid>
      <description><![CDATA[<p>Правила японской головоломки KenKen, подход к её решению и программная реализация автоматической генерации игровых таблиц без подглядывания в готовое.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/japonskaja-golovolomka-kenken-razbor-zadachi-i-algoritm-avtomaticheskoj-generacii-tablic">Японская головоломка KenKen: разбор задачи и алгоритм автоматической генерации таблиц</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 28 Dec 2020 06:39:12 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мои критерии интересной задачи:</p><ul><li>Она, попав в голову, осталась там надолго, даже получив своё решение.</li><li>К ней интересно мысленно возвращаться в минуты скуки или творческого настроения.</li><li>Целью задачи не должен быть лишь правильный ответ (поэтому школьные, олимпиадные или задачки с собеседований лично для меня редко становятся любимыми). Мне нравится когда задача — некий процесс творения.</li><li>Задача должна быть как-то связана с реальностью. Или с тем, чем я мог бы заниматься в реальности, пусть даже играя. Я бы вряд ли крутил в голове задачу из разряда «У Пети есть неубывающий массив натуральных чисел, а вы ему завидуете и с помощью XOR-пушки хотите его разрушить…».</li><li>У неё не должен быть слишком высокий порог входа, чтобы она помещалась в оперативку в голове и не переполняла стек.</li></ul><p>При этом очень важно не гуглить решение, чтобы не спугнуть интерес. Именно в придумывании разнообразных вариантов решения и состоит всё удовольствие, пусть даже я изобретаю велосипед.</p><p>Такие задачи часто нас окружают, важно их заметить, что можно сравнить с тем, как идеи должны находить изобретателя. Очередной случай произошёл спонтанно, когда я объяснял одному моему товарищу правила решения головоломки KenKen. Разобраться в них довольно непросто, сам я сделал это только с третьего раза, когда мне объясняли правила мои дети.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Ris.-1.png" alt="" /><figcaption>Пример японской головоломки KenKen. Источник: Wikipedia.</figcaption></figure><p>KenKen — это  таблица с одинаковым числом клеток в рядах и колонках, которую нужно заполнить цифрами, используя только цифры от единицы до N, где N — количество ячеек в одном из рядов таблицы. При этом нужно, чтобы, во-первых, ни в одной отдельно взятой строке и ни в одном отдельно взятом столбце числа не повторялись. Во-вторых, в обведённых жирными линиями группах ячеек результат математической операции, произведённой над всеми ячейками группы, должен совпадать с требуемым результатом.</p><p>Требуемый результат записывается как условие в левом верхнем углу одной из ячеек мелким шрифтом в виде числа, а операция — в виде знака математической операции.</p><p>Так, если, например, жирным обведены две ячейки вместе, а в уголке написано «‎6x»‎, это значит, что мы должны получить результат равный шести путем умножения ячеек друг на друга. Варианты заполнения ячеек будут такие: 3 и 2 или 6 и 1. Но если мы еще раньше пришли к выводу, что в одной ячейке должно стоять 6, то во второй ячейке остаётся поставить только 1.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Ris.-2.png" alt="" /></figure><p>Поначалу товарищ никак не мог ухватить суть правил, тогда я сказал: «Чтобы понять, как они устроены, давай составим собственный KenKen, как если бы его решать потом не нам, а кому-то другому. Следи за руками».</p><p>Дальше расчертил квадрат на клетки, расставил числа так, чтобы сохранялась уникальность в рядах и колонках.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Ris.-3-autoconverted.jpeg" alt="" /></figure><p>Потом случайным образом обвёл некоторые ячейки, группируя их по две-три, обвёл жирной линией. Получился квадрат, сложенный из эдаких кривых доминошек.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/Ris.-4-autoconverted.jpeg" alt="" /></figure><p>Потом в углу каждого такого домино поставил цифру, равную сумме цифр в ячейках в обведённой области. Для простоты объяснения я использовал только операцию сложения. Мы оба убедились, что полученный таким образом KenKen выполняет все правила решённого. Потом я стёр цифры в ячейках, чтобы тот кому достанется решать, не знал ответа заранее.</p><p>Как только я это объяснил другу, тут же и сам всё понял: это же алгоритм автоматической генерации KenKen! Я мог бы создать сайт, на котором любой желающий может решать бессчётное количество автоматически созданных KenKen. Вот она задачка!</p><p>Первое, что интересно в ней — сам алгоритм формирования головоломки, а не веб-программирование, как таковое. Второе — как программа в процессе заполнения ее пользователем будет определять, решён KenKen или нет? Третье — уже совершенно новая задача: может ли другая программа решить такой KenKen, сгенерированный другой программой?</p><p>Я знаю, что задача уже решена до меня, стоит только погуглить,  но я этого не делаю. В ней нет единственного правильного ответа: все варианты хороши, если они работают, и это мне нравится. Но если какой-то алгоритм будет генерировать более интересные головоломки KenKen, чем другой, то я выберу лучший.</p><p>Поэтому, решив её однажды, не спешу выбрасывать задачку из головы. Более того, я её запрограммировал, не смог удержаться. Это были две недели удовольствия по вечерам. У этой задачки нет заумных формул и она меня не подвешивает в «‎параличе разработчика»‎. Я знаю как использовать такой алгоритм на практике. И наконец, я знаю, кто и зачем может воспользоваться этим алгоритмом. Важно, что занимаясь этим, можно одновременно и отдыхать, и развлекаться, и развиваться</p><h2>Программирование</h2><p>Важно отметить — задача запрограммирована не на языке Perl. Это связано с тем, что, с точки зрения автора, подобный код удобнее писать на статически-типизированном языке, так что ни Perl, ни Python, ни другой динамический язык не будут удобными для этой задачи.</p><p>Также хотелось написать универсальную библиотеку, которую потом можно использовать и в консольных, и в десктопе, и в одностраничных веб-приложениях (даже для мобильных). В Dart это всё возможно, поэтому выбор был очевиден.</p><p>Программирование задачи можно найти <a href="https://bitbucket.org/closescreen/kenken/src/master/lib/src/kenken_base.dart">здесь</a>, а пример использования — в <a href="https://bitbucket.org/closescreen/kenken/src/master/example/kenken_example.dart">этом файле</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Выживут ли мудрецы: задача по теории вероятностей, у которой нет единственного правильного решения</title>
      <link>https://tproger.ru/problems/zadacha-po-teorii-verojatnostej</link>
      <comments>https://tproger.ru/problems/zadacha-po-teorii-verojatnostej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/zadacha-po-teorii-verojatnostej</guid>
      <description><![CDATA[<p>Злой дух бесконечно бросает монету и раздаёт двум пленникам результаты чётных и нечётных бросков. Головоломка допускает несколько верных решений.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/zadacha-po-teorii-verojatnostej">Выживут ли мудрецы: задача по теории вероятностей, у которой нет единственного правильного решения</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 Dec 2020 06:27:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Злой Дух поймал двух мудрецов и посадил их в разные комнаты своего страшного дома. Затем злой дух подбросил симметричную монету бесконечное количество раз. Все результаты чётных бросков он сообщил одному мудрецу, а все результаты нечётных — второму мудрецу.</p><p>После этого Дух предложил каждому мудрецу назвать номер броска из серии другого мудреца. Мудрецу, которому известны результаты чётных бросков, нужно назвать номер любого нечётного броска. Мудрецу, которому известны результаты нечётных бросков, нужно назвать номер любого чётного броска.</p><p>Если результаты бросков, названные мудрецами, одинаковые, то Злой Дух подарит мудрецам свободу. Если же результаты отличаются, то казнит их.</p><p>Оба мудреца знают о повадках Злого Духа и могли заранее договориться о стратегии.</p><p>Какую стратегию им выбрать, чтобы вероятность спасения была больше 50%?</p><p>У этой задачи есть много интерпретаций в интернете: мудрецы, принцессы, путешественники, но не в этом суть. Первое, что вызывает интерес, это отсутствие единственного правильного решения. А второе — то, что многие (включая меня), когда первый раз видят эту задачу, неверно понимают условия. Эта задача по теории вероятности, но часто воспринимается как обычная задача на логику. Многие думают, что при озвучивании ответов мудрецы слышат друг друга. Если вы из условий это поняли, вы — молодец! Но я всё равно рассмотрю оба варианта. ?</p><h2>Вариант 1. Мудрецы слышат друг друга</h2><p>Да, условия задачи этого не предусматривают, но явным образом также не говорится об обратном. Так почему бы не рассмотреть и такой вариант? Ведь при этом мы с можем вероятностью 100% сохранить жизни нашим мудрецам, мы ведь не желаем им зла.</p><p>Для начала представим, что у нас есть бесконечная последовательность бросков. Вот пример начала такой последовательности:</p><figure><img src="https://media.tproger.ru/uploads/2020/12/table1-2.png" alt="" /></figure><p>Мы понимаем, что в ответе один из мудрецов должен каким-то образом закодировать и передать второму мудрецу информацию о последовательности результатов, которые ему известны. То есть мы должны придумать такую стратегию, в которой первый мудрец, называя цифру неизвестного ему броска второго мудреца, одновременно сообщал ему о том, какой результат броска нужно искать.</p><p>Перед нами симметричная монета, а значит, вероятность выпадения орла и решки всегда 50/50 и не зависит от числа подбрасываний. При этом мы подбрасываем её бесконечно много раз. Значит, по закону больших чисел, фактическое среднее будет стремиться к теоретическому, то есть мы получим примерно в 50% бросков орла и в 50% — решку. Случаи, когда выпадают только орлы или только решки, мы рассматривать не будем, как варианты с очень низкой вероятностью.</p><p>Таким образом, наши мудрецы должны договориться о формате сообщения, о каком-то паттерне, который они будут искать в последовательности своих бросков. Один из вариантов такого паттерна: последовательное выпадение орла и решки у первого мудреца.</p><p>Алгоритм действий будет следующим:</p><ol><li>Первый мудрец находит в известной ему последовательности идущие подряд броски, в которых выпал сначала орёл, потом решка.</li><li>Первый мудрец называет Злому Духу (и второму мудрецу) порядковый номер первого из этих двух бросков. Здесь речь идёт не о чётном или нечётном номере броска в общей серии, а о его порядковом номере у конкретного мудреца. Например, бросок с чётным номером 4 у первого мудреца будет иметь порядковый номер 2. У второго мудреца бросок с порядковым номером 2 будет третьим в общей серии бросков.</li><li>Второй мудрец проверяет в своей последовательности бросок под названным порядковым номером. Он понимает, что у первого мудреца под этим же номером значится результат броска орёл, а под следующим — решка.</li><li>Если у первого мудреца под этим номером тоже орёл, то он смело повторяет тот же номер Злому Духу. Если решка, то для того, чтобы результаты у обоих мудрецов совпали, увеличивает номер, который он сообщит Злому Духу, на единицу.</li></ol><p>В примере, который приведён в таблице выше, действия мудрецов будут следующими:</p><ol><li>Первый мудрец находит в серии своих бросков последовательную пару «Орёл — Решка». Это броски 4 (порядковый номер 2) и 6 (порядковый номер 3). Он сообщает Злому Духу порядковый номер броска 2.</li><li>Второй мудрец, услышав сообщение первого мудреца, проверяет результат из своей серии бросков под порядковым номером 2. Это бросок 3. Его результат — решка. Значит, чтобы результаты совпали, второй мудрец должен сообщить номер броска из серии первого мудреца с результатом — решка. По паттерну он точно знает, что это результат с порядковым номером 3. Этот номер второй мудрец и сообщает Злому Духу.</li></ol><p>Таких паттернов можно придумать сколько угодно. Если заранее договориться о нужной последовательности результатов бросков, то шанс остаться в живых у мудрецов будет равняться 100%.</p><h2>Вариант 2. Мудрецы не слышат друг друга (классический вариант)</h2><p>Теперь мы подобрались к тому решению, которое ждал от нас автор задачи. Здесь мы уже не можем гарантировать 100% выживаемость мудрецов.</p><p>Подходов к решению много. Ходят слухи, что кому-то удалось найти такое решение, которое обеспечивает вероятность спасения более 70%. Если вы знаете, как добиться такого результата, напишите об этом в комментариях!</p><p>Вот один из вариантов решения задачи в классическом варианте. Для упрощения рассмотрим только первые 4 броска. У каждого мудреца — по два броска.</p><p>Стратегия мудрецов будет направлена на то, чтобы увеличить шансы на совпадение результатов. Для этого нужно продумать алгоритм выбора первого или второго броска для каждого из мудрецов в зависимости от результатов этих бросков.</p><p>Рассмотрим такой алгоритм:</p><ol><li>Если у первого мудреца результат первого броска — решка, то он сообщает Злому Духу номер 1. Иначе — номер 2.</li><li>Если у второго мудреца в первом броске выпала решка, а во втором — орёл, то он сообщает Злому Духу номер 1. Во всех остальных случаях — номер 2.</li></ol><p>Давайте сведём все возможные варианты работы такого алгоритма в таблицу. В столбцах — результаты первого мудреца, в строках — второго. В скобках указан бросок, который называет мудрец по нашему алгоритму.</p><figure><img src="https://media.tproger.ru/uploads/2020/12/table2-2.png" alt="" /></figure><p>В ячейках таблицы — сравнение результатов. Если результаты мудрецов совпали, то указан плюс, если не совпали, то минус.</p><p>Нам удалось обеспечить очень неплохой результат — 10 успешных исходов из 16. Мудрецы выживут в 62,5% случаев.  Для нашей задачи можно придумать довольно много последовательностей, которые обеспечат такой же или лучший результат. Чем больше бросков мы включим в нашу стратегию, тем с большей вероятностью мудрецам удастся выжить.</p>]]></content:encoded>
    </item>
    <item>
      <title>Время размять мозги: задачка о том, как разъехаться на перекрестке</title>
      <link>https://tproger.ru/problems/crossroads-puzzle</link>
      <comments>https://tproger.ru/problems/crossroads-puzzle?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/crossroads-puzzle</guid>
      <description><![CDATA[<p>Автомобили с автоматическим управлением стали основой головоломки, похожей на задания чемпионата Yandex Cup. Разбор с упором на применение алгоритмов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/crossroads-puzzle">Время размять мозги: задачка о том, как разъехаться на перекрестке</a>»</p>]]></description>
      <category><![CDATA[Олимпиадное программирование]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 05 Oct 2020 08:32:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если осенняя хандра застала вас еще в начале осени, то пришла пора немного взбодриться. Яндекс поделился любопытной задачей, которая не только поможет отвлечься от непогоды, но еще и проверит, насколько вы разбираетесь в мобильной разработке. Кстати, подобные задачи будут на чемпионате по программированию Yandex Cup в этом году.</p><h2>Задача</h2><p>Машины с автоматическим управлением — это круто. Так думаете не только вы, но и все сотрудники компании, в которую вам повезло устроиться. В этой компании как раз пишут софт для управления такими машинами. Для проверки и демонстрации последних достижений в офисе компании есть отдельная комната, моделирующая перекресток дорог шириной W метров и длиной H метров.</p><p>Каждая машина имеет ширину 1 и длину, не превышающую размеры перекрестка.</p><p>Одна из ситуаций, в которую частенько попадают как обычные водители, так и ИИ, банальна, но оттого не менее неприятна — пробка. Каждый водитель пытается выбраться из нее как можно быстрее, порой совершая маневры, ухудшающие ситуацию для всех окружающих. Но если бы все машины управлялись автоматикой, насколько быстрее разрешалась бы проблема? Именно на этот вопрос и должна ответить демонстрация, для которой вы должны написать код.</p><p>В начале демонстрации на перекрёсток будет помещено N машин. Для упрощения расчетов каждая машина ориентирована либо горизонтально, либо вертикально. Каждую секунду каждая из машин может переместиться на 1, если ей ничего не мешает. Пробка считается разрешенной, если на перекрестке не осталось ни одной машины. Реализуйте алгоритм, позволяющий сделать это за наименьшее количество времени.</p><ul><li>Ограничение по времени: 10 секунд.</li><li>Ограничение по памяти: 512Mb.</li><li>Ввод: стандартный ввод или input.txt.</li><li>Вывод: стандартный вывод или output.txt.</li></ul><h2>Формат ввода</h2><p>Первая строка содержит 2 числа — 0 &lt; W &lt; 13, 0 &lt; H &lt; 13. Гарантируется, что W * H ≤ 25. Вторая строка содержит число 0 ≤ N&lt; 13.<br />Следующие N строк содержат по 4 числа каждая — x1i, y1i, x2i, y2i, 0 &lt; x1, x2 ≤ W, 0 &lt; y1, y2 ≤ H — координаты левого верхнего и нижнего правого углов машины i. Гарантируется, что либо x1i = x2i, либо y1i = y2i.</p><h2>Формат вывода</h2><p>На первой строке выведите количество секунд, необходимых для очищения перекрёстка. В последующих строках выведите информацию о перемещениях машин посекундно. Каждая секунда описывается так:</p><ul><li>Количество машин, переместившихся в эту секунду.</li><li>Для каждой из двигавшихся машин — номер машины(нумерация с 1) и направление, в котором она перемещалась, ‘L’ влево, ‘R’ вправо, ‘U’ вверх и ‘D’ вниз.</li></ul><p>Обратите внимание — все движения в течение одной секунды происходят одновременно.</p><p>Задача соревновательная, и вам необязательно написать «правильное» решение, всегда находящее идеальную стратегию. Чем ближе ваш ответ к оптимальному, тем больше баллов вы получите.</p><p>Каждый тест оценивается в зависимости от размера входных данных.</p><p>За совершение невозможных движений (таких, в результате которых машины будут «наезжать» друг на друга) вы будете получать 0 баллов. Так же оценивается превышение лимита по памяти или времени исполнения и «падения» программы.</p><p>Любое корректное решение получает половину или более баллов теста. Чем ближе решение к оптимальному, тем больше будет начислено баллов.</p><p>Итоговой оценкой станет сумма баллов, полученных во всех тестах.</p>]]></content:encoded>
    </item>
    <item>
      <title>Сможете ли вы получить наследство, решив головоломку со шкафчиками?</title>
      <link>https://tproger.ru/problems/lockers-and-inheritance-riddle</link>
      <comments>https://tproger.ru/problems/lockers-and-inheritance-riddle?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/lockers-and-inheritance-riddle</guid>
      <description><![CDATA[<p>Чудаковатый дядюшка оставил загадку: 100 родственников решают её одновременно и делят деньги, а тот, кто справится раньше, забирает всё.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/lockers-and-inheritance-riddle">Сможете ли вы получить наследство, решив головоломку со шкафчиками?</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Feb 2020 12:32:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ваш богатый чудаковатый дядюшка только что скончался. Вы и ещё 99 родственников были приглашены на чтение завещания. Дядюшка хотел оставить все деньги вам, но знал, что тогда ваши родственники будут докучать вам всю жизнь. Поэтому он решил поставить всё на то, что он обучил вас всему, что сам знал о головоломках.</p><p>Ваш дядюшка оставил в завещании записку:</p><p>«Я придумал головоломку. Если вы все ответите на неё одновременно, вы разделите деньги поровну. Но если кто-то решит задачу раньше и даст ответ без лишней беготни, он получит всё наследство целиком. Успехов.»</p><p>Юрист привёл вас и 99 ваших родственников в секретную комнату в поместье. Там стояли 100 шкафчиков, в каждом из которых была записка с одним-единственным словом. Юрист объяснил: каждому родственнику присвоен номер от 1 до 100. Первый откроет все дверцы шкафчиков. Второй закроет каждый второй шкафчик. Третий изменит состояние каждого третьего шкафчика — откроет дверцу, если она закрыта, и закроет, если открыта. Так будет продолжаться до тех пор, пока все 100 родственников не выполнят действие. Слова в шкафчиках, которые в итоге останутся открытыми, подскажут вам код от сейфа. Ещё до того, как первый родственник начал открывать шкафчики, вы вышли вперёд и сказали юристу, что знаете, какие шкафчики останутся открытыми. Как вы это поняли?</p>]]></content:encoded>
    </item>
    <item>
      <title>3 чемодана, 3 ключа, 3 попытки — сможете решить эту задачку?</title>
      <link>https://tproger.ru/problems/finding-the-right-key-in-3-attempts</link>
      <comments>https://tproger.ru/problems/finding-the-right-key-in-3-attempts?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/finding-the-right-key-in-3-attempts</guid>
      <description><![CDATA[<p>Логическая задачка на соответствия: у каждого из трёх чемоданов свой ключ. Хватит ли трёх попыток, чтобы подобрать ключ к каждому замку?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/finding-the-right-key-in-3-attempts">3 чемодана, 3 ключа, 3 попытки — сможете решить эту задачку?</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 07 Jan 2020 14:41:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>У вас есть три ключа от трёх чемоданов с разными замками. Каждый ключ подходит только к одному чемодану. Достаточно ли трёх попыток, чтобы подобрать ключи к каждому из них?</p>]]></content:encoded>
    </item>
    <item>
      <title>Разливаем ром в порту: логическая задачка на переливания</title>
      <link>https://tproger.ru/problems/rum-in-a-port</link>
      <comments>https://tproger.ru/problems/rum-in-a-port?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/rum-in-a-port</guid>
      <description><![CDATA[<p>Моряк просит налить четыре галлона рома в бочонок на пять галлонов, а мерить нечем, кроме кувшина на три галлона. Как это сделать точно?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/rum-in-a-port">Разливаем ром в порту: логическая задачка на переливания</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 01 Jan 2020 12:07:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>В одном порту моряк пришёл в лавку с пустым бочонком на пять галлонов и попросил лавочника налить туда четыре галлона отборного ямайского рома. К несчастью, единственным сосудом для измерения был старый оловянный кувшин на три галлона. Как лавочник сумел точно отмерить четыре галлона с помощью этих двух ёмкостей?</p>]]></content:encoded>
    </item>
    <item>
      <title>Три хирурга, больной и две пары перчаток — сможете помочь никому не заразиться?</title>
      <link>https://tproger.ru/problems/three-surgeons-and-two-pairs-of-gloves</link>
      <comments>https://tproger.ru/problems/three-surgeons-and-two-pairs-of-gloves?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/three-surgeons-and-two-pairs-of-gloves</guid>
      <description><![CDATA[<p>Три больных разными болезнями хирурга должны по очереди оперировать заразного пациента. Как провести операции, чтобы никто не заразился?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/three-surgeons-and-two-pairs-of-gloves">Три хирурга, больной и две пары перчаток — сможете помочь никому не заразиться?</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 14 Dec 2019 09:55:49 GMT</pubDate>
      <content:encoded><![CDATA[<p>Трём хирургам необходимо друг за другом прооперировать в полевых условиях больного, страдающего заразным заболеванием. Сами хирурги тоже больны, причём разными болезнями. В распоряжении хирургов есть только две пары стерильных перчаток. Подскажите план операции, после которой ни хирурги, ни больной не заразятся друг от друга.</p><p>Помогать друг другу во время операций хирурги не должны. Оперировать одной рукой нельзя.</p>]]></content:encoded>
    </item>
    <item>
      <title>Семья на мосту — логическая задача про переправу</title>
      <link>https://tproger.ru/problems/family-on-a-bridge</link>
      <comments>https://tproger.ru/problems/family-on-a-bridge?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/family-on-a-bridge</guid>
      <description><![CDATA[<p>Папа, мама, сын и бабушка ночью должны перейти мост с одним фонариком, а мост выдерживает лишь двоих. Как им уложиться в 17 минут?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/family-on-a-bridge">Семья на мосту — логическая задача про переправу</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 11 Dec 2019 15:16:05 GMT</pubDate>
      <content:encoded><![CDATA[<p>Папа, мама, сын и бабушка ночью подошли к мосту, способному выдержать только двух человек одновременно. По мосту можно двигаться только с фонариком. Известно, что на переправу тратят:</p><ul><li>папа — 1 минуту,</li><li>мама — 2 минуты,</li><li>сын — 5 минут,</li><li>бабушка — 10 минут.</li></ul><p>Фонарик у них один. Светить издали нельзя. Носить друг друга на руках тоже. Если по мосту идут двое, время перехода определяется более медлительным членом семьи.</p><p>Как семье переправиться за 17 минут?</p>]]></content:encoded>
    </item>
    <item>
      <title>Логическая задача про электрика и 49 кабелей</title>
      <link>https://tproger.ru/problems/electrician-and-49-cables</link>
      <comments>https://tproger.ru/problems/electrician-and-49-cables?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/electrician-and-49-cables</guid>
      <description><![CDATA[<p>Провода в кабеле на дне реки неотличимы друг от друга, а пронумеровать их концы надо за минимум переправ: условие задачи и разбор решения.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/electrician-and-49-cables">Логическая задача про электрика и 49 кабелей</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 27 Nov 2019 15:01:46 GMT</pubDate>
      <content:encoded><![CDATA[<p>По дну реки (поперёк) проложен кабель. В нём 49 изолированных проводов. Все провода имеют изоляцию одного цвета и их нельзя отличить друг от друга. Электрик должен перенумеровать одинаковыми числами соответствующие концы проводов. Для этого у него есть источник тока, пробник-индикатор, который позволяет определить, находится ли данный провод под напряжением, и лодка.</p><p>За какое минимальное количество переправ электрик сможет выполнить задачу?</p>]]></content:encoded>
    </item>
    <item>
      <title>Программист-самоучка из Бельгии решил 20-летнюю криптографическую задачку из MIT</title>
      <link>https://tproger.ru/news/cryptography-conundrum-cracked</link>
      <comments>https://tproger.ru/news/cryptography-conundrum-cracked?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/cryptography-conundrum-cracked</guid>
      <description><![CDATA[<p>Задачу в 1999 году придумал Рональд Ривест, один из создателей RSA. Он рассчитывал, что последовательные вычисления займут время до 2034 года.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/cryptography-conundrum-cracked">Программист-самоучка из Бельгии решил 20-летнюю криптографическую задачку из MIT</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Криптография]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 30 Apr 2019 13:08:10 GMT</pubDate>
      <content:encoded><![CDATA[<h3>И что за задачка?</h3><p>А <a href="https://people.csail.mit.edu/rivest/lcs35-puzzle-description.txt">вот она</a>. Задачу в 1999 году придумал Рональд Ривест, профессор Лаборатории искусственного интеллекта MIT и один из создателей <a href="https://ru.wikipedia.org/wiki/RSA">криптографического алгоритма RSA</a>. Сама по себе она не преследует никаких научных целей. Однако решать её нужно сугубо последовательными вычислениями, поэтому её создатель думал, что она решится не раньше 2034 года.</p><h3>Больше технических деталей</h3><p>Сперва нужно вычислить w=2^(2^t) (mod n) для заданных t и n, где n — произведение двух больших простых чисел, состоящее из 616 цифр, а t=79685186856218 — параметр, компенсирующий влияние закона Мура. Затем нужно вычислить w xor z, где z — число из 616 цифр. Результатом будет закодированное сообщение, содержащее подсказку к разложению n на множители (для проверки корректности решения).</p><h3>Что теперь?</h3><p>В случае успешного решения задачи (либо по истечении отведённого на неё времени) лаборатория должна вскрыть капсулу времени с различными «артефактами» от Тима Бернерса-Ли, Билла Гейтса и других известных личностей. Церемония состоится 15 мая.</p>]]></content:encoded>
    </item>
    <item>
      <title>Маляры, носки и переменные — подборка задач для программистов</title>
      <link>https://tproger.ru/problems/painters-socks-variables</link>
      <comments>https://tproger.ru/problems/painters-socks-variables?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/painters-socks-variables</guid>
      <description><![CDATA[<p>Подборка задач для программистов: определить число носков для совпадения цвета и поменять местами две числовые переменные без третьей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/painters-socks-variables">Маляры, носки и переменные — подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 18 Dec 2018 15:01:55 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Носки в ящике</h2><p>В ящике лежат 7 чёрных носков, 7 белых носков, 8 зеленых носков и 8 красных носков. Вы собираетесь выйти, надев свои туфли. Какое максимальное количество раз вам нужно вынуть носок из ящика, чтобы вы могли идти?</p><p>Вы можете вынимать только 1 носок из ящика за раз. Учтите, что вы не можете пойти на улицу в разных носках.</p><h2>Поменяйте переменные местами</h2><p>Даны две числовые переменные, задача – написать программу, меняющую местами эти переменные без использования других переменных.</p><h2>Маляры и перчатки</h2><p>Двое маляров встречают на дороге еще двоих маляров. У всех них перепачканы руки разными красками. Как, используя всего две перчатки, двум малярам обменяться рукопожатиями с другими двумя малярами, чтобы их руки не испачкались чужими красками? Перчатки можно передавать и выворачивать.</p>]]></content:encoded>
    </item>
    <item>
      <title>Огурцы, богатства, бочки — подборка задач для программистов</title>
      <link>https://tproger.ru/problems/cucumbers-treasures-barrels</link>
      <comments>https://tproger.ru/problems/cucumbers-treasures-barrels?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/cucumbers-treasures-barrels</guid>
      <description><![CDATA[<p>Головоломки для программистов с условиями на русском и английском: сколько весят сто килограммов огурцов, потерявших за жаркий день часть воды.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/cucumbers-treasures-barrels">Огурцы, богатства, бочки — подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 05 Dec 2018 12:05:00 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Огурцы под жарким солнцем</h2><p>Ранним утром бакалейщик выставил 100 килограмм огурцов на улицу перед своим магазином. Огурцы на 99 % состоят из воды. День был жарким и часть воды из огурцов испарилась. В конце дня огурцы состояли из воды на 98 %. Сколько килограммов эти огурцы весили в конце дня (если бакалейщик не продал ни одного огурца)?</p><h2>Города и богатства</h2><p>Дано n городов: x1, x2, …… xn — у каждого своё богатство T[i] и цвет C[i]. Вы можете выбрать между посещением города или его пропуском. Разрешено только движение вперёд. При посещении города вы получаете следующую сумму денег:</p><ul><li>A*T[i], если цвет города совпадает с цветом ранее посещённого города;</li><li>B*T[i], если это первый посещённый город такого цвета, или цвет отличается от цвета предыдущего города.</li></ul><p>Значения T[i], A и B могут быть отрицательными, в то время как C[i] может быть от 1 до n.</p><p>Задача: Необходимо составить алгоритм получения максимально возможной прибыли.</p><p>Примеры:</p><p>Вход: A = -5, B = 7<br />Богатство = {4, 8, 2, 9}<br />Цвет = {2, 2, 6, 2}<br />Выход: 133<br />Посетить города 1, 2 и 3. Прибыль = 8 * 7 + 2 * 7 + 9 * 7 = 133.</p><p>Вход: A = 5, B = -7<br />Богатство = {4, 8, 2, 9}<br />Цвет = {2, 2, 6, 2}<br />Выход: 57<br />Посетить города 1, 2, 4. Прибыль = (-7) * 4 + 8 * 5 + 9 * 5 = 57.</p><h2>Заполненность бочки</h2><p>Два рабочих на заводе спорят о том, сколько пива находится в бочке. Один оптимистично считает, бочка заполнена больше, чем наполовину, а другой заявляет, что пива в ней меньше половины. Как они могут проверить, кто из них прав, без использования измерительных приборов?</p><p>Примечание: крышку бочки можно снять.</p>]]></content:encoded>
    </item>
    <item>
      <title>Capture the Flag: разбор взлома сервера на примере уязвимости SSRF</title>
      <link>https://tproger.ru/translations/ssrf-server-attack</link>
      <comments>https://tproger.ru/translations/ssrf-server-attack?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/ssrf-server-attack</guid>
      <description><![CDATA[<p>Соревнования CTF по информационной безопасности проходят в форматах task-based и attack-defense и помогают прокачать навыки пентеста на реальных заданиях.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/ssrf-server-attack">Capture the Flag: разбор взлома сервера на примере уязвимости SSRF</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 18 Nov 2018 09:00:25 GMT</pubDate>
      <content:encoded><![CDATA[<p>CTF (capture the flag или захват флага) — это командные соревнования по информационной безопасности и системному администрированию, проходящие в двух форматах.</p><p>В формате task-based (или jeopardy) игрокам предоставляется набор тасков (заданий), к которым требуется найти ответ и отправить его. За верно решённый таск команда получает определённое количество очков.</p><p>Другой формат CTF-соревнования — classic (либо attack-defense). Каждая команда получает выделенный сервер или небольшую сеть для поддержания её функционирования и защиты. Во время игры команды зарабатывают очки за корректную работу сервисов своего сервера и за украденную информацию (она же — «флаги») с серверов соперников.</p><p>Таски в jeopardy бывают разных категорий, от криптографии до веба, но все они основаны на поиске флагов, которые чаще всего представлены строкой, начинающейся со слова flag. Флаг обычно хорошо спрятан, и нужно немало потрудиться, чтобы его найти.</p><p>В этой статье мы обсудим следующий таск:</p><blockquote>Инженер сайта acme.org запустил новый сервер для панели администратора по адресу http://104.236.20.43/. Он абсолютно уверен, что сервер невозможно взломать, кроме того, когда считывается файл с флагом, ему приходит уведомление. Он отметил, что используется стандартная страница Apache, но она была оставлена намеренно и не доставит проблем.Ваша цель? Прочитайте флаг!</blockquote><h3>Анализ веб-сервера</h3><p>Прим. перев. Идёт разбор таска с <a href="https://www.hackerone.com/blog/hack-your-way-to-nyc-this-december-for-h1-212">h1-212 CTF 2017 года</a>, поэтому ссылки уже не работают. Но если есть желание, можете развернуть сервер самостоятельно, взяв исходники <a href="https://github.com/jobertabma/h1-212-ctf-files">отсюда</a>.</p><p>Если взглянуть на веб-сервер, то можно заметить, что на адресе 104.236.20.43 крутится стартовая страница Apache. Исходя из этого мы точно знаем, что используется Apache и что флаг может находиться в одной из его директорий. Тогда самым логичным шагом будет проверить адрес 104.236.20.43/flag. Там лежит фальшивый флаг, который может пригодиться позже, так как разработчики тасков иногда оставляют своего рода подсказки, необходимые для дальнейшего решения.</p><p>Затем мы проверяем сайт acme.org, но это ни к чему не приводит.</p><blockquote>Стоит упомянуть принцип работы виртуального хостинга: он проверяет значение заголовка host в HTTP-запросе, т. е. сопоставляется имя хоста с соответствующим сервером. При этом имя хоста у нас уже есть — acme.org.</blockquote><p>Следующим шагом нужно найти панель администратора. В первую очередь стоит попробовать отослать запрос с именем хоста admin.acme.org, но сделав это, мы получаем пустую страницу. Альтернативный способ решения проблемы — отредактировать свой /etc/hosts, добавив в него 104.236.20.43 admin.acme.org. Таким образом, когда мы будем пытаться посетить admin.acme.org, сервер перенаправит нас на правильную страницу.</p><h3>Исследование ошибочных конфигураций и их исправление</h3><p>Верно настроив виртуальный хостинг и посетив нужный нам сайт, мы обнаружили пустую страницу и получили куки admin=no.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/1-2.png" alt="" /></figure><p>Самым очевидным следующим шагом будет подмена параметра admin у куки на yes, но в ответ мы получаем HTTP 405, т. е. метод не разрешён. Значит, нам нужно найти верный HTTP-глагол и послать его серверу.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/2.png" alt="" /></figure><p>HTTP-глагол или метод HTTP используется для указания действия, которое нужно совершить веб-серверу. При посещении сайта мы в первую очередь отправили самый распространённый запрос GET. Чтобы изменить запрос или используемый метод, можно использовать либо Burp Suite Repeater, либо cURL. В первую очередь попробуем самый очевидный запрос — POST.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/3.png" alt="" /></figure><p>В ответ на запрос придёт другая ошибка — HTTP 406 Not Acceptable («неприемлемо»). Это означает, что тип контента, который мы отослали, не принимается сервером. В Burp мы можем задать тип контента, добавив content-type: example/example к нашему запросу, а затем менять example/example на разные значения, пока не получим положительный ответ.</p><p>Немного погуглив разные типы контента (application/html, text/xml и т. д.), можно найти подходящий — application/json. На такой запрос мы получим следующий ответ сервера: {“error”:{“body”:”unable to decode”}} с ошибкой HTTP 418.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/4.png" alt="" /></figure><h3>Использование уязвимостей</h3><p>Наконец-то мы можем послать данные серверу. Чтобы понять, что именно нужно отправить, для начала попробуем запрос с данными {“test”:”test”}, на который сервер ответит следующим образом: {“error”:{“domain”:”required”}}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/5.png" alt="" /></figure><p>Мы сдвинулись с мёртвой точки. Теперь мы знаем, что нужно отослать веб-адрес в параметре domain. Для начала попробуем отослать имя хоста acme.org — {“domain”:”admin.acme.org” }. В ответ получим следующее: {“error”:{“domain”:”incorrect value, .com domain expected”}}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/6-1.jpg" alt="" /></figure><p>Сейчас можно попробовать сменить домен верхнего уровня на .com. В ответ на новый запрос мы получим следующее: {“error”:{“domain”:”incorrect value, sub domain should contain 212"}}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/7-1.jpg" alt="" /></figure><p>Мы можем сменить admin на 212.acme.com, и наконец-то получим в ответ {“next”:”\/read.php?id=307"}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/8.jpg" alt="" /></figure><p>Откроем новую страницу сайта, введя её полный адрес admin.acme.org/read.php?id=307. В ответе мы увидим {“data”:““}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/9-1.png" alt="" /></figure><figure><img src="https://media.tproger.ru/uploads/2018/11/10-1.jpg" alt="" /></figure><p>Посетив новую PHP-страницу, обнаружим закодированный в Base64 ответ, расшифровав который получим HTML-код. Это означает, что, во-первых, эта конечная точка запрашивает информацию у сервера, а затем кодирует всё в Base64 перед тем, как разместить её на веб-странице admin.acme.org. Во-вторых, у нас есть возможность использовать SSRF-уязвимость. В-третьих, нам нужно обойти требования к поддомену и к домену высокого уровня .com, если мы хотим использовать эту конечную точку для получения флага.</p><blockquote>SSRF (server side request forgery) — это эксплойт, с помощью которого можно заставить уязвимое приложение сделать запрос на предоставленный URL. Так можно получить доступ к внутренним службам или данным, недоступным для обычного пользователя.</blockquote><p>Для начала нужно найти способ обойти требования к поддомену и домену высокого уровня. Одним из способов будет использование символов перевода или разрыва строки (CRLF — carriage return line feed), чтобы в запросе было несколько строк. Это позволит удовлетворить требованиям и заставит сервер обрабатывать каждую строку запроса в отдельности.</p><p>CRFL-символы используются для обозначения конца строки. Так как сервер использует дистрибутив Linux, мы можем просто использовать LF или \n для создания новой строки.</p><p>Пример такого запроса: 212.\nacme.org\n.com. Сервер это расшифрует следующим образом: сначала он отправит запрос на поддомен 212, затем запрос на acme.org, а затем на домен верхнего уровня .com. Важно отметить, что каждый запрос заставляет id-номер увеличиваться на единицу. Запрос, упомянутый ранее, сформирует три новых id, по одному на каждый запрос. Если мы пошлём запрос {“domain”:”212.\nacme.org\n.com”}, то в ответ получим {“next”:”\/read.php?id=311"}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/12.png" alt="" /></figure><p>Чтобы увидеть ответ от acme.org, нам нужно вычесть единицу из id-номера id=310. Посетив эту страницу, мы обнаружим, что она закодирована Base64, как и ожидалось. Сейчас мы можем перейти к более лёгкой части таска — использованию SSRF.</p><h3>Использование SSRF и получение флага</h3><p>Так как теперь нам не нужно беспокоиться о требованиях к домену верхнего уровня или поддомену, можно попробовать обратиться к локальному хосту по порту 80, например, вот так: {“domain”:”212.\nlocalhost:80\n.com”}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/13-1.jpg" alt="" /></figure><p>Декодировав ответ из Base64, мы, как и ожидалось, получим дефолтную страницу Apache. Более того, это подтверждает, что мы получили доступ к локальному окружению. Возможно, флаг находится на том же месте, что и фальшивый флаг, но на внутреннем порту. В первую очередь стоит попробовать распространённые порты, такие как 8443, 8080, 443 и 22.</p><p>Для проверки портов будем использовать тот же формат, что и для 80-го порта. В расшифрованном ответе с 22-го порта получаем версии SSH и OS, а также сообщение о несовпадающих протоколах. Все порты, кроме 22-го и 80-го, приводят к ответу 404, значит, скорее всего, используется какой-то нестандартный порт. Учитывая, что это CTF-соревнования, есть смысл попробовать 1337 порт, так как это хорошо известный хакерский лексикон (1337 означает «элита»). Попробовав его, получаем следующий ответ: {“data”:”SG1tLCB3aGVyZSB3b3VsZCBpdCBiZT8K”}.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/14.png" alt="" /></figure><p>Это расшифровывается как «Hmm, where would it be?» («Хммм, где же он может быть?»). Мы уже близко, давайте попробуем localhost:1337/flag, так как об этом была подсказка ранее.</p><figure><img src="https://media.tproger.ru/uploads/2018/11/16-1.jpg" alt="" /></figure><p>Декодировав сообщение, получаем наш флаг:</p><p>Мы получили флаг и успешно решили таск. Ещё можно было найти порт, просканировав все порты и проверив их ответы. Это было бы долго и довольно утомительно, но вполне реально с помощью Burp Intruder.</p><p>CTF-соревнования иногда содержат преднамеренные подсказки для участников, что может значительно облегчить поиск флагов. В целом этот таск был достаточно прямолинеен и не требовал каких-то специальных знаний об уязвимостях веб-приложений.</p><p>Если вам после этого райтапа захотелось попробовать свои силы в CTF, то список площадок с тасками можно найти <a href="https://tproger.ru/translations/23-hacking-sites-for-practice/">здесь</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Батарейки, ряды и конференции — подборка задач для программистов</title>
      <link>https://tproger.ru/problems/batteries-series-conferences</link>
      <comments>https://tproger.ru/problems/batteries-series-conferences?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/batteries-series-conferences</guid>
      <description><![CDATA[<p>Подборка задач для программистов: рабочие батарейки для фонарика, сумма рядов и посетители конференции, а также разбор решения задачи о батарейках.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/batteries-series-conferences">Батарейки, ряды и конференции — подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 16 Nov 2018 13:46:19 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Батарейки и фонарик</h2><p>У вас есть 8 батареек, но работают только 4 из них. Вам необходимо вставить 2 рабочие батарейки в фонарик. Какое минимальное количество пар батареек придётся проверить, чтобы фонарик точно включился?</p><h2>Найти сумму ряда 1-2+3-4+5-6+7</h2><p>Дано число N. Необходимо написать программу для поиска суммы последовательности из n чисел по следующему алгоритму:<br />1 − 2 + 3 − 4 + 5 − 6 + …</p><p>Пример:</p><p>Вход: N = 8<br />Выход: −4</p><p>Вход: N = 10001<br />Выход: 5001</p><h2>Сколько людей на конференции?</h2><p>Каждый гость на конференции обменялся рукопожатием с другим. Всего было 66 рукопожатий. Сколько гостей прибыло на научную конференцию?</p>]]></content:encoded>
    </item>
    <item>
      <title>Избавляемся от шляп, ищем расстояния в массиве и нули в факториале — подборка задач для программистов</title>
      <link>https://tproger.ru/problems/hats-distance-zeros</link>
      <comments>https://tproger.ru/problems/hats-distance-zeros?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/hats-distance-zeros</guid>
      <description><![CDATA[<p>Подборка головоломок: джинн и магические шляпы на острове, поиск расстояний в массиве и подсчёт нулей в факториале с условиями и примечаниями.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/hats-distance-zeros">Избавляемся от шляп, ищем расстояния в массиве и нули в факториале — подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 10 Oct 2018 17:27:09 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Джинн и шляпы</h2><p>На острове проживает группа людей. Появившийся джинн собрал всех и надел магические шляпы (или шляпу) некоторым людям (т. е., минимум одну шляпу). Волшебная природа шляпы проявляется в том, что она видима другими людьми, но не видна самому носителю. Чтобы избавиться от шляпы, обладатели (и только они) должны нырнуть в реку ровно в полночь. Если всего человек — N, а шляп — С, сколько времени займет избавление от шляп? Люди не могут сообщать друг другу о наличии шляпы (любым способом).</p><p>Примечание Джинн не сообщил, сколько шляп он надел.</p><h2>Максимальное расстояние между элементами массива</h2><p>Дан массив с повторяющимися элементами. Задача — найти максимальное расстояние между двумя вхождениями элемента.</p><p>Примеры:</p><p>Вход: arr[] = {3, 2, 1, 2, 1, 4, 5, 8, 6, 7, 4, 2}<br />Выход: 10</p><p>// максимальное расстояние для 2 это 11-1 = 10<br />// максимальное расстояние для 1 это 4-2 = 2<br />// максимальное расстояние для 4 это 10-5 = 5</p><h2>Нули в факториале числа 100</h2><p>Сколько замыкающих нулей в 100! (факториал числа 100)?</p>]]></content:encoded>
    </item>
    <item>
      <title>Продаём молоко, меряем денежные пирамиды и красим кубы — подборка задач для программистов</title>
      <link>https://tproger.ru/problems/milk-coins-cubes</link>
      <comments>https://tproger.ru/problems/milk-coins-cubes?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/milk-coins-cubes</guid>
      <description><![CDATA[<p>Подборка головоломок с разбором: как четырьмя банками отмерить от 1 до 40 литров молока, а также задачи про денежные пирамиды и окрашивание кубов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/milk-coins-cubes">Продаём молоко, меряем денежные пирамиды и красим кубы — подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 20 Sep 2018 16:53:50 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Отмеряем 1-40 литров молока</h2><p>У вас есть бидон, полный молока на продажу, и 4 банки. Какого объема должны быть эти банки, чтобы вы смогли отмерить любой объем молока от 1 до 40 литров, при том что каждая банка может быть использована только 1 раз?</p><h2>Максимальная высота треугольника из монет</h2><p>Дано N монет, которые нужно расположить в форме треугольника так, чтобы в первой линии была 1 монета, во второй — 2 и так далее. Необходимо вычислить максимальную высоту треугольника, который возможно сформировать из этих N монет.</p><h2>Шестицветные кубы</h2><p>У вас есть обычный шестигранный куб и краски шести разных цветов. Вам нужно окрасить каждую сторону куба в свой цвет. Сколько различный вариаций окраски вы сможете сделать?</p><p>Примечание Если 2 куба можно повернуть так, чтобы у них совпали по цветам все грани, — окраски считаются одинаковыми.</p>]]></content:encoded>
    </item>
    <item>
      <title>Ищем профессора, проверяем пары в массиве и зажигаем лампы: подборка задач для программистов</title>
      <link>https://tproger.ru/problems/professor-array-bulb</link>
      <comments>https://tproger.ru/problems/professor-array-bulb?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/professor-array-bulb</guid>
      <description><![CDATA[<p>Три задачи для программистов: определить профессора по вопросам об именах, проверить пары в массиве и решить задачу о зажигании ламп.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/professor-array-bulb">Ищем профессора, проверяем пары в массиве и зажигаем лампы: подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 03 Sep 2018 13:37:08 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Найдите профессора</h2><p>Известный профессор прибыл с лекцией на конференцию. К сожалению, вы не успели на лекцию и пришли уже во время перерыва. Вы хотели бы задать профессору несколько вопросов, но не знаете даже его имени. В комнате N+1 человек, они могут знать или не знать имена других гостей. Также присутствует один профессор (всего людей N+1), профессор не знает ничьего имени, но все знают имя профессора.</p><p>У вас есть поименный список присутствующих (N+1). Вы можете задавать только один вопрос: «Вы знаете это имя?».</p><p>Какое максимальное количество вопросов потребуется задать, чтобы узнать имя профессора?</p><p>Примечание Предположим, что все имена уникальны и вы знаете присутствующих по именам (но не знаете, является ли человек профессором).</p><h2>Ищем пары элементов массива с оператором AND</h2><p>Дан массив из N целых чисел. Задача: найти количество таких пар (i, j), при которых результат побитовой операции A[i] &amp; A[j] является нечётным.</p><p>Пример:</p><p>Вход: N = 4A[] = { 5, 1, 3, 2 }</p><p>Выход: 3</p><p>Все пары чисел в A[] = ( 5, 1 ), ( 5, 3 ), ( 5, 2 ), ( 1, 3 ), ( 1, 2 ), ( 3, 2 )</p><p>5 AND 1 = 1, 5 AND 3 = 1, 5 AND 2 = 0,1 AND 3 = 1, 1 AND 2 = 0,3 AND 2 = 2</p><p>Всего пар с нечетным результатом A( i, j ) = 3</p><p>Вход: N = 6A[] = { 5, 9, 0, 6, 7, 3 }</p><p>Выход: 6</p><p>Всего пар в A[] =</p><p>( 5, 9 ) = 1, ( 5, 0 ) = 0, ( 5, 6 ) = 4, ( 5, 7 ) = 5, ( 5, 3 ) = 1,( 9, 0 ) = 0, ( 9, 6 ) = 0, ( 9, 7 ) = 1, ( 9, 3 ) = 1,( 0, 6 ) = 0, ( 0, 7 ) = 0, ( 0, 3 ) = 0,( 6, 7 ) = 6, ( 6, 3 ) = 2,( 7, 3 ) = 3</p><h2>Зажгите лампы</h2><p>2014 ламп расположены по кругу, 2 из них включены, 2012 — выключены. Вы можете выбрать любую лампу и изменить состояние соседних с ней на противоположное — включить погасшую или погасить включенную. Получится ли таким образом зажечь все 2014 ламп? Если да, то как?</p>]]></content:encoded>
    </item>
    <item>
      <title>Считаем деньги, уравниваем элементы массива и усаживаем людей в баре: подборка задач для программистов</title>
      <link>https://tproger.ru/problems/capital-array-bar</link>
      <comments>https://tproger.ru/problems/capital-array-bar?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/capital-array-bar</guid>
      <description><![CDATA[<p>Подборка головоломок: подсчёт начального капитала после посещения храмов, выравнивание элементов массива и размещение гостей в баре.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/capital-array-bar">Считаем деньги, уравниваем элементы массива и усаживаем людей в баре: подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 20 Aug 2018 06:16:28 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Начальный капитал</h2><p>У некого человека в кармане лежит сумма денег между $90 и $95. Этот человек посещает несколько храмов. Как только он входит в храм, количество денег у него удваивается, а на выходе он жертвует $100 в каждом храме. Когда он выходит из последнего храма, его карман остается пустым. Вопрос: сколько денег было у этого человека изначально и сколько храмов он посетил?</p><h2>Равенство элементов массива</h2><p>Дан массив положительных целых чисел arr[]. Разрешены следующие операции:</p><ol><li>Выбрать 2 индекса, элемент массива с первым индексом увеличить на 1, элемент со вторым индексом — уменьшить на 1. Стоимость операции = a.</li><li>Выбрать любой индекс, элемент с этим индексом увеличить на 1. Стоимость операции = b.</li></ol><p>Задача: найти минимальную стоимость операций, которые позволят сделать все элементы массива равными.</p><p>Примеры:</p><p>Вход: n = 4, a = 2, b = 3</p><p>arr[] = { 3, 4, 2, 2 }</p><p>Выход : 5</p><p>Выполним операцию 2 над 3-им элементом (нумерация с 0). Стоимость операции — 2. Выполним операцию 1 над элементом 1 (уменьшение) и элементом 2 (увеличение). Стоимость этой операции — 3.</p><p>Вход : n = 3, a = 2, b = 1</p><p>arr[] = { 5, 5, 5 }</p><p>Выход : 0</p><h2>Бар для асоциальных людей</h2><p>В одном баре стоит 25 стульев, выстроенных в линию. Посетители этого бара не любят общаться, и когда кто-то приходит, он всегда старается сесть как можно дальше от присутствующих. Если же мест без соседства с кем-либо не осталось, он разворачивается и уходит. Владелец бара хочет, чтобы посетителей было как можно больше. Первому пришедшему посетителю бармен может указать место, на которое нужно сесть, последующие же выберут себе мест сами. Предположим, что места пронумерованы от 1 до 25. Какое место следует занять первым?</p>]]></content:encoded>
    </item>
    <item>
      <title>Ищем правду, решаем судоку и генерируем числа: подборка задач для программистов</title>
      <link>https://tproger.ru/problems/truth-sudoku-rand</link>
      <comments>https://tproger.ru/problems/truth-sudoku-rand?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/truth-sudoku-rand</guid>
      <description><![CDATA[<p>Головоломка из ста утверждений: каждое сообщает, сколько утверждений ложны. Последовательное рассуждение даёт 50 истинных и 50 ложных.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/truth-sudoku-rand">Ищем правду, решаем судоку и генерируем числа: подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 12 Aug 2018 18:00:39 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Правильные и неправильные предложения</h2><p>Имеется сотня следующих утверждений:</p><p>1-е гласит: по меньшей мере, одно утверждение ложно.<br />2-е гласит: по меньшей мере, два утверждения ложны.<br />3-е гласит: по меньшей мере, три утверждения ложны.<br />4-е гласит: по меньшей мере, четыре утверждения ложны.<br />…<br />100-е гласит: по меньшей мере, сто утверждений ложны.</p><p>Сколько утверждений ложны и сколько истинны?</p><h2>Проверка поля Судоку</h2><p>Дана конфигурация доски судоку, необходимо написать программу для проверки корректная она или нет.</p><p>Пример:</p><p>Вход:</p><p>Выход: корректна.</p><h2>Генератор равной вероятности</h2><p>Напишите метод для генерации случайного числа от 1 до 8, если имеется метод, возвращающий случайное число 1 до 3. Распределение чисел должно быть равномерным.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разбор задач из онлайн-соревнования по бэкенду Yandex.Taxi Coding Fest</title>
      <link>https://tproger.ru/problems/ytcf-problems-solutions</link>
      <comments>https://tproger.ru/problems/ytcf-problems-solutions?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Прияцелюк]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/ytcf-problems-solutions</guid>
      <description><![CDATA[<p>Решения задач июльского онлайн-соревнования по бэкенду Yandex.Taxi Coding Fest с подробным разбором, включая группировку точек подачи такси.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/ytcf-problems-solutions">Разбор задач из онлайн-соревнования по бэкенду Yandex.Taxi Coding Fest</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Олимпиадное программирование]]></category>
      <category><![CDATA[Партнёрский материал]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 09 Aug 2018 18:23:44 GMT</pubDate>
      <content:encoded><![CDATA[<p>В июле прошло онлайн-соревнование по бэкенду Yandex.Taxi Coding Fest. Перед вами задачи, которые предлагались на соревновании, и их решения с подробным разбором.</p><h3>1. Группировка рекомендуемых точек подачи на прямой</h3><h4>Формулировка задачи</h4><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/aee74482-e274-4d8c-a008-bf1ae347557f.png" alt="" /></figure><p>На улицу Льва Толстого заказали такси N раз. Известны точки на улице, куда подъехали водители. Назовём их точками прибытия. Приложение запоминает точки прибытия и на их основе просчитывает рекомендуемые точки подачи. Точки подачи нужны, чтобы приложение порекомендовало пользователю, куда лучше заказать автомобиль.</p><p>Сформируйте из точек прибытия на улице Льва Толстого наименьшее количество рекомендуемых точек подачи. Каждая рекомендуемая точка должна быть одной из списка точек прибытия. Расстояние от каждой точки прибытия до ближайшей рекомендуемой не должно превосходить R.</p><p><b>Формат ввода</b></p><p>В первой строке задаётся два числа N (0 ≤ N ≤ 105) и R (0 ≤ R ≤ 109) через пробел. В следующей строке записано N целых чисел (координаты точек), каждое из которых по абсолютной величине не превосходит 109.</p><p>Формат вывода</p><p>Выведите одно целое число, показывающее наименьшее количество точек, которые надо выбрать в качестве рекомендуемых точек подачи.</p><p><b>Примеры</b></p><p><b>Формат вывода</b></p><p>Выведите одно целое число, показывающее наименьшее количество точек, которые надо выбрать в качестве рекомендуемых точек подачи.</p><p><b>Примеры</b></p><p><b>Входные данные №1</b></p><p>3 2</p><p>3 5 1</p><p><b>Выходные данные №1</b></p><p>1</p><p><b>Входные данные №2</b></p><p>3 2</p><p>4 7 1</p><p><b>Выходные данные №2</b></p><p>3</p><p><b>Входные данные №3</b></p><p>6 1</p><p>6 2 4 3 5 1</p><p>Выходные данные №3</p><p>2</p><h4>Разбор задачи</h4><p>Для начала переведём задачу в математическую постановку.</p><p>Нужно выбрать такое наименьшее количество точек на числовой прямой, чтобы расстояние от каждой имеющейся точки до выбранной нами не превосходило R. Можно считать, что каждая выбранная нами точка вырезает на плоскости отрезок длиной 2R, и после вырезаний должны пропасть все точки. Для решения задачи нам сначала надо отсортировать точки. После сортировки у нас появляется самая левая точка. Легко доказать, что эта точка в оптимальном решении должна входить ровно в один отрезок, причём этот отрезок должен быть максимально отодвинут вправо. Чтобы выбрать наиболее подходящую точку, мы проходимся циклом по точкам слева направо и ищем самую правую, у которой расстояние до первой точки не превосходит R. Потенциально это может быть и самая правая точка.</p><p>Как только мы нашли эту точку, мы виртуально вырезаем отрезок длиной 2R и пропускаем все точки, что находятся внутри него (слева от первой и справа от последней точки отрезка).</p><p>После этого действия у нас снова остался отсортированный список точек, к которому мы применяем тот же алгоритм. Осталось посчитать, сколько точек нам удалось выбрать.</p><h3>2. Такси в отеле</h3><h4>Формулировка задачи</h4><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/9d64f53f-f571-4802-bbcf-6d29eaec5145.png" alt="" /></figure><p>При отеле в курортном городе работает такси. Оно забирает постояльцев отеля из аэропорта, а в день отъезда отвозит назад. Нам известны дни приездов и отъездов автомобилей этого такси и число клиентов отеля, которые каждый раз приезжали или уезжали. В один и тот же день может быть как несколько приездов, так и несколько отъездов посетителей.</p><p>В отеле по нечётным числам месяца готовит шеф-повар Мефодий, по чётным — шеф-повар Кирилл. Они поспорили, кому тяжелее работать. Повара хотят посчитать максимальное число посетителей, для которых готовил каждый из них с первого дня по текущий включительно.</p><p>Напишите программу, которая, используя данные про приезды и отъезды посетителей, выводит на стандартный вывод два числа через пробел. Первое число — максимальное количество посетителей, для которых готовил Мефодий. Второе — максимальное количество посетителей, для которых готовил Кирилл.</p><p>Условие: для приезжающих постояльцев в день приезда готовить нужно, а для отъезжающих в этот день — уже не нужно (то есть нужно готовить только для тех, кто остаётся в отеле как минимум на ночь). Изначально в отеле посетителей не было.</p><p><b>Формат ввода</b></p><p>На входе на первой строке есть одно число N (2 ≤ N ≤ 105), где (N − 1) — число записей в логе.</p><p>Далее следует строка с информацией про номер текущего дня M — целое положительное число (0 ≤ M ≤ 103). После идёт (N − 1) — строка с данными о приездах и отъездах такси с посетителями по текущий день в виде набора строк в следующем формате:</p><p>arrival arrival_day_number clients_count</p><p>departure departure_day_number clients_count</p><p>Строки, начинающиеся со слова arrival, соответствуют приезду clients_count клиентов в день под номером arrival_day_number.</p><p>Строки, начинающиеся со слова departure, соответствуют отъезду clients_count клиентов в день под номером departure_day_number.</p><p>При этом выполняются условия:</p><p>0 &lt; clients_count ≤ 103</p><p>0 ≤ arrival_day_number ≤ 105</p><p>0 ≤ departure_day_number ≤ 105</p><p>Формат вывода</p><p>Два числа — максимальные количества посетителей, для которых готовили Мефодий и Кирилл соответственно.</p><p><b>Примеры</b></p><p><b>Входные данные</b></p><p>7</p><p>3</p><p>arrival 3 2</p><p>departure 2 5</p><p>arrival 3 2</p><p>arrival 2 2</p><p>arrival 1 10</p><p>departure 3 7</p><p><b>Выходные данны</b>е</p><p>10 7</p><h4>Разбор задачи</h4><p>Задача имеет несколько разных подходов к решению. Разберём один из них.</p><p>Нас просят найти два числа: максимальные количества посетителей в день, для которых готовил каждый из поваров.</p><p>Для начала считаем данные о приездах и отъездах посетителей в массив структур, каждая из которых хранит в себе информацию об одном из событий: в какой из дней был приезд или отъезд и сколько людей в этот день приехало или выехало из отеля соответственно.</p><p>Далее отсортируем этот массив событий в хронологическом порядке. После этого, чтобы посчитать интересующие нас показатели, нужно пройти по получившемуся массиву событий слева направо, поддерживая текущее число посетителей отеля, для которых нужно готовить, и обновляя два максимума — количества посетителей в чётные и нечётные дни. При этом стоит обратить внимание на два нюанса:</p><p>1. В один и тот же день может быть несколько приездов и отъездов, поэтому нужно явно посчитать, сколько людей приехало и выехало в каждый из дней, суммируя приезжающих и вычитая выезжающих.</p><p>2. Если в некоторый момент времени мы рассматриваем день с, например, чётным номером N, а на предыдущей итерации цикла был рассмотрен день с номером меньшим (N − 1), то, при условии, что текущее число посетителей отеля, для которых нужно готовить превысило максимум для нечётных дней, нужно обновить и этот максимум (по нечётным дням).</p><h3>3. Очередь такси в космическом порту</h3><h4>Формулировка задачи</h4><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/aa2359d3-b060-4ec9-9de1-1faa5b4e3ec7.png" alt="" /></figure><p>Водитель такси прибывает в космопорт Луны. Все такси в ожидании заказа выстраиваются в очередь возле шлюзов космической станции.</p><p>Считаем, что автомобили образуют очередь, если все они находятся на одной прямой. Длина очереди не может быть менее 3. Координаты автомобиля задаются тремя целыми числами. В одной точке пространства не может находиться более одного автомобиля.</p><p>Помогите водителю найти самую короткую очередь. В случае, если невозможно найти минимальную очередь длиной ≥ 3, в качестве ответа верните 0.</p><p><b>Формат ввода</b></p><p>Первая строка содержит целое неотрицательное число — количество записей с координатами такси. Каждая следующая строка состоит из трёх целых чисел, разделённых пробелами, образующих тройку координат x, y, z.</p><p><b>Формат вывода</b></p><p>Одно число — минимальная длина очереди.</p><p><b>Примеры</b></p><p>Входные данные №1</p><p>10</p><p>1 1 1</p><p>2 2 2</p><p>3 3 3</p><p>4 4 4</p><p>5 5 5</p><p>6 6 6</p><p>7 7 7</p><p>3 6 9</p><p>2 4 6</p><p>1 2 3</p><p>Выходные данные №1</p><p>3</p><p>Входные данные №2</p><p>5</p><p>1 1 1</p><p>2 2 2</p><p>3 3 3</p><p>4 1 4</p><p>9 9 9</p><p>Выходные данные №2</p><p>4</p><h3>Разбор задачи</h3><p>Очевидно, что задача сводится к поиску подмножеств точек, лежащих на одной прямой, и выбору подмножества минимальной мощности ≥ 3.</p><p>Вспомним каноническое уравнение прямой:</p><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/4560122c-42ec-471b-b2ed-8c4608f14061.png" alt="" /></figure><p>Где (α, β, γ)  – координаты вектора, коллинеарного этой прямой.</p><p>Из данного уравнения явным образом следует:</p><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/b6f49207-3da8-4ba0-b742-4c6d31ea0ff6.png" alt="" /></figure><p>Таким образом, получаем простой алгоритм решения задачи.</p><p>На каждом шаге будем поочерёдно выбирать каждую из N точек за (x0, y0, z0). Разобьём всё остальное множество точек на подмножества по ключу</p><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/2d121bc2-347a-44c3-887f-eeeab7087200.png" alt="" /></figure><p>и запомним минимальную мощность получившихся подмножеств.</p><p>С точки зрения реализации, удобно перейти от операций с рациональными дробями к операциям с тройкой целых чисел (Δxi, Δyi, Δzi).</p><p>Для этого необходимо нормировать (xi − x0, yi − y0, zi − z0) по НОД(xi − x0, yi − y0, zi − z0).</p><p>Полученный алгоритм будет иметь вычислительную сложность O(n2) и требования к памяти O(n).</p><h3>4. Телепорт</h3><h4>Формулировка задачи</h4><figure><img src="https://media.tproger.ru/user-uploads/33794/2024-02-21/17646ea7-bd61-47b4-8e6f-10aefe375667.png" alt="" /></figure><p>Яндекс.Такси открыло услугу межконтинентальной телепортации автомобилей. Телепорт представляет собой замкнутую область (полигон), в котором одновременно могут находиться несколько автомобилей. Телепорт открывается в определённые моменты времени — заранее они не известны. Одновременно может телепортироваться только одна машина. Если в момент открытия портала в полигоне находится более одного автомобиля, то будет телепортирован тот, который лучше всего синхронизирован с полем телепорта (дольше других непрерывно находился в зоне телепортации). Зная траектории движения автомобилей и моменты времени открытия портала, выведите соответствие порядкового номера открытия портала и автомобиля. Если в момент открытия портала в полигоне не было автомобилей, выведите -1.</p><p>Формат ввода</p><p>В первой строке находится число N — количество вершин в полигоне. В следующей строке находится N пар целых чисел Pxi и Pyi (разделённые пробелом), задающих вершины полигона. Никакие из двух сторон полигона не пересекаются. В следующей строке находится число M — количество автомобилей. Далее следует M строк, в каждой из которых идёт количество треков i-го автомобиля Ti; следом за ней — Ti * 3 целых чисел, разделённых пробелом. Каждая тройка - это одна координата автомобиля, состоящая из времени точки t и координат точки x и y. В следующей строке находится количество открытий телепорта K. За ней на этой же строке через пробел находится K чисел, обозначающих время открытия телепорта Ki. Гарантируется, что все времена будут строго возрастающими.</p><p>Ограничения:</p><p>3 ≤ N ≤ 100</p><p>-109 ≤ Pxi, Pyi, x, y ≤ 109</p><p>0 ≤ M ≤ 104</p><p>1 ≤ K ≤ 104</p><p>0 ≤ t ≤ 106</p><p>0 ≤ Ki ≤ 107</p><p>Суммарное количество всех треков Ti всех автомобилей не превышает 105, при этом каждый автомобиль имеет хотя бы один трек. У каждого автомобиля все треки гарантированно уникальные по времени. Автомобиль находится внутри полигона, если последний его трек (со временем t ≤ Ki) находится внутри полигона.</p><p><b>Формат вывода</b></p><p>Необходимо вывести K целых чисел, где каждое число обозначает идентификатор автомобиля, который телепортируется в соответствующее время, либо -1, если автомобилей в очереди нет. Если несколько автомобилей въехали одновременно, то необходимо вывести тот, у которого меньший идентификатор. Каждый автомобиль может телепортироваться не более одного раза.</p><p><b>Примеры</b></p><p>Входные данные №1</p><p>4</p><p>-1 -1 -1 1 1 1 1 -1</p><p>4</p><p>1 1 -2 1</p><p>1 2 0 0</p><p>1 3 0 0</p><p>1 4 1 1</p><p>5 0 2 4 5 6</p><p>Выходные данные №1</p><p>-1 2 3 4 -1</p><p>Входные данные №2</p><p>4</p><p>-1 -1 -1 1 1 1 1 -1</p><p>4</p><p>2 1 -2 1 3 -1 1</p><p>1 2 0 0</p><p>1 3 0 0</p><p>1 4 1 1</p><p>5 0 2 4 5 6</p><p>Выходные данные №2</p><p>-1 2 1 3 4</p><h3>Разбор задачи</h3><p>Рассмотрим один из подходов к решению задачи.</p><p>При считывании позиций водителей можно сразу определять принадлежность точки заданному полигону. По условию полигон не имеет никаких пересечений, поэтому задача несколько упрощается. Можно воспользоваться алгоритмом с использованием луча, выпущенного из проверяемой точки, и посчитать количество пересечений со сторонами многоугольника.</p><p>Далее можно объединить все позиции водителей с привязкой ко времени и время открытия телепорта в один сортированный список событий и пройти по нему. Тогда задача сводится к поддержанию актуального списка водителей в очереди и их последовательности.</p><p>При появлении очередного трека с координатами, проверяем, был ли этот водитель внутри полигона ранее. Если водитель только что въехал в полигон, то добавляем его в конец очереди (удобнее использовать для этого двусвязный список) и в индекс для быстрого поиска водителя внутри списка. Если водитель выехал из полигона, то по индексу находим его в списке и удаляем из списка и из индекса.</p><p>При открытии телепорта берём первого водителя из списка (или выводим -1, если список пустой) и добавляем его в список исключений, поскольку он уже переместился на другой континент.</p><p>Так как все моменты открытия телепорта строго возрастающие, нет необходимости делать дополнительные индексы, а можно выводить данные сразу по ходу новых открытий телепорта.</p>]]></content:encoded>
    </item>
    <item>
      <title>Собираем кубик Рубика без полного перебора решений</title>
      <link>https://tproger.ru/translations/solving-rubicks-cube</link>
      <comments>https://tproger.ru/translations/solving-rubicks-cube?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Кирилл Поздеев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/solving-rubicks-cube</guid>
      <description><![CDATA[<p>Материал объясняет два способа решения кубика Рубика: карту всех состояний и улучшенный алгоритм, который эффективнее использует память.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/solving-rubicks-cube">Собираем кубик Рубика без полного перебора решений</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 06 Aug 2018 16:08:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Сколько существует возможных комбинаций кубика Рубика? Как за минимальное количество ходов можно решить эту головоломку? Перебирать все возможные варианты? В этой статье будет представлено два способа решения данной проблемы.</p><p>Кубик Рубика имеет конечное количество состояний, поэтому можно составить карту всех комбинаций и решений для них. Тогда при получении кубика в любом состоянии, можно просто следовать уже готовому алгоритму. Это вполне разумный подход, но он требует огромного вложения времени и памяти для построения дерева всех возможных вариантов, хотя и помогает максимально быстро найти решение.</p><p>Для предварительного вычислениях всех состояний можно сделать следующее:</p><ol><li>Начнем с решенного кубика и пометим этот этап как «0».</li><li>Произведем все простейшие вращения. Полученные состояния отметим как этап «1», а также запишем ходы, которые требуются для возврата к предыдущему состоянию «0».</li><li>Теперь для всех состояний из «1» произведем простейшие повороты, отметим как «2» и запишем ходы, которые требуются для возврата к предыдущему состоянию «1».</li><li>Будем повторять до тех пор, пока не найдем все возможные состояния кубика Рубика.</li></ol><p>Прим. перев.  Простейшим вращением считается поворот одной из граней на 90 градусов по часовой стрелке или против часовой стрелки и поворот грани на 180 градусов. Больше информации о языке вращений кубика Рубика можно найти <a href="https://www.youtube.com/watch?v=4ORv6B-SWNM">здесь</a>.</p><p>В итоге у вас получится карта всех состояний такого вида:</p><figure><img src="https://media.tproger.ru/uploads/2018/07/main-qimg-60f3d3dbc6c444f7412758cae809b663.jpg" alt="" /></figure><p>Это достаточно большое дерево решений, но его глубина — всего 20. Зная этот факт, можно создать улучшенную версию алгоритма, которая будет эффективнее использовать память.</p><p>Идея заключается в следующем: нужно создать карту всех состояний кубика, для решения которых требуется 10 ходов. Теперь при получении произвольного кубика Х мы находим такое состояние в дереве, которое можно достичь за еще 10 ходов.</p><p>Таким образом, получив комбинацию Х, мы будем следовать тому же самому алгоритму для построения дерева решений. Используя хэш-таблицы можно легко найти комбинацию из предварительно вычисленного дерева. Как только это произошло — решение найдено. Использование поиска в ширину гарантирует минимальное количество ходов для решения комбинации Х.</p><p>В криптоанализе такой подход называется «встречей посередине». Он позволяет сократить использование памяти, но увеличивает время расчетов. Теперь вместо огромного дерева можно использовать дерево с меньшей глубиной, затрачивая на решение немного больше времени. Не обязательно делить задачу посередине: в зависимости от доступных ресурсов можно хранить дерево с глубиной 8 или 13.</p><p>Представленный алгоритм может быть неэффективен при нынешнем уровне технологий. Команде <a href="https://www.cube20.org/">«God=20»</a> потребовалось огромное количество ресурсов и доля изобретательности, чтобы доказать, что 20 ходов достаточно для решения. Несмотря на это, данный алгоритм работает, и с его помощью можно решить любую комбинацию кубика за минимальное количество ходов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Режем кубы, преобразовываем строки, считаем квадраты: подборка задач для программистов</title>
      <link>https://tproger.ru/problems/cube-strings-chess</link>
      <comments>https://tproger.ru/problems/cube-strings-chess?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/cube-strings-chess</guid>
      <description><![CDATA[<p>Куб со стороной 4 см разрезают на кубики по 1 см, перемешивают и бросают один из них. Нужно найти вероятность выпадения зелёной грани.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/cube-strings-chess">Режем кубы, преобразовываем строки, считаем квадраты: подборка задач для программистов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 04 Aug 2018 13:48:44 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Зелёный куб</h2><p>У вас есть куб со стороной 4 см, покрашенный зеленой краской со всех сторон. Вы разрезаете этот куб на маленькие кубики со стороной 1 см. У этих новых кубиков будет либо 3 зеленые стороны, либо 2 зеленые стороны, либо 1, либо вообще ни одной. Все кубики помещаются в урну и тщательно перемешиваются, затем случайным образом выбирается один. Он подбрасывается как игральная кость. Какова вероятность, что он приземлится зеленой стороной вверх?</p><h2>Способы преобразования одной строки к другой</h2><p>Даны 2 строки: str1 и str2; задача — вывести все возможные варианты преобразования str1 в str2. К str1 применимы операции:</p><ul><li>вставки;</li><li>удаления;</li><li>замены.</li></ul><p>Все операции имеют одинаковую стоимость. Задача — вывести все варианты преобразования str1 в str2 с использованием минимального количества шагов (операций), где вариантом ответа является последовательность операций.</p><p>Примеры:</p><p>Вход: str1 = «abcdef», str2 = «axcdfdh»</p><p>Выход:</p><p>Вариант 1:</p><ul><li>Вставить h;</li><li>Заменить f на d;</li><li>Заменить e на f;</li><li>Заменить b на x.</li></ul><p>Вариант 2:</p><ul><li>Заменить f на h;</li><li>Вставить d;</li><li>Заменить e на f;</li><li>Заменить b на x.</li></ul><p>Вариант 3:</p><ul><li>Заменить f на h;</li><li>Заменить e на d;</li><li>Вставить f;</li><li>Заменить b на x.</li></ul><h2>Квадраты на шахматной доске</h2><p>Сколько квадратов на шахматной доске?</p><figure><img src="https://media.tproger.ru/uploads/2018/07/image1-280x280.jpg" alt="" /></figure><p>Если вы думаете, что 64, — подумайте еще раз!</p><p>Учли ли вы квадраты, которые образованы комбинацией клеток (2×2, 3×3, 4×4 и т.д.)?</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка задачек: считаем спички, капли и вычисляем лживых осьминогов</title>
      <link>https://tproger.ru/problems/matchsticks-pipes-and-an-octopus</link>
      <comments>https://tproger.ru/problems/matchsticks-pipes-and-an-octopus?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/matchsticks-pipes-and-an-octopus</guid>
      <description><![CDATA[<p>Два игрока по очереди забирают крайнюю кучку спичек из ряда. Нужно выбрать порядок хода и алгоритм, который даст максимальное число спичек.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/matchsticks-pipes-and-an-octopus">Подборка задачек: считаем спички, капли и вычисляем лживых осьминогов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 24 Jul 2018 16:40:10 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Игра со спичками</h2><p>N спичечных кучек с различным количеством спичек расположены в ряд (предположим, что кучек четное количество). Два игрока по очереди забирают себе по крайней куче, пока не останется ни одной. Игрок с большим количество спичек побеждает.</p><p>Вы бы предпочли ходить первым или вторым? Это имеет значение?</p><p>Предположим, что вы ходите первым — предложите алгоритм для получения максимального количества спичек, которое вы сможете выиграть.</p><p>Стратегия, просто основанная на заборе максимальной из 2-х крайних куч, может не работать. В следующем примере первый игрок проигрывает, если забирает максимальную из 2-х куч каждый ход:</p><p>Расстановка 18 20 15 30 10 14:</p><ol><li>Первый игрок забирает 18, осталось: 20 15 30 10 14.</li><li>Второй игрок забирает 20, осталось: 15 30 10 14.</li><li>Первый игрок забирает 15, осталось: 30 10 14.</li><li>Второй игрок забирает 30, осталось: 10 14.</li><li>Первый игрок забирает 14, осталось: 10.</li><li>Второй игрок забирает 10, конец игры.</li></ol><p>Второй игрок (20+30+10) собрал в итоге больше, чем первый (18+15+14) и выиграл.</p><h2>Капли в трубе</h2><p>Рассмотрим трубу длиной L. В трубе присутствует N капель на N различных позициях. Каждая капля движется к концу трубы (x = L) с разной скоростью. Когда капля смешивается с другой каплей, она принимает скорость капли с которой смешивается. Напишите программу для определения количества капель, которые вытекут из трубы.</p><p>См. рисунок ниже:</p><figure><img src="https://media.tproger.ru/uploads/2018/07/droplets-puzzle-mini-pic-1.jpg" alt="" /></figure><p>Пример:</p><p>Вход: длина = 12, позиции = [10,8, 0, 5, 3], скорость = [2, 4, 1, 1, 3].<br />Выход: 3.</p><p>Объяснение:</p><p>Капли, начинающие с позиций x=10 и x=8 станут одной каплей, встретившись в х=12 через одну секунду. Капля, начинающие с позиции 0 ни с кем не смешается, поэтому выйдет как есть. Капли, начинающие с позиций x=5 и x=3 объединятся в одну каплю на позиции х=6 во время равное t=1 сек. Никакие другие капли им не встретятся до конца трубы, поэтому ответом к задаче будет 3. Рассмотрим иллюстрацию.</p><p>Цифры на каплях означают скорость:</p><figure><img src="https://media.tproger.ru/uploads/2018/07/droplets-puzzle-pic-2.jpg" alt="" /></figure><h2>Король Осьминог</h2><p>У короля Осминога есть слуги с шестью, семью и восемью ногами. Слуги с семью ногами всегда лгут, но слуги с 6 или 8 ногами всегда говорят правду.</p><p>Однажды встретились 4 слуги:</p><ol><li>Синий заметил: «Всего у нас 28 ног»;</li><li>Зеленый ответил: «У нас 27 ног»;</li><li>Желтый сказал: «У нас 26 ног»;</li><li>А красный заметил: «У нас 25 ног»;</li></ol><p>Слуга какого цвета сказал правду?</p>]]></content:encoded>
    </item>
    <item>
      <title>Плавание, башня и тролли — 3 задачки для разминки мозга</title>
      <link>https://tproger.ru/problems/sailing-tower-trolls</link>
      <comments>https://tproger.ru/problems/sailing-tower-trolls?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/sailing-tower-trolls</guid>
      <description><![CDATA[<p>Парусник проходит километр за две минуты с попутным ветром и за три минуты против него. Задача предлагает вычислить скорость лодки в полный штиль.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/sailing-tower-trolls">Плавание, башня и тролли — 3 задачки для разминки мозга</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Jul 2018 13:50:24 GMT</pubDate>
      <content:encoded><![CDATA[<h3>Плавание против ветра</h3><p>Парусник проходит 1 километр за 2 минуты с попутным ветром и возвращается за 3 минуты против встречного. Насколько быстро будет плыть лодка эту дистанцию в штиль?</p><h3>Башня из коробок</h3><p>Дан набор n типов прямоугольных трехмерных ящиков. У i-того ящика высота hi, ширина wi и длина di (действительные числа). Вам необходимо построить башню максимальной высоты из ящиков, с учётом того, что ящик можно поставить на другой ящик только в том случае, если каждое из двух измерений основания верхнего ящика меньше соответствующих измерений нижнего ящика. Вы можете поворачивать ящики, так что любая сторона может выступать основанием.Также разрешено использовать любое количество ящиков одного типа.</p><p>Пример:</p><p>Вход: { {4, 6, 7}, {1, 2, 3}, {4, 5, 6}, {10, 12, 32} }</p><p>Выход: Максимальная высота башни — 60.</p><h3>Мосты и тролли</h3><p>Вы возвращаетесь из долгого путешествия и сейчас на завершающем этапе – на пути к дому, расположенному в конце долины. У вас с собой некоторое количество денег, которые вы привезли из путешествия. Между вами и вашим домом вам придётся пересечь 5 мостов, и, поскольку дело обстоит в выдуманной стране, под каждым мостом живёт тролль! Каждый тролль справедливо будет требовать плату за проход. Прежде чем пересечь мост, вам придётся отдать половину всех наличных крон, но поскольку тролли добрые — каждый даст сдачей одну крону.</p><p>Сколько крон вы должны взять с собой, что прийти к дому ровно с 2 кронами? Постарайтесь избежать лишних трат.</p>]]></content:encoded>
    </item>
    <item>
      <title>Задачи на логику: помогите таракану, посчитайте множители и побудьте диспетчером</title>
      <link>https://tproger.ru/problems/airplane-cockroach-numbers</link>
      <comments>https://tproger.ru/problems/airplane-cockroach-numbers?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/airplane-cockroach-numbers</guid>
      <description><![CDATA[<p>Подборка головоломок с ответами и разбором: за сколько часов таракан заберётся на десятиметровую стену, как посчитать множители и справиться с диспетчерской.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/airplane-cockroach-numbers">Задачи на логику: помогите таракану, посчитайте множители и побудьте диспетчером</a>»</p>]]></description>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Jul 2018 14:23:41 GMT</pubDate>
      <content:encoded><![CDATA[<h3>Таракан на стене</h3><p>Маленький таракан карабкается по стене высотой 10 метров. Таракан начал путь с подножия стены. Каждый час он может проползти 1 метр в высоту и затем немедленно скатывается на ⅔ метра вниз. Сколько часов понадобится таракану, чтобы достичь вершины стены?</p><h3>Найдите количество простых множителей для каждого числа в диапазоне [0, K]</h3><p>Вход: N = 4<br />Выход : 0 1 1 1<br />Количество простых множителей для 1 — 0<br />Количество простых множителей для 2 — 1<br />Количество простых множителей для 3 — 1<br />Количество простых множителей для 4 — 1</p><p>Вход: 6<br />Выход: 0 1 1 1 1 2<br />Количество простых множителей для 1 — 0<br />Количество простых множителей для 2 — 1<br />Количество простых множителей для 3 — 1<br />Количество простых множителей для 4 — 1<br />Количество простых множителей для 5 — 1<br />Количество простых множителей для 6 — 2<br />2, 3 и 5 сами являются простыми. Для 4 единственный простой множитель — 2. Для 6 простых множителей два — 2 и 3.</p><h3>Минимальное количество самолётов</h3><p>На удаленном острове находится аэропорт. Этот аэропорт является базой для неограниченного количества одинаковых самолетов. Топливная емкость каждого самолета позволяет облететь ровно ½ земного шара вдоль большого круга. Самолеты имеет возможность дозаправки в воздухе без потери скорости и горючего. Хотя количество топлива тоже неограничено, едиственным его источником является этот остров.</p><p>Какое минимальное количество самолетов нужно, чтобы облететь земной шар, с учетом того, что каждый самолет должен безопасно вернуться в аэропорт?</p><p>Обратите внимание:</p><ol><li>Можно игнорировать затраты горючего на ускорение, потери при испарении топлива и пр.</li><li>Поскольку все самолеты должны вернуться в аэропорт — нельзя передать все топливо с одного самолета на другой.</li><li>Предполагается, что дозаправка — чрезвычайно быстрый процесс.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>Развиваем мышление: три простые задачи на логику</title>
      <link>https://tproger.ru/problems/cat-production-line-stairs</link>
      <comments>https://tproger.ru/problems/cat-production-line-stairs?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Андрей Приб]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/cat-production-line-stairs</guid>
      <description><![CDATA[<p>Три логические задачи для программистов: про производственную линию с удвоением выпуска (25% за 16 дней), поиск кота и подъём по ступенькам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/cat-production-line-stairs">Развиваем мышление: три простые задачи на логику</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 29 Jun 2018 15:05:33 GMT</pubDate>
      <content:encoded><![CDATA[<h2>1. Экспериментальная производственная линия</h2><h3>Вопрос:</h3><p>Новая экспериментальная производственная линия тестируется перед запуском на заводе. Линия выпускает автомобильные двигатели. В ходе тестирования выпуск продукции на линии удваивался ежедневно, и задача по выпуску продукции была выполнена за 18 дней. Сколько дней занял выпуск 25% этой продукции?</p><h2>2. Найдите кота</h2><h3>Вопрос:</h3><p>Кот прячется в одной из пяти коробок. Коробки пронумерованы от одного до пяти и расположены в ряд по порядку. Каждую ночь пугливый кот прячется в соседнюю коробку, находящуюся рядом с коробкой, в которой он прятался в предыдущий день. Каждое утро, вы можете открыть только одну коробку, чтобы проверить, есть ли там кот. Можно ли с уверенностью сказать, найдётся ли кот? Как нужно играть в эту игру, чтобы вычислить кота?</p><h2>3. По ступенькам</h2><h3>Вопрос:</h3><p>Вы поднимаетесь по ступенькам. До вершины n шагов. За каждый шаг вы можете переступить 1 или 2 ступеньки. Сколько у Вас есть различных вариантов подъема на вершину?</p>]]></content:encoded>
    </item>
    <item>
      <title>Задача про обиженного короля и сотню звездочётов</title>
      <link>https://tproger.ru/problems/sad-king-riddle</link>
      <comments>https://tproger.ru/problems/sad-king-riddle?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/sad-king-riddle</guid>
      <description><![CDATA[<p>Король наказывает 100 звездочётов за опоздание, надевая им шляпы. Учёные угадывают цвет шляпы, глядя вперёд. Один рискует, 99 выживают по алгоритму чётности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/sad-king-riddle">Задача про обиженного короля и сотню звездочётов</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи повышенной сложности]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 23 May 2018 16:22:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>Король после пира в своём дворце дал команду страже арестовать 100 звездочётов, так как они позже всех пришли на празднество и этим его обидели. Он был любителем поиграть и приказал звездочётам выстроиться в ряд, задумав надеть на их головы синие и красные шляпы. После построения им будет запрещено общаться, издавать какие-либо звуки, оглядываться и снимать шляпы. Однако разрешено смотреть на шляпы стоящих спереди и слушать ответы стоящих сзади.</p><p>Король будет подходить к каждому звездочёту и задавать один и тот же вопрос: «какого цвета твоя шляпа?»</p><p>Учёные должны ответить на вопрос короля только одним словом: «красная» или «синяя». Неверный ответ карается тихой смертью, а за верный даруется жизнь (но всё равно придётся стоять безмолвно).</p><p>Король доходчиво объяснил, что в случае нарушения правил будет казнена вся сотня участников его игры. После чего разрешил учёным посовещаться.</p><p>Какой алгоритм поможет спасти максимальное количество звездочётов?</p><p>Обратите внимание Шляпы на головы звездочётов надевает король, обход начинается с конца. Люди выстроены таким образом, что смотрят друг другу в затылок.</p><h2>Решение</h2><p>Звездочёты должны договориться и создать правило: первый отвечающий считает количество синих шляп перед собой, если это нечётное число, он говорит «синяя», если чётное — «красная». Следующий, видя количество и цвет шляп перед собой, может определить, какого цвета шляпа у него на голове (например, если синих все ещё нечётное количество, видимо, на нём красная). Можно вывести правило: если чётный номер говорит «синяя», то синих шляп нечётное число, если он говорит «красная», то красных шляп чётное число и т.д.</p><p>Таким образом гарантированно выживут 99 из 100. У первого шансы 50/50.</p><blockquote>Обратите внимание на другую нашу задачку о том же короле.</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Как вытащить носки одинакового цвета, не заглядывая в комод</title>
      <link>https://tproger.ru/problems/colored-socks</link>
      <comments>https://tproger.ru/problems/colored-socks?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/colored-socks</guid>
      <description><![CDATA[<p>Логическая задача для программистов: в ящике 40 синих и 40 коричневых носков, нужно найти минимальное число попыток для гарантированной пары.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/colored-socks">Как вытащить носки одинакового цвета, не заглядывая в комод</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 11 May 2018 11:01:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>Предположим, у вас в ящике комода лежит 40 синих носков и 40 коричневых. Какое минимальное количество носков вам надо вытащить из ящика, не заглядывая в него, чтобы гарантированно получить пару носков одного цвета?</p><p>Решать эту задачу следует пошагово, начиная с двух носков. Если вытащить из ящика всего два носка, то они могут быть разных цветов, но третий носок гарантированно составит пару одного цвета.</p><p>Стратегия такова: для полной убежденности в результатах своих действий надо исходить из наихудшего варианта развития событий. Наихудший вариант первых двух попыток будет заключаться в том, что вы вытащите два разных<br />носка, скажем, первым вы достанете синий, а вторым — коричневый. Но с третьей попытки вы обязательно вынете из комода либо синий, либо коричневый носок, и он гарантированно составит пару одному из первых двух.</p><p>Другие <a href="https://tproger.ru/problems/">интересные задачи</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Задача о ленивом электрике</title>
      <link>https://tproger.ru/problems/lazy-electrician</link>
      <comments>https://tproger.ru/problems/lazy-electrician?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/lazy-electrician</guid>
      <description><![CDATA[<p>Задача об электрике-стажёре: 120-жильный кабель между станциями в 10 километрах нужно пометить с обоих концов, пройдя наименьший путь.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/lazy-electrician">Задача о ленивом электрике</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sat, 05 May 2018 10:18:23 GMT</pubDate>
      <content:encoded><![CDATA[<p>Между двумя телефонными станциями, расположенными на расстоянии 10 километров друг от друга, был проложен подземный 120-жильный кабель. После прокладки кабеля обнаружилось, что жилы визуально не отличаются.</p><p>Представьте, что вы — электрик-стажёр. Начальство попросило вас определить и пометить провода на обоих концах. У вас есть лампочка и аккумулятор. Транспорт стажёрам не полагается, своего у вас тоже нет, зато есть изолента и ручка для маркировки проводов.</p><p>Как решить поставленную задачу, пройдя наименьший путь?</p><h3>Решение</h3><p>На одном конце возьмите жилу и поставьте на ней отметку «A». Затем соедините любые другие две жилы и подпишите каждую из них буквой «B», после этого соедините три ещё не соединенных жилы, отметьте каждую из них буквой «C». Продолжайте в том же духе, пока все жилы не будут объединены в группы по 1, 2, 3, 4, 5 и более.</p><p>Примечание Всего получится 15 групп с обозначениями от А до О, и в самой большой группе будет 15 жил.</p><p>Теперь подойдите к другому концу кабеля и подключите батарею к любой жиле. Теперь подставляйте лампочку к другим жилам, помечайте жилы, на которых лампочка загорится, таким образом: если лампочка не загорелась, значит жила не подсоединена к другим, и это — жила А; если лампочка загорелась один раз, значит это жила В (группа из 2х жил) и т.д. Таким образом у вас получились те же обозначения групп, что и на другом конце. Теперь возьмите из каждой группы по одной жиле, соедините их и пронумеруйте так, чтобы первой была буква группы, а после неё – размер группы. Первая группа у вас будет самой большой (15 жил), а номера будут выглядеть как А15, В15, …, О15. Последняя группа будет самой маленькой (т.к. останется только одна жила) и жила в ней будет под номером О1.</p><p>Теперь вернитесь на исходную позицию (ту сторону кабеля, с которой начинали) и отсоедините старые связки. Тем же методом, что и на противоположной стороне (с помощью лампочки), определите размеры групп и проставьте полученное число рядом с уже стоящей буквенной маркировкой. Теперь маркировка совпадает на обеих концах провода.</p><p>Ответ</p><p>Общее наименьшее расстояние, пройденное электриком, составляет 20 километров.</p><h3>Альтернативное решение</h3><p>Сначала свяжите попарно 120 жил. У вас получится 60 пар. Затем подойдите к другому концу кабеля, пометьте любую жилу цифрой «1» и подключите её батарее. Определите с помощью лампочки, с какой жилой соединена жила номер 1 на другом конце (поскольку они соединены на другом конце, лампочка загорится). Пометьте эту жилу цифрой «2». Затем возьмите другую жилу, (не «1» и не «2»), поставьте на ней отметку «3» и подсоедините к жиле «2». Теперь у вас последовательно соединены жилы 1-2-3-4: 1 и 2 соединены на противоположном конце кабеля, 2 и 3 – на этом, 3 и 4 – на противоположном. Найдя жилу, на которой загорится лампочка, присвойте ей номер «4». Продолжайте тем же образом, пока не пронумеруете все 120 жил.</p><p>Вернитесь на ту сторону кабеля, где начали работу, оставив батарею, присоединённую к жиле «1». На исходной стороне пометьте каждую жилу так, чтобы вы знали, с какой другой она была соединена. Например, 1А – 1В, 2А – 2В, … 60А – 60В. Теперь отсоедините все жилы (на исходной позиции, с которой начали работу), лампочкой проверьте какая из них подключена к батарее и присвойте ей номер «1». В зависимости от того, какая жила была в паре с помеченной «1», пометьте её цифрой «2». Например, если у жилы, которая под напряжением, была пометка 3В, то жиле с пометкой 3А нужно присвоить номер «2». Теперь вы можете отыскать жилу 3, так как она подключена к «2» на другом конце кабеля. Как только найдёте жилу «3», пометьте цифрой «4» ту жилу, которая была с ней в паре (согласно нумерации 1А-1В, 2А-2В, …) и так далее.</p><p>Ответ</p><p>В итоге наименьшее расстояние, которое вам нужно пройти для выполнения задачи, составляет 20 километров.</p><p>Примечание Данное решение предполагает, что у кабеля слабое сопротивление, которое позволит загореться лампочке через шнур длиной в 1200 километров.</p><p>Другие интересные задачи для программистов (и не только) вы можете посмотреть у нас <a href="https://tproger.ru/problems/">на сайте</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Король и 1000 бутылок вина: как найти одну отравленную?</title>
      <link>https://tproger.ru/problems/the-king-and-1000-bottles-of-wine</link>
      <comments>https://tproger.ru/problems/the-king-and-1000-bottles-of-wine?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Прияцелюк]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/the-king-and-1000-bottles-of-wine</guid>
      <description><![CDATA[<p>Десять заключённых помогут найти отравленную бутылку: ёмкости нумеруют в двоичной системе и сопоставляют флаги с результатом через 10–20 часов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/the-king-and-1000-bottles-of-wine">Король и 1000 бутылок вина: как найти одну отравленную?</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 19 Apr 2018 11:33:02 GMT</pubDate>
      <content:encoded><![CDATA[<h3>Условие задачи</h3><p>Вы — правитель средневековой империи, и завтра у вас намечается торжество. Это будет самая чумовая вечеринка из всех, что вы когда-либо устраивали. По такому поводу не грех открыть 1000 бутылок вина. Но вот незадача: одна из них отравлена.</p><p>У яда нет никаких симптомов, кроме смерти, которая наступает в течение 10–20 часов после принятия даже малейшей дозы яда.</p><p>В вашем распоряжении меньше 24 часов на то, чтобы определить, какая из бутылок отравлена. А ещё у вас есть несколько узников, ожидающих смертной казни. Всё веселье будет испорчено, если умрёт кто-то, кроме них.</p><p>Какое минимальное количество заключённых должно попробовать вино из бутылок, чтобы точно найти отравленную в течение 24 часов?</p><h3>Решение</h3><p>Спойлер: попробовать вино должны 10 узников.</p><p>Пронумеруйте все бутылки в двоичной системе (начиная с нуля). Затем присвойте каждому узнику двоичный флаг. Например, первому — 00000000001, третьему— 00000000100 (чем больше номер узника, тем дальше влево продвигается единица) и т.д. Узники должны сделать глоток из каждой бутылки, в которой попадается их флаг. Например, из восьмой бутылки (0000000111) сделают по глотку первый, второй и третий узники.</p><p>Вот как мы бы нашли отравленную бутылку, будь их всего 8:</p><figure><img src="https://media.tproger.ru/user-uploads/34561/2023-12-21/4bbb256f-5e86-40fb-af40-c5fcc25fce98.png" alt="" /></figure><p>Если все узники умерли, то отравлена седьмая бутылка (или восьмая, если считать от единицы): номера узников — 001, 010 и 100, нужно найти бутылку, в которой все единицы встречаются на тех же позициях, что и у узников. Это бутылка под номером 111 или же седьмая бутылка в нашей таблице.</p><p>Никто не умер — нулевая бутылка. Умерли A и B — яд в третьей бутылке. Не забывайте, что мы нумеруем от нуля.</p><p>Для десяти человек существует 1024 уникальные комбинации, так что мы можем проверить до 1024 бутылок вина.</p><p>Каждый узник попробует вино примерно из 500 бутылок. Узники должны пить из каждой бутылки не дольше 15 секунд и только небольшое количество вина. Небольшие глотки не просто позволят оставить побольше вина гостям, но и не дадут узникам умереть от алкогольного отравления. Поскольку они выпьют примерно по миллилитру из каждой бутылки, в сумме каждый из них выпьет всего по бутылке.</p><p>У узников будет как минимум 50-процентный шанс выжить. Только в одном случае умрут все узники. Также существует 10 комбинаций, в которых умрёт 9 из 10 человек. Таким образом, избегая двух типов этих комбинаций, можно ограничиться смертью максимум восьми узников.</p><p>А вы знаете другие решения этой задачи? Делитесь в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>VK Cup 2018: разбор задач первого квалификационного тура</title>
      <link>https://tproger.ru/problems/vk-cup-2018-qualification-1</link>
      <comments>https://tproger.ru/problems/vk-cup-2018-qualification-1?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Прияцелюк]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/vk-cup-2018-qualification-1</guid>
      <description><![CDATA[<p>VK Cup 2018 включает классические алгоритмические олимпиадные задачи, а организаторы обещают добавить эксперименты, расширяющие жанр головоломок.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/vk-cup-2018-qualification-1">VK Cup 2018: разбор задач первого квалификационного тура</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[ВКонтакте]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 27 Feb 2018 15:36:20 GMT</pubDate>
      <content:encoded><![CDATA[<p>Как мы <a href="https://tproger.ru/events/vk-cup-2018/">писали ранее</a>, «ВКонтакте» и Codeforces анонсировали VK Cup 2018 — ежегодный чемпионат по программированию для молодых специалистов.</p><p>К участию в соревновании приглашаются программисты от 14 до 23 лет, командный состав — до двух человек. Основная тематика конкурса — классические алгоритмические олимпиадные задачи. В 2018 году организаторы также обещают превратить некоторые головоломки в «смелые эксперименты, расширяющие этот жанр». Чемпионат проводится на русском языке.</p><p>Призы VK Cup соответствуют круглым числам в двоичной системе счисления:</p><ul><li>1 место — 1 048 576 рублей;</li><li>2 местo — 524 288 рублей;</li><li>3 местo — 262 144 рубля;</li><li>4–8 места — 131 072 рубля.</li></ul><p>Первый квалификационный тур прошёл 24 февраля, и ниже мы разберём его задания. Надеемся, что это поможет всем, кто планирует участвовать во втором отборочном этапе, который запланирован на 2 марта.</p><h3>A. Проверка логина</h3><h3>B. Переписка с другом</h3><h3>C. Управление зависимостями</h3><h3>D. Автодополнение</h3>]]></content:encoded>
    </item>
    <item>
      <title>«На День святого Валентина я написал своей жене головоломку. Сможете ли вы её решить?»</title>
      <link>https://tproger.ru/translations/valentine-day-puzzle</link>
      <comments>https://tproger.ru/translations/valentine-day-puzzle?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Прияцелюк]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/translations/valentine-day-puzzle</guid>
      <description><![CDATA[<p>Программист придумал подарок для жены, которая учится создавать Android-приложения на Java и интересуется криптовалютами. Получится ли решить задачу?</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/translations/valentine-day-puzzle">«На День святого Валентина я написал своей жене головоломку. Сможете ли вы её решить?»</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Переводы]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 14 Feb 2018 17:14:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>Рассказывает Уолт Шлендер, влюблённый программист</p><p>В этом году моя жена начала интересоваться программированием. Она выбрала Java и начала создавать приложения для Android.</p><p>Вчера я не знал, что ей подарить на День святого Валентина. Что можно подарить тому, кто не любит цветы или конфеты и ненавидит плюшевых медведей? Ну, зато я знал, что ей нравятся криптовалюты, поэтому написал для неё головоломку.</p><p>Она её решила, а вы сможете?</p><h3>НАЧАЛО ГОЛОВОЛОМКИ</h3><p>Дорогая,</p><p>Я люблю тебя. Этот год прошёл замечательно. Спустя 16 лет ты всё ещё меня вдохновляешь и удивляешь каждый день. Недавно ты поразила меня своими проектами в программировании — никогда бы не подумал, что ты, студент-художник, который постоянно твердил о своей ненависти к математике, будешь выпускать Android-приложения…ЧЕВО? Можно я припишу себе часть заслуг??</p><p>Конечно, твоя заслуга в том, что один непробиваемый инженер начинает понимать, что программы довольно бесполезны без людей (кто бы мог подумать)! Спасибо за уроки дизайна, вдохновение и руководство, пока я изо всех сил стараюсь… эм… исследовать «людей» (скорее, делать им больно) и… рисовать «вещи» (аналогично).</p><p>Эй! Сегодня День святого Валентина, и я знаю, что ты не ешь шоколад и не в восторге от цветов, поэтому я приготовил кое-что получше. Это действительно хороший подарок, но есть одно «но»: чтобы его получить, тебе придётся воспользоваться своим умением программировать. ХАХАХА! 😉</p><p>Хочешь попробовать?</p><p>Вот инструкция:<br />«Используй КЛЮЧ, чтобы получить ПРИЗ»</p><p>Ты можешь решить эту часть головоломки с помощью этих онлайн-инструментов:</p><p>Преобразователь строки в шестнадцатеричный формат: <a href="https://goo.gl/WNrFB3">https://goo.gl/WNrFB3</a><br />Шестнадцатеричное число в строку: <a href="https://goo.gl/g9zYpK">https://goo.gl/g9zYpK</a><br />XOR-кодировщик: <a href="https://goo.gl/GWVmsx">https://goo.gl/GWVmsx</a></p><p>Советую использовать именно эти, потому что я всё проверял именно с их помощью. Другие инструменты не давали тех же результатов. Также игнорируй кнопку «Decrypt» в XOR-кодировщике… и ещё: убедись, что правильно установила тип.</p><p>Подсказка: чтобы всё получилось, тебе придётся узнать больше о шестнадцатеричном формате и XOR.</p><h3>НАЧАЛО КЛЮЧА (ASCII)</h3><h3>НАЧАЛО ПРИЗА (HEX)</h3><p></p>626522250068411f1f590076414c2a213b26212a683c1a6441590100734f23392a6f3b27263c017d7f5a5a4c450054006f282a3b01584e54491b4b492a53454e54616f1507232423245e4f594d266e2a434c41535307072e3f5158775a575e554f52555e3c6441360e55232423240e1a0000504948396c7e45005354413b262c0147484f5a571a694e485354496f3b464b654b570e130e18021b2d2a1b016f2d7a52495641542a6f5255405552581a5c53545b420e7d5a5c4740490e5a464b674049545255585526626453001d00026d74422b01011b1a4a48534c5b5a4b0e5d5a4f5a474d0e4847404f560073544948216a2a544845694e533b3d54424f525554496a4e080e130e0c0c15232423240e0e0e1a5052494d403b682a5354415449430029264f5a571a694e485354490e5a464b650a166b404d5c574a4e5f5e01722d28434449484f4301514a3a47501a5a4b55575e1b41484e5a4e415d0f1a054f5d5a55496e6e6c44537c551010116652544250544548664f0a0a0b68405a5a464a725b1e1e5e293f786c4d014048444f530147504e457c5511110a7c5f5e4b5e414d0f415d405f2b53535a331a3d3a11664a42504d01514a4346021b2d2a001b1b1a4a4853584f5a4b0e3c5441544943004649010e4c007f1b7f634e4700544845694e535452554354494f4e5365545948575e3b4544001d00027a4e565101464a451a331a3d3a1166425642485552015850547c027c55101011660e161b48507c551010116649445344015350331a5f5f3c4c5444467c55101011665547467c5510101166434b424d580d09342b4755531e1d1b0e1046502160292261372308526653010c0e7c557f7f7e0915213913543d3a116658484d4b4e22292b2a7d5411110a7d4e556e545444013c26465a725b1e1e1f7c4e4f3f662b53507c5510177e092745547d4e0b0b0a7d4e5c5d1355107f1f685f5a4d4544580e4f5353562f786e014a4658512f253e1a7d54110b0a7c53494f554e177f6146405e0346451e42021856675267547f3d3b660e0c016c2d25477d54110b0a7c4e4e495e0f5d5e725b1e1e1f685a4a434a4a4901066648482b7e6e564c087c557f7f7e6743531a584a5255664f1e1e1f685b565f4a0f0200725b1e0a11666373707c38565510101166452b284157504e481b1614664f1e1e1f687f4e5a5c5f495d4e5a5e1b7c550b117e4b2248014b5055467c3a7f110a7d40544c1c1b1600725b1e1e1f29195c48725b1e0a0b7c4f4629517f1010116647485352551354110b0b7c4b4e5951444c00415d46594e1a0b0f445c424b2f677b010c0e7c55101011665547477d540b0a0b7c4b4e4d45444c0f4e414d0f411c07386d7f44014a46580142424d0141467c5511110a7c5c574f5e5d4a4b725b1e1e7e664a4d1a012c6a4f7c5510101166465349445344564c014d5951575e4f725b1e1e1f09554e0142504d55511f040153450b2c6e5547465146544e7c55101011665453505146431b49534a5d2b021b2d2a000000005052495641540a4f1c796b5449430046494e414c00735452494e47005448456954495a52554354494f4e53654e435259501b0a0b3f7938001d0002704d44440158505401474255467c551010117c1a086b565510105e295154434b4a2d6e2f202c6e203c5257405544014a46373b646e373f3b674a60565510101166580f203c6e3c517d54110b0a7d4e3e424d5445293e0f5d474a0f4f4c51594c2b692b4e5653014e40133a7f1110674e5c51491a5b5e583c44543d0f0944430f4c4c48467c550b117e4b7e4e4e44504d29133a111110675d504e5e1b485c5e5a133a1e1e1f685b49485c5c7c5510100a6725607e535354445325214e530b0c1a784a4c55514a4e4b725b1e1e1f684c430f4a5b495c514654557d3a3d3a116658404d24293c00414e581b485c575f665b1e1e1f685b4948725b1e1e1f6859404d40544329517f10101166554e6e0d5149545a58485c1766540c15232423240e0e0e0e5e5b4c5649430048552e79634300564f494400222e485513694e4853545d75730e4f5c491c4655232423241a1a1a1a016f2d2a5452595b2d2a0000006f01011b1a1a1a1a1a69575d5a4b4300415b1b415e5c53544e236322684150505976414c454e54484f44487e5b43145f404d5c575e5a065a464b240a3624231b2d2a0000000000000000000000017242494e5f5714415b5a005e5c4721544c4e47276c7a505976414c454e54494e45536441590e5e555948434a5a065a464b064e53545255435449000153090554000000000000000000000000000073595354454d0e554f4e005e3d494e544c4e08684150505976414c0a011b646445536441590e454e435259505408544845694e5354484f4d54494f4e5370541209091b2d2a2d654f4f4f2d2a0000000000000073595354454d0e4f55540e5052494e4e030125424150501639414c454e5426212a3c0b2e36615e454352595054083b272a042a360a21427f735054454409095442456f6f010101011b1b1b1b6f007359533b2a4300415b5a005e48524f3b616408684150505e192e23444f5552555e487f5a42152b45433d575e5a065a464b734e535449542c79634f4e53654e2c3d365155444512120137301a1a1a0e6f6f0e0e0e0e0e0e7d574954454d0e54543b237a52494e544c216769405151426d5b565f544e47404b5d6a4f57004a4b4d5c575e4e0854485e68217e7e525543544920213c644f4249434a4e5f5e6a5a1c07071523240e0e0e0e0e0e0e1a5d43414f4227254f58434550544920210144124037301a1a1a1a0e0e0e0e0e0e0e0e7d575d5a4b570e4f554f0f3f7f634e544c4e0802703d2043575e571a5f545948575e5a4740494f194f425b4b5d181301372b6f2d2a00000000005d2d2a006f010146373037301a1a0e0e5e5b4c42474d4f1c5a4f4e53596f5e7e52494e4700454e435259505509724f4853545d1a5e424f47407a4b565a074f1442072a00000000000000735452494e4700525549735459485f434b405a4b4a13214557003c1b7f634e4708091b2d2a00000000000000004654491253544e0e47131e15261c504c41494e7445171b0e4c49016a7e4808091b490b0b095b2d2a00000000000000001a1a1a0e4729084900050012001d1d0010095b2d654f4f2d2a0000000000000000000000000f0f004556454e2d2a1a1a0e00000000000000000000000000531b1d26016e78454d454e5445440b1d08434841520908504c41494e745f171b23694841522e1b0849090b11667442456f6f6f6f1a00000000000000322a233c2a344245012d2a0000000000004f6f6f6f6f01010e0e1b545f5f422a0000006f6f0e0e0e0e0e0e0e1a1b016f7e7e52694e435242222a2155444510061358535a491267504c2e47407a4b565a00594841527a556764230d11091b2d456f6f010101011b1b1a1a1a1a4737246f6f0e0e0e0e0e0e532330000000001b016f2d78455455524e6f3c5553684f58495f575f544e4b4a1523240e0e0e0e53232423241a0000004b542d616343005354413b262c0172554953545d1a5e5f4d5c575e5a067d5a5c4740490e5e5641494e6f44377923005b2d2a00006f6f01011b1b15151a63554f0e4d4f400e4d414a4b0e5a464749005041495542072a000000000000003d2a554e49541a18180137240e0e0e0e536265532324<p></p><p>С любовью,<br />Твой мальчик</p>]]></content:encoded>
    </item>
    <item>
      <title>Задачка на Python: расшифруйте строку</title>
      <link>https://tproger.ru/problems/python-challenge-level-one</link>
      <comments>https://tproger.ru/problems/python-challenge-level-one?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Прияцелюк]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/python-challenge-level-one</guid>
      <description><![CDATA[<p>Нужно расшифровать английскую строку, сдвигая символы на две позиции вправо и переходя от y к a и от z к b в программе на Python.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/python-challenge-level-one">Задачка на Python: расшифруйте строку</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачи умеренной сложности]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Для продолжающих]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 Feb 2018 12:31:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ссылка на оригинал задачи: <a href="http://www.pythonchallenge.com/pc/def/map.html">http://www.pythonchallenge.com/pc/def/map.html</a>. Обратите на неё внимание, она нам ещё пригодится.</p><h2>Условие</h2><p>Есть три пары:</p><ul><li>K → M;</li><li>O → Q;</li><li>E → G.</li></ul><p>С их помощью нужно расшифровать следующий текст:</p><blockquote>g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr’q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.</blockquote><h2>Подсказки</h2><p>Подсказка из ссылки: map. Также вы могли заметить, что между символами в парах находится ровно одна буква: K→L→M, O→P→Q, E→F→G. Кроме того, первой буквой в тексте является g, и если допустить, что оригинальное сообщение на английском, то можно предположить, что g — на самом деле i. Что у нас находится между g и i? Правильно, G→H→I. Поэтому давайте сдвинем каждый символ вправо на две позиции, y сдвинем к a и z сдвинем к b.</p><p>Прим.перев. В этой задаче применён <a href="https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%84%D1%80_%D0%A6%D0%B5%D0%B7%D0%B0%D1%80%D1%8F">шифр Цезаря</a>.</p><p>Текст не очень длинный, поэтому просто скопируем его в REPL:</p><h2>Решение 1</h2><p>Пара функций, которые помогут в преобразовании символов:</p><ul><li>ord(): сопоставляет символу целое число — его номер в таблице Unicode;</li><li>chr(): сопоставляет целому числу символ по таблице Unicode.</li></ul><p>Например:</p><p>Сдвигаем символы:</p><p>Но с z так сделать не получится:</p><p>Чтобы всё заработало, посчитаем расстояние от a до z:</p><p>Если оно больше 26 — найдём остаток от деления на 26:</p><p>Добавим его к a:</p><p>И вынесем всё в отдельную функцию:</p><p>Расшифруем весь текст:</p><p>Так мы обычно записываем циклы в Java или C, но в Python есть способ получше —  генераторы:</p><p>Раз уж нам предлагают использовать maketrans(), давайте именно так и сделаем.</p><h2>Решение 2</h2><p>В Python 3 maketrans() не является функцией модуля string; для вызова надо использовать str.maketrans() или bytes.maketrans():</p><p>Примечание В Python 2 maketrans() является функцией модуля string, поэтому сначала придётся её импортировать:</p><h2>Решение 3</h2><p>Теперь давайте напишем свой вариант maketrans. На вход подаются две строки, затем символы из первой соотносятся с символами из второй.</p><p>Определяем строки:</p><p>Применяем zip:</p><p>Создаём словарь:</p><p>Переводим всю строку:</p><h2>Следующий уровень</h2><p>Вспомним ссылку из начала статьи. Применим нашу функцию на слове map и получим ocr:</p><p>Теперь у вас есть ссылка на следующую задачку: <a href="http://www.pythonchallenge.com/pc/def/ocr.html">http://www.pythonchallenge.com/pc/def/ocr.html</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Задача: игра «Гениальный отгадчик»</title>
      <link>https://tproger.ru/problems/guess-a-color</link>
      <comments>https://tproger.ru/problems/guess-a-color?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Туренко]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/guess-a-color</guid>
      <description><![CDATA[<p>Метод должен сравнить последовательности из четырёх цветов R, Y, G и B и вернуть число хитов и псевдохитов с учётом граничных случаев.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/guess-a-color">Задача: игра «Гениальный отгадчик»</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 14 Nov 2017 19:37:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>В игру «Гениальный отгадчик» играют следующим образом:</p><p>У компьютера есть четыре слота, в каждом слоте находится шар красного (R), жёлтого (Y), зелёного (G) или синего (B) цвета. Последовательность RGGB означает, что в слоте 1 — красный шар, в слотах 2 и 3 — зелёный, 4 — синий.</p><p>Пользователь должен угадать цвета шаров — например, предположить, что там YRGB. Если вы угадали правильный цвет, вы получаете «хит». Если вы назвали цвет, который присутствует в раскладе, но находится в другом слоте, вы получаете «псевдохит». Слот с «хитом» не может быть назван «псевдохитом». Например, если фактический расклад RGBY, а ваше предположение GGRR, то ответ должен быть: один «хит» и один «псевдохит».</p><p>Напишите метод, который возвращает число «хитов» и «псевдохитов».</p><h3>Решение</h3><p>Задача довольно лёгкая, но даже в ней можно допустить несколько ошибок. Проверьте свой код, учитывая все граничные случаи.</p><p>Давайте создадим массив, который будет хранить информацию о том, сколько раз каждый символ появлялся в переменной solution (решении), исключая случаи, когда слот был «хитом». Затем мы просто просматриваем переменную guess для подсчёта количества псевдохитов.</p><p>Приведённый ниже код реализует этот алгоритм:</p><p>Обратите внимание, что чем проще алгоритм, тем важнее написать чистый и правильный код. В этом примере мы выделили code(char c) в отдельный метод, а также создали класс Result для хранения результата вместо обычного его вывода на консоль.</p>]]></content:encoded>
    </item>
    <item>
      <title>Какие задачи дают кандидатам на собеседовании?</title>
      <link>https://tproger.ru/experts/31</link>
      <comments>https://tproger.ru/experts/31?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Vladimir Gabrinevski]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/experts/31</guid>
      <description><![CDATA[<p>Эксперты делятся задачами для собеседований: от просьбы показать проекты до вопросов на проектирование, кругозор и особенности языков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/experts/31">Какие задачи дают кандидатам на собеседовании?</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Ответы экспертов]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 08 Aug 2017 18:37:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Наш подписчик интересуется:</p><blockquote>Поделитесь, пожалуйста, задачками с собеседований, которые вы задаёте кандидатам.</blockquote><p>Мы передали его просьбу на рассмотрение нашим экспертам, а теперь делимся с вами полученными ответами.</p>]]></content:encoded>
    </item>
    <item>
      <title>Задача про стопку монет</title>
      <link>https://tproger.ru/problems/coins-empire-state</link>
      <comments>https://tproger.ru/problems/coins-empire-state?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Мингалеев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/coins-empire-state</guid>
      <description><![CDATA[<p>Задача предлагает определить, поместится ли в одном помещении стопка монет по одному пенсу высотой с Эмпайр-стейт-билдинг, без точных измерений.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/coins-empire-state">Задача про стопку монет</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Математика и теория вероятностей]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 18 Apr 2017 19:43:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы получили бы стопку монет достоинством в один пенс каждая и высотой с Эмпайр-стейт-билдинг, поместились бы все эти деньги в одном помещении?</p><h2>Решение</h2><p>Сперва может показаться, что это одна из тех головоломок, задаваемых на собеседованиях, в которых предполагается оценить какое-то абсурдное число. Но на самом деле это не так. Ведь в вопросе спрашивается, поместилось ли это количество монет в помещении? Поэтому ответом на этот вопрос будет «да» или «нет». Разумеется, с объяснением.</p><p>Давайте оценим высоту Эмпайр-стейт-билдинг. В здании примерно 100 этажей, значит его высота где-то в 100 раз больше высоты обычной комнаты. Разделим нашу стопку монет на сто меньших стопок высотой от пола до потолка помещения. Теперь перед нами стоит другой вопрос: сможем ли мы разместить примерно 100 стопок монет высотой от пола до потолка в помещении? Легко! Это всего лишь решетка монет десять на десять. В самой крошечной квартире и даже в телефонной будке найдется место, чтобы положить рядом друг с другом сто монет.</p><p>Другие задачи на оценку смотрите в нашей <a href="https://tproger.ru/problems/fermi/">подборке задач Ферми</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разбор задачки о львах и людях: как перевезти всех с одного берега на другой так, чтобы львы не съели людей?</title>
      <link>https://tproger.ru/problems/people-and-lions</link>
      <comments>https://tproger.ru/problems/people-and-lions?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Мингалеев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/problems/people-and-lions</guid>
      <description><![CDATA[<p>Три человека и три льва должны пересечь реку на лодке для двоих, причём на берегу нельзя оставлять львов больше, чем людей.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/problems/people-and-lions">Разбор задачки о львах и людях: как перевезти всех с одного берега на другой так, чтобы львы не съели людей?</a>»</p>]]></description>
      <category><![CDATA[Головоломки]]></category>
      <category><![CDATA[Задачки]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 27 Mar 2017 21:17:28 GMT</pubDate>
      <content:encoded><![CDATA[<p>На одной стороне реки находятся три человека и три льва. Все они должны оказаться на другом берегу реки. Есть лишь одна лодка, в которой могут поместиться лишь два живых существа одновременно (человека или льва). Вы не можете оставлять на том или другом берегу реки больше львов, чем людей, так как в этом случае животные съедят людей, оставшихся в меньшинстве. Как вы переправите всех через реку?</p><h3>Решение</h3><p>Есть пять возможных вариантов первой поездки: один человек, один лев, человек и лев, два человека, два льва.</p><p>Так как львы не могут грести, а лодка сама не поплывет, значит, это исключает варианты с одним и двумя львами. Один и два человека тоже исключается, так как на одном берегу львов станет больше. Поэтому для первой поездки остается только один вариант: в лодке окажутся человек и лев.</p><p>Они переправляются на дальний берег.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions.png" alt="" /></figure><p>Но лодка сама вернуться не может. Из этого следует, что человек возвращается вместе с лодкой.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions2.png" alt="" /></figure><p>Рассмотрим варианты следующей поездки. Отправить двух людей мы не можем, иначе на берегу останется один человек и два льва. Поэтому единственным вариантом являются человек и лев. Человек отвозит льва на другой берег и тут же возвращается обратно. Поскольку в противном случае он останется на берегу с двумя львами.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions3.png" alt="" /></figure><p>После этих двух поездок на дальнем берегу оказываются два льва, а на ближайшем берегу останутся три человека и один лев.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions4.png" alt="" /></figure><p>В следующей поездке у нас появляется возможность выбора. Мы можем отправить двух людей или человека вместе со львом. Если мы отправим человека и льва, то на дальнем берегу окажутся три льва, и безопасно перевести остальных людей уже не получится. Поэтому данный вариант отпадает.</p><p>Вместо этого отправляем на другой берег двух людей, поскольку они по численности не уступают львам.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions5.png" alt="" /></figure><p>Но лодку надо вернуть обратно. Перевозить одного человека нельзя, поскольку на дальнем берегу останется человек и два льва. Поэтому обратно возвращаются человек и лев.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions6.png" alt="" /></figure><p>Теперь единственным разумным и безопасным вариантом является отправка двух человек на дальний берег.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions7.png" alt="" /></figure><p>Отправим обратно только одного человека. Он заберет льва (заманить его в лодку можно куском мяса) и вернется обратно.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions8.png" alt="" /></figure><p>Затем один человек возвращается за оставшимся львом.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions9.png" alt="" /></figure><p>И наконец, на дальний берег переплывают человек и лев.</p><figure><img src="https://media.tproger.ru/uploads/2017/02/lions10.png" alt="" /></figure>]]></content:encoded>
    </item>
  </channel>
</rss>