1 | ||||||
Небольшое тестовое задание в финской компании.15.09.2011, 17:51. Показов 7206. Ответов 64
Метки нет (Все метки)
Привествую всех жителей форума.
Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания суунто (Suunto, Finland) на должность программиста (кто не в курсе, компания занимается производством компьютеров для спортсменов, дайверов ... ) в далеком 2005 году. Тема перенесена от сюда: Удалить комментарии из строки (кстати там же картинка - не могу опять ее же прицепить) https://www.cyberforum.ru/atta... 1316092021 ----- кстати когда проходил там собеседование на программера задание было в написании парсера следующего (до сих пор храню) (К сожалению оригинал задания не сохранился, да и толку от него нет -- он на финском.)
в строке: (результат в аттаче) принимая, что "height" = 2; "width" = 13; "rows" = 10; "lines" = 5; "space" = пробел или что другое Но! запрещены регулярные выражения, запрещен С++, запрещены функции типа strXXX. Только голый С, допускаются функции памяти (выделить/освободить) (статические буферы так же допускаются), указатели. На решение неделя. ---------------- Вдруг кому тоже интересно будет Что будет не ясно, спрашивайте. Тут сразу стоит отметить, что из 4 человек, которые, все ж, принесли задание на проверку никто не решил ее в полном объеме.
2
|
15.09.2011, 17:51 | |
Ответы с готовыми решениями:
64
Тестовое задание Тестовое задание от компании Exness Тестовое задание для трудоустройства Тестовое задание на Junior C++ dev |
15.09.2011, 21:05 | 21 |
silent_1991, а если читать переменную в обработчике простейших (у меня это lexema), и там же заменять на значение? Только lexema изменить и всё. Хотя, подводные грабли - это штука великая. Сейчас узнаем наверняка.
Добавлено через 13 секунд Да, рекурсией
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
15.09.2011, 21:06 | 22 |
talis, тоже буду рекурсией делать.
Сейчас только начну))
0
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
15.09.2011, 21:33 | 23 |
0
|
15.09.2011, 23:55 | 24 |
Блин, всё работает, проблема только с этим выражением:
$(space){$(width)} Не хочет подставлять значение переменной перед циклом, если оно не в кваратных скобках. Вот так: [$(space)]{$(width)} работает отлично. Причём если в первом варианте вместо переменной поставить просто символ, то работает без проблем...
0
|
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
|
|
16.09.2011, 01:14 | 26 |
ребята тут строиться дерево LL(1) (ну или LR(1), непомню точно) контекстно независимой грамматики а уж потом на его основе собирается результат. сейчас решать задачу влом если будет делать нечего дня через 2-3 постараюсь выложить решение
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
16.09.2011, 14:25 | 28 |
агерон, можно, конечно, и в эту степь углубиться, но язык тут настолько простой, что можно обойтись и без грамматик и специальных парсеров, а воспользоваться обычным рекурсивным спуском.
Добавлено через 55 минут Кстати говоря, такой вопрос: можно ли использовать sprintf для более простого формирования строк?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
16.09.2011, 14:29 | 30 |
villu, скажем, для формирования из var_name строки &(var_name).
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
16.09.2011, 14:34 | 32 | |||||
villu, не, я имею ввиду при парсинге. Т.е. переменная лежит в таблице переменных в виде пары имя-значение. Я при предварительном проходе заменяю все имена переменных их значениями (из таблицы), так вот, чтобы заменить в коде подстроку "$(var_name)" на значение из таблицы, мне надо из имени из той же ячейки таблицы сформировать соответствующую строку, т.е. в её начало дописать символы "$(", а в конец - ")". Можно ли для этого воспользоваться функцией sprintf в виде
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
16.09.2011, 14:39 | 34 |
villu, речь не о таблице, а о запрете в задании на всё то, что помогает программисту и лишает его удовольствия изобретать велосипеды. Меня смущает запрет на использование элементарной strlen (аналог которой пишется в 30 секунд) и в то же время разрешение использовать такую мощную вещь, как sprintf (которая, по сути, представляет собой форматированный вывод не в поток, а в буфер).
0
|
16.09.2011, 14:47 [ТС] | 35 |
я не понимаю тогда.
есть парсер, который заменяет одно на другое. чтоб это было возможно нужно это "другое" предоставить. в этом случае - это таблица. А как таблица сформирована не имеет значения. Коллега, который делал через таблицу (лист структур), вообще заполнял руками прям в main().
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
16.09.2011, 14:51 | 37 |
villu, забудьте о таблице))) Речь о рутинной работе формирования строки и о запретах на использование всего, что облегчает жизнь. При использовании sprintf формирование строки (которая является просто образцом для замены одного на другое) занимает одну строку, а если же sprintf нельзя использовать наряду с
, то надо сначала в строку скопировать "$", затем "(", затем посимвольно имя переменной, а затем ")" и "\0".
0
|
16.09.2011, 14:55 [ТС] | 39 |
а, в этом смысле. Не, "велосипеды и только велосипеды".
Хотя я тоже не вижу особого смысла извращаться. я без этого делал. Но у меня не таблица, а колбек, который принимает строку (char*) и строку возвращает (char*).
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
16.09.2011, 14:56 | 40 |
fasked, да говорю же, просто сформировать строку замены. Т.е. в таблице имеется var_name, а в исходном коде брэйнфака надо заменить подстроку вида $(var_name) на значение. Вот и надо сформировать из var_name из таблицы строку $(var_name), чтобы в функцию замены (самописный велосипед) передать эту сформированную строку.
0
|
16.09.2011, 14:56 | |
16.09.2011, 14:56 | |
Помогаю со студенческими работами здесь
40
ООП. Тестовое задание собеседования. Тестовое задание от работадателя. Хотелось бы услышать критику. Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex) Тестовое задание Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |