Форум программистов, компьютерный форум 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++ Небольшое уточнение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:57  [ТС]     Небольшое тестовое задание в финской компании. #41
Речь о рутинной работе формирования строки
ну тут же не суунто
нам там предстояло с девайсами работать у которых 1 мег памяти всего (вместе с системой) + такой куций сдк, что просто жуть.

я к тому, что " а почемуб и не использовать, если и так понятно, что имелось ввиду?"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 14:59     Небольшое тестовое задание в финской компании. #42
villu, ну это получается "ни то, ни сё". Либо писать нормально, на плюсых, с использованием всех прелестей стл, либо уж голый си, так голый си.

Добавлено через 11 секунд
Так что убираем sprintf))
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 15:01  [ТС]     Небольшое тестовое задание в финской компании. #43
тут как бы с++ не совсем подходит, потому что STL контейнеры память "сами" чистят за собой.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:03     Небольшое тестовое задание в финской компании. #44
silent_1991, да напишите вы функцию конкатенации, которая принимает конечный буфер и строку, которую туда нужно дописать, и дописывайте после нуль-терминатора

Добавлено через 42 секунды
вам ведь другого не надо. у вас будет sprintf( "$(%s)", value ); - это и без него решить можно. Сделайте аналог strcat
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 15:04     Небольшое тестовое задание в финской компании. #45
talis, не вижу смысла из-за одного-единственного места писать подобную функцию)) Если в процессе написания вылезут ещё такие места - оформлю в виде функции.

Добавлено через 1 минуту
Цитата Сообщение от villu Посмотреть сообщение
STL контейнеры память "сами" чистят за собой
Цитата Сообщение от villu Посмотреть сообщение
ну тут же не суунто
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.09.2011, 15:05     Небольшое тестовое задание в финской компании. #46
Цитата Сообщение от silent_1991 Посмотреть сообщение
да говорю же, просто сформировать строку замены. Т.е. в таблице имеется var_name, а в исходном коде брэйнфака надо заменить подстроку вида $(var_name) на значение. Вот и надо сформировать из var_name из таблицы строку $(var_name), чтобы в функцию замены (самописный велосипед) передать эту сформированную строку.
Так чтобы делать подстановку (замену) надо предварительно обнаружить символ $. Собственно, поэтому я и не понимаю, как ты хочешь этого добиться. Сначала нашел, а потом подставил вот и все дела. А ты как-то в одном действии хочешь и найти и заменить
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 15:07     Небольшое тестовое задание в финской компании. #47
fasked, нене, я хотел использовать sprintf только для формирования строки, замена происходит после этого в отдельной функции, поиск до этого тоже в отдельной.

Стоило бы не париться и просто хранить в таблице переменных не чистое имя, а целиком, вместе с "$(" и ")". Наверное, я так и сделаю
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:07     Небольшое тестовое задание в финской компании. #48
я вообще слабо представляю себе, зачем код вида $(var_name) менять на $(var_value). А если будет переменная с именем var_value и значением var_name? Программа с ума сойдёт :-) Не проще убрать уже $() и подставить просто значение, без этих символов?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.09.2011, 15:07     Небольшое тестовое задание в финской компании. #49
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так что убираем sprintf
В боевой обстановке все равно пришлось бы убрать Функция гигантская и не очень быстрая, если бы очень нужна была, то я думаю, имело бы смысл реализовать демо-версию sprintf, то есть повикидывать оттуда все ненужное.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 15:09     Небольшое тестовое задание в финской компании. #50
talis, нет, я хочу заменить "$(var_name)" на "var_value". Если бы я хотел поменять только значение в скобках, не пришлось бы париться с добавлением к var_name долларов и скобок.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.09.2011, 15:09     Небольшое тестовое задание в финской компании. #51
Цитата Сообщение от silent_1991 Посмотреть сообщение
Стоило бы не париться и просто хранить в таблице переменных не чистое имя, а целиком, вместе с "$(" и ")". Наверное, я так и сделаю
Да вот я о том же, собственно, и хотел сказать. Если переменная без символа $ - это уже не переменная. Из минусов разве, что три байта лишних на каждую переменную в таблице. А если переменных штук 100, то уже 300 байт
А вообще после пятницы, когда отойду, можно будет позаниматься этой задачкой. Потом сравним реализации
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 15:11     Небольшое тестовое задание в финской компании. #52
talis, короче, суть в том, что я не стал париться с разбиением кода на лексемы, а работаю целиком со строкой. На предварительном проходе все имена переменных меняю на значение, а второй проход уже работает с кодом, в котором полностью отсутствуют переменные, как будто мы при написании кода сразу подставляли значения.

Добавлено через 47 секунд
fasked, я все равно имя и значение храню в статическом буфере размером 32 байта))
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:12     Небольшое тестовое задание в финской компании. #53
silent_1991, а если имя переменной формируется из кода ввиде $([ab]{2}) => $(abab)? :-)
silent_1991
16.09.2011, 15:12
  #54

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Потом сравним реализации
Не стоит)) У меня выходит дикий быдлокод)) ПописАв некоторое время на плюсах, я уже и забыл, как писать структурные программы, где всё делается ручками))

talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:12     Небольшое тестовое задание в финской компании. #55
Ну это так, если поиздеваться)) шучу.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.09.2011, 15:13     Небольшое тестовое задание в финской компании. #56
Цитата Сообщение от talis Посмотреть сообщение
а если имя переменной формируется из кода ввиде $([ab]{2}) => $(abab)
А я вот, лично, не уверен, что так можно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 15:13     Небольшое тестовое задание в финской компании. #57
talis, ужос)) Тут уже простой подстановкой не отделаться, благо в задании такого условия нет, все переменные "объявляются статически"
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 15:13  [ТС]     Небольшое тестовое задание в финской компании. #58
silent_1991
ого. Как знакомо.
Код свой выложу увидишь много общего
Там правда тоже дикий быдлокод, как сейчас вижу.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.09.2011, 15:15     Небольшое тестовое задание в финской компании. #59
villu, я сначала хотел всё по фэншую написать, список лексем, каждая лексема имеет тип (зарезервированное слово, символ и т.д.), но как подумал, что в очередной раз придётся писать связный список вручную и все вытекающие отсюда функции - так меня сразу передёрнуло. Думаю "ну его нафиг, буду парсить строку сходу"...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2011, 15:18     Небольшое тестовое задание в финской компании.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:18     Небольшое тестовое задание в финской компании. #60
Цитата Сообщение от fasked Посмотреть сообщение
А я вот, лично, не уверен, что так можно
Ну никто же не запрещал. Дополнительная возможность. Майкрософт вон сколько всякой гадости влили в свой VC++, чего в стандарте нет - и ничего Мой код так умеет

Добавлено через 2 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
каждая лексема имеет тип (зарезервированное слово, символ и т.д.), но как подумал, что в очередной раз придётся писать связный список вручную и все вытекающие отсюда функции
Зачем О_о? Список - зачем? Сделайте что-то вроде std::vector, который расширяется realloc. Тип лексемы - тоже зачем? Зарезервированных слов тут нет, одни символы. Переменная явно обозначение - $(var_name), так что определять, что это переменная, можно и без всяких типов
Yandex
Объявления
16.09.2011, 15:18     Небольшое тестовое задание в финской компании.
Ответ Создать тему
Опции темы

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