avva: (Default)
[personal profile] avva
Интересный ресурс: хранилище задач и головоломок, используемых во время интервьюирования программистов. Много знакомых и хорошо известных, но много и незнакомых. Большинство простые, но есть сложные и интересные.

Вот например забавная задачка, которая мне понравилась; не слишком сложная (хоть и из раздела hard):
Вражеская подводная лодка движется в одном измерении по числовой оси. Её движение дискретно: она всегда находится на каком-то целом числе, и местоположение меняется раз в минуту. Лодка движется с постоянной скоростью вдоль оси, скорость - сдвиг по числовой оси в каждую минуту - тоже целое число. Ни местоположение лодки, ни скорость вам неизвестны.

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


Кстати, раз уж речь зашла о головоломках, вот незаменимый сайт, содержащий архив ньюсгруппы rec.puzzles: большое количество интересных головоломок на самые разные темы, с решениями. Там есть даже большой список загадок-"данеток" (иначе называемых "ситуации", а по-английски - Situation Puzzles).

P.S. А за ссылку на страницу компьютерных задачек спасибо горячему жирафу, а кому же ещё.

с добрым утром :)

Date: 2002-08-03 01:16 am (UTC)
From: [identity profile] ex-olg.livejournal.com
интересно, а на русском есть подобные ресурсы? не встречали?

Re: с добрым утром :)

Date: 2002-08-03 01:23 am (UTC)
From: [identity profile] avva.livejournal.com
С добрым утром и Вас ;) нет, не встречал.

Re: с добрым утром :)

Date: 2002-08-03 10:45 pm (UTC)
From: [identity profile] ex-olg.livejournal.com
ну, ладно. пожалуй, тогда вывешу в ЖЖ свою любимую загадку.

Анатолий

Date: 2002-08-03 03:25 am (UTC)
From: [identity profile] lz.livejournal.com
Мне кажется, Вам будет интересна эта головоломка:
http://vad.spb.ru/www/xlam/WebLomka.htm
Спецально для интернет-профессионалов, да простится мне это новообразование.
На мой взгляд - есть очень красивые уровни

Re: Анатолий

Date: 2002-08-03 07:57 pm (UTC)
From: [identity profile] avva.livejournal.com
Спасибо ;) Честно говоря, лень немножко её проходить, да и похожую англоязычную я уже проходил когда-то. Но сам тип головоломки интересен, согласен.

Re: Анатолий

Date: 2002-08-04 09:40 am (UTC)
From: [identity profile] zc2.livejournal.com
занятная штука... кто-нибудь прошел 9-й уровень? Я на нем заткнулся... :-(

Re: Анатолий

Date: 2002-09-03 01:47 pm (UTC)
nechaman: (nachasha)
From: [personal profile] nechaman
А я вот на седьмом застряла.
Перепробовола кучу вариантов. Вроде один файл явно другой, и больше, и вообще, пробовала картинки накладывать, выделять разные оттенки, но ничего не вышло, явно не в том направлении мыслю...
Может подскажете?

Re: Анатолий

From: [identity profile] avva.livejournal.com - Date: 2002-09-03 01:52 pm (UTC) - Expand

Re: Анатолий

From: [identity profile] zc2.livejournal.com - Date: 2002-09-03 05:30 pm (UTC) - Expand

Re: Анатолий

From: [personal profile] nechaman - Date: 2002-09-03 11:29 pm (UTC) - Expand

Re: Анатолий

From: [identity profile] zc2.livejournal.com - Date: 2002-09-04 07:41 am (UTC) - Expand

Re: Анатолий

From: [personal profile] nechaman - Date: 2002-09-05 02:31 pm (UTC) - Expand

Re: Анатолий

From: [identity profile] zc2.livejournal.com - Date: 2002-09-05 03:11 pm (UTC) - Expand

Re: Анатолий

From: [personal profile] nechaman - Date: 2002-09-05 03:56 pm (UTC) - Expand

Date: 2002-08-03 11:54 am (UTC)
From: (Anonymous)
Извините, вы не могли бы опубликовать решение задачи о дискретно движущихся подводных лодках, очень интересно было бы узнать ответ.

Re:

Date: 2002-08-03 12:25 pm (UTC)
From: [identity profile] avva.livejournal.com
Могу, конечно, но давайте я хотя бы день ещё подожду, дам возможность людям самим решить.

Date: 2002-08-03 02:46 pm (UTC)
From: [identity profile] pingva.livejournal.com
подлодка движется по формуле:

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)

Черт, не успею додумать :), надо убегать.

Date: 2002-08-03 07:01 pm (UTC)
From: [identity profile] avva.livejournal.com
Значит, будем стрелять по ((-1)^n)*2*(n^3)

Вот этот шаг неверный, не поймаете так ;)

Date: 2002-08-04 12:29 am (UTC)
From: [identity profile] pingva.livejournal.com
да, я не успел додумать.

Snyder все испортил :) - свел все построению N<->Q, которое с первого курса анализа все помнят, и решать (т.е. именно писать алгоритм) сразу стало неинтересно :)

(no subject)

From: [identity profile] snyders.livejournal.com - Date: 2002-08-04 05:56 pm (UTC) - Expand

Date: 2002-08-03 04:20 pm (UTC)
From: [identity profile] vrml.livejournal.com
Значит, дано, что мы не знаем ни скорости лодки, ни положения. Следовательно, вероятность поражения лодки одним выстрелом - нулевая (согласно определению вероятности - т.к. число точек бесконечно), независимо от выбора точки. Допустим, мы пальнули в некую точку. Ничего нового про местоположение и скорость лодки мы при этом не узнали. Что изменится на втором выстреле? - тоже ничего. По индукции, во время любого n-го выстрела мы остаемся "при своих" - как и во время первого. Лодка где-то себе плавает, по-прежнему с неизвестной скоростью и неизвестно где. То есть все алгоритмы выстрелов, включая случайную последовательность, равноправны в том, что никакой гарантии поражения не дают.

Re:

Date: 2002-08-03 04:24 pm (UTC)
From: [identity profile] avva.livejournal.com
Выглядит убедительно, но верным не является ;)
Не буду пока указывать на ошибку в этом рассуждении, но замечу, что решение у задачи есть.

Date: 2002-08-03 08:31 pm (UTC)
From: [identity profile] ska-o.livejournal.com
Не нулевая, а бесконечно малая. Две большие разницы :-)

Date: 2002-08-04 03:55 am (UTC)
From: [identity profile] vrml.livejournal.com
Нет уж - лбо нулевая, либо ненулевая :)
Бесконечно малыми бывают не числа, а относительные величины.

(no subject)

From: [identity profile] ska-o.livejournal.com - Date: 2002-08-04 04:23 am (UTC) - Expand

(no subject)

From: [identity profile] vrml.livejournal.com - Date: 2002-08-04 06:33 am (UTC) - Expand

(no subject)

From: [identity profile] ska-o.livejournal.com - Date: 2002-08-04 01:58 pm (UTC) - Expand

Date: 2002-08-03 04:58 pm (UTC)
From: [identity profile] snyders.livejournal.com
Показать что множество точек с координатами (x,y), x in N -- начальное положение, y in Z -- скорость равномощно N.

Какой-нибудь простой порядок обхода (если бы y > 0, то заметать угол например) накапливать счетчик t и стрелять в x+ty.

Кажется, лодке еще можно разрешить менять направление движения конечное число раз.

Re:

Date: 2002-08-03 05:43 pm (UTC)
From: [identity profile] avva.livejournal.com
Только x in Z as well.

то заметать угол например

А так можно концентрические квадратики заметать, например.

лодке еще можно разрешить менять направление движения конечное число раз

Или вообще двигаться согласно любому алгоритму.

Боюсь, правда, что твой и мой комменты многим остануться непонятными, так что надо будет отдельную запись написать и там разъяснить решение подробнее.

Date: 2002-08-03 06:30 pm (UTC)
From: [identity profile] snyders.livejournal.com
Да раз x in Z то самое естественное ходить по спирали.

>Или вообще двигаться согласно любому алгоритму.

Алгоритму неизвестному стрелку (я имел в виду, что можно позволить менять курс, в неизвестные стрелку моменты)?
Это мысль интересная -- алгоритмов счетное число, вопрос, как написать алгоритм, который будет перечислять все алгоритмы (это вроде можно сделать), и для данного алгоритма M получать M(t) = (x,y) координаты лодки. Это, разве, не эквивалентно to the halting problem?

Re:

From: [identity profile] avva.livejournal.com - Date: 2002-08-03 06:47 pm (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 02:31 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2002-08-04 02:36 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 02:46 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 02:38 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2002-08-04 02:51 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 02:52 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 02:56 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2002-08-04 02:59 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 03:02 am (UTC) - Expand

(no subject)

From: [identity profile] avva.livejournal.com - Date: 2002-08-04 03:08 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 03:16 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 04:43 am (UTC) - Expand

Re:

From: [identity profile] avva.livejournal.com - Date: 2002-08-04 10:03 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-04 10:28 am (UTC) - Expand

Re:

From: [identity profile] avva.livejournal.com - Date: 2002-08-04 10:33 am (UTC) - Expand

(no subject)

From: [identity profile] pingva.livejournal.com - Date: 2002-08-04 06:55 pm (UTC) - Expand

(no subject)

From: [identity profile] snyders.livejournal.com - Date: 2002-08-05 08:34 am (UTC) - Expand

(no subject)

From: [identity profile] pingva.livejournal.com - Date: 2002-08-05 10:57 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-05 03:47 am (UTC) - Expand

(no subject)

From: [identity profile] snyders.livejournal.com - Date: 2002-08-05 08:19 am (UTC) - Expand

(no subject)

From: [identity profile] malenkiy-scot.livejournal.com - Date: 2002-08-05 10:46 am (UTC) - Expand

(no subject)

From: [identity profile] snyders.livejournal.com - Date: 2002-08-04 12:56 pm (UTC) - Expand

Значится, так:

Date: 2002-08-04 09:14 am (UTC)
From: [identity profile] barabek.livejournal.com
Shot(1) = 1;
Shot(N) = Shot(N-1) + N;

T.e. выстрелы будут по точкам 1, 3, 6, 10 ...

Если скорость лодки - V, мы ее поразим через [2V - 1] выстрелов

Re: Значится, так:

Date: 2002-08-04 09:38 am (UTC)
From: [identity profile] avva.livejournal.com
Это только при условии, что она вышла из точки 0 и движется вправо. Ни то, ни другое неверно (она может начать с любой точки и двигаться влево).

Re: Значится, так:

Date: 2002-08-05 03:11 am (UTC)
From: [identity profile] gvadelupa.livejournal.com
Даже если она вышла из точки 0 и движется вправо непонятно как этот алгоритм может работать. Поясните, пожалуйста, например, для V=2.

Avva, вы обещали выложить решение, не пора?

Re: Значится, так:

From: [identity profile] pingva.livejournal.com - Date: 2002-08-05 10:36 am (UTC) - Expand

Date: 2002-08-09 02:30 pm (UTC)
From: [identity profile] cybergoblin.livejournal.com
Решение в корне неверное:

во первых: если отправная точка для лодки (0,0), то она никогда не сможет оказаться в точке (1,1) т.к. расстояние до этой точки не целое число.

во вторых: если стрелять "с упреждением" то, наверное, второй точкой будет (0,2) третей (-3,0) и т.д. Этот алгоритм имеет смысл, если лодка движется в одном из четырех направлений, по осям "х" или "у" и точно известно, что она начала движение из точки (0,0).

НО! лодка вполне может оказаться в точке (4,3) которая выпадает из этого алгоритма, т. к. на ее проверку уйдет лишняя минута, и вы упустите лодку. На проверку же точек уйдет несоизмеримо много времени.

в третьих: по условию начальное положение лодки не известно и она вполне может находиться, например, в точке (3,0) и двигаться со скоростью 1 ед. отрезок в минуту в сторону противоположную оси "х", в этом случае алгоритм с "упреждающей стрельбой" опять таки не ловит лодку.

Эта задача (с такой формулировкой условия) не имеет решения!

Date: 2002-09-03 03:19 pm (UTC)
nechaman: (nachasha)
From: [personal profile] nechaman
Нарисуем табличку ixj, где i и j меняются от минус бесконечности до плюс бесконечности.
i пусть будет сдвиг в первый момент, а j - скорость.
Будем обходить табличку начиная с 1x1, скажем по спирали.
И в каждой точке стрелять в направлении i+j*t, где t-номер шага.
Вроде так мы любую лодку раньше или позже поймаем...

Date: 2002-09-03 03:51 pm (UTC)
From: [identity profile] avva.livejournal.com
Да, всё правильно.

(no subject)

From: [personal profile] nechaman - Date: 2002-09-03 10:59 pm (UTC) - Expand

ja dibil

From: (Anonymous) - Date: 2006-01-17 10:57 pm (UTC) - Expand

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 27th, 2025 10:13 pm
Powered by Dreamwidth Studios