Re[2]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 21:45
Оценка:
Здравствуйте, skeptic, Вы писали:

S>Здравствуйте, sjukov, Вы писали:


S>>Коллеги,


S>>поругайте пожалуйста код :


S>>http://pastebin.com/U505pmkr



S>Ты совершенно прав — нет никакого смысла решать такую задачу на собеседовании,

S>если у тебя нет какой то ну очень большой мотивации идти работать именно к этому работодателю.
S>Более того — этот работодатель, я так думаю, и сам в курсе что нет в этом никакого смысла, но
S>поток соискателей надо чем то сбивать, вот и глумятся

S>P.S. надеюсь я правильно понял подтекст твоего поста


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

Когда я нанимал людей к нам в отдел я давал задание уровня — "длинная арифметика" (там где символы в столбик надо оперировать)

Самым сложным заданием что я давал это был многопоточный TCP/IP сервер(echo) . Это задание нужно было сделать дома максимум за неделю.
Re[8]: Строчный калькулятор
От: sjukov Украина  
Дата: 17.12.13 21:55
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, sjukov, Вы писали:


S>>Я тут подсуетился- теперь мой код опять , я считаю, лучше чем Ваш


A>это легко проверить — попробуйте расширить функциональность.

A>если код хороший, то это будет очень просто сделать, изменений существующего кода будет мало, в основном надо будет только дописать новый код.
Я попробую завтра сделать вечером , обещаю !

A>а такой новой функциональностью могут быть новые операторы с другими приоритетами, и многосимвольные операторы ('<=', '>=', 'shl' или '<<' и т.п.)

A>или можно пойти "вглубь" и добавить унарные операторы — и ~, например константу Pi и вызов функции sin()

С константами проблем вообще нет —

вместо этой строчки проверять sval по таблице на соответствие константе и подставлять значение . PI,E,...
...
if (_p == std::string::npos)
{
if (sval[0] == '(')
return Eval(sval.substr(1, FindClosePar(sval.substr(1, sval.length()))));
else
/*ТУТ >>>*/return float(atof(sval.c_str()));
}
else
...


A>многосимвольные операторы сломают switch(c)

Не сломают... многосивольные операторы для внутреннего представления можно заменить на спец-символы (любой ASCII символ не используемый в мат выражениях)

A>усложнение грамматики раздует функцию Eval,

Не думаю что значительно — завтра посмотрим.

A>а вызов функции — наверное сломает поиск скобок

Не сломает — а потребует дополнительный код для поддержки новой функциональности (функции)
Это пожалуй сейчас самая сложная для меня часть... завтра отпишусь о результатах
Re[3]: Строчный калькулятор
От: watchmaker  
Дата: 17.12.13 22:08
Оценка:
Здравствуйте, sjukov, Вы писали:
S>Все :) Исправился :) :) :)
S>http://pastebin.com/zg2BiuL1

Не, всё ещё плохо. Вот, "120/1/2/3/4/5" посчитай.
И ещё что хочется сказать — твой калькулятора не проверяет корректность работы разбора. Довольно опасное свойство для вычислителя, который уверенно выдаёт чушь при ошибке ввода вместо того, чтобы сообщить что имеет место именно ошибка ввода. Вот почему у тебя можно смайлики складывать, например, "(0_o)+8D"? Как такой программе можно доверять?
Re[9]: Строчный калькулятор
От: Abyx Россия  
Дата: 17.12.13 22:46
Оценка:
Здравствуйте, sjukov, Вы писали:

S>>>Я тут подсуетился- теперь мой код опять , я считаю, лучше чем Ваш


A>>это легко проверить — попробуйте расширить функциональность.

A>>если код хороший, то это будет очень просто сделать, изменений существующего кода будет мало, в основном надо будет только дописать новый код.
S>Я попробую завтра сделать вечером , обещаю !

сделал изменения у себя в коде — https://bitbucket.org/goldfinch/stringcompiler (без констант)
как я и говорил, если классы сделаны удачно, при добавлении новой функциональности надо только добавлять новые строчки кода, а старый код менять не надо — https://bitbucket.org/goldfinch/stringcompiler/commits/2dbaea48c507050f7d84c4f00738afb2720cdfd6
In Zen We Trust
Re[10]: Строчный калькулятор
От: niXman Ниоткуда https://github.com/niXman
Дата: 17.12.13 23:12
Оценка:
Здравствуйте, Abyx, Вы писали:

с проектированием у тебя все впорядке
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: Multi-Edit 7.0 DOS - "shift-reduce" строчный Calc
От: SergeCpp Россия http://zoozahita.ru
Дата: 18.12.13 00:58
Оценка:
(Раз уж тут (да и "там") "парад строчных калькуляторов" образовался.)

Давным-давно (лет десять уже прошло, это видно по комментариям в тексте; я-то уже и позабыл, когда) писал я строчный калькулятор для Multi-Edit 7.0 DOS (так как тот, что там был (и остался) — совсем по другому принципу работает). Язык там почти C.

Метод разбора взят из "Книги Дракона" ("shift-reduce" syntax analyzer, есть матрица приоритетов и ассоциативности), там в комментарии есть номера страниц русского перевода. То есть, "строго научный метод".

Особо распространяться не буду (с телефона не очень-то).

(Ужас — позабыл даже, что там скобки обрабатываются.)

Писал, конечно, не "час-два-три", а, скорее, с неделю или даже больше — потихоньку. Что помню — точную позицию ошибки тогда не стал определять (хотя там всё для этого было подготовлено), только сам факт ошибки (ибо не нужна была позиция).

Если есть интерес, то по ссылке на архивы (внизу тут) берите архив ME_PLUS и в нём — файл MATH.S на почти 1400 строк (ещё есть MATH.SH — интерфейс вызова). Язык, повторюсь, почти C. Попробовать в работе — архив ME (он строкой выше там). Калькулятор запускается по Alt+C из редактора. В калькуляторе есть справка по F1.

Да. Редактор работает и в Win 7 32-bit.

Ссылки
----------

Архивы: http://old-dos.ru/files/file_1328.html

Скрин калькулятора в работе: http://old-dos.ru/screenshot/1328/ME_CONVNUM_4.PNG

"Посмотреть вообще" (ностальгия, etc): http://forum.old-dos.ru/viewtopic.php?f=4&amp;t=263
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
multi-edit калькулятор
Re[6]: Строчный калькулятор
От: night beast СССР  
Дата: 18.12.13 04:13
Оценка: +2
Здравствуйте, Abyx, Вы писали:

S>>>>Для каких-то либо референтных значений времени выполнения автор попросил сделать двух людей сделать такое задание.

S>>>>Один был боевым программистом Яндекса — сделал за 2 часа примерно, второй был менеджером (в отрочестве программистом) — так тот справился за
S>>>>4.5 часа.
A>>>там про менеджеров написано что они auto_ptr юзают, что какбэ намекает на их профессиональный уровень.

NB>>а что не так с авто_птром? ну и на анатоликса наезжаешь тоже напрасно.


A>auto_ptr был deprecated в стандарте 11го года, это было более двух лет назад.


и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.
если и кого-то по этому поводу комплексы, то это их личные трудности.

A>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.


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

A>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.


вы знакомы лично?
добавь побольше пафоса, это всегда помогает.
Re[6]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:36
Оценка: +2
Здравствуйте, Abyx, Вы писали:

A>auto_ptr был deprecated в стандарте 11го года, это было более двух лет назад.

A>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

С auto_ptr все нормально, просто некоторые получали граблями по лбу из-за непонимания эстафетного владения, ну так С++ наполовину состоит из вещей которыми можно получить по лбу, если не знать как ими пользоваться
Re[4]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:39
Оценка: :)
Здравствуйте, Abyx, Вы писали:

A>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all


[Abyx-style on]
MS VS не нужен т.к. есть современный, mature g++ доступный на всех платформах.
[Abyx-style off]
Re[5]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:41
Оценка:
Здравствуйте, sjukov, Вы писали:

S>Излишнее увлечение этой всякой ооп-фигней, извините


Его код читать можно спокойно и развивать, а вот твой, без обид, на выброс.
Re[5]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:46
Оценка:
Здравствуйте, niXman, Вы писали:

A>>Си не нужен т.к. если типобезопасный, современный, mature язык C++.

X>мне это напомнило нацистов, с их лозунгами.

Ты еще Кобол начни защищать, типа каждый имеет право на существование. Конечно имеет, в музее программирования, на соседней полке с Си.
Re[6]: Строчный калькулятор
От: MTD https://github.com/mtrempoltsev
Дата: 18.12.13 06:47
Оценка:
Здравствуйте, skeptic, Вы писали:

S>вот ещё это например — "зачем что test-driven development не дает совершать ошибки и сокращает время на разработку."


Но это так и есть.
Re[7]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 07:43
Оценка:
Здравствуйте, night beast, Вы писали:

NB>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

о как. это какой такой конкретный код? покажи.

чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?

A>>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

NB>ага, нужно было в демонстрационный пример обязательно буст протащить. куда же без него.

в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?

A>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>вы знакомы лично?
NB>добавь побольше пафоса, это всегда помогает.

а что, надо быть знакомым лично, чтобы кого-то критиковать?
In Zen We Trust
Re[5]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 07:47
Оценка:
Здравствуйте, MTD, Вы писали:

MTD>Здравствуйте, Abyx, Вы писали:


A>>сейчас попробовал решить эту задачку, получилось ровно час, от первого коммита до коммита полностью функциональной версии — https://bitbucket.org/goldfinch/stringcompiler/commits/all


MTD>[Abyx-style on]

MTD>MS VS не нужен т.к. есть современный, mature g++ доступный на всех платформах.
MTD>[Abyx-style off]

вообще я сначала хотел писать этот код под mingw, чтоб еще и засунуть его на coliru
но потом я подумал что для этого надо текстовый редактор, а еще лучше IDE, и вдруг мне в какой-то момент понадобится отладчик — в итоге я стал писать в студии.
In Zen We Trust
Re[8]: Строчный калькулятор
От: night beast СССР  
Дата: 18.12.13 08:27
Оценка:
Здравствуйте, Abyx, Вы писали:

NB>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>о как. это какой такой конкретный код? покажи.

здесь

A>чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?


естественно. применение goto в чистых сях вполне оправдано.
что такое comefrom я не совсем понял. это что-то личное, да?

A>>>при этом до этого его не рекомендовали использовать наверное с середины нулевых, и писали всякие boost::scoped_ptr, llvm::OwningPtr и т.п.

NB>>ага, нужно было в демонстрационный пример обязательно буст протащить. куда же без него.

A>в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?


мда.

A>>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>>вы знакомы лично?
NB>>добавь побольше пафоса, это всегда помогает.

A>а что, надо быть знакомым лично, чтобы кого-то критиковать?


чтобы делать выводы о том, что кто-то чего то не знает, было бы не плохо иметь на руках какие-то подтверждения этому.
без этого ты выставляешь себя обычным пустозвоном. ничего личного, но со стороны это выглядит не очень красиво.
Re[9]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 09:39
Оценка:
Здравствуйте, night beast, Вы писали:

NB>>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>>о как. это какой такой конкретный код? покажи.

NB>здесь


и чем именно там оправдано применение auto_ptr?
тем что в 2013 году код писался на языке 98года? или тем что #include <boost/scoped_ptr.hpp> не написать?

действительно, если код пишется на выброс, то можно применить auto_ptr и написать прочие using namespace std;
но тогда хорошо бы написать комментарий типа "do not write this in real code", и уж точно не стоит гордиться применением auto_ptr, как сделал anatolix

A>>чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?

NB>естественно. применение goto в чистых сях вполне оправдано.
угу, только применение Си не оправдано.
NB>что такое comefrom я не совсем понял. это что-то личное, да?
http://en.wikipedia.org/wiki/COMEFROM


A>>в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?

NB>мда.
что "мда"?

A>>>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>>>вы знакомы лично?
NB>>>добавь побольше пафоса, это всегда помогает.
A>>а что, надо быть знакомым лично, чтобы кого-то критиковать?
NB>чтобы делать выводы о том, что кто-то чего то не знает, было бы не плохо иметь на руках какие-то подтверждения этому.
NB>без этого ты выставляешь себя обычным пустозвоном. ничего личного, но со стороны это выглядит не очень красиво.
код в той статье на хабре вполне себе является подтверждением. комментарий про auto_ptr тоже.
In Zen We Trust
Re[6]: Строчный калькулятор
От: sjukov Украина  
Дата: 18.12.13 09:43
Оценка: -1 :))
Здравствуйте, MTD, Вы писали:


S>>Излишнее увлечение этой всякой ооп-фигней, извините

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

Дуракам не показывают половину работы, но конкретно в этом случае дурак я.
Re[10]: Строчный калькулятор
От: night beast СССР  
Дата: 18.12.13 10:04
Оценка: :)
Здравствуйте, Abyx, Вы писали:

NB>>>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>>>о как. это какой такой конкретный код? покажи.

NB>>здесь


A>и чем именно там оправдано применение auto_ptr?

A>тем что в 2013 году код писался на языке 98года? или тем что #include <boost/scoped_ptr.hpp> не написать?

ответ очевиден
тем что результат работает на любом компиляторе и не требует установки левых библиотек.

A>>>чтоб два раза не вставать, может у тебя гдето и gotocomefrom оправдано?

NB>>естественно. применение goto в чистых сях вполне оправдано.
A>угу, только применение Си не оправдано.

угу. ложки нет (с)

NB>>что такое comefrom я не совсем понял. это что-то личное, да?

A>http://en.wikipedia.org/wiki/COMEFROM


A>>>в какой еще пример? и что не так с бустом? может еще и с stdlib что-то не так?

NB>>мда.
A>что "мда"?

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

A>>>>>люди, которые не в курсе современного состояния языка вполне заслуживают наездов.

NB>>>>вы знакомы лично?
NB>>>>добавь побольше пафоса, это всегда помогает.
A>>>а что, надо быть знакомым лично, чтобы кого-то критиковать?
NB>>чтобы делать выводы о том, что кто-то чего то не знает, было бы не плохо иметь на руках какие-то подтверждения этому.
NB>>без этого ты выставляешь себя обычным пустозвоном. ничего личного, но со стороны это выглядит не очень красиво.
A>код в той статье на хабре вполне себе является подтверждением. комментарий про auto_ptr тоже.

ясно. очередной ыксперт.
Re[10]: Строчный калькулятор
От: Stanislav V. Zudin Россия  
Дата: 18.12.13 10:20
Оценка: +1 -3
Здравствуйте, Abyx, Вы писали:

NB>>>>и? есть конкретный код, иcпользование auto_ptr в котором вполне оправдано.

A>>>о как. это какой такой конкретный код? покажи.

NB>>здесь


A>и чем именно там оправдано применение auto_ptr?

A>тем что в 2013 году код писался на языке 98года? или тем что #include <boost/scoped_ptr.hpp> не написать?

Ну например, тем, что auto_ptr будет компиляться в любой Студии, хоть в VS6. Если понимаешь, как он работает, то никаких проблем он не доставляет.
Кстати, твой вариант калькулятора я у себя собрать не смогу — мои работодатели все еще пользуются Студией 2008 (а код ТС — запросто).
Ни одна компания, в которой я работал, не горит желанием апгрейдить компилятор. Некоторые даже на VS2005 сидят.

Насчет буста — тоже. Только в одной компании его активно применяли.
В некоторых он был явно запрещен, как и любая сторонняя библиотека. И на это были основания. А в некоторых просто не нашел применения. А втаскивать тонну кода ради одного файла никто не станет.
_____________________
С уважением,
Stanislav V. Zudin
Re[11]: Строчный калькулятор
От: Abyx Россия  
Дата: 18.12.13 10:42
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Ну например, тем, что auto_ptr будет компиляться в любой Студии, хоть в VS6. Если понимаешь, как он работает, то никаких проблем он не доставляет.

SVZ>Кстати, твой вариант калькулятора я у себя собрать не смогу — мои работодатели все еще пользуются Студией 2008 (а код ТС — запросто).
SVZ>Ни одна компания, в которой я работал, не горит желанием апгрейдить компилятор. Некоторые даже на VS2005 сидят.

ну и что что кто-то сидит на VC6 ?
это не повод пропагандировать устаревшие технологии.

новые версии языка и компиляторов появляются не просто так. если кто-то думает что всё это не нужно — ну наверное это диагноз.

SVZ>Насчет буста — тоже. Только в одной компании его активно применяли.

SVZ>В некоторых он был явно запрещен, как и любая сторонняя библиотека. И на это были основания. А в некоторых просто не нашел применения. А втаскивать тонну кода ради одного файла никто не станет.

ага, а где-то запрещена стандартная библиотека. и тоже кто-то думает что на это есть основания.
In Zen We Trust
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.