задачки и головоломки
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)Анатолий
Date: 2002-08-03 03:25 am (UTC)http://vad.spb.ru/www/xlam/WebLomka.htm
Спецально для интернет-профессионалов, да простится мне это новообразование.
На мой взгляд - есть очень красивые уровни
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 04:20 pm (UTC)Re:
Date: 2002-08-03 04:24 pm (UTC)Не буду пока указывать на ошибку в этом рассуждении, но замечу, что решение у задачи есть.
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:
Date: 2002-08-03 06:47 pm (UTC)Ага.
...как написать алгоритм, который будет перечислять все алгоритмы (это вроде можно сделать), и для данного алгоритма M получать M(t) = (x,y) координаты лодки. Это, разве, не эквивалентно to the halting problem?
То, что ты сказал, действительно эквивалентно - т.к. для данного алгоритма невозможно в общем случае определить, что он вообще останавливается и выдаёт какие-то координаты. Но задача тем не менее решаема, хотя обход получается менее тривиальным и решение, пожалуй, лучше оставить в качестве дополнительной задачи для тебя и для тех, кто прочитает этот коммент и понимает, о чём мы тут вообще беседуем ;)
no subject
Date: 2002-08-03 07:01 pm (UTC)Вот этот шаг неверный, не поймаете так ;)
Re: Анатолий
Date: 2002-08-03 07:57 pm (UTC)no subject
Date: 2002-08-03 08:31 pm (UTC)Re: с добрым утром :)
Date: 2002-08-03 10:45 pm (UTC)no subject
Date: 2002-08-04 12:29 am (UTC)Snyder все испортил :) - свел все построению N<->Q, которое с первого курса анализа все помнят, и решать (т.е. именно писать алгоритм) сразу стало неинтересно :)
no subject
Date: 2002-08-04 02:31 am (UTC)no subject
Date: 2002-08-04 02:36 am (UTC)Элементарна - это кому как, видимо. Если есть некий математический багаж и понимаешь, как его использовать - тривиально, действительно. Но не у всех есть этот багаж и не все догадываются, что его надо использовать.
no subject
Date: 2002-08-04 02:38 am (UTC)no subject
Date: 2002-08-04 02:46 am (UTC)no subject
Date: 2002-08-04 02:51 am (UTC)no subject
Date: 2002-08-04 02:52 am (UTC)no subject
Date: 2002-08-04 02:56 am (UTC)no subject
Date: 2002-08-04 02:59 am (UTC)