о простых задачах (программистское)
Sep. 4th, 2008 09:44 amХорошая задача для интервью: взять квадратный двумерный массив и повернуть его на 90 градусов.
Хорошая в том смысле, что она отделяет возможных агнцев от несомненных козлищ. Если кандидат может это уверенно сделать, это еще ничего не значит; но если не знает даже, как подойти (см. описание по ссылке), то это уже о многом говорит.
Еще там в комментариях звучит здравая мысль о том, что любимые вопросы для интервью стоит менять время от времени, скажем, не задавать больше ста раз. У меня еще есть время в запасе до моего сотого интервью в Гугле, но все равно некоторые любимые вопросы пора обновить.
Хорошая в том смысле, что она отделяет возможных агнцев от несомненных козлищ. Если кандидат может это уверенно сделать, это еще ничего не значит; но если не знает даже, как подойти (см. описание по ссылке), то это уже о многом говорит.
Еще там в комментариях звучит здравая мысль о том, что любимые вопросы для интервью стоит менять время от времени, скажем, не задавать больше ста раз. У меня еще есть время в запасе до моего сотого интервью в Гугле, но все равно некоторые любимые вопросы пора обновить.
no subject
Date: 2008-09-04 07:17 am (UTC)no subject
Date: 2008-09-04 07:24 am (UTC)(no subject)
From:(no subject)
From:ah K, the write-only language ;)
From: (Anonymous) - Date: 2008-09-04 08:28 am (UTC) - ExpandRe: ah K, the write-only language ;)
From:Re: ah K, the write-only language ;)
From: (Anonymous) - Date: 2008-09-04 07:19 pm (UTC) - ExpandRe: ah K, the write-only language ;)
From:(no subject)
From:(no subject)
From:no subject
Date: 2008-09-04 07:21 am (UTC)no subject
Date: 2008-09-04 07:39 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2008-09-04 08:53 am (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2008-09-04 07:22 am (UTC)no subject
Date: 2008-09-04 07:22 am (UTC)no subject
Date: 2008-09-04 07:33 am (UTC)no subject
Date: 2008-09-04 07:38 am (UTC)(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:(no subject)
From: (Anonymous) - Date: 2008-09-06 10:50 am (UTC) - Expandno subject
Date: 2008-09-04 07:36 am (UTC)no subject
Date: 2008-09-04 07:39 am (UTC)no subject
Date: 2008-09-04 07:44 am (UTC)Использование второго массива разрешено?
Если да, то это... как мне кажется, это просто не задача. Всё абсолютно и совершенно очевидно.
Более того, оно не так сложно и в случае ровно одного массива... но вот это я с листа так, чтобы заработало, могу и не написать :).
no subject
Date: 2008-09-08 07:44 pm (UTC)BUG!!!!!
Date: 2008-09-04 07:45 am (UTC)http://geekswithblogs.net/cwilliams/archive/2008/06/16/122906.aspx
' For LEFT turns
For Y = 0 to 3
For X = 0 to 3
Destination(Y,X) = Source(X,Y)
Next
Next
Я ошибаюсь, или левый поворот - фигня полная.?????
например элемент(0,0) так и останется (0,0) после трансформации a должен стать (0,3)
Это не поворот, а отражение через диагональ или я не выспался с утра :-)
Re: BUG!!!!!
Date: 2008-09-04 07:54 am (UTC)Re: BUG!!!!!
From:Re: BUG!!!!!
From:Re: BUG!!!!!
From:no subject
Date: 2008-09-04 07:47 am (UTC)no subject
Date: 2008-09-04 07:54 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2008-09-04 08:07 am (UTC)no subject
Date: 2008-09-04 08:31 am (UTC)(no subject)
From:no subject
Date: 2008-09-04 08:12 am (UTC)no subject
Date: 2008-09-04 08:38 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2008-09-04 08:17 am (UTC)no subject
Date: 2008-09-04 08:18 am (UTC)no subject
Date: 2008-09-08 07:46 pm (UTC)no subject
Date: 2008-09-04 08:56 am (UTC)Да, можно явно потребовать, чтобы всё происходило in place. Но тогда это требование будет подсказкой -- достаточно увидеть, что орбита каждого элемента имеет длину 4 и устроена однообразно (за исключением центра матрицы нечетного размера). Остается только правильно перебрать все орбиты и циклически переставить элементы каждой из них.
Можно, кончено, побороться за минимизацию операций в циклической перестановке; пять операций -- тривиально, а как сделать за четыре, я не вижу. Пусть это будет отдельной задачей (доказать, что невозможно). ;)
А, ну еще подзадача -- придумать cache-frienly последовательность перебора орбит...
no subject
Date: 2008-09-04 09:44 am (UTC)(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
Date: 2008-09-04 09:04 am (UTC)no subject
Date: 2008-09-04 09:30 am (UTC)Про смену вопросов не согласен - хороший вопрос нужно калибровать, т.е. чтобы оценить по вопросу человека его нужно задать несколько раз и посмотреть как хорошие и плохие кандидаты решают его в условиях интервью, какие ньюансы. Соответсвенно, откалиброванных вопросов мало, менять их - дорого.
no subject
Date: 2008-09-04 09:41 am (UTC)(no subject)
From:no subject
Date: 2008-09-04 09:39 am (UTC)no subject
Date: 2008-09-04 10:06 am (UTC)С моей точки зрения, знание синтаксиса вторично, но тем не менее, если у человека в резюме написано, что он знает C, то скобки ставить в правильных местах и определять переменные он по идее должен уметь. Если он, скажем, не помнит, что обозначается &, а что |, или писать надо ~ABC::ABC или ABC:::~ABC, но помнит, что это за штуки и зачем нужны, меня это не смущает.
(no subject)
From:(no subject)
From:Синтаксиса?
From:Re: Синтаксиса?
From:(no subject)
From:no subject
Date: 2008-09-04 09:47 am (UTC)void rotateContour(int top, int len){
for(int i=0; i<len-1; i++){ int tmpval = arr[top][top+i]; arr[top][top+i]=arr[top+len-1-i][top]; arr[top+len-1-i][top]=arr[top+len-1][top+len-1-i]; arr[top+len-1][top+len-1-i]=arr[top+i][top+len-1]; arr[top+i][top+len-1]=tmpval; } } void rotate90CW(){ for(int i=0; i<N/2; i++) rotateContour(i,N-i*2); } arr - массив rotate90CW() - функция, осуществляющая поворот. Хочу в Гугл! :)
да уж, похоже я опоздал :-)
From:вот мое решение consle app. на С#
Date: 2008-09-04 10:04 am (UTC)class Program
{
//static int[,] A = new int[4,4]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
//static int N = 4;
static int[,] A = new int[5,5]{{1, 2, 3, 4, 5}, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}};
static int N = 5;
static void Main(string[] args)
{
Print();
Console.WriteLine();
Rotate();
Print();
Console.WriteLine();
Rotate();
Print();
Console.WriteLine();
Rotate();
Print();
Console.WriteLine();
Rotate();
Print();
Console.WriteLine();
Console.ReadLine();
}
static void Rotate()
{
for (int i = 0; i < N / 2; i++)
{
for (int j = i; j < N - i - 1; j++)
{
Switch4(i, j);
}
}
}
static void Switch4(int row, int col)
{
int n=N-1;
int leftUpper = A[row, col];
A[row, col] = A[n - col, row];
A[n - col, row] = A[n - row, n - col];
A[n - row, n - col] = A[col, n-row];
A[col, n - row] = leftUpper;
}
static void Print()
{
for(int i=0;i<N;i++) { for (int j = 0; j < N; j++) Console.Write(A[i, j].ToString() + " "); Console.WriteLine(); } } }
Re: вот мое решение consle app. на С#
Date: 2008-09-04 10:30 am (UTC)no subject
Date: 2008-09-04 10:18 am (UTC)Да, есть такое дело. Пожалуй, действительно пора менять вопросы.
no subject
Date: 2008-09-04 10:25 am (UTC)поправил.
Хочу в Гугл :)
я всё-таки его заборол! :)
arr - массив
rotate90CW() - функция, осуществляющая поворот.
void rotateContour(int top, int len){
for(int i=0; i&tl;len-1; i++){
int tmpval = arr[top][top+i];
arr[top][top+i]=arr[top+len-1-i][top];
arr[top+len-1-i][top]=arr[top+len-1][top+len-1-i];
arr[top+len-1][top+len-1-i]=arr[top+i][top+len-1];
arr[top+i][top+len-1]=tmpval;
}
}
void rotate90CW(){
for(int i=0; i<N/2; i++)
rotateContour(i,N-i*2);
}
no subject
Date: 2008-09-04 10:36 am (UTC)Лично меня ваш код пугает и я не хочу в нем разбираться:) Мне кажется это хороший пример того, когда каждая строчка кода должна быть подробно закомментирована
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Поворот квадратной матрицы NxN
Date: 2008-09-04 11:26 am (UTC)Деление матрицы наглядно показано на рисунке, исходная часть показана красным, вторая -- синим, третья -- зелёным, четвёртая -- жёлтым.
Центр при нечётном N в повороте не нуждается, отсеивается как отбрасывание целой части N/2.
for(j = 0; j < N/2; j++)
{
b1 = j;
a2 = N - b1 - 1;
b3 = a2;
a4 = b1;
for(i = j; i < N - j - 1; i++)
{
a1 = i;
b2 = a1;
a3 = N - a1 - 1;
b4 = a3;
swap = m[a4][b4];
m[a4][a4] = m[a3][a3];
m[a3][a3] = m[a2][a2];
m[a2][a2] = m[a1][a1];
m[a1][a1] = swap;
}
}
P.S. Поправил расчёт координат.
Re: Поворот квадратной матрицы NxN
Date: 2008-09-04 11:28 am (UTC)немецкий Google
Date: 2008-09-04 11:45 am (UTC)Простите, вопрос.
Мне вот интересно возится с алгоритмами.
У меня 4 последних года стажа в AI логических игр.
Деревянный английский (пассивный, говорю безграмотно) и хороший немецкий.
Знаю только Windows.
Мне стоит подавать в немецкий Google или дохляк?
Re: немецкий Google
Date: 2008-09-04 11:54 am (UTC)Re: немецкий Google
From: (Anonymous) - Date: 2008-09-04 11:59 am (UTC) - ExpandRe: немецкий Google
From:Re: немецкий Google
From: (Anonymous) - Date: 2008-09-05 02:38 pm (UTC) - ExpandRe: немецкий Google
From:Re: немецкий Google
From: (Anonymous) - Date: 2008-09-05 03:14 pm (UTC) - ExpandRe: немецкий Google
From:no subject
Date: 2008-09-04 12:30 pm (UTC):)
no subject
Date: 2008-09-04 01:53 pm (UTC)