Последнее время было много споров о том надо ли писать код на бумажке и можно ли за пять минут написать простенький алгоритм. Вот вам вопрос просто на знание языка, для черкания на бумажке, на пять минут ... И отмазки уже не слепишь ))) Либо написал что нить, либо нет.
/*
написать нечто с максимально возможным количеством ключевых слов так что бы:
* без повторений (каждое ключевое слово используется один раз)
* не используя фигурные скобки,
* выполнялась каждая инструкция (не было мёртвого кода).
* было одновременно верным для С и С++
* компилировалось как в GCC так и в MSVC на любой допустимой платформе.
* при исполнении должно напечатать "hello!" и корректно завершиться.
*/#define TEXT >это должно быть здесь!<
#include <stdio.h>
int main() {
do TEXT while(0);
}
Мой вариант содержит 23 ключевых слова. Кто больше?
AS>>Мой вариант содержит 23 ключевых слова. Кто больше? S>А Вы уверены, что ЭТО тест на знание языка, а не нечто другое?
Уверен. Это тест на знание языка, а не на умение копировать усвоенное из учебника. И это именно тест на язык, а не на библиотеку или алгоритмику. И удивительно простой тест, который очень хорошо показывает возможности человека в применении языка.
S>Может просто на работе скучно?
Хотя, я ни сколько не удивлюсь если люди, убеждённые что работа программиста состоит лишь в повторении стереотипного кода, будут возражать. Ну дык они языком как таковым и не владеют, и бывает жутко его боятся )))
AS>Последнее время было много споров о том надо ли писать код на бумажке и можно ли за пять минут написать простенький алгоритм. Вот вам вопрос просто на знание языка, для черкания на бумажке, на пять минут ... И отмазки уже не слепишь ))) Либо написал что нить, либо нет.
AS>Мой вариант содержит 23 ключевых слова. Кто больше?
А Вы уверены, что ЭТО тест на знание языка, а не нечто другое?
Может просто на работе скучно?
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>Последнее время было много споров о том надо ли писать код на бумажке и можно ли за пять минут написать простенький алгоритм. Вот вам вопрос просто на знание языка, для черкания на бумажке, на пять минут ... И отмазки уже не слепишь ))) Либо написал что нить, либо нет.
Синтетический тест ничего не покажет.
AS> написать нечто с максимально возможным количеством ключевых слов так что бы:
их всего-то 36 (В стандарте C99)
AS> * без повторений (каждое ключевое слово используется один раз) AS> * не используя фигурные скобки, AS> * выполнялась каждая инструкция (не было мёртвого кода).
Мёртвый код — это код, который выполняется, но результаты которого не используются. здесь
AS> * было одновременно верным для С и С++ AS> * компилировалось как в GCC так и в MSVC на любой допустимой платформе.
Что такое "допустимая платформа?"
AS> * при исполнении должно напечатать "hello!" и корректно завершиться.
Ага, ага. Вы в самом деле ищите людей, которые пишут код, который потом никто прочитать не может?
ЗЫ Ну и отмазка:
#define TEXT printf("%s", ("auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _Bool _Complex _Imaginary", "\"hello!\""));
нигде не сказано, что ключевые слова должны "исполнятся".
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>>>Мой вариант содержит 23 ключевых слова. Кто больше? S>>А Вы уверены, что ЭТО тест на знание языка, а не нечто другое?
AS>Уверен. Это тест на знание языка, а не на умение копировать усвоенное из учебника. И это именно тест на язык, а не на библиотеку или алгоритмику. И удивительно простой тест, который очень хорошо показывает возможности человека в применении языка.
S>>Может просто на работе скучно?
AS>Хотя, я ни сколько не удивлюсь если люди, убеждённые что работа программиста состоит лишь в повторении стереотипного кода, будут возражать. Ну дык они языком как таковым и не владеют, и бывает жутко его боятся )))
В качестве разминки для хвоста имеет право на жизнь.
Если бы увидел такое на собеседовании 99% просто встал бы и ушел, ну или аргументировано объяснил почему не хочу заниматься онанизмом. Под настроение
E>Но в целом, IMHO, решение тривиально. E>1) В начало нашего решения суём ;while( 0 );
Почему бы и нет. Тоже решение, но примерно как развернуть строку вручную, написав буквы в правильном порядке. Я специально написал do while(0) что даёт неявное условие задачи, и что бы избежать 101 ответа на тему давайте запишем всё через точку с запятой. Этот тест нельзя не пройти, вопрос в том что он покажет. Тут смысл ведь не в том на сколько много слов ты напишешь, а то как ты это сделаешь и сделаешь ли вообще что нибудь. Сможешь ли ты понять задачу вне зоны комфорта, понять неявные ограничения, самостоятельно определить допустимые и не допустимые способы решения и выбрать на твой взгляд верный. 'Кто больше' — это просто соревновательный элемент для привлечения внимания.
Что бы кто ни говорил, а тест работает. ))) Это чётко видно по обсуждению.
В результате как обычно есть несколько групп людей:
1 — сказали что задача тривиальная, и не стали решать.
2 — сказали что будут решать такие сложные задачи только за высокий рейт.
3 — сказали что слишком духовны для извращений.
4 — попытались свести задачу к другой, не выводящий их из зоны комфорта.
5 — попытались решить и решили задачу, при этом успешно смогли выйти из зоны комфорта.
Обычно, с последними двумя группами имеет смысл говорить дальше, ну это если конечно стоит цель сделать работу, а не приятно о ней потрепаться.
http://ideone.com/j4y9Tk — 24 (в начале неправильно посчитал). Чтобы написать это никаких особых знаний кроме языка не нужно. Более того, написать хотя бы 10 слов может любой, кто внимательно прочитал книжку по языку.
switch(0) for(;;) if(1) default: return !puts("hello!"); else do case 0: continue; while(0);
Ещё раз — не важно сколько слов ты напишешь, важно знаешь ли ты несколько базовых вещей относительно языка или нет. Что удивительно, многие так называемые программисты не знают.
On 10.04.2013 17:18, Erop wrote:
> Мне кажется, что всё это бред, базирующийся исключительно на возможности > унижать экзаменуемого и только. Глупый грубый и малокорректный > психологический тест, вообще не имеющий отношения непострдственно к > навыкам.
Нет тут ничего и психологического. Тут есть одно, ТС узнал, что можно
много ключевых слов С++ написать подряд разными странными способами и он
посчитал, что он КРУТ. И к тому, что он так считает нет никаких
претензий, это его собственные тараканы.
Другое, что он пытается оное обобщить на всех и требует, чтобы все
осознали его крутизну, тем более, что его, похоже, допустили до
собеседований и он сейчас наконец-то может насладиться этой крутизной.
Причем, похоже, что на собеседованиях ему показалось мало или кто-то его
послал далеко, вот он решил попытаться самоутвердиться здесь.
Фух. Кажется я даже выполнил его тест по написанию кучи слов (имеющих
мало отношения к реальности). Чтобы ТС, чего не подумал, я ему не
подхожу, как сотрудник на все 100%.
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>Обычно, с последними двумя группами имеет смысл говорить дальше, ну это если конечно стоит цель сделать работу, а не приятно о ней потрепаться.
Какое всё это имеет отношение к сабжу стартового сообщения?
Это же всё разные вариации вопросов про число настройщиков роялей в Чикаго?
AS>http://ideone.com/j4y9Tk — 24
Лень смотреть, что ты не смог вставить?
auto, extern, static без объявления переменной заюзать вроде как нельзя.
Скорее всего не смог вставить ещё typedef, какие ещё 2?
AS>Ещё раз — не важно сколько слов ты напишешь, важно знаешь ли ты несколько базовых вещей относительно языка или нет. Что удивительно, многие так называемые программисты не знают.
Мне кажется, что всё это бред, базирующийся исключительно на возможности унижать экзаменуемого и только. Глупый грубый и малокорректный психологический тест, вообще не имеющий отношения непострдственно к навыкам.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
AS>#define TEXT >это должно быть здесь!<
AS>#include <stdio.h> AS>int main() {
AS> do TEXT while(0);
AS>} AS>[/ccode]
AS>Мой вариант содержит 23 ключевых слова. Кто больше?
Скобки не по фен-шую. No hire.
А если серьезно, то тут как в разговорных языках — энциклопедическое знание грамматики языка вовсе не гарантирует умения свободно общаться на оном языке.
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>>>Ещё раз — не важно сколько слов ты напишешь, важно знаешь ли ты несколько базовых вещей относительно языка или нет. Что удивительно, многие так называемые программисты не знают. L>>Большинство носителей английского языка не знают понятий present continous и past perfect, к примеру. Что не мешает им говорить на английском, ээээ, несравнимо лучше меня.
AS>Дык, незнание названий как то мешает им использовать данные конструкции?! Как и незнание стандарта тоже ни коем образом не мешает писать код любым удобным способом )))), а его знание часто на сей процесс вообще не влияет.
AS>КО?!
Вот вы сами и рассказали почему ваш тест не имеет смысла
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>Тестирую я совсем другое. Что именно я уже написал.
AS>Кстати, для журналиста хороший тест написать осмысленный рассказ из 100 несуществующих слов
Ах, вот оно в чем дело! А то я все понять не мог, почему нынче журналисты ниасиливают даже заголовок для своей новости без пяти несуществующих слов в неправильном порядке написать. Про "тся"-"ться" и прочие детские грамматические ошибки вообще молчу, а пунктуационные ошибки даже и упоминять не хочу. Их, оказывается, несуществующими словами тренируют. Все понятно.
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>[ccode] AS>/* AS> написать нечто с максимально возможным количеством ключевых слов так что бы: AS> * без повторений (каждое ключевое слово используется один раз) AS> * не используя фигурные скобки, AS> * выполнялась каждая инструкция (не было мёртвого кода). AS> * было одновременно верным для С и С++ AS> * компилировалось как в GCC так и в MSVC на любой допустимой платформе. AS> * при исполнении должно напечатать "hello!" и корректно завершиться. AS>*/
Это еще один тест на знание того, что такое триграфы, да?
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>очень хорошо показывает возможности человека в применении языка.
IMHO, ты пропустил два слова: "в извращениях"...
В целом, можешь попробовать сравнить, например, творчество Пушкина, и ребят, которые пишут рассказы на одну букву.
Как думаешь, кто из них лучше владеет языком?..
Кстати,
1) ты всякие там синонимы операторов, вроде or ключевыми словами считаешь?
2) ключевые слова препроцессора входят в целевое множество?
3) А можно ещё что-то писать, кроме текста в определении макроса?..
4) слова уже использованные в твоём примере нужно переиспользовать?
Ну и вообще, писать длинную конструкцию в одну строку -- антиэстетический геморр.
И вообще, сейчас рульным пацанам не до глупостей: http://ru-chgk.livejournal.com/996880.html
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
L>А если серьезно, то тут как в разговорных языках — энциклопедическое знание грамматики языка вовсе не гарантирует умения свободно общаться на оном языке.
Дык, в том то и дело, что для этой задачи не требуются энциклопедические знания, требуется умение использовать язык так как нужно здесь и сейчас. Соревнование кто больше напишет просто прикольный челендж. По сути дела этот тест бинарный.
AS>>А, ну и естественно в первую очередь, тест должен проверять умение читать и понимать прочитанное. Как показывает практика, этим навыком владеют очень небольшое количество программистов ))))) EP>Ты про условие задачи или про код? Или про всё?
Хотя бы про способность полностью прочитать текст задачи. ))) Про то чтобы дополнить его до некого наиболее разумного ТЗ, и уж тем более про умение читать код, я вообще даже не заикаюсь — это такая редкость .... Более того, последнее время я наблюдаю какое-то странное помутнение у людей, их сознание становится как будто собранное из лоскутков. Это иногда просто пугает, как будто с зомби общаешься.
Здравствуйте, Alexéy Sudachén, Вы писали:
L>>А если серьезно, то тут как в разговорных языках — энциклопедическое знание грамматики языка вовсе не гарантирует умения свободно общаться на оном языке.
AS>Дык, в том то и дело, что для этой задачи не требуются энциклопедические знания,
требуется знать, что есть "keyword", а что — нет, и помнить первых как можно больше.
AS>требуется умение использовать язык так как нужно здесь и сейчас. Соревнование кто больше напишет просто прикольный челендж. По сути дела этот тест бинарный.
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>а если соискатель отказался заниматься подобной ересью объяснив это тем что просто не хочет он сразу отправляется за ворота ?))
в ров с крокодилами, так как наверняка он даже не удосужился последовать совету открыть TC++PL
Здравствуйте, Erop, Вы писали:
E>Но в целом, IMHO, решение тривиально.
[...]
ну так а никто не говорил что сложно, хотя бы на название топика посмотри
E>Ну теперь можно надекларировать каких-то переменных типа указатель на что-то, и заюзать auto volatile register double int struct long enum char extern union const float short unsigned signed void wchar_t (если оно считается) и static с typedef до кучи.
Между говорить и делать — огромная разница, на MSVC C у тебя даже:
int main() {
do ; while(0); int i; do ; while(0);
}
On 10.04.2013 15:52, Alexéy Sudachén wrote:
> Э... ну это сильно зависит от работодателя. ))) К тому же я не думаю что > тебе стоит об этом беспокоиться, типичный работодатель предпочтёт > поиграться с гномиками.
Что в лоб, что по лбу. Что гномики, что подобный бред, не имеющий
никакого отношения к разработке программ.
V>Что в лоб, что по лбу. Что гномики, что подобный бред, не имеющий V>никакого отношения к разработке программ.
И что самое интересное, люди которые считают ниже своего достоинства писать тестовое задание, имеющее прямое отношение к разработке программ, и люди, считающие короткие интегральные тесты бредом — часто одни и те же люди )))) Наверное это так чисто случайно получается.
Здравствуйте, Alexéy Sudachén, Вы писали:
V>>Что в лоб, что по лбу. Что гномики, что подобный бред, не имеющий V>>никакого отношения к разработке программ. AS>И что самое интересное, люди которые считают ниже своего достоинства писать тестовое задание, имеющее прямое отношение к разработке программ, и люди, считающие короткие интегральные тесты бредом — часто одни и те же люди )))) Наверное это так чисто случайно получается.
AS>Ещё раз — не важно сколько слов ты напишешь, важно знаешь ли ты несколько базовых вещей относительно языка или нет. Что удивительно, многие так называемые программисты не знают.
Большинство носителей английского языка не знают понятий present continous и past perfect, к примеру. Что не мешает им говорить на английском, ээээ, несравнимо лучше меня.
V>З.Ы. Интересно, если журналист сможет составить предложение из 100 слов V>(в общем не несущее смысла) — это хороший журналист или плохой? Ты здесь V>тестируешь то же самое.
Тестирую я совсем другое. Что именно я уже написал.
Кстати, для журналиста хороший тест написать осмысленный рассказ из 100 несуществующих слов ))) Почему-то я сомневаюсь что ты это осилишь.
Здравствуйте, Alexéy Sudachén, Вы писали:
eqw>>Это еще один тест на знание того, что такое триграфы, да?
AS>Нет буквально то что написано. Какая разница как записаны скобки? Задача их не использовать.
Ну так по условию нельзя использовать скобки, а ??< можно.
eqw>>>Это еще один тест на знание того, что такое триграфы, да? AS>>Нет буквально то что написано. Какая разница как записаны скобки? Задача их не использовать. eqw>Ну так по условию нельзя использовать скобки, а ??< можно.
??< — это какая-то специальная лексема или всё-таки та же скобка, только иначе записанная?
Ок, для особо одарённых )))) уточняю — без использования фигурных скобок и триграфов!
Таки возвращаясь к задачке, сколько ты сможешь записать ключевых слов?
Здравствуйте, Alexéy Sudachén, Вы писали:
eqw>>>>Это еще один тест на знание того, что такое триграфы, да? AS>>>Нет буквально то что написано. Какая разница как записаны скобки? Задача их не использовать. eqw>>Ну так по условию нельзя использовать скобки, а ??< можно.
AS>??< — это какая-то специальная лексема или всё-таки та же скобка, только иначе записанная? AS>Ок, для особо одарённых )))) уточняю — без использования фигурных скобок и триграфов!
AS>Таки возвращаясь к задачке, сколько ты сможешь записать ключевых слов?
Сходу штук 10, дальше думать лень
#include <stdio.h>
int main() {
do x: if( printf("Hello!") < 0 ) goto x; else switch(1) case 1: return !!sizeof(unsigned int); while(0);
}
Здравствуйте, eqw, Вы писали:
eqw>Здравствуйте, Alexéy Sudachén, Вы писали:
eqw>>>>>Это еще один тест на знание того, что такое триграфы, да? AS>>>>Нет буквально то что написано. Какая разница как записаны скобки? Задача их не использовать. eqw>>>Ну так по условию нельзя использовать скобки, а ??< можно.
AS>>??< — это какая-то специальная лексема или всё-таки та же скобка, только иначе записанная? AS>>Ок, для особо одарённых )))) уточняю — без использования фигурных скобок и триграфов!
AS>>Таки возвращаясь к задачке, сколько ты сможешь записать ключевых слов?
eqw>Сходу штук 10, дальше думать лень
eqw>
Здравствуйте, Alexéy Sudachén, Вы писали:
EP>>gcc, g++, msvc c, msvc c++ компилируют — куда отсылать(чтобы не спойлерить)? (на ideone таймштампы поставил) AS>Аналогично. Предлагаю подождать сутки, потом сюда. А вот число можно сразу говорить, чтобы желающим написать свой вариант было на что ориентироваться.
AS>Последнее время было много споров о том надо ли писать код на бумажке и можно ли за пять минут написать простенький алгоритм. Вот вам вопрос просто на знание языка, для черкания на бумажке, на пять минут ... И отмазки уже не слепишь ))) Либо написал что нить, либо нет.
AS>
AS>/*
AS> написать нечто с максимально возможным количеством ключевых слов так что бы:
AS> * без повторений (каждое ключевое слово используется один раз)
AS> * не используя фигурные скобки,
AS> * выполнялась каждая инструкция (не было мёртвого кода).
AS> * было одновременно верным для С и С++
AS> * компилировалось как в GCC так и в MSVC на любой допустимой платформе.
AS> * при исполнении должно напечатать "hello!" и корректно завершиться.
AS>*/
AS>#define TEXT >это должно быть здесь!<
AS>#include <stdio.h>
AS>int main() {
AS> do TEXT while(0);
AS>}
AS>
AS>Мой вариант содержит 23 ключевых слова. Кто больше?
Ты, что думаешь, что ты самый умный? Да хоть 123. Может тебе сертификат выдать еще?
AS>Последнее время было много споров о том надо ли писать код на бумажке и можно ли за пять минут написать простенький алгоритм. Вот вам вопрос просто на знание языка, для черкания на бумажке, на пять минут ... И отмазки уже не слепишь ))) Либо написал что нить, либо нет.
... AS>Мой вариант содержит 23 ключевых слова. Кто больше?
А goto у Вас отрицательный весовой коэффициент имеет?
E>IMHO, ты пропустил два слова: "в извращениях"...
Нет не пропустил. Тесты в серой зоне хороши тем что быстро позволяют оценить способность человека решать задачу в жёстких рамках условий и за рамками стереотипа. Причём проверяет даже не сколько технику решения, сколько психологическую готовность к тому чтобы переступить через правила, кои на самом деле весьма условны.
E>В целом, можешь попробовать сравнить, например, творчество Пушкина, и ребят, которые пишут рассказы на одну букву. E>Как думаешь, кто из них лучше владеет языком?..
Ты хочешь сказать что Пушкин не 'извращался' над языком? ))) Уверен? Естественно что прохождение теста, под которым понимается просто готовность написать хоть что-то, не показывает что человек знает язык лучше всех, но человек написавший пример с количеством слов больше десятки определённо умеет им пользоваться, и очевидно способен решать нетиповые задачи.
E>1) ты всякие там синонимы операторов, вроде or ключевыми словами считаешь?
Разве в С есть синонимы операторов?! Там вроде явно написано условие что код должен быть одновременно верным для С и С++.
E>2) ключевые слова препроцессора входят в целевое множество?
О! Ты можешь загнать в этот макрос ключевые слова препроцессора? Хотя если ты имеешь в виду __LINE__ и __FILE__ — то конечно вопрос хороший. ))) Попробуй, почему бы и нет.
E>3) А можно ещё что-то писать, кроме текста в определении макроса?..
нет
E>4) слова уже использованные в твоём примере нужно переиспользовать?
да
E>Ну и вообще, писать длинную конструкцию в одну строку -- антиэстетический геморр.
AS>>Мой вариант содержит 23 ключевых слова. Кто больше? A>Ты, что думаешь, что ты самый умный? Да хоть 123. Может тебе сертификат выдать еще?
123 не получится.
На тему остального ... если забить на нарушение правил (кого это здесь беспокоит), давай просто достанем и сравним? Я так вижу что по увлечениям для тебя это актуально (http://code.google.com/p/xxxdb/), компенсируешь количеством? )))
Я смотрю тут народ уже бунтует.
Дабы сбавить градус агрессии к ТС, напомню, что в TC++PL (а ведь здесь все её читали, правда?), есть следующее упражнение:
(*2) Write a standardsconforming C++ program containing a sequence of at least ten consecutive keywords not separated by identifiers, operators, punctuation characters, etc.
K>Кстати да, отличная мысль про функцию Правда struct и enum не проходят ни в студии ни в гсс. K>Сделал такое, 22 слова
Хинт — использовать struct* и union* в приведении типа. Однако в условии задачи есть один очень неприятный пункт — выполнялась каждая инструкция (не было мёртвого кода) У тебя не выполняются if(0) и while(0).
EP>(*2) Write a standardsconforming C++ program containing a sequence of at least ten consecutive keywords not separated by identifiers, operators, punctuation characters, etc.
EP>
Угу, именно от это и было отправной точкой. ))) Но была задача сделать простой и быстрый тест с множеством решений, демонстрирующий владение синтаксисом и понимание флоу, а так же заставляющий нарушать общепринятые нормы.
Используя идею koenjihyakkei по поводу register (я не знал что его можно использовать в параметрах) — получилось 25 keywords.
AS>Хинт — использовать struct* и union* в приведении типа.
у меня пока без них
AS>Однако в условии задачи есть один очень неприятный пункт — выполнялась каждая инструкция (не было мёртвого кода) У тебя не выполняются if(0) и while(0).
А что на счёт того while(0) который в main? Просто у меня две версии — в одной он не выполняется, в другой выполняется (количество keywords такое же, но получается сложнее).
AS>Угу, именно от это и было отправной точкой. ))) Но была задача сделать простой и быстрый тест с множеством решений, демонстрирующий владение синтаксисом и понимание флоу, а так же заставляющий нарушать общепринятые нормы.
А, ну и естественно в первую очередь, тест должен проверять умение читать и понимать прочитанное. Как показывает практика, этим навыком владеют очень небольшое количество программистов )))))
EP>А что на счёт того while(0) который в main? Просто у меня две версии — в одной он не выполняется, в другой выполняется (количество keywords такое же, но получается сложнее).
Считается только то что подставляется вместо TEXT. do while(0) — просто ограничитель для понимание того что же требуется.
Здравствуйте, Alexéy Sudachén, Вы писали:
EP>>А что на счёт того while(0) который в main? Просто у меня две версии — в одной он не выполняется, в другой выполняется (количество keywords такое же, но получается сложнее). AS>Считается только то что подставляется вместо TEXT. do while(0) — просто ограничитель для понимание того что же требуется.
Ну да ладно, с ограничением на отсутствие мёртвого while в main получается привольней.
Добавил struct по твоему хинту — получилось 26, union пока нет.
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>А, ну и естественно в первую очередь, тест должен проверять умение читать и понимать прочитанное. Как показывает практика, этим навыком владеют очень небольшое количество программистов )))))
Он быстро покажет имеет ли смысл говорить дальше. Очевидно, что если испытуемый "встанет на рога", то смысла нет. ))))
BFE>Мёртвый код — это код, который выполняется, но результаты которого не используются. здесь
Ровно от туда же — Применительно к исходному коду, недостижимый код часто называют мёртвым, хотя с точки зрения теории компиляторов это разные вещи.
BFE>Что такое "допустимая платформа?"
Предположи. Или ты считаешь что программист это автомат по набивке исходного кода?
AS>> * при исполнении должно напечатать "hello!" и корректно завершиться. BFE>Ага, ага. Вы в самом деле ищите людей, которые пишут код, который потом никто прочитать не может?
Я никого не ищу. Более того, ничего и ни от кого не требую, и даже не ожидаю. Иногда мне просто прикольно наблюдать за фонтанирующим возмущением адептов религии Бабла и секты последователей Единственно Верного Способа Писать Код.
BFE>нигде не сказано, что ключевые слова должны "исполнятся".
Ну, дык, молодец! А теперь с тем же результатом и чтобы ключевые слова были в исполняемом коде.
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>Нет не пропустил. Тесты в серой зоне хороши тем что быстро позволяют оценить способность человека решать задачу в жёстких рамках условий и за рамками стереотипа. Причём проверяет даже не сколько технику решения, сколько психологическую готовность к тому чтобы переступить через правила, кои на самом деле весьма условны.
Зачем это вообще нужно? Обычно перед программистами сттоят совсем другие задачи.
КОнкретно эта, IMHO, довольно скучная, кстати.
AS>Ты хочешь сказать что Пушкин не 'извращался' над языком? ))) Уверен?
Я хочу сказать, что умение извращаться мало связанно с владением языком...
AS>Естественно что прохождение теста, под которым понимается просто готовность написать хоть что-то, не показывает что человек знает язык лучше всех, но человек написавший пример с количеством слов больше десятки определённо умеет им пользоваться, и очевидно способен решать нетиповые задачи.
Можешь привести пример нетиповой задачи, которую такой перец "определённо умеет решать"? Только чур, задача должна быть полезна на практике
AS>Разве в С есть синонимы операторов?! Там вроде явно написано условие что код должен быть одновременно верным для С и С++.
В С есть макросы.
E>>2) ключевые слова препроцессора входят в целевое множество?
AS>О! Ты можешь загнать в этот макрос ключевые слова препроцессора? Хотя если ты имеешь в виду __LINE__ и __FILE__ — то конечно вопрос хороший. ))) Попробуй, почему бы и нет.
Ну, то есть входят? Кстати, а если я напишу так, что в одном языке это будет ключевое слово, а в другом идентификатор, то это можно?
Ещё можно, например, породить идентефикатор pragma или warning. Это будет считаться а ключевое слово, или нет?
E>>3) А можно ещё что-то писать, кроме текста в определении макроса?..
AS>нет
Так совсем неинтересно.
E>>4) слова уже использованные в твоём примере нужно переиспользовать?
AS>да
E>>Ну и вообще, писать длинную конструкцию в одну строку -- антиэстетический геморр.
AS>кто-то мешает написать не в одну строчку?
макросня.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>Однако в условии задачи есть один очень неприятный пункт — выполнялась каждая инструкция (не было мёртвого кода) У тебя не выполняются if(0) и while(0).
Ну а как сделать, чтобы выполнялось и if, и else? По-моему, не совсем корректный пункт в задании.
Вот, получилось 25:
#include <stdio.h>
int main() {
for(;printf("hello");)
switch(0)
if((struct foo*)1 == (enum foo1*)1 )
case 0:
do goto l; while((union bar*)1);
else
l:
default:
return sizeof(void(*)(volatile signed int, unsigned long, register char, short, float, double ));
}
AS>Аналогично. Предлагаю подождать сутки, потом сюда.
Разные версии: 24 — выполняется всё, кроме while(0) в main (ТС говорит что это не обязательно)
#include <stdio.h>
int main() {
do
;
while(0&&(char)(signed)(int)(short)(unsigned)(float)(const volatile long double)(0));
goto KEYWORD;
for(;;)
if(sizeof(void*))
break;
else KEYWORD:
continue;
switch(0) case 0: default: printf("hello!");
do return 0;
while(0);
}
24 — выполняется всё, включая while(0) в main. recursion+state
#include <stdio.h>
int main() {
do
;
while(0&&(char)(signed)(int)(short)(unsigned)(float)(const volatile long double)(0));
goto KEYWORD;
for(;fclose(stderr)==0;)
KEYWORD: continue;
switch(0) case 0: default: break;
fclose(stdin) == 0 ? printf("hello!") : 0;
do
if(sizeof(void*) && fclose(stdout)!=0)
return 0;
else
main();
while(0);
}
26 — использовал две подсказки из топика — добавлен struct и register, причём если даже теоретически я бы смог догадаться использовать struct, то до resgister — вряд ли, так как не знал что его можно вешать на параметр функции.
#include <stdio.h>
int main() {
do
;
while((int)(struct tm *)(char)(signed)(unsigned)(float)(const volatile long double)(0)|0);
goto KEYWORD;
for(;fclose(stderr)==0;)
KEYWORD: continue;
switch(0) case 0: default: break;
fclose(stdin) == 0 ? printf("hello!") : 0;
do
if(sizeof(void(*)(register short)) && fclose(stdout)!=0)
return 0;
else
main();
while(0);
}
+ исправлен небольшой косяк с short-circut evluation в условии if.
Блин, а я думал, что нельзя было просто последовательно инструкции писать, думал для этого ТС и обернул все в do while()... А так то конечно можно развернуться
Здравствуйте, koenjihyakkei, Вы писали:
K>Блин, а я думал, что нельзя было просто последовательно инструкции писать, думал для этого ТС и обернул все в do while()... А так то конечно можно развернуться
Я такого ограничения не увидел, поэтому даже не пытался
On 10.04.2013 10:54, jyuyjiyuijyu wrote:
> а если соискатель отказался заниматься подобной ересью объяснив это тем > что просто не хочет он сразу отправляется за ворота ?))
И это самое лучшее для соискателя, ибо почти гарантировано ему потом и
придется заниматься подобной ересью.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>есть следующее упражнение: EP>
EP>(*2) Write a standardsconforming C++ program containing a sequence of at least ten consecutive keywords not separated by identifiers, operators, punctuation characters, etc.
EP>
А там утверждают, что кто не смогёт, тот не программист, а кодер?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Alexéy Sudachén, Вы писали:
AS>О! Ты можешь загнать в этот макрос ключевые слова препроцессора? Хотя если ты имеешь в виду __LINE__ и __FILE__ — то конечно вопрос хороший. ))) Попробуй, почему бы и нет.
E>>4) слова уже использованные в твоём примере нужно переиспользовать?
AS>да
Собственно не понятно чего так мало слов-то использовали?
Казалось бы, ты задал рамки:
1) влезть в конструкцию do ... while (0)
2) Не юзать скобки.
Ну и ещё всякую ерунду, типа не повторять там слова и с/с++ одновременно...
Кстати, у меня ещё вопрос, а код, который в одном языке исполняется, а в другом нет считается мёртвым?..
Но в целом, IMHO, решение тривиально.
1) В начало нашего решения суём ;while( 0 );
в конец do;
Теперь у нас уже ДВА цикла и всё ещё без повторов слов. Для красоты можно ещё в один сунуть в тело break, а в другой затолкать return, что бы do сам по себе не был мёртвым.
Ну теперь можно надекларировать каких-то переменных типа указатель на что-то, и заюзать auto volatile register double int struct long enum char extern union const float short unsigned signed void wchar_t (если оно считается) и static с typedef до кучи. А именам переменных придать имена вроде define, pragma ifdef и т. д...
Я так и не понял, что значит "с максимально возможным количеством ключевых слов". В чстности, переменная с именем ifdef -- это оно или нет?
Ну дальше у нас остались ещё if else goto for switch case default retuen-- их использовать как раз тривиально причём сразу все...
Ещё, до кучи можжно в часть с описанием переменных затолкать вские слова вроде __LINE__, а потом сложить например, sizeof всех этих переменных и использовать это значение в условии for или if.
Немного не понятно всё ли там срастётся, на тему отсутствия повторов, и отсутсвия мёртвого кода. Но есть такое чувство, что если погемороиться немного с тасовкойй кода, то всё получится...
Итого имеем ТРИВИАЛЬНОЕ решение, в котором будет заюзано от 30 до 40 (в зависимости от методики подсчёта) ключевых слова...
И на этом фоне выходит некто, и начинает нам втирать, что у него аж целых 23!
Ты уже готов скушать свою шляпу?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Alexéy Sudachén, Вы писали:
E>Итого имеем ТРИВИАЛЬНОЕ решение, в котором будет заюзано от 30 до 40 (в зависимости от методики подсчёта) ключевых слова...
E>И на этом фоне выходит некто, и начинает нам втирать, что у него аж целых 23! E>Ты уже готов скушать свою шляпу?
Ну, если взять только исходную задачу, и считать что код нужно помещать внутрь #define, и нельзя использовать слова уже использованные в задаче, то получается чуть-чуть поменьше, типа: http://liveworkspace.org/code/3tvGon$99 (не претендую на рекорд, просто пример)
Но в одном автор безусловно не прав, что позиционирует данное упражнение как тест на проф-пригодность, а не как разминку для мозга.
Здравствуйте, koenjihyakkei, Вы писали:
K>Все-таки сдается мне, что такой хак не подразумевался, с ним действительно все тривиально, но вот без него...
Я как бы ответ на заданный вопрос предложил, а не результат применеия телепатии...
Кроме того тут автор вопроса много гнул пальцов на тему того, что де он такой и сякой тестит умение читать вопросы и выходить за рамки...
IMHO, всё оказалось пуком в лужу. Как этюд ещё ничего, но очень скучно, если честно, а как мега-супер-пупер-тест вообще смешно
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, saf_e, Вы писали:
_>Ну, если взять только исходную задачу, и считать что код нужно помещать внутрь #define,
То, что я указал в своём плвне решения можно затолкать в #drfine
_>и нельзя использовать слова уже использованные в задаче,
Я уточнил у автора. Он сказал, что можно...
_>то получается чуть-чуть поменьше, типа: http://liveworkspace.org/code/3tvGon$99 (не претендую на рекорд, просто пример)
Ну типа всё равно 23 -- очень мало.
В целом трудно заюзать всего-то несколько слов. auto extern и static c typedef...
_>Но в одном автор безусловно не прав, что позиционирует данное упражнение как тест на проф-пригодность, а не как разминку для мозга.
+100500!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, koenjihyakkei, Вы писали:
K>Здравствуйте, saf_e, Вы писали:
_>>for(auto i = 0;
K>Мимо С89 однако
можно внутрь do ... while засунуть...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, koenjihyakkei, Вы писали:
K>Это как? В С89, по-моему, объявление переменной позволяется только в начале блока, а блок начинается с '{'.
MSVC, заявленная в вопросе, вроде как кушает...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
J>а если соискатель отказался заниматься подобной ересью объяснив это тем что просто не хочет он сразу отправляется за ворота ?))
Э... ну это сильно зависит от работодателя. ))) К тому же я не думаю что тебе стоит об этом беспокоиться, типичный работодатель предпочтёт поиграться с гномиками.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>ну так а никто не говорил что сложно, хотя бы на название топика посмотри
Ну, как бы уровень амбиций не соответствует уровню амуниции слишком явно...
E>>Ну теперь можно надекларировать каких-то переменных типа указатель на что-то, и заюзать auto volatile register double int struct long enum char extern union const float short unsigned signed void wchar_t (если оно считается) и static с typedef до кучи.
EP>Между говорить и делать — огромная разница, на MSVC C у тебя даже: EP>
EP>int main() {
EP> do ; while(0); int i; do ; while(0);
EP>}
EP>
EP>не скомпилируется
Ну охота же некропрограммизмом страдать. С99 ужо 15 лет скоро...
В общем всё просто же. Если определять новые переменные нельзя, то вылетят ключевые слова static и extern. Ну и фиг с нимим, хотя, IMHO, это делает твой тест ещё более уродским, так как все слова использовать нальзя...
А остальное всё равно тривиально.
Ты лучше не темни, и скажи какие слова у тебя не вошли в 23 заветные?
Ты чето всунуть-то не смог?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Ну охота же некропрограммизмом страдать. С99 ужо 15 лет скоро...
Ты это MS выскажи, когда придётся C99/C11 либу MSVC компилировать.
E>В общем всё просто же. Если определять новые переменные нельзя, то вылетят ключевые слова static и extern. Ну и фиг с нимим, хотя, IMHO, это делает твой тест ещё более уродским, так как все слова использовать нальзя...
On 10.04.2013 16:09, Alexéy Sudachén wrote:
> И что самое интересное, люди которые считают ниже своего достоинства > писать тестовое задание, имеющее прямое отношение к разработке программ, > и люди, считающие короткие интегральные тесты бредом — часто одни и те > же люди )))) Наверное это так чисто случайно получается.
Ничего не понял, что ты сказать хотел. Это плохо, когда к вам на
собеседование приходят люди, имеющие прямое отношение к разработке
программ или хорошо?
З.Ы. Интересно, если журналист сможет составить предложение из 100 слов
(в общем не несущее смысла) — это хороший журналист или плохой? Ты здесь
тестируешь то же самое.
On 10.04.2013 16:37, Evgeny.Panasyuk wrote:
> И конечно же совсем чисто случайно это не просто люди которые не хотят > делать тестовое задание <http://rsdn.ru/forum/job/5078096.1>
Здравствуйте, Alexéy Sudachén, Вы писали:
BFE>>нигде не сказано, что ключевые слова должны "исполнятся". AS>Ну, дык, молодец! А теперь с тем же результатом и чтобы ключевые слова были в исполняемом коде.
Я не пишу на С, а на С++ задача не имеет смысла, так как:
1 New context-dependent keywords are introduced into a program by typedef (7.1.3), namespace (7.3.1),
class (clause 9), enumeration (7.2), and template (clause 14) declarations.
AS>>Ещё раз — не важно сколько слов ты напишешь, важно знаешь ли ты несколько базовых вещей относительно языка или нет. Что удивительно, многие так называемые программисты не знают. L>Большинство носителей английского языка не знают понятий present continous и past perfect, к примеру. Что не мешает им говорить на английском, ээээ, несравнимо лучше меня.
Дык, незнание названий как то мешает им использовать данные конструкции?! Как и незнание стандарта тоже ни коем образом не мешает писать код любым удобным способом )))), а его знание часто на сей процесс вообще не влияет.
L>>>Большинство носителей английского языка не знают понятий present continous и past perfect, к примеру. Что не мешает им говорить на английском, ээээ, несравнимо лучше меня. AS>>Дык, незнание названий как то мешает им использовать данные конструкции?! Как и незнание стандарта тоже ни коем образом не мешает писать код любым удобным способом )))), а его знание часто на сей процесс вообще не влияет. _>Вот вы сами и рассказали почему ваш тест не имеет смысла
Классно, можно развернуть цепочку логических рассуждений, а то именно это как-то не очевидно )))
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Ты это MS выскажи, когда придётся C99/C11 либу MSVC компилировать.
Я очень надеюсь, что говнокод из этого этюда мне в продакшине никогда не встретится...
E>>В общем всё просто же. Если определять новые переменные нельзя, то вылетят ключевые слова static и extern. Ну и фиг с нимим, хотя, IMHO, это делает твой тест ещё более уродским, так как все слова использовать нальзя...
EP>Ээ, это не мой тест.
А, прошу прощения. Имелся в виду автор и те, кто согласны с сабжем...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
On 10.04.2013 17:09, Alexéy Sudachén wrote:
> Кстати, для журналиста хороший тест написать осмысленный рассказ из 100 > несуществующих слов ))) Почему-то я сомневаюсь что ты это осилишь.
100%, причем даже делать не буду, впрочем как и остальные всевозможные
странные глупости.
З.Ы. Я понимаю, что люди есть разные, некоторые и под поезда кидаются,
если им предложат кинуться, но ко мне оное не относится.
On 10.04.2013 17:20, Erop wrote:
> Я очень надеюсь, что говнокод из этого этюда мне в продакшине никогда не > встретится...
Ты сильно оптимистичен, а мир тесен.