Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
villu
203 / 204 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
1

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

15.09.2011, 17:51. Просмотров 4902. Ответов 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 человек, которые, все ж, принесли задание на проверку никто не решил ее в полном объеме.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2011, 17:51
Ответы с готовыми решениями:

Тестовое задание
private class Connect (){ public Device dev1 = new Device(); public Device...

Тестовое задание для трудоустройства
Решил попробовать устроиться в компанию и узнать что вообще и как. Отправил в...

ООП. Тестовое задание собеседования.
Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня...

Тестовое задание на Junior C++ dev
Доброго времени суток. Неделю назад ради интереса отправил свое резюме в одну...

Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex)
Добрый день! Ходил недавно на собеседование. Имеется список вопросов, на...

64
villu
203 / 204 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:57  [ТС] 41
Речь о рутинной работе формирования строки
ну тут же не суунто
нам там предстояло с девайсами работать у которых 1 мег памяти всего (вместе с системой) + такой куций сдк, что просто жуть.

я к тому, что " а почемуб и не использовать, если и так понятно, что имелось ввиду?"
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.09.2011, 14:59 42
villu, ну это получается "ни то, ни сё". Либо писать нормально, на плюсых, с использованием всех прелестей стл, либо уж голый си, так голый си.

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

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

Добавлено через 1 минуту
Цитата Сообщение от villu Посмотреть сообщение
STL контейнеры память "сами" чистят за собой
Цитата Сообщение от villu Посмотреть сообщение
ну тут же не суунто
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.09.2011, 15:05 46
Цитата Сообщение от silent_1991 Посмотреть сообщение
да говорю же, просто сформировать строку замены. Т.е. в таблице имеется var_name, а в исходном коде брэйнфака надо заменить подстроку вида $(var_name) на значение. Вот и надо сформировать из var_name из таблицы строку $(var_name), чтобы в функцию замены (самописный велосипед) передать эту сформированную строку.
Так чтобы делать подстановку (замену) надо предварительно обнаружить символ $. Собственно, поэтому я и не понимаю, как ты хочешь этого добиться. Сначала нашел, а потом подставил вот и все дела. А ты как-то в одном действии хочешь и найти и заменить
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.09.2011, 15:07 47
fasked, нене, я хотел использовать sprintf только для формирования строки, замена происходит после этого в отдельной функции, поиск до этого тоже в отдельной.

Стоило бы не париться и просто хранить в таблице переменных не чистое имя, а целиком, вместе с "$(" и ")". Наверное, я так и сделаю
0
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:07 48
я вообще слабо представляю себе, зачем код вида $(var_name) менять на $(var_value). А если будет переменная с именем var_value и значением var_name? Программа с ума сойдёт :-) Не проще убрать уже $() и подставить просто значение, без этих символов?
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.09.2011, 15:07 49
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так что убираем sprintf
В боевой обстановке все равно пришлось бы убрать Функция гигантская и не очень быстрая, если бы очень нужна была, то я думаю, имело бы смысл реализовать демо-версию sprintf, то есть повикидывать оттуда все ненужное.
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.09.2011, 15:09 50
talis, нет, я хочу заменить "$(var_name)" на "var_value". Если бы я хотел поменять только значение в скобках, не пришлось бы париться с добавлением к var_name долларов и скобок.
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.09.2011, 15:09 51
Цитата Сообщение от silent_1991 Посмотреть сообщение
Стоило бы не париться и просто хранить в таблице переменных не чистое имя, а целиком, вместе с "$(" и ")". Наверное, я так и сделаю
Да вот я о том же, собственно, и хотел сказать. Если переменная без символа $ - это уже не переменная. Из минусов разве, что три байта лишних на каждую переменную в таблице. А если переменных штук 100, то уже 300 байт
А вообще после пятницы, когда отойду, можно будет позаниматься этой задачкой. Потом сравним реализации
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.09.2011, 15:11 52
talis, короче, суть в том, что я не стал париться с разбиением кода на лексемы, а работаю целиком со строкой. На предварительном проходе все имена переменных меняю на значение, а второй проход уже работает с кодом, в котором полностью отсутствуют переменные, как будто мы при написании кода сразу подставляли значения.

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

Не по теме:

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

0
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:12 55
Ну это так, если поиздеваться)) шучу.
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.09.2011, 15:13 56
Цитата Сообщение от talis Посмотреть сообщение
а если имя переменной формируется из кода ввиде $([ab]{2}) => $(abab)
А я вот, лично, не уверен, что так можно
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.09.2011, 15:13 57
talis, ужос)) Тут уже простой подстановкой не отделаться, благо в задании такого условия нет, все переменные "объявляются статически"
0
villu
203 / 204 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 15:13  [ТС] 58
silent_1991
ого. Как знакомо.
Код свой выложу увидишь много общего
Там правда тоже дикий быдлокод, как сейчас вижу.
0
silent_1991
Эксперт С++
5009 / 3069 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
16.09.2011, 15:15 59
villu, я сначала хотел всё по фэншую написать, список лексем, каждая лексема имеет тип (зарезервированное слово, символ и т.д.), но как подумал, что в очередной раз придётся писать связный список вручную и все вытекающие отсюда функции - так меня сразу передёрнуло. Думаю "ну его нафиг, буду парсить строку сходу"...
0
talis
793 / 545 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:18 60
Цитата Сообщение от fasked Посмотреть сообщение
А я вот, лично, не уверен, что так можно
Ну никто же не запрещал. Дополнительная возможность. Майкрософт вон сколько всякой гадости влили в свой VC++, чего в стандарте нет - и ничего Мой код так умеет

Добавлено через 2 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
каждая лексема имеет тип (зарезервированное слово, символ и т.д.), но как подумал, что в очередной раз придётся писать связный список вручную и все вытекающие отсюда функции
Зачем О_о? Список - зачем? Сделайте что-то вроде std::vector, который расширяется realloc. Тип лексемы - тоже зачем? Зарезервированных слов тут нет, одни символы. Переменная явно обозначение - $(var_name), так что определять, что это переменная, можно и без всяких типов
0
16.09.2011, 15:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2011, 15:18

Тестовое задание от компании Exness
У меня нет никакого вопроса, но я так и не понял в какую ветку надо написать...

Тестовое задание от работадателя. Хотелось бы услышать критику.
Пробую устроиться программистом. Вот одна из компаний выслала мне тестовое...

Небольшое исправление (2)
Собственно нужно при нажатии кнопки " ' " нужно вывести на экран содержимое...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

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