Sunday, March 3, 2013

Реальные задачи на C



Недавно попали ко мне тексты задач по программированию, которые даются реальным студентам одного московского университета в качестве заданий на лабораторные работы. Язык — С, программы консольные.

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

Задача: Сочи-2014

В рамках строительства олимпийских объектов местным чиновникам было поручено предложить план дороги на участке недалеко от Сочи. Участок можно схематично представить как матрицу из NxM подучастков, для каждого из которых выделяется некая сумма на его освоение. Дорогой называется такой набор из M подучастков, что в каждом столбце содержится ровно по одному подучастку и для подучастков с координатами (i1, j) и (i2, j+1) верно, что |i1-i2| ≤ 1. Соответственно, сумма денег, выделяемых на освоение дороги, равна сумме денег выделяемых на каждый из её подучастков. Так как большая сумма несомненно приведёт к лучшему качеству исполнения дороги в целом, чиновники заинтересованы в максимизации осваиваемых средств. Ваша задача в том, чтобы помочь России не упасть в грязь лицом на предстоящих играх.

Задача: Решение системы линейных уравнений

Грустная панда сидит и смотрит на систему линейных алгебраических уравнений Ax = b с целочисленными коэффициентами. С первого взгляда бросается в глаза, что все эти коэффициенты невелики. Для того, чтобы развеселить панду, требуется реализовать программу, которая смогла бы найти точное решение этой системы.

На вход программе подается натуральное число N (N ≤ 500) и последовательность целых чисел a11, a12, ..., a1N, b1, a21, ...., aNN, bN. Требуется вывести последовательность целых чисел x1, ..., xN, являющихся решением данной системы уравнений.
Панда уверена в том, что такое решение существует и единственно.

Задача: Апельсин

К Вам на улице подходит незнакомец и говорит, что всем известно эффективное решение задачи вычисления i-ого члена последовательности Фибоначчи по модулю числа p*. Однако, теперь его интересует более общая задача для произвольной линейной рекуррентной последовательности, заданной формулой
Fn = A1 * Fn-1 + ... + AkFn-k.
Не в силах противостоять ему, Вы решаете помочь. Ваша задача посчитать FN mod p.

Задача: Экстерминатус

Мир наш исполнен войны — целая вечность сражений во имя Императора. Он никогда не прекращает и не отступается от бесконечной вражды, а значит - не должны и мы.

Второй год Похода Мучений. В отдалённой системе войска Императора столкнулись с планетой полной ужасающих человекоподобных зверей, представляющих собой серьёзную угрозу. После ожесточённых боёв связь с ударным отрядом чёрных тамплиеров во главе с братом Герхартом была потеряна, в связи с чем было приятно единственно верное решение в таких ситуациях — ЭКСТЕРМИНАТУС, то есть полное уничтожение всего живого на поверхности. Для запуска орбитальной бомбардировки требуются специальные коды. Обычно они приходят на отдельный канал и с ними не возникает никаких проблем, но в этот раз в связи с оплошностью подчинённого несколько передач принимались по одному каналу и результаты перемешались. Ваша задача состоит в том, чтобы извлечь из полученной информации коды запуска орудий.

Передача состоит из заглавных и строчных латинских букв, цифр, а также 4 основных арифметических действий '+', '-', '*', '/'. Её длина не превосходит 2000 символов. Известно, что кодом является некоторая команда вида A op B, где A и B — целые неотрицательные числа, а op - одно из арифметических действий, результат которой является корректно вычислимым выражением модуль которого не превосходит 120000. При этом выражение "A op B" является подстрокой исходного сообщения. Гарантируется, что числа A,B и результат операции над ними не переполняют 32-х битные целые знаковые числа. Необходимо найти все такие команды и вывести их каждую с новой строки в виде A op B = res, где res — результат вычисления. Всё остальное считается мусором из других передач. Заметим, что для выражения A op1 B op2 C нужно вывести

A op1 B = res1
B op2 C = res2

Examples

Input
rDU+9519+28006-
+45350-80003-7034/14870/50385i-25266-39120*8557

Output
9519 + 28006 = 37525
45350 - 80003 = -34653
80003 - 7034 = 72969
7034 / 14870 = 0
14870 / 50385 = 0
25266 - 39120 = -13854

Задача: Генерал танковых войск

Генерал танковых войск Петя из 8Б класса проснулся в это субботнее утро в приподнятом настроении. Сегодня он и его верные братья по оружию нанесут решительный удар по Берлину, отомстят своим жалким недругам из 9В класса, добудут много золота и покроют себя славой. И в этот раз никакие ничего не понимающие в тактике главнокомандующие-родители не прервут героическую операцию под предлогом того, что ночные наступления совершенно недопустимы. К сожалению, Петя обнаружил, что один из родителей, недовольный тем, что успехи Пети вне поля сражения не дотягивают даже до звания рядового, сменил пароль от компьютера. Рядом Петей была найдена бумажка с длинной строкой. Вспомнив все предыдущие пароли, он понял, что каждый новый является подстрокой данной строки. Прикинув время, необходимое для проверки одного пароля, Петя теперь хочет подсчитать сколько вообще паролей возможно, чтобы понять, успеет ли он к ночному наступлению. Разделите горе Пети и помогите ему.

Задача: Пожалуйста, прочтите: личное обращение родителей Олега

У мальчика Олега редкая болезнь: боязнь условных переходов и команд условной передачи данных. Мальчик очень хочет стать программистом, но для этого необходимо дорогостоящее лечение в Германии. Однако есть и паллиативное решение. Помогите мальчику Олегу написать программу, вычисляющую модуль введённого числа, но не применяя инструкций условных переходов и условной передачи данных. Используя это решение как пример, он сможет писать и другие программы, несмотря на свой недуг.
Update от автора задач: эта  — на ассемблере.

Friday, March 1, 2013

Послушать плэйлист полностью или умереть



13 января 2013 г. я затеял прослушивание всей музыки на своём винчестере, примерно 8 с половиной суток, 2850 треков, сгруппированных по исполнителям и альбомам. Запретив себе при этом переключать или пропускать треки.

Вот так и начал поглощать музыкальную продукцию исполнителей большими порциями, иногда давясь. Знаете, есть даже что-то «дзенское» в согласии со звучащей в данный момент музыкой, когда знаешь, что переключить не можешь.

Среди прослушанных мною были как годами любимые композиции, так и группы, музыка которых хоть и неплоха, но вот глотать всю их дискографию подряд было мучительно. Я дослушивал и удалял лишние альбомы или всё творчество разом. Так было с Placebo, Rammstein, Scar Symmetry. В процессе в список воспроизведения добавились дискографии Destruction и Napalm Death, которых я слышал впервые, и о их годноте судить рано.

Эксперимент закончился 27 февраля 2013 г. Оказалось, я слушал в среднем 72 композиции или 4¾ часа в сутки. По моей оценке, затея закончилась победой: хороший для меня метод фильтровать плэйлист найден.

Friday, February 22, 2013

Те_самые_слова

Однажды во время вечернего разговора по гуглочату сам собой сложился примерный список ключевых слов и словосочетаний. «Принцип работы» этих выражений определённого рода таков, что употребление нескольких из них в одном разговоре потенциально может привести к тому, что вами могут заинтересоваться некоторые уполномоченные организации.

Вот примерно так выглядит немного дополненный в дальнейших обсуждениях список запрещённых слов. Для удобства поделили его на части по контексту.

Общее

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

Одна_страна

Путин (в сочетании с: покушение, похищение, уходи, преемник и т.д.), Навальный, Болотная, Манежка, откат, распил, нанотехнологии, жулики и воры, фальсификация, «свобода слова», несанкционированный митинг, шествие, усыновление детей, сироты.

Другая_страна

Госдепартамент, нефть, демократия, 11 сентября (в сочетании с: пропавшие самолеты, ракета, подрыв, монтаж видео…), школьный расстрел, Викиликс.

«Горячие источники»

Боевик, экстремист, шиит, священная война, холокост, джихад, Хезболла, моджахеды, Аль-Каида, Усама бен Ладен, талибы, Ахмадинеджад, Иран, Ирак, ядерная программа, оружие массового поражения, КНДР, баллистическая ракета, плутоний, уран, Сирия, Башар Асад, военная помощь.

Интернеты

Торрент, Anonymous, Tor, детское порно, цензура, файервол, обход блокировки, ботнет, взлом.



А что можете добавить вы?

Wednesday, February 20, 2013

Твиты за неделю

Может быть, вы заметили, что недавно я практически прекратил писать что-либо в твиттер, если не считать ответов кому-либо. Это связано с двумя экспериментами по укрощению желания левой пятки. Оно заключается в написании или шэринге всякого мусора, в т.ч. придуманного лично. Первый эксперимент начался 12 февраля: вместо твиттера писать в документ, когда наберётся лист А4, написать пост, который вы сейчас читаете. И у меня не хватило духу не публиковать собранное вообще:

  • Астрологи объявили неделю воздержания от твиттера. Количество твитов уменьшается в 10 раз.
  • В Ария — Зверь украден рифф у Megadeth — Something That I’m Not.
  • Прости, но я считаю, что это называется «лицемерие».
  • Plume обновился так, что реклама теперь показывается даже при работающем Adblock.
  • Доверить планирование бойкому человеку — будут приключения на все участвующие задницы, полные ангста.
  • Хочу бесшумный ноутбук.
  • Бесшумный ноутбук? 400 золота и 125 дерева — и он мой.
  • Компьютер с закрытым браузером похож на шкаф затворника.
  • На тачпаде залипла кофием залитая клавиша. Пользоваться компьютером некоторое время невозможно.
  • Freedom is just chaos with better lighting.
  • http://xkcd.com/1174/
  • Остросюжетная комедия о финансистах «Дисконтируй это!»
  • Жаль, что Steam для Linux требует Ubuntu или версии библиотек не старше, чем в 12.04. Шут с ними, с играми.
  • Поколение депрессии сменилось поколением скуки.
  • Изрядно запылились гантели мои.
  • На каком моменте игра считается пройденной?
  • So you've got an awesome idea for a website? http://wallbase.cc/wallpaper/2178874
  • Самая противоречивая реклама в интернете — реклама Adblock Plus.
  • Удивительно, но я считаю, что захламление мозга другому должно быть не правом, а привилегией.
  • Я тоже хочу с кем-то во что-то поиграть. Но чаще всего это совсем не компьютерная игра.
  • За окном — середина февраля. У меня под окнами — мартовские коты.
  • Кровавая война за деньги. © @Kogarasi_
  • Не за горами дни, когда почитать бумажную книгу, чтобы никто не отвлекал, будет роскошью.
  • Бездействие vs Дилетантство — 0:2.
  • Endomondo предлагает мне измерять отжимания в километрах, в часах или в калориях.
  • Я слишком часто проверяю Reader. И Twitter. Это плохо.
  • Лайфхакер.ру празднует рубеж в два миллиона посещений в месяц. А у меня — лишь юбилейный тысячный коммит.
  • Как раз хотел написать мудрый совет, но передумал.
  • Только что за минуту сделал модель (MVC, CodeIgniter) из существующей методом поиска и замены слова.
  • Лайкнуть, плюсануть, поделиться, ретвитнуть? За кого нас считают просящие делать это беспричинно?

Мои ощущения от эксперимента? Не знаю, но через некоторое время будет ещё один: полное отсутствие в твиттере на неделю, вот тогда посмотрим, насколько будет давить страх остаться в стороне (он же fear of missing out).

Wednesday, December 5, 2012

О работе дома


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

Правда, после полугода работы дома стали видны недостатки. Гиподинамия, т.к. никуда не выходишь. Единственная связь с внешним миром — компьютер, и это ещё сильнее привязывает к стулу перед ним. И от этого всё более тошно. Вроде бы, можно работать и отдыхать, когда хочется, но это так кажется. Часто гложет чувство вины за плохую производительность, тяжело психологически разделять рабочее и нерабочее время, рабочее место и личное место отдыха. Как говорит один мой хороший знакомый, «помни, что работая дома ты всегда находишься не дома, а на работе». В итоге тяжело начать работать в будний день и легко оказаться решающим рабочие вопросы вечером в выходной. При этом заказчики ожидают вашего присутствия на связи в рабочее время, и будут звонить, даже если вы спите после напряжённой рабочей ночи.

Когда находишься дома, несмотря на всю их иллюзорность, особенно угнетающими кажутся собственная ненужность и невостребованность. Это особенно ощутимо пессимистичным натурам вроде меня. С другой стороны, никто не подходит и не отвлекает, что означает возможность длительное время продержаться «на рельсах» концентрации, если дело заладилось. Конечно, это возможно только если в помещении с вами больше никого нет. А вот если при этом нужно следить за чем-то, выполнять домашние дела и ухаживать за детьми, то работа движется очень неохотно. Трудно также заставить домочадцев усвоить, что находишься на работе, и что нельзя вторгаться в график различными просьбами и требованиями под соусом «раз ты всё равно дома, …»

Больше можно найти и «искушений». Это могут быть, например, книги. Или же это будет несколько терабайт несмотренных фильмов и неслушанной музыки. Хотя, как показывает практика, если человек не хочет работать, он всегда найдёт, чем заняться, даже если у него отобрать все развлечения.

Если жалуетесь, что каждый день ходите на опостылевшую работу, представьте, что тот же, если не больший, объём работы придётся выполнять дома, под давлением звонящих и пишущих письма людей. Тут же добавляется и невозможность быстро и оперативно что-то спросить или уточнить. Ведь не получится заменить доску с маркерами или блокнот для рисования схем видеосвязью и мышью. Пока что люди быстрее рисуют рукой на бумаге, чем на экране. Да и во время разговора по видеосвязи не уловить едва заметных реакций в глазах собеседника.

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

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

Friday, November 30, 2012

Прощай, безрадостный капитан!


На днях закончил серию книг Форестера о капитане Горацио Хорнблауэре. Читал я со скоростью один том в день, однако не потому, что книги короткие (вполне себе стандартной толщины), но потому как просто не мог оторваться.

Одной из причин неотрывного чтения стоит назвать самогó героя повествования. Почему Хорнблауэр вызвал у меня приязнь? Возможно, это из-за его характера. Он, как и я, меланхолик и интроверт, силён в логике, занимается самокопанием и добивается многого только в «состоянии потока», после чего, однако, всё равно не может быть удовлетворён достигнутым. Несмотря на все удары, которыми его потчует жизнь, человек не только остаётся на плаву, но и достигает многого. Стоит признать, Хорнблауэру и везёт достаточно часто. Или же видимость просто случайно удачно сложившихся обстоятельств можно приписать хитрым_планам, составляющим ещё одну привлекательную сторону повествования. Если будете читать, обязательно задумывайтесь, что бы вы сделали в каждом конкретном случае, — у меня далеко не всегда получалось предугадать действия старины Горацио. И ещё, он показывает отличный пример того, что стоит прислушиваться к голосу своей интуиции.

В серии, на мой взгляд, автором удачно применён метод продвижения героя по карьерной лестнице от мичмана до адмирала Флота. Реалистично показаны и уровни принятия решений, мера ответственности и количество реально выполняемой работы. Мичманом он работал больше всех и за порученное отвечал буквально головой, будучи адмиралом же, занимался исключительно стратегическими задачами, ставя на кон собственную высочайшую репутацию и авторитет. Примечательно, что как и у Лукаса со «Звёздными войнами», вторая часть серии была написана Форестером раньше первой — это даже видно по тексту. При этом, сюжетных нестыковок между книгами практически нет, качество сюжета мне показалось хорошим.

Хоть я и не имею понимания реалий времён расцвета парусного флота, но думаю, что прочитанные мной книги достаточно реалистичны как с технической, так и с психологической точки зрения, если сравнивать, например, с «Одиссеей капитана Блада» Рафаэля Сабатини, от которой разит пафосом на пушечный выстрел. Конечно, стоит сделать скидку на то, что книги-таки приключенческие. Правда, также стоит признать, что серия О’Брайана о капитане Джеке Обри технически более точна, но для несведущих в мелочах кораблестроения вроде меня это погоды не делает.

Очень жаль, что история закончилась относительно скоро.

Wednesday, November 21, 2012

Без комментариев — 1

На всякий случай, если кто не в курсе, так выглядит поддержка малого и среднего бизнеса государством:




«Дерево поддержки». Видишь, что петля не одна? Картина говорит нам, что не надо отчаиваться — всегда есть люди, которые будут рядом. — .