задачки и головоломки
Aug. 3rd, 2002 11:05 amИнтересный ресурс: хранилище задач и головоломок, используемых во время интервьюирования программистов. Много знакомых и хорошо известных, но много и незнакомых. Большинство простые, но есть сложные и интересные.
Вот например забавная задачка, которая мне понравилась; не слишком сложная (хоть и из раздела hard):
Кстати, раз уж речь зашла о головоломках, вот незаменимый сайт, содержащий архив ньюсгруппы rec.puzzles: большое количество интересных головоломок на самые разные темы, с решениями. Там есть даже большой список загадок-"данеток" (иначе называемых "ситуации", а по-английски - Situation Puzzles).
P.S. А за ссылку на страницу компьютерных задачек спасибо горячему жирафу, а кому же ещё.
Вот например забавная задачка, которая мне понравилась; не слишком сложная (хоть и из раздела hard):
Вражеская подводная лодка движется в одном измерении по числовой оси. Её движение дискретно: она всегда находится на каком-то целом числе, и местоположение меняется раз в минуту. Лодка движется с постоянной скоростью вдоль оси, скорость - сдвиг по числовой оси в каждую минуту - тоже целое число. Ни местоположение лодки, ни скорость вам неизвестны.
У вас есть возможность стрелять в лодку торпедами раз в минуту, всякий раз выбирая какую-нибудь целую координату, в которую попадает торпеда. Задача: пользуясь неограниченными временем и количеством торпед, описать алгоритм, который позволит вам гарантированно поразить вражескую подлодку.
Кстати, раз уж речь зашла о головоломках, вот незаменимый сайт, содержащий архив ньюсгруппы rec.puzzles: большое количество интересных головоломок на самые разные темы, с решениями. Там есть даже большой список загадок-"данеток" (иначе называемых "ситуации", а по-английски - Situation Puzzles).
P.S. А за ссылку на страницу компьютерных задачек спасибо горячему жирафу, а кому же ещё.
с добрым утром :)
Date: 2002-08-03 01:16 am (UTC)Re: с добрым утром :)
Date: 2002-08-03 01:23 am (UTC)Re: с добрым утром :)
Date: 2002-08-03 10:45 pm (UTC)Анатолий
Date: 2002-08-03 03:25 am (UTC)http://vad.spb.ru/www/xlam/WebLomka.htm
Спецально для интернет-профессионалов, да простится мне это новообразование.
На мой взгляд - есть очень красивые уровни
Re: Анатолий
Date: 2002-08-03 07:57 pm (UTC)Re: Анатолий
Date: 2002-08-04 09:40 am (UTC)Re: Анатолий
Date: 2002-09-03 01:47 pm (UTC)Перепробовола кучу вариантов. Вроде один файл явно другой, и больше, и вообще, пробовала картинки накладывать, выделять разные оттенки, но ничего не вышло, явно не в том направлении мыслю...
Может подскажете?
Re: Анатолий
From:Re: Анатолий
From:Re: Анатолий
From:Re: Анатолий
From:Re: Анатолий
From:Re: Анатолий
From:Re: Анатолий
From:no subject
Date: 2002-08-03 11:54 am (UTC)Re:
Date: 2002-08-03 12:25 pm (UTC)no subject
Date: 2002-08-03 02:46 pm (UTC)x(n) = x0 + n*v,
где v - скорость подлодки, n - номер минуты с начала охоты, x0 - начальное положение.
n - натуральное, а v и x0 - целые.
Упростим задачу.
положим x0=0, а v будем считать натуральным (т.е. разрешив движение подлодки только "вправо")
Теперь перебираем возможные скорости, предполагая, что скорости v из {1,2,3,...} и перехватывая подлодку метким выстрелом в момент n по координате v*n, полагая v = n, т.е. стреляем по n^2.
Теперь положим, что двигаться она может в двух направлениях. Тогда каждый четный выстрел будем делать вправо, а каждый нечетный - влево, ((-1)^n)*2*n*n
Теперь разрешим подлодке двигаться из любой точки
тогда нам нужно будет перебирать еще и по всем возможным точкам (к черту оптимизацию, по крайней мере пока)
Значит, будем стрелять по ((-1)^n)*2*(n^3)
Черт, не успею додумать :), надо убегать.
no subject
Date: 2002-08-03 07:01 pm (UTC)Вот этот шаг неверный, не поймаете так ;)
no subject
Date: 2002-08-04 12:29 am (UTC)Snyder все испортил :) - свел все построению N<->Q, которое с первого курса анализа все помнят, и решать (т.е. именно писать алгоритм) сразу стало неинтересно :)
(no subject)
From:no subject
Date: 2002-08-03 04:20 pm (UTC)Re:
Date: 2002-08-03 04:24 pm (UTC)Не буду пока указывать на ошибку в этом рассуждении, но замечу, что решение у задачи есть.
no subject
Date: 2002-08-03 08:31 pm (UTC)no subject
Date: 2002-08-04 03:55 am (UTC)Бесконечно малыми бывают не числа, а относительные величины.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2002-08-03 04:58 pm (UTC)Какой-нибудь простой порядок обхода (если бы y > 0, то заметать угол например) накапливать счетчик t и стрелять в x+ty.
Кажется, лодке еще можно разрешить менять направление движения конечное число раз.
Re:
Date: 2002-08-03 05:43 pm (UTC)то заметать угол например
А так можно концентрические квадратики заметать, например.
лодке еще можно разрешить менять направление движения конечное число раз
Или вообще двигаться согласно любому алгоритму.
Боюсь, правда, что твой и мой комменты многим остануться непонятными, так что надо будет отдельную запись написать и там разъяснить решение подробнее.
no subject
Date: 2002-08-03 06:30 pm (UTC)>Или вообще двигаться согласно любому алгоритму.
Алгоритму неизвестному стрелку (я имел в виду, что можно позволить менять курс, в неизвестные стрелку моменты)?
Это мысль интересная -- алгоритмов счетное число, вопрос, как написать алгоритм, который будет перечислять все алгоритмы (это вроде можно сделать), и для данного алгоритма M получать M(t) = (x,y) координаты лодки. Это, разве, не эквивалентно to the halting problem?
Re:
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Re:
From:(no subject)
From:Re:
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Значится, так:
Shot(N) = Shot(N-1) + N;
T.e. выстрелы будут по точкам 1, 3, 6, 10 ...
Если скорость лодки - V, мы ее поразим через [2V - 1] выстрелов
Re: Значится, так:
Date: 2002-08-04 09:38 am (UTC)Re: Значится, так:
Date: 2002-08-05 03:11 am (UTC)Avva, вы обещали выложить решение, не пора?
Re: Значится, так:
From:no subject
Date: 2002-08-09 02:30 pm (UTC)во первых: если отправная точка для лодки (0,0), то она никогда не сможет оказаться в точке (1,1) т.к. расстояние до этой точки не целое число.
во вторых: если стрелять "с упреждением" то, наверное, второй точкой будет (0,2) третей (-3,0) и т.д. Этот алгоритм имеет смысл, если лодка движется в одном из четырех направлений, по осям "х" или "у" и точно известно, что она начала движение из точки (0,0).
НО! лодка вполне может оказаться в точке (4,3) которая выпадает из этого алгоритма, т. к. на ее проверку уйдет лишняя минута, и вы упустите лодку. На проверку же точек уйдет несоизмеримо много времени.
в третьих: по условию начальное положение лодки не известно и она вполне может находиться, например, в точке (3,0) и двигаться со скоростью 1 ед. отрезок в минуту в сторону противоположную оси "х", в этом случае алгоритм с "упреждающей стрельбой" опять таки не ловит лодку.
Эта задача (с такой формулировкой условия) не имеет решения!
no subject
Date: 2002-09-03 03:19 pm (UTC)i пусть будет сдвиг в первый момент, а j - скорость.
Будем обходить табличку начиная с 1x1, скажем по спирали.
И в каждой точке стрелять в направлении i+j*t, где t-номер шага.
Вроде так мы любую лодку раньше или позже поймаем...
no subject
(no subject)
From:ja dibil
From: (Anonymous) - Date: 2006-01-17 10:57 pm (UTC) - Expand