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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.97
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 17:51     Небольшое тестовое задание в финской компании. #1
Привествую всех жителей форума.
Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания суунто (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 человек, которые, все ж, принесли задание на проверку никто не решил ее в полном объеме.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2011, 17:51     Небольшое тестовое задание в финской компании.
Посмотрите здесь:

работа с файлами + небольшое шифрование C++
C++ Небольшое задание по матрицам
C++ Небольшое исправление
C++ Небольшое исправление (2)
C++ Небольшое уточнение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 17:55     Небольшое тестовое задание в финской компании. #2
Цитата Сообщение от villu Посмотреть сообщение
функции памяти (выделить/освободить)
realloc можно, надеюсь?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 17:56  [ТС]     Небольшое тестовое задание в финской компании. #3
да, допускается все, что связано с памятью. malloc, calloc, alloc, realloc
если есть какие специфические для компилятора -- тоже допускаются.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.09.2011, 18:02     Небольшое тестовое задание в финской компании. #4
На брэйнфак немного похоже.) И такой же фак для брэйна.)))

А что значит strXXX? Я таких функций не знаю.)
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 18:08  [ТС]     Небольшое тестовое задание в финской компании. #5
А что значит strXXX? Я таких функций не знаю.)
strcmp, strcpy ..
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 18:13     Небольшое тестовое задание в финской компании. #6
Переменные могут представлять не числовое значение, а символ/строку? Вроде того:

smb = hi
[$(smb)]{4} = hihihihi
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 18:14  [ТС]     Небольшое тестовое задание в финской компании. #7
Цитата Сообщение от talis Посмотреть сообщение
Переменные могут представлять не числовое значение, а символ/строку? Вроде того:

smb = hi
[$(smb)]{4} = hihihihi
да, могут.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.09.2011, 18:28     Небольшое тестовое задание в финской компании. #8
villu, каким образом вводятся значения переменных? В самом коде программы (на этом псевдо-брэйнфаке) или во время выполнения (в виде запросов типа $var_name = )?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 18:39     Небольшое тестовое задание в финской компании. #9
villu, а memcpy разрешено?
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 18:56  [ТС]     Небольшое тестовое задание в финской компании. #10
Про хранение перемены условий не было, можно хоть в дефайнах.
Главное, чтоб они ратайм составлялись.

Мемкопи, меммув можно. На сколько помню мемкмп Тоже допускали.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 18:58     Небольшое тестовое задание в финской компании. #11
Я вот думаю, а если нисходящей рекурсией...
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.09.2011, 19:00     Небольшое тестовое задание в финской компании. #12
villu, я имею ввиду, не как они хранятся, а как они вводятся в программу.

Добавлено через 1 минуту
В смысле мы же решаем задачу не для данного конкретного кода (где можно задефайнить line, width, rows и т.д.), а пишем универсальный парсер для подобных программ.

Добавлено через 59 секунд
talis, естественно, я думаю, это лучший вариант. "Тело" очередной вложенности передаём рекурсивно функции парсера.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 19:01     Небольшое тестовое задание в финской компании. #13
Такой вопрос: в коде могут встречаться пробелы/ньюлайны/табуляции? Могу я записать:

Код
[    15  ]    {   48
  }
или их быть не может:

Код
[15]{48}
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 19:02  [ТС]     Небольшое тестовое задание в финской компании. #14
Ааа. Я колбек делал на каждую переменную найденную, потом представлял, ктото прям при парсинге хеш считал, потом получал значение из таблицы.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 19:09     Небольшое тестовое задание в финской компании. #15
villu, а можно для вывода ошибок использовать fprintf в stderr? а то как-то и отлаживать-то неудобно, и работать потом...

Добавлено через 3 минуты
или они считаются частью строки? то есть
["hello world"]{4} = "hello world""hello world""hello world""hello world"
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
15.09.2011, 19:14  [ТС]     Небольшое тестовое задание в финской компании. #16
Ну это само собой :-) я б по другомуи не осилил бы.

Добавлено через 2 минуты
Ууф, давай до дома доеду. Про кавычки ничего не было сказано. Как часть строки они.
talis
 Аватар для talis
789 / 541 / 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
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 21:02     Небольшое тестовое задание в финской компании. #19
villu, похоже, silent_1991 тоже о них сначала подумал. Я что, один такой дурак? А почему вы с переменных начали? Я ими заканчиваю, так как они легче всего парсятся. Их можно воспринимать, как примитивное выражение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2011, 21:04     Небольшое тестовое задание в финской компании.
Еще ссылки по теме:

Тестовое задание на Junior C++ dev C++
ООП. Тестовое задание собеседования. C++
C++ Тестовое задание для трудоустройства

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
15.09.2011, 21:04     Небольшое тестовое задание в финской компании. #20
talis, потому что если сразу реализовать переменные, не придётся в нескольких местах потом менять код))

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

Не по теме:

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

Yandex
Объявления
15.09.2011, 21:04     Небольшое тестовое задание в финской компании.
Ответ Создать тему
Опции темы

Текущее время: 17:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru