Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.97
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
#1

Небольшое тестовое задание в финской компании. - C++

15.09.2011, 17:51. Просмотров 4459. Ответов 64
Метки нет (Все метки)

Привествую всех жителей форума.
Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания суунто (Suunto, Finland) на должность программиста (кто не в курсе, компания занимается производством компьютеров для спортсменов, дайверов ... ) в далеком 2005 году.

Тема перенесена от сюда:
Удалить комментарии из строки

(кстати там же картинка - не могу опять ее же прицепить)

http://www.cyberforum.ru/attachment....p;d=1316092021

-----

кстати когда проходил там собеседование на программера задание было в написании парсера следующего (до сих пор храню)

(К сожалению оригинал задания не сохранился, да и толку от него нет -- он на финском.)

C++
1
2
3
4
"\n[[+-{$(width)}]{$(rows)}+"
"[\\n|[$(space){$(width)}|]"
"{$(rows)}]{$(height)}\\n]"
"{$(lines)}[+-{$(width)}]{$(rows)}+\\n"
Это строка
в строке:
[] - цикл
{число} количество повторений цикла []{10}, либо единичного сивола !{10}
пример: 1{5} = 11111
[12]{5} = 1212121212
[!] = !
[!]{0} = пусто
\x0000 - символ по хекс коду (\x0F0)
\x - экранированный символ (n, t, \, итд по списку + [] {} $)
$(переменная) переменная, получаемая ран-тайм. переменные могут передаваться в [] и {}
например count = 10
sym = !
[$(sym)]{$(count)} = !!!!!!!!!!
парсер должен из всего этого безобразия собрать строку
(результат в аттаче) принимая, что
"height" = 2;
"width" = 13;
"rows" = 10;
"lines" = 5;
"space" = пробел или что другое

Но! запрещены регулярные выражения, запрещен С++, запрещены функции типа strXXX. Только голый С, допускаются функции памяти (выделить/освободить) (статические буферы так же допускаются), указатели. На решение неделя.
----------------
Вдруг кому тоже интересно будет

Что будет не ясно, спрашивайте.

Тут сразу стоит отметить, что из 4 человек, которые, все ж, принесли задание на проверку никто не решил ее в полном объеме.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 19:14  [ТС]     Небольшое тестовое задание в финской компании. #16
Ну это само собой :-) я б по другомуи не осилил бы.

Добавлено через 2 минуты
Ууф, давай до дома доеду. Про кавычки ничего не было сказано. Как часть строки они.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 20:55     Небольшое тестовое задание в финской компании. #17
villu, без переменных готово... Ваш пример с табличкой и все тестовые работают. Сейчас буду чесать репу над переменными... Но мне это сложным не представляется.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 21:00  [ТС]     Небольшое тестовое задание в финской компании. #18
круто! я с этим больше всего парился переменные, напротив - первое, что сделал.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 21:02     Небольшое тестовое задание в финской компании. #19
villu, похоже, silent_1991 тоже о них сначала подумал. Я что, один такой дурак? А почему вы с переменных начали? Я ими заканчиваю, так как они легче всего парсятся. Их можно воспринимать, как примитивное выражение.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.09.2011, 21:04     Небольшое тестовое задание в финской компании. #20
talis, потому что если сразу реализовать переменные, не придётся в нескольких местах потом менять код))

Добавлено через 1 минуту
Хотя это ещё от структуры кода изначальной зависит)) Но мне об этом в первую очередь подумалось.

Не по теме:

talis, кстати, интерпретацию всё-таки рекурсией сделали?

talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 21:05     Небольшое тестовое задание в финской компании. #21
silent_1991, а если читать переменную в обработчике простейших (у меня это lexema), и там же заменять на значение? Только lexema изменить и всё. Хотя, подводные грабли - это штука великая. Сейчас узнаем наверняка.

Добавлено через 13 секунд
Да, рекурсией
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.09.2011, 21:06     Небольшое тестовое задание в финской компании. #22
talis, тоже буду рекурсией делать.
Сейчас только начну))
ValeryLaptev
Эксперт С++
1039 / 818 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
15.09.2011, 21:33     Небольшое тестовое задание в финской компании. #23
Цитата Сообщение от Deviaphan Посмотреть сообщение
На брэйнфак немного похоже.) И такой же фак для брэйна.)))

А что значит strXXX? Я таких функций не знаю.)
strlen(), strchr(), strtok() ... и т.д.
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 23:55     Небольшое тестовое задание в финской компании. #24
Блин, всё работает, проблема только с этим выражением:

$(space){$(width)}

Не хочет подставлять значение переменной перед циклом, если оно не в кваратных скобках. Вот так:

[$(space)]{$(width)}

работает отлично. Причём если в первом варианте вместо переменной поставить просто символ, то работает без проблем...
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 00:22     Небольшое тестовое задание в финской компании. #25
Не знаю я, что не так. Вот как есть проект, потом ещё поковыряю.
Вложения
Тип файла: zip test_c.zip (4.9 Кб, 23 просмотров)
агерон
268 / 267 / 33
Регистрация: 12.10.2009
Сообщений: 1,057
16.09.2011, 01:14     Небольшое тестовое задание в финской компании. #26
ребята тут строиться дерево LL(1) (ну или LR(1), непомню точно) контекстно независимой грамматики а уж потом на его основе собирается результат. сейчас решать задачу влом если будет делать нечего дня через 2-3 постараюсь выложить решение
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 10:17  [ТС]     Небольшое тестовое задание в финской компании. #27
Не знаю я, что не так.
ну, а я говорил, что справишься.

Могу свой вариант выложить, если кому интересно.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.09.2011, 14:25     Небольшое тестовое задание в финской компании. #28
агерон, можно, конечно, и в эту степь углубиться, но язык тут настолько простой, что можно обойтись и без грамматик и специальных парсеров, а воспользоваться обычным рекурсивным спуском.

Добавлено через 55 минут
Кстати говоря, такой вопрос: можно ли использовать sprintf для более простого формирования строк?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:29  [ТС]     Небольшое тестовое задание в финской компании. #29
sprintf для более простого формирования строк?
в каком случае?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2011, 14:29     Небольшое тестовое задание в финской компании.
Еще ссылки по теме:
C++ Небольшое исправление (2)
C++ Небольшое исправление
работа с файлами + небольшое шифрование C++
Небольшое различие между printf и cout C++
C++ Всплывающее небольшое окно внизу экрана

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.09.2011, 14:29     Небольшое тестовое задание в финской компании. #30
villu, скажем, для формирования из var_name строки &(var_name).
Yandex
Объявления
16.09.2011, 14:29     Небольшое тестовое задание в финской компании.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru