Товарищи из сервиса мобильного эквайринга Pay-Me определились с победителями задач, опубликованных в прошлом номере. Да мы и не сомневались — наши читатели порвут какие хочешь задачи! Правильные ответы мы тоже сегодня опубликуем.

 

Задача 1

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

  • step_left (шаг влево)
  • step_right (шаг вправо)
  • goto N (переход на строку программы с номером N)
  • goto_p N (переход на строку программы с номером N при условии наличия парашюта в месте нахождения робота. Парашют может быть как свой, так и другого робота)

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

 

Решение

  1. step_left
  2. goto_p 4
  3. goto 1
  4. step_left
  5. goto 4
 

Задача 2

В барабан шестизарядного револьвера зарядили две пули подряд. Перекрутили барабан, навели на вас и нажали на курок. Выстрела не произошло. Теперь вам предлагают выбор: либо стреляющий сразу нажмет на курок еще раз, либо сначала опять перекрутит барабан. Что вы выберете, если хотите жить?

 

Решение

Правильный ответ «нажать повторно», так как вероятность выстрела при повторном нажатии — 1/4, при вращении — 2/6.

 

Задача 3

Амеба в воде размножается со скоростью одна амеба в минуту. Если поместить амебу в трехлитровый баллон, то он заполнится за час. Через какое время баллон заполнится, если поместить туда две амебы?

 

Решение

59 минут. Если мы в начале кинули одну амебу, то через минуту их уже будет две. А если поместили сразу две амебы, то ровно на одну минуту меньше потребуется для заполнения банки.

INFO

Тройка победителей

Первое место — Игорь Лебедев, он получает дисконтную карту со скидкой 50% на покупку нашего терминала.
Второе место — Влад Тимофеев, ему достается дисконтная карта со скидкой 35%.
Третье место — Александр Овсянкин, получает дисконтную карту со скидкой 20%.

IT-компании, шлите нам свои задачки!

Миссия этой мини-рубрики — образовательная, поэтому мы бесплатно публикуем качественные задачки, которые различные компании предлагают соискателям. Вы шлете задачки на lozovsky@glc.ru — мы их публикуем. Никаких актов, договоров, экспертиз и отчетностей. Читателям — задачки, решателям — подарки, вам — респект от нашей многосоттысячной аудитории, пиарщикам — строчки отчетности по публикациям в топовом компьютерном журнале.

12 комментария

  1. sinir

    06.10.2015 at 17:37

    Какое то некорректное решение задачи… может кто разжевать для непонятливых 🙂
    При таком решении роботы просто уйдут налево….

    • kk21228

      06.10.2015 at 19:29

      Поддерживаю вопрос 🙂

      • Rumata888

        06.10.2015 at 20:41

        Оба идут налево. Когда один из них натыкается на парашут, он начинает идти быстрее и догоняет того, кто не встретил парашут

    • 6ap6oc

      09.10.2015 at 11:41

      spinor прав, Робот, который дойдет до парашюта, начнет двигаться быстрее. (ход раз в 2 секунды вместо 3). Это потому, что «Выполнение любой команды занимает один условный такт, равный одной секунде», что не очень-то реалистично, т.к. сложно себе представить технологии, развившиеся до десантирования программируемых роботов, в которых тактовая частота процессора = 1Гц 🙂
      Я при решении немного недочитался и представил себе ситуацию, когда подобные простые команды обрабатываются роботом мгновенно, а шаги выполняются со скоростью 1 шаг/сек, что больше отвечает современным реалиям. Соотв., и мое решение было несколько сложнее:
      1 step right
      2 step right
      3 step left
      4 goto_p 6
      5 goto 1
      6 step right
      7 goto 6

      Принцип «пилы» — два шага вперед, один назад, проверка. Если наступил, то потопал только вперед, соотв. догнал «пилящего» 🙂

      • 6ap6oc

        09.10.2015 at 11:47

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

  2. spinor

    06.10.2015 at 20:38

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

  3. roman.rrv

    07.10.2015 at 11:19

    Туплю про вероятность 1/4… Почему?
    мне кажется должно быть 2/5….

    • roman.rrv

      07.10.2015 at 11:21

      Все, понятно…
      Еще раз перечитал, две пули подряд….

    • ISSmol

      31.10.2015 at 10:43

      из 5 оставшихся попыток- четыре из них точно содержат пулю, следовательно, если и есть в последнем пятом взводе пуля, то это уже не важно для бедного испытуемого. Тогда полный набор уже будет не 5, а 4, а количество пуль(«благоприятных событий») одна. Вероятность отсюда 1/4.

  4. maxim_bo

    03.11.2015 at 18:38

    Кому про амебу не понятно?

    public static void main(String[] args)
    {
    long a = 1; // а — амеба, i — время.
    for (int i = 0; i < 60; i++){
    a=a*2;
    System.out.println(a);

    }

    }
    }

    1 минута -4
    2 минута -8
    3 минута -16
    4 минута -32
    5 минута -64

    59 минута — 1152921504606846976
    60 минута — 2305843009213693952

    В случае старта с 2 амеб:
    public static void main(String[] args)
    {
    long a =2; // Стартуем с двух амеб…
    for (int i = 0; i < 60; i++){
    a=a*2;
    System.out.println(a);

    }

    }
    }

    1 минута 8
    2 минута 16
    3 минута 32
    4 минута 64
    5 минута 128

    58 минута 1152921504606846976
    59 минута 2305843009213693952

    То есть баллон может поместить максимум 2305843009213693952 амеб, и в случае с помещением 2х амеб заполниться на минуту раньше…

  5. maxim_bo

    03.11.2015 at 18:40

    Подправил для тех кто пожелает проверить:

    public class Ameba {
    public static void main(String[] args)
    {
    long a = 1;
    for (int i = 0; i < 60; i++){
    a=a*2;
    System.out.println(i + ". минута: " +a);
    }
    }
    }

  6. Qubo

    17.05.2016 at 17:51

    Условие первой задачи полная лажа. Сделано так что бы запутать, вместо того что бы проверить логику и знания человека. Четко и ясно написано «шаг влево» и «Выполнение любой команды занимaет один условный такт» что говорит о том что при команде «step_left» они сделают только 1 шаг и потом будут стоять, но не как не «+1 к количеству шагов в такт» или «+1 к скорости в секунду». Авторы пересмотрите свои задачи потому что с такими условиями

Оставить мнение

Check Also

Целенаправленная социальная инженерия. Нестандартные техники введения в заблуждение

В предыдущей статье мы разобрали массовые атаки. Но их применимость ограничена: пентестер …