powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
25 сообщений из 111, страница 2 из 5
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679172
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, я ведь по-моему могу побитовые исключающие или ставить в любом порядке, результат не изменится ? Так ведь ? Значит это выражение можно упростить !
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679173
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или нельзя..тогда всё в нулях будет. Слишком просто. Видимо я неправильно понимаю эту строчку. Подскажите пожалуйста
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679180
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего, такой код

Код: plaintext
1.
2.
3.
4.
	int x = 100;
	int y = 21;
	x ^= y ^= x ^= y;
	printf("%i %i \n", x, y);



будет менять местами значения любых двух элементов, этакий swap. А почему ? Не очень понимаю очередность действий в данном случае
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679181
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
int x = 100;
	int y = 21;
	x ^= y ^= x ^= y;
	printf("%i %i \n", x, y);



Я кажется понял!! Код нужно читать с конца, для этой строки:
1. x set x^y//new_x
2. y set y^new_x=y^x^y=x//new_y
3. x set new_x^new_y//x^y^y^x^y=x^y^x=y//new_x

раскладка тупит на клавиатуре.

Так ??А почему так ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679186
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем программа выводит числа змейкой :) Ниже исправленный код программы в первом приближение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
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.
#include <stdlib.h>
#include <stdio.h>

int a[900];
int b;
int c;
int d = 1;
int e = 1;
int f;
int g;
int h;
int O;

int tr(int x, int y)
{
	return (x << 5 | y);
}


int main(int k, char** l)
{
	//считываем в второй параметр из строки аргументов
	g = atoi(*++l); 		
	//k = sqrt(g) в большую сторону. b=(k-1-(k-1)%2)/2 
	for (k = 0; k*k< g; k++);//количество столбцов
	b = (k - 1) >> 1;

	(g>(k - 1)*k) ? h = k : h = k - 1;//количество строк
	c = (h - 1) >> 1;
	
        //Заполняем массив
	while (d <= g)
	{
		++O;
		for (f = 0; f < O && d <= g; ++f)
		{
			a[tr(b, c)] = d++;
			b += e;
		}
		for (f = 0; f < O && d <= g; ++f)
		{
			a[tr(b,c)] = d++;
			c += e;
		}
		e = -e;
	}


	for (c = 0; c<h; ++c)
	{
		for (b = 0; b<k; ++b)
		{
			if (b < k / 2)
			{
				//Зеркальное отражение левой и правой половины
				int temp = a[tr(k - (b + 1), c)];
				a[tr(k - (b + 1), c)] = a[tr(b, c)];
				a[tr(b, c)] = temp;
			}
			printf(a[b << 5 | c] ? "%-4d" : "    ", a[b <<5|c]);
		}
		putc('\n',stdout);
	}
}
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679188
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryТак ??А почему так ?Потому, что "исключающее или": (x XOR y) XOR y == x при любом y.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679189
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПотому, что "исключающее или": (x XOR y) XOR y == x при любом y.

Это очевидно.

Вопрос был:
SSЯ кажется понял!! Код нужно читать с конца, для этой строки:
1. x set x^y//new_x
2. y set y^new_x=y^x^y=x//new_y
3. x set new_x^new_y//x^y^y^x^y=x^y^x=y//new

Так ??А почему так ?

Разбор строки я начал с конца, я не уверен что это так в данном конкретном случае, потому и спрашиваю, так ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679526
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРефакторинг первых строк в первом приближении,


Пока те замены что я предлагаю верны ?

Я не знаю, верны ли замены, не смотрел, но ты должен учитывать и то, что в таких программах немаловажным является эстетический эффект (или антиэффект), который возникает у читателя при чтении текста программы. Этот эффект твои "рефакторинги" могут нарушить.

Т.е. я это к тому, что там именно так было, возможно, написано именно для внешнего эффекта. А ты всё сломал.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679546
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саша, ты ГЛУБОКО НЕПРАВ.

авторесли человек будет ориентироваться в таком коде, то насколько легко ему будет читать обычный код, находить в нём ошибки ?


Такой код никто никогда не напишет в боевых условиях.


авторПрекрасная разминка для головы.

Т.е. тебе голову больше нечем занять...
Ну, изучай С++, GoF, UML, -- полезнее будет в 1000 раз.

авторКод, чужой, разный, хороший, плохой, читать нужно.


Это --очень специальный вид кода, чтение которого может принести только ограниченную пользу и специфическое наслаждение.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679899
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРазбор строки я начал с конца, я не уверен что это так в данном конкретном случае, потому и спрашиваю, так ? ассоциативность операции присваивания .
Это если учебники/справочники не читать.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680404
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учебники читаю вроде. Только я почему-то искал операцию ^=. В том же K&R в таблице на странице 55
K&R= += -= ETC. RIGHTTOLEFT

А, я на "ETC" не обратил внимание. Теперь понятно

Re: Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
MasterZiv Ну, изучай С++, GoF, UML, -- полезнее будет в 1000 раз
Сделаю что-нибудь интересное на Си, и начну С++
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680405
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я бы я не разобрал бы этот пример, разве узнал бы я такой красивой конструкции для свопа:

Код: plaintext
1.
x ^= y ^= x ^= y;



Ну разве она не красивая ?;)
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680406
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И она, кстати, выполняется также за три действия, и может быть даже быстрее чем классика:
Код: plaintext
1.
2.
3.
4.
5.
6.
void swap(int* a,int* b)
{
   int t=*a;
   *a=*b;
   *b=t;
}
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680409
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНу разве она не красивая ?;)красивая, но бессмысленная, инты обменивать редко когда требуется, да и читается плохо, по этой же причине. Редко - читай никогда ))
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680411
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСделаю что-нибудь интересное на Си, и начну С++
Напишите парсер С.
Заодно и С выучите :)
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680441
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryСделаю что-нибудь интересное на Си, и начну С++
Напишите парсер С.
Заодно и С выучите :)
Хорошая идея кстати. Одна из моих первых поделок на Си была прога по форматированию кода. Очень помогала в поиске непарных скобок.

SashaMercury, попробуй написать парсер, который превратит фарш из первого поста в более читаемый код с отступами, пробелами после разделителей и знаков и т.п. Т.е. прогу которая из 16209640 сделает 16209666 .
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680446
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, Dima T
Спасибо за советы C:
Если честно, я сам об этом подсознательно думал. Вчера перед сном. Но я не был уверен что стоит, но раз вы оба советуете, то и правда стоит.
Сначала я сделаю то что предложил Дмитрий, а затем то что предложил Anatoly Moskovsky.

ps Только добью restrict и fopen, и начну.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680845
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Я если чо пошутил. Если только у вас нет несколько месяцев свободного времени :)
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680854
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашик. Вот тебе пыщ по Хорьку
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680945
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mayton, спасибо за ссылку )) я так понял вы шутите ;)

Анатолий(с телефона я замучаюсь вас на транслите называть, потому извините если вас зовут не так), на Си я найду время. Должен же я что-нибудь уже сделать. Только с fopen разберусь
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38680954
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не шучу. Кст. многие разработчики слабо используют возможности хоря.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38681765
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 26.06.2014 02:50, SashaMercury wrote:

> Если я бы я не разобрал бы этот пример, разве узнал бы я такой красивой
> конструкции для свопа:
>
> x ^= y ^= x ^= y;
>
>
>
> Ну разве она не красивая ?;)


Красивая.

Но я бы программиста, который это использовал бы в production коде
уволил бы.

(если бы это конечно не было бы оформленно в соотв. функцию или не
требовалось исключительно какими-то требованиями производительности или
что-то в этом роде, но тогда без комментария -- всё равно бы уволил).

Кстати, о производительности.


auto other = y;
y = x;
x = other;

-- тут три операции. Точнее, три чтения и три записи.

в твоём 3 * 3 + 1 = 10 операций.
При этом одна из этих трёх операций ( одно чтение, XOR и одна запись )
ещё и задействует АЛУ. А при обычном swap оно может быть и без АЛУ.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38681768
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 26.06.2014 03:14, egorych wrote:

> красивая, но бессмысленная, инты обменивать редко когда требуется, да и
> читается плохо, по этой же причине. Редко - читай никогда ))

Ну ладно, не так уж и редко.
Любая сортировка.
А сортировка -- основа многих алгоритмов, да и сама часто используется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38681770
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Спасибо за советы C:
> Если честно, я сам об этом подсознательно думал. Вчера перед сном. Но я
> не был уверен что стоит, но раз вы оба советуете, то и правда стоит.
> Сначала я сделаю то что предложил Дмитрий, а затем то что предложил
> Anatoly Moskovsky.


Я бы лучше сделал парсер другого языка сначала, попроще.
Типа XML-я или ещё более простое.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38681787
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сашок хочешь задачку подкину?
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 2 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]