Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/37: Рейтинг темы: голосов - 37, средняя оценка - 4.70
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1

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

15.09.2011, 17:51. Показов 8533. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привествую всех жителей форума.
Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания суунто (Suunto, Finland) на должность программиста (кто не в курсе, компания занимается производством компьютеров для спортсменов, дайверов ... ) в далеком 2005 году.

Тема перенесена от сюда:
Удалить комментарии из строки

(кстати там же картинка - не могу опять ее же прицепить)

https://www.cyberforum.ru/atta... 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.09.2011, 17:51
Ответы с готовыми решениями:

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

Тестовое задание от компании Exness
У меня нет никакого вопроса, но я так и не понял в какую ветку надо написать (все изучил внимательно), поэтому пишу сюда. Я просто хочу...

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

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

я к тому, что " а почемуб и не использовать, если и так понятно, что имелось ввиду?"
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 14:59
villu, ну это получается "ни то, ни сё". Либо писать нормально, на плюсых, с использованием всех прелестей стл, либо уж голый си, так голый си.

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

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

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

Стоило бы не париться и просто хранить в таблице переменных не чистое имя, а целиком, вместе с "$(" и ")". Наверное, я так и сделаю
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:07
я вообще слабо представляю себе, зачем код вида $(var_name) менять на $(var_value). А если будет переменная с именем var_value и значением var_name? Программа с ума сойдёт :-) Не проще убрать уже $() и подставить просто значение, без этих символов?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.09.2011, 15:07
Цитата Сообщение от silent_1991 Посмотреть сообщение
Так что убираем sprintf
В боевой обстановке все равно пришлось бы убрать Функция гигантская и не очень быстрая, если бы очень нужна была, то я думаю, имело бы смысл реализовать демо-версию sprintf, то есть повикидывать оттуда все ненужное.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 15:09
talis, нет, я хочу заменить "$(var_name)" на "var_value". Если бы я хотел поменять только значение в скобках, не пришлось бы париться с добавлением к var_name долларов и скобок.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.09.2011, 15:09
Цитата Сообщение от silent_1991 Посмотреть сообщение
Стоило бы не париться и просто хранить в таблице переменных не чистое имя, а целиком, вместе с "$(" и ")". Наверное, я так и сделаю
Да вот я о том же, собственно, и хотел сказать. Если переменная без символа $ - это уже не переменная. Из минусов разве, что три байта лишних на каждую переменную в таблице. А если переменных штук 100, то уже 300 байт
А вообще после пятницы, когда отойду, можно будет позаниматься этой задачкой. Потом сравним реализации
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 15:11
talis, короче, суть в том, что я не стал париться с разбиением кода на лексемы, а работаю целиком со строкой. На предварительном проходе все имена переменных меняю на значение, а второй проход уже работает с кодом, в котором полностью отсутствуют переменные, как будто мы при написании кода сразу подставляли значения.

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

Не по теме:

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

0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:12
Ну это так, если поиздеваться)) шучу.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.09.2011, 15:13
Цитата Сообщение от talis Посмотреть сообщение
а если имя переменной формируется из кода ввиде $([ab]{2}) => $(abab)
А я вот, лично, не уверен, что так можно
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 15:13
talis, ужос)) Тут уже простой подстановкой не отделаться, благо в задании такого условия нет, все переменные "объявляются статически"
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 15:13  [ТС]
silent_1991
ого. Как знакомо.
Код свой выложу увидишь много общего
Там правда тоже дикий быдлокод, как сейчас вижу.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 15:15
villu, я сначала хотел всё по фэншую написать, список лексем, каждая лексема имеет тип (зарезервированное слово, символ и т.д.), но как подумал, что в очередной раз придётся писать связный список вручную и все вытекающие отсюда функции - так меня сразу передёрнуло. Думаю "ну его нафиг, буду парсить строку сходу"...
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 15:18
Цитата Сообщение от fasked Посмотреть сообщение
А я вот, лично, не уверен, что так можно
Ну никто же не запрещал. Дополнительная возможность. Майкрософт вон сколько всякой гадости влили в свой VC++, чего в стандарте нет - и ничего Мой код так умеет

Добавлено через 2 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
каждая лексема имеет тип (зарезервированное слово, символ и т.д.), но как подумал, что в очередной раз придётся писать связный список вручную и все вытекающие отсюда функции
Зачем О_о? Список - зачем? Сделайте что-то вроде std::vector, который расширяется realloc. Тип лексемы - тоже зачем? Зарезервированных слов тут нет, одни символы. Переменная явно обозначение - $(var_name), так что определять, что это переменная, можно и без всяких типов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2011, 15:18

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

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

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

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

Тестовое задание
Добрый день! Относительно недавно начал изучать SQL, подкинули тестовое задание (во вложении). Ума не приложу как его сделать....


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru