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

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

15.09.2011, 17:51. Показов 8537. Ответов 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
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 21:05
Студворк — интернет-сервис помощи студентам
silent_1991, а если читать переменную в обработчике простейших (у меня это lexema), и там же заменять на значение? Только lexema изменить и всё. Хотя, подводные грабли - это штука великая. Сейчас узнаем наверняка.

Добавлено через 13 секунд
Да, рекурсией
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
15.09.2011, 21:06
talis, тоже буду рекурсией делать.
Сейчас только начну))
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
15.09.2011, 21:33
Цитата Сообщение от Deviaphan Посмотреть сообщение
На брэйнфак немного похоже.) И такой же фак для брэйна.)))

А что значит strXXX? Я таких функций не знаю.)
strlen(), strchr(), strtok() ... и т.д.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
15.09.2011, 23:55
Блин, всё работает, проблема только с этим выражением:

$(space){$(width)}

Не хочет подставлять значение переменной перед циклом, если оно не в кваратных скобках. Вот так:

[$(space)]{$(width)}

работает отлично. Причём если в первом варианте вместо переменной поставить просто символ, то работает без проблем...
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 00:22
Не знаю я, что не так. Вот как есть проект, потом ещё поковыряю.
Вложения
Тип файла: zip test_c.zip (4.9 Кб, 26 просмотров)
1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
16.09.2011, 01:14
ребята тут строиться дерево LL(1) (ну или LR(1), непомню точно) контекстно независимой грамматики а уж потом на его основе собирается результат. сейчас решать задачу влом если будет делать нечего дня через 2-3 постараюсь выложить решение
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 10:17  [ТС]
Не знаю я, что не так.
ну, а я говорил, что справишься.

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

Добавлено через 55 минут
Кстати говоря, такой вопрос: можно ли использовать sprintf для более простого формирования строк?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:29  [ТС]
sprintf для более простого формирования строк?
в каком случае?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 14:29
villu, скажем, для формирования из var_name строки &(var_name).
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:31  [ТС]
аа, да можно. переменную можно хоть откуда брать. хоть из mysql базы
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 14:34
villu, не, я имею ввиду при парсинге. Т.е. переменная лежит в таблице переменных в виде пары имя-значение. Я при предварительном проходе заменяю все имена переменных их значениями (из таблицы), так вот, чтобы заменить в коде подстроку "$(var_name)" на значение из таблицы, мне надо из имени из той же ячейки таблицы сформировать соответствующую строку, т.е. в её начало дописать символы "$(", а в конец - ")". Можно ли для этого воспользоваться функцией sprintf в виде
C
1
sprintf("$(%s)", vars[i].name);
?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:37  [ТС]
ну а почему нет? таблица - это ж внешний фактор. Как туда попало значение переменной неважно.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 14:39
villu, речь не о таблице, а о запрете в задании на всё то, что помогает программисту и лишает его удовольствия изобретать велосипеды. Меня смущает запрет на использование элементарной strlen (аналог которой пишется в 30 секунд) и в то же время разрешение использовать такую мощную вещь, как sprintf (которая, по сути, представляет собой форматированный вывод не в поток, а в буфер).
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:47  [ТС]
я не понимаю тогда.
есть парсер, который заменяет одно на другое. чтоб это было возможно нужно это "другое" предоставить. в этом случае - это таблица. А как таблица сформирована не имеет значения.

Коллега, который делал через таблицу (лист структур), вообще заполнял руками прям в main().
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
16.09.2011, 14:50
villu, имеется ввиду не то, как была сформирована таблица, а можно ли после чтения из таблицы для формаирования необходимых кусков текст использовать sprintf, или всё нужно делать ручками.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 14:51
villu, забудьте о таблице))) Речь о рутинной работе формирования строки и о запретах на использование всего, что облегчает жизнь. При использовании sprintf формирование строки (которая является просто образцом для замены одного на другое) занимает одну строку, а если же sprintf нельзя использовать наряду с
Цитата Сообщение от villu Посмотреть сообщение
запрещены регулярные выражения, запрещен С++, запрещены функции типа strXXX
, то надо сначала в строку скопировать "$", затем "(", затем посимвольно имя переменной, а затем ")" и "\0".
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.09.2011, 14:53
Цитата Сообщение от silent_1991 Посмотреть сообщение
Можно ли для этого воспользоваться функцией sprintf в виде
Я думаю можно, но я тоже не понимаю как ты собираеьшся использовать printf в таком виде
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
16.09.2011, 14:55  [ТС]
а, в этом смысле. Не, "велосипеды и только велосипеды".
Хотя я тоже не вижу особого смысла извращаться.

я без этого делал. Но у меня не таблица, а колбек, который принимает строку (char*) и строку возвращает (char*).
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.09.2011, 14:56
fasked, да говорю же, просто сформировать строку замены. Т.е. в таблице имеется var_name, а в исходном коде брэйнфака надо заменить подстроку вида $(var_name) на значение. Вот и надо сформировать из var_name из таблицы строку $(var_name), чтобы в функцию замены (самописный велосипед) передать эту сформированную строку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2011, 14:56

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция 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
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru