Автор Тема: Задачка для собеседования  (Прочитано 26478 раз)

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #45 : Ноябрь 05, 2012, 02:37:12 pm »
А вообще, Пабсовики - молодцы... вон какую web -ide     http://pascalabc.net/WDE/отгрохали за  год... у коровят же воз и ныне там..

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #46 : Ноябрь 05, 2012, 03:11:22 pm »
 :) одна беда.. говенистость компилятора в купе.. с  "прелестями" дот. нета никуда не делась.. просто перешла  на другой уровень..., как у Шума.. когда он делал свой жаболог..

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Задачка для собеседования
« Ответ #47 : Ноябрь 05, 2012, 03:23:30 pm »
Бегло посмотрел и не увидел ни одного правильного решения.
Все сломаются, если первый массив состоит из одного нуля. Тогда все содержимое второго - это вставка.

P.S. Решение Geniepro ниасилил..
« Последнее редактирование: Ноябрь 05, 2012, 03:27:03 pm от Peter Almazov »

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #48 : Ноябрь 05, 2012, 03:29:25 pm »
Бегло посмотрел и не увидел ни одного правильного решения.
Все сломаются, если первый массив состоит из одного нуля. Тогда все содержимое второго - это вставка.
да , так оно и есть... это тот хвост - который "зевнул" я

  while b[j]<>0 do begin
     write ( b[j],'  ');
     inc(j)
   end;

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Задачка для собеседования
« Ответ #49 : Ноябрь 05, 2012, 03:31:57 pm »
Бегло посмотрел и не увидел ни одного правильного решения.
Все сломаются, если первый массив состоит из одного нуля. Тогда все содержимое второго - это вставка.
Все мои 3 варианта работают правильно...

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #50 : Ноябрь 05, 2012, 04:14:59 pm »

Что забавно - частенько народ имеющий опыт работы порядка 4-5 лет решает подобное хуже чем вчерашние студенты (а студенты, имеющие опыт работы скажем в Интеле решаеют задачки хуже чем не имеющие оного опыта работы, зато денег хотят раза в 2-3 больше).
Гы гы.... особенности Нижнигородской конюшни ( Интел - стойбище ставит свое клеймо, однако)  ;D

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Задачка для собеседования
« Ответ #51 : Ноябрь 05, 2012, 04:17:19 pm »
мне не нравится - напрягает (вариант Валерия также), правда это все цветочки , по сравнению с тем, что сделал Geniepro
Ой да ладно, Вы хоть видели вариант из исходного сообщения, тот, который на сях? )))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #52 : Ноябрь 05, 2012, 04:19:59 pm »
мне не нравится - напрягает (вариант Валерия также), правда это все цветочки , по сравнению с тем, что сделал Geniepro
Ой да ладно, Вы хоть видели вариант из исходного сообщения, тот, который на сях? )))
Видел... , но вы же не относите себя к дракофилам?  :D.
я же сказал... что это больные люди.. и толмуд ихний так  и называется.. "Психология программирования КА".. у Оберономанов есть своя библия...
« Последнее редактирование: Ноябрь 05, 2012, 04:22:29 pm от DIzer »

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Задачка для собеседования
« Ответ #53 : Ноябрь 05, 2012, 04:25:13 pm »
Бегло посмотрел и не увидел ни одного правильного решения.
Все сломаются, если первый массив состоит из одного нуля. Тогда все содержимое второго - это вставка.

P.S. Решение Geniepro ниасилил..
Ничего не знаю, у меня всё чотко!
m1 = [0]
m2 = [2, 4, 5, 21, 23, 24, 7, 8, 9, 12, 13, 31, 32, 33, 20, 0]

....
Main> :main
[2,4,5,21,23,24,7,8,9,12,13,31,32,33,20]

PS. И не всё содержимое второго, а только то, что до последнего элемента, равного нулю...

to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #54 : Ноябрь 05, 2012, 04:28:33 pm »

Ничего не знаю, у меня всё чотко!
  А ваше решение никто внимательно не смотрел.. - лично я, как увидел  -  злобно сплюнув, матернулся... - о чем и отписал..

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Задачка для собеседования
« Ответ #55 : Ноябрь 05, 2012, 04:30:28 pm »
P.S. Решение Geniepro ниасилил..
У меня же там натуральный конечный автомат, оформленный в виде хаскельной вариации на тему "цикла Дейкстры", гоняющий туда-сюда состояния переходов и всё такое )))
Что там непонятного -- непонятно ))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #56 : Ноябрь 05, 2012, 04:52:44 pm »
У меня же там натуральный конечный автомат, оформленный в виде хаскельной вариации на тему "цикла Дейкстры", гоняющий туда-сюда состояния переходов и всё такое )))
Что там непонятного -- непонятно ))
Вот вот,  в этом вся сущность Хаскилеров... фармазоны недобитые...   ;D

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Задачка для собеседования
« Ответ #57 : Ноябрь 06, 2012, 04:55:55 am »
У меня же там натуральный конечный автомат, оформленный в виде хаскельной вариации на тему "цикла Дейкстры", гоняющий туда-сюда состояния переходов и всё такое )))
Что там непонятного -- непонятно ))
Вот вот,  в этом вся сущность Хаскилеров... фармазоны недобитые...   ;D
Зато программам на хаскелле не нужна обфускация, вот!
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Задачка для собеседования
« Ответ #58 : Ноябрь 06, 2012, 05:43:51 am »
Бегло посмотрел и не увидел ни одного правильного решения.
Все сломаются, если первый массив состоит из одного нуля. Тогда все содержимое второго - это вставка.
Все мои 3 варианта работают правильно...
Да, я тут не прав. Когда я решал, то трактовал последний 0 как конец последовательности, особый случай. И не учел, что он может участвовать в сравнении с внутренностями массива и никогда не совпадет с ними. Просмотрел возможность схалтурить.
Если бы учел, то изменил условия – выкинул бы 0 и, возможно, заменил бы массивы на списки.
Пароль: gga1mb
Вот текст для удобства:
class Program {
  static int[] M1 = { 1, 2, 3, 4, 5, 6, 7, 0 };
  static int[] M2 = { 28, 1, 2, 3, 4, 5, 6, 7, 0 };
  static int[] M3 = { 38, 39, 30, 1, 2, 3, 4, 5, 6, 7, 0 };
  static int[] M4 = { 1, 2, 3, 4, 5, 6, 7, 48, 0 };
  static int[] M5 = { 1, 2, 3, 4, 5, 6, 7, 58, 59, 50, 0 };
  static int[] M6 = { 1, 2, 3, 68, 4, 5, 6, 7, 0 };
  static int[] M7 = { 1, 2, 3, 78, 79, 70, 4, 5, 6, 7, 0 };
  static int[] M8 = { 1, 2, 80, 81, 82, 3, 4, 5, 83, 84, 6, 7, 85, 86, 87, 0 };

  static void collation(int[] a, int[] b) {
    int i = 0, j = 0;
    //bool newIns = true;
    while (b[j] != 0) {
      if (a[ i] == 0 || a[ i] != b[j]) {
        //if (newIns) {
        //  newIns = false;
        //  System.Console.WriteLine();
        //  System.Console.WriteLine("insert: ");
        //}
        System.Console.Write(b[j] + " ");
        j++;
      } else {
        i++; j++;
        //newIns = true;
      }
    }
  }

  static void Main(string[] args) {
    System.Console.WriteLine("\n\n collation M1 & M2");
    collation(M1, M2);
    System.Console.WriteLine("\n\n collation M1 & M3");
    collation(M1, M3);
    System.Console.WriteLine("\n\n collation M1 & M4");
    collation(M1, M4);
    System.Console.WriteLine("\n\n collation M1 & M5");
    collation(M1, M5);
    System.Console.WriteLine("\n\n collation M1 & M6");
    collation(M1, M6);
    System.Console.WriteLine("\n\n collation M1 & M7");
    collation(M1, M7);
    System.Console.WriteLine("\n\n collation M1 & M8");
    collation(M1, M8);
    System.Console.ReadLine();
  }
}
Для наглядности можно выкинуть комментарии (кусок решения с раздельным выводом вставок):
  static void collation(int[] a, int[] b) {
    int i = 0, j = 0;
    while (b[j] != 0) {
      if (a[ i] == 0 || a[ i] != b[j]) {
        System.Console.Write(b[j] + " ");
        j++;
      } else {
        i++; j++;
      }
    }
  }

DIzer

  • Гость
Re: Задачка для собеседования
« Ответ #59 : Ноябрь 06, 2012, 10:39:49 am »
что же мой вариант...
program ttt;

{$APPTYPE CONSOLE}

const
M1:array [0..7] of  integer = ( 1, 2, 3, 4, 5, 6, 7, 0 );
M2:array [0..8] of  integer = ( 28, 1, 2, 3, 4, 5, 6, 7, 0 );
M3:array [0..10] of  integer = ( 38, 39, 30, 1, 2, 3, 4, 5, 6, 7, 0 );
M4:array [0..8] of  integer = ( 1, 2, 3, 4, 5, 6, 7, 48, 0 );
M5:array [0..10] of  integer = ( 1, 2, 3, 4, 5, 6, 7, 58, 59, 50, 0 );
M6:array [0..8] of  integer = ( 1, 2, 3, 68, 4, 5, 6, 7, 0 );
M7:array [0..10] of  integer = ( 1, 2, 3, 78, 79, 70, 4, 5, 6, 7, 0 );
M8:array [0..15] of  integer = ( 1, 2, 80, 81, 82, 3, 4, 5, 83, 84, 6, 7,  85, 86, 87,0 );


procedure PrintDiff(a,b:array of integer);
var i,j:Integer;
begin
  i:=0; j:=0;
  while a[i] <> 0 do begin   //общая внутренность
    while a[i] <> b[j] do begin
      write (b[j], '  ');
      inc(j);
     end;
    writeln;
    inc(i);
    inc(j);
  end;
  while b[j] <> 0 do begin     // пропущенный мною хвост
    write (b[j], '  ');
    inc(j);
  end;
end;
begin
  PrintDiff(M1,M8);
  Readln;
end.