- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
.
Т Е С Т
К А К О Й В Ы П Р О Г Р А М М И С Т ?
Источник: Datamation, march, 1977
Norman Grabowsky "What kind of programmer are you?"
Этот тест расскажет о вашем программировании больше, чем вы сами
хотели бы знать.
Переменная I представляет собой полное слово с фиксированной
точкой. I принимает значения 1 либо 2. Если I оказалось равным 1,
замените его на 2 и наоборот.
Сравните ваше решение с десятью предложенными. Найдите одно или
несколько наиболее похожих на ваше и прочитайте в разделе "категории"
краткую характеристику. Вы можете кодировать на любом языке, но для
сравнения предпочтительнее всего использовать PL/1.
Р е ш е н и я.
1. IF I='2' THEN I=1;
ELSE I=2;
2. IF I=2 THEN I=1;
IF I=1 THEN I=2;
3. IF I=1 THEN GOTO SKIP;
I=1;
GOTO DONE;
SKIP: I=2;
DONE:
4. J=2;
IF I=2 THEN J=1;
I=J;
5. DECLARE SWITCH LABEL;
. . .
IF I=1 THEN SWITCH=ONE;
IF I=2 THEN SWITCH=TWO;
GOTO SWITCH;
ONE: I=2;
GOTO DONE;
TWO: I=1;
DONE:
6. DECLARE ONETWO(2) FIXED BIN(31) INIT (2,1);
. . .
I=ONETWO(I);
7. I=3-I;
8. I=I-(I/2*2)+1;
9. IF I=2
THEN DO;
I=1;
END;
ELSE DO;
I=2;
END;
10. IF I=1 THEN I=2;
IF I^=2 THEN DO;
PUT LIST('ПЛOXOE I - ЗAMEHEHO HA 1');
I=1;
END;
11. Крестоблядь
Зачем? В условии не сказано, что делать для других чисел. Поэтому будем считать, что поведение программы не определено.
Явно писать в условии, что «I принимает значения 1 либо 2», а потом ругать решения за то, что они не проверяют другие числа — долбоебизм.
Какой тест )))
> Преподаватель программирования.
> Это решение хуже предыдущего. Много ли, однако, обучающих программированию сами написали и отладили хотя бы одну программу?
Там просто ТЗ нечеткое. Написано:
> Переменная I представляет собой полное слово с фиксированной точкой. I принимает значения 1 либо 2. Если I оказалось равным 1, замените его на 2 и наоборот.
Что значит "наоборот"? Может "наоборот" значит что можно вообще ничего не заменять и оставить всё как есть, если I оказалось не равным 1?
0x02 - start bit, write 1 to start operation
А для определения кастов есть простенькое правило: если происходит какая-то ёбанная магия, то это точно «reinterpret_cast».
Unsurprising behavior, лол.
Чувствую, какой-то подвох из-за недостижимости.
То ли дело python, где всё честно
-fno-common-sense (default)
Какого хера?
[I]
-0
Я копирую в консольку хрома даже из исходного кода страницы, а там сначала
а потом
P.S. "потом" происходит после того, как я вручную удаляю символы, т.к. умею считать только до трёх, и длина 8 мне не говорит о том, есть ли дополнительный символ, или нет.
Теперь всё ясно. 8 и 3 вместо 9 и 4 - из-за того, что ноль сам специальный, и нет подвохов с утерей спецушни.
А вот мой ноль обычный, поэтому психоза вокруг него присутствует и копируется.
> '[•I]'
< '[I]'
[i] [i] [I]
кАКОЙ ПИТУХ )))
Реально табличное решение — это вореции п.6.
>>> но опять-таки встает проблема: как же в нем разобраться?
Чот какая-то питушня.
Это тупо "вычли I из 3 и присвоили в I" - хуй знает что это и зачем это надо
Я о вас был лучшего мнения. Это же классическая битушня.
К тому же вычитание — слишком дорогая операция.
А сумматоры нынче в цене.
I^=3;
Ну да, распространение переноса совсем не бесплатное. А у xor'а все биты параллелятся.
Стоило бы было бы проверить домен там, где данные приходят от питользователя или апитушка, а в отдельную функцию вынести только бизнес-логику и assert.
У вас баг
Что ж это за такая особая арифметика, где она применяется?
Для отладки редко проявляющихся багов создаются переменные такого типа.
>гётигп агг[i-l]
Чем обычное З^I не зашло?
Это слишком частное решение. Завтра заказчик может поменять ТЗ и захотеть чтоб если i равно 3 то тогда менялось на 7, если i равно 2 то тогда менялось на 5, если i равно 1 то тогда менялось на 100500 - тогда весь код с xor-ом надо будет полностью выкинуть, а в моем решении придется лишь слегка поменять правило в ассерте и изменить таблицу поиска.
>Завтра заказчик может поменять ТЗ и захотеть чтоб если i равно 3 то тогда менялось на "3" , если i равно 2 то тогда менялось на белочку, если i равно 1 то тогда менялось на 7 красных линий, некоторые нужно нарисовать зеленым цветом, а еще некоторые — прозрачным.
>Тогда весь код с таблицей надо будет полностью выкинуть
Ну тут же очевидно. Надо тогда таблицу заменить на массив из указателей на функции, вторая функция меняет на "3", первая меняет на белочку, нулевая меняет на 7 красных линий, некоторые нужно нарисовать зеленым цветом, а еще некоторые — прозрачным. Так что код с таблицей надо будет только слегка поменять
Оверхедная питушня.
Пример: расширить программу чтобы нечетные значения удваивались, а чётные декрементились.
Решение с таблицей лажает.
Подгадывать, под то что «завтра захочет заказчик» — безблагодатно. Нужно выбирать простейшее решение.
Но все решения, признаться — скучное говно, без фантазии.
Потому я представляю вам:https://ideone.com/gl49UO
https://ideone.com/YqhFTa
Не зря он меня ещё в универе от него страшно тошнило.
В отличие от Сишки и асма, которые ещё тогда мне нравились.
https://ideone.com/mtmPPq
Если ещё увижу пассаль-сектанта, блеющего об охуенно развитой типизации этой дырявой вербозной недосишки, мгновенно солью мразотное животное.
https://ideone.com/hJUQXe
На строчке, где должно вывести 3, падает с ошибкой 201.
Режим $R+ не стали включать по умолчанию из-за сишников, которые ноют, что проверки снижают пирфоманс.
Либо через несколько итераций сводит большинство входных значений I к искомым 1 и 2.
PS. Хотя блин, похоже на случай №8.
Циклический сдвиг влево (на самом деле похрен куда, учитывая что два бита всего)
I = (2 << 1) | (2 >> (2 - 1)) = 4 | 1 = 5
Хуйня какая-то. Надо &3 добавить, наверное.
Не проще ли тогда сделать
error: cannot bind bitfield 'I.main()::<unnamed union>::s.main()::<unnamed union>::<unnamed struct>::a' to 'unsigned int&'
Крестоговно опять обосралось
Боже Царя храни!
Поэтому я за Си