Небольшое тестовое задание в финской компании.15.09.2011, 17:51. Показов 9103. Ответов 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 Тестовое задание для трудоустройства |
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 16.09.2011, 15:21 | |
|
talis, ну, собственно, в реализации ничего сложного, просто действия меняются местами. Сначала разворачиваем строку, а потом запрашиваем значения переменных, а не наоборот, как у меня. Только вот я не привык реализовывать сверх того, что надо. Закажут - сделаем. Иначе - лесом))
Добавлено через 1 минуту talis, со списком потом было бы легче работать (как мне кажется), да и ограничения на память. Зарезервированные слова - типа [],{},$. Видим зарезервированное слово - вытаскиваем строку до парного зарезервированного слова и передаем её рекурсивно парсеру.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||||||||||||||||||||||||||||||
| 16.09.2011, 19:04 | ||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Какие символы следует экранировать? Понятно, что \n - перевод строки, \t - табуляция. Ну и служебные символы надо экранировать. А вот экранировать, скажем, \ или " я не вижу смысла, эти символы и так будут восприняты парсером как обычные.
Добавлено через 1 минуту А, не, \ тоже надо экранировать, естественно. А остальное, мне кажется, нет смысла. Добавлено через 2 часа 56 минут Эх, написал... но код меня что-то совсем не радует... Какой-то он незрелый, что-ли, получился... service_functions.h
4
|
||||||||||||||||||||||||||||||||||||
| 17.09.2011, 16:45 [ТС] | ||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Päivää!
В аттаче мой вариант. Как тут кто-то верно заметил -- парсер прост, как машина "бреинфак". Далее описание. Длинное. Можно не читать. ![]() ------------ код достаточно корявенький и длинный (ажна 3 блока копипасты кстати этим объясняется размер исходника + еще отступы - пробелы). Сейчас бы сделал все гораздо меньше.Никаких деревьев. Все делается одним большим циклом по строке и пишется в другую строку (которая передается как параметр функции). Из особенностей: длина входной строки не ограничена длина выходной строки ограничена и парсер заканчивает свою работу, при достижении конца этой строки (это можно отменить флагом в параметрах). При парсинге не используются сторонние функции вообще. Правила: - переменная начинается с символа $ либо любого другого, переданного функции. - переменная отдается в функцию со всеми параметрами. Функция должна вернуть C-строку, либо 0. далее то, что выходит за рамки изначального задания и делалось джаст фо лулс + еще для использования в одном проектике. - переменные (у меня они называются макросы) могут встречаться в любой части строки, в том числе в именах других макросов и в параметрах других макросов.
- Последовательности: [] как и предполагалось -- повторение строки, но с течением времени заменил немного значение. Во-первых цикл всегда выполняется минимум 1 раз то есть [!]{0} вернет !, а не ничего. во-вторых цикл - это реальный цикл. и если я в строке укажу [$conter()]{5} то колбек будет дернут 5 раз. и каждый раз может вернуться разное значение:
![]() Циклы могут быть вложенные (как в примере выше). {} - итератор цикла [] либо последнего символа.
esc последовательности: такие последовательности идут после символа \. все неизвестное парсер пропускает как есть \i = \i можно задать код символа в нескольких разных системах счисления:
---- еще про макросы: общая длина макроса с параметрами задается в заголовке дефайном. Количество параметров там же параметры отделяются друг от друга пробелами, либо запятыми. параметр в "это цельный параметр" - цельные параметры. Маросы могут вернуть строку, могут вернуть другие макросы и вообще любые последовательности. (да, можно получить рекурсию ).... Еще особенности: для парсера не существует ошибок. любую строку он съест и сделает, что сможет. Все символы и возможности можно менять соответсвующими дефайнами. например скобки сделать <> вместо () На этом все. если вдруг что непонятно отвечу.
3
|
||||||||||||||||||||||||||||||||||||
| 17.09.2011, 16:45 | |
|
Тестовое задание на Junior C++ dev
Тестовое задание от работадателя. Хотелось бы услышать критику. Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex) Тестовое задание Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|