Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, Dan Dare III, Вы писали:
DDI>>Здравствуйте, Ромашка, Вы писали:
DDI>>
DDI>>Задача(является ли строка симметричной, рекурсия) — 15 минут(не меньше) и три попытки
DDI>>даже то решение что ты привел далеко от идеала цикл for в строке не зря есть индексатор
G>Первое решение, пришедшее в голову (предыдущий пост — прикол, хотел рассказ о себе услышать): G>
G>static bool IsSymmetric(string s)
G>{
G> for (int i = 0; i < s.Length/2; i++)
G> {
G> if (s[i] != s[s.Length - 1 - i]) return false;
G> }
G> return true;
G>}
G>
G>Работает в худшем случае в 2 раза быстрее (в релизе без студии), чем варианты в Array.Reverse.
G>Где тут применить РЕКУРСИЮ???
Надо написать метод static bool IsSymmetricInternal(string s, int beginIndex, int endIndex), который будет сравнивать символы с указанными индексами и рекурсивно вызывать себя, если символы равны. Тогда и будет рекурсия
Здравствуйте, Lao, Вы писали:
G>>Где тут применить РЕКУРСИЮ???
Lao>Надо написать метод static bool IsSymmetricInternal(string s, int beginIndex, int endIndex), который будет сравнивать символы с указанными индексами и рекурсивно вызывать себя, если символы равны. Тогда и будет рекурсия
Lao>static bool IsSymmetric(string s) Lao>{ Lao> return IsSymmetric(s, 0, s.Length-1); Lao>}
Супер! Жаль что такие работодатели ответ не скажут — "чтобы вы их не запоминали для следующего собеседования" — но работать к таким все равно...
ЗЫ
static bool IsSymmetricInternal(string s, int beginIndex, int endIndex)
{
return IsSymmetricInternal(s, beginIndex+1, endIndex-1);
}
А в первом варианте, боюсь, дальше начала строки не уйдем...
Я не буду отвечать по всему топику, просто тут напишу....
> здесь проблемы никакой Ромашка сначала хотел пошутить а потом полез на > броневик
На самом деле я ошибся. Два раза. В первый раз когда "по-диагонали"
прочитал про рекурсию, второй раз когда протестил "по быстрому" в дебаге.
> я не сомневаюсь что он напишет рекурсию а он вот про идиотов речь завел > — нехорошо это
Не напишу я рекурсию. У меня сердце кровью обливалось, когда я этот
пример писал, а когда я подумаю, что там в рекурсии будет творится с
ресурсами... Лучше не заставляй.
А про идиотов... Извини, не думал что ты это на свой счет примешь...
Не обращай внимания, это мои тараканы.
> TL>имхо, после 2-3-х собеседований с аналогичным результатом — точнее, с > аналогичной причиной отрицательного результата — имеет смысл задуматься > и первому, и второму. Но это так — имхо... > > так и есть
Думается мне, что все немного сложнее. Человек берется не только писать
строчки кода, но и взаимодействовать с коллективом. Нефиг в сложившуюся
команду соваться со своим уставом. Хотя иногда полезно встряхнуть.
Впрочем, твоя реакция, хоть и была ожидаема, но порадовала корректностью.
Posted via RSDN NNTP Server 2.1 beta
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, The Lex, Вы писали:
TL>Здравствуйте, Lao, Вы писали:
G>>>Где тут применить РЕКУРСИЮ???
Lao>>Надо написать метод static bool IsSymmetricInternal(string s, int beginIndex, int endIndex), который будет сравнивать символы с указанными индексами и рекурсивно вызывать себя, если символы равны. Тогда и будет рекурсия
Lao>>static bool IsSymmetric(string s) Lao>>{ Lao>> return IsSymmetric(s, 0, s.Length-1); Lao>>}
TL>Супер! Жаль что такие работодатели ответ не скажут — "чтобы вы их не запоминали для следующего собеседования" — но работать к таким все равно...
TL>ЗЫ TL>
TL>static bool IsSymmetricInternal(string s, int beginIndex, int endIndex)
TL>{
TL> return IsSymmetricInternal(s, beginIndex+1, endIndex-1);
TL>}
TL>
TL>А в первом варианте, боюсь, дальше начала строки не уйдем...
На самом деле я имел ввиду это
static bool IsSymmetric(string s)
{
return IsSymmetricInternal(s, 0, s.Length-1);
}
В IsSymmetricInternal конечно же сужаем диапозон.
Просто спешил и опечатался.
Здравствуйте, Lao, Вы писали:
Lao>На самом деле я имел ввиду это
Lao>static bool IsSymmetric(string s) Lao>{ Lao> return IsSymmetricInternal(s, 0, s.Length-1); Lao>} Lao>В IsSymmetricInternal конечно же сужаем диапозон. Lao>Просто спешил и опечатался.
Здравствуйте, The Lex, Вы писали:
TL>Здравствуйте, Lao, Вы писали:
Lao>>На самом деле я имел ввиду это
Lao>>static bool IsSymmetric(string s) Lao>>{ Lao>> return IsSymmetricInternal(s, 0, s.Length-1); Lao>>} Lao>>В IsSymmetricInternal конечно же сужаем диапозон. Lao>>Просто спешил и опечатался.
TL>А зачем нам целых 2 одинаковые функции?
Они не одинаковые:
-IsSymmetricInternal — это рекурсивная функция
-IsSymmetric — обертка (не рекурсивная).
Ситуация: вам нужно проверять строку на симметричность (в реальной программе), возможно даже в нескольких местах кода. Вы написали рекурсивную (ну а вдруг )
bool IsSymmetricInternal(string s, int firstIndex, int lastIndex).
В своем коде вы будете вызывать ее так
string s="sdfsdf";
IsSymmetricInternal(s, 0, s.Length-1)
или напишите обертку bool IsSymmetric(string s)
и будете делать так
string s="sdfsdf";
IsSymmetric(s)
?
Здравствуйте, gandjustas, Вы писали:
G>Первое решение, пришедшее в голову (предыдущий пост — прикол, хотел рассказ о себе услышать):
хочешь услышать рассказ мое мыло semen>dot<kosobutski>a<gmail>dot<com
но только если придешь на собеседование а то
не хочу что бы ты как ромашка поступил
G>Где тут применить РЕКУРСИЮ???
13 строчек
static bool IsSymmetric(string s)
{
// null пусть будет симметричнымif (s == null)
return true;
int length = s.Length;
// если длинна 1 или 0 значит уже симметричноif (length <= 1)
return true;
// сюда придет строка длинной 2 и вышеif (s[0] != s[length - 1])
return false;
// оптимизация if (length <= 3)
return true;
// здесь длинна будет только 4 и вышеreturn IsSymmetric(s.Substring(1, length - 2));
}
Здравствуйте, Dan Dare III, Вы писали:
DDI>13 строчек
я не требую буквально такого же
ничего страшного что кандидат пропустит нулл или еще что
это нормально бумага всетаки не компьютер но главное что бы рекурсию не пропустил
DDI>
DDI> static bool IsSymmetric(string s)
DDI> {
DDI> // null пусть будет симметричным
DDI> if (s == null)
DDI> return true;
DDI> int length = s.Length;
DDI> // если длинна 1 или 0 значит уже симметрично
DDI> if (length <= 1)
DDI> return true;
DDI> // сюда придет строка длинной 2 и выше
DDI> if (s[0] != s[length - 1])
DDI> return false;
DDI> // оптимизация
DDI> if (length <= 3)
DDI> return true;
DDI> // здесь длинна будет только 4 и выше
DDI> return IsSymmetric(s.Substring(1, length - 2));
DDI> }
DDI>
Dan Dare III пишет: > я не требую буквально такого же
Семен, но ведь это же ужасть.
> ничего страшного что кандидат пропустит нулл или еще что > это нормально бумага всетаки не компьютер но главное что бы рекурсию не > пропустил
Мож на рекурсию подобрать другой пример? Ну, такой, чтобы она там была
действительно нужна? Ну или хотя-бы не тормозила жутко?
Posted via RSDN NNTP Server 2.1 beta
Всё, что нас не убивает, ещё горько об этом пожалеет.
Здравствуйте, Lao, Вы писали:
TL>>А зачем нам целых 2 одинаковые функции?
Lao>Они не одинаковые: Lao>-IsSymmetricInternal — это рекурсивная функция Lao>-IsSymmetric — обертка (не рекурсивная).
Lao>Ситуация: вам нужно проверять строку на симметричность (в реальной программе), возможно даже в нескольких местах кода. Вы написали рекурсивную (ну а вдруг ) Lao>bool IsSymmetricInternal(string s, int firstIndex, int lastIndex).
Lao>В своем коде вы будете вызывать ее так Lao>string s="sdfsdf"; Lao>IsSymmetricInternal(s, 0, s.Length-1)
Lao>или напишите обертку bool IsSymmetric(string s) Lao>и будете делать так Lao>string s="sdfsdf"; Lao>IsSymmetric(s) Lao>?
Здравствуйте, Ромашка, Вы писали:
Р>Семен, но ведь это же ужасть.
люди пишут, не справляются только единичные кандидаты
Р>Мож на рекурсию подобрать другой пример? Ну, такой, чтобы она там была Р>действительно нужна? Ну или хотя-бы не тормозила жутко?
есть рекурсия очень полезная 9 строк но решают её единицы и после этого кандидаты всегда недовольны
Здравствуйте, Dan Dare III, Вы писали:
G>>Первое решение, пришедшее в голову (предыдущий пост — прикол, хотел рассказ о себе услышать):
DDI>хочешь услышать рассказ мое мыло semen>>dot<kosobutski>a<gmail>dot<com DDI>но только если придешь на собеседование а то DDI>не хочу что бы ты как ромашка поступил
G>>Где тут применить РЕКУРСИЮ???
DDI>13 строчек
... поскипаны за ненужностью.
Ясно. Это именно то, о чем я сразу и сказал: "угадайте ответ, который я загадал" (к)
Такое себе "книжное употребление рекурсии в виде простого решения вырожденного варианта задачи и последовательного сведения рекурсией всех остальных вариантов к вырожденному". Имеет академическую ценность — практической ценности, как и подавляющие 100% таких вопросов, не имеет.
ЗЫ. А теперь вопрос на засыпку: у чем Ваш код неверен? А впрочем... таки да — наверное будет работать и это таки "оптимизация". Но этот код действительно ужасен! Надеюсь, Вы с этим согласны? Из этой конторы просто необходимо бежать, бежать, бежать! Потому что если такой код предлагают писать на собеседовании — что же они предложать писать в реальной работе!?
Здравствуйте, The Lex, Вы писали:
TL>Ясно. Это именно то, о чем я сразу и сказал: "угадайте ответ, который я загадал" (к)
нет смотри ответ aerobus у него отличное решение хотя и отличное от моего
главное 2 вопроса
1 рекурсия
2 работает
+ я сам сказал "я не требую буквально такого же"
TL>Такое себе "книжное употребление рекурсии в виде простого решения вырожденного варианта задачи и последовательного сведения рекурсией всех остальных вариантов к вырожденному". Имеет академическую ценность — практической ценности, как и подавляющие 100% таких вопросов, не имеет.
TL>ЗЫ. А теперь вопрос на засыпку: у чем Ваш код неверен? А впрочем... таки да — наверное будет работать и это таки "оптимизация". Но этот код действительно ужасен! Надеюсь, Вы с этим согласны? Из этой конторы просто необходимо бежать, бежать, бежать! Потому что если такой код предлагают писать на собеседовании — что же они предложать писать в реальной работе!?
Lex пойми что я не господь бог и возможности ограничены и это не мешает брать на работу тех кто сильнее меня
если девелопер напишет лучше меня будь уверен его код я пойму
условий то всего 2 — рекурсия и работоспособность
мы стобой не знакомы с какой стати ты говоришь что то про организацию ?