powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
25 сообщений из 111, страница 1 из 5
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38677987
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Сегодня нашёл интересный код, сейчас разбираю его.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
a[900];		b;c;d=1		;e=1;f;		g;h;O;		main(k,
l)char*		*l;{g=		atoi(*		++l);		for(k=
0;k*k<		g;b=k		++>>1)		;for(h=		0;h*h<=
g;++h);		--h;c=(		(h+=g>h		*(h+1))		-1)>>1;
while(d		<=g){		++O;for		(f=0;f<		O&&d<=g
;++f)a[		b<<5|c]		=d++,b+=	e;for(		f=0;f<O
&&d<=g;		++f)a[b		<<5|c]=		d++,c+=		e;e= -e
;}for(c		=0;c<h;		++c){		for(b=0		;b<k;++
b){if(b		<k/2)a[		b<<5|c]		^=a[(k		-(b+1))
<<5|c]^=	a[b<<5		|c]^=a[		(k-(b+1		))<<5|c]
;printf(	a[b<<5|c	]?"%-4d"	:"    "		,a[b<<5
|c]);}		putchar(	'\n');}}	/*Mike		Laman*/



Собственно процитировал. Синтаксис и форматирование сохранены.

Начал разбирать, привожу свою часть кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
a[900];//тут компилятор сразу ругается, предполагаю что в 1984 если не указывалчся тип данных, по умолчанию был
//например char. Хотя Си обладал явной типзацией ? Или нет.
b;
c;
e = 1;
f;
g;
h;
O;


int main(k,char** l)
{
	{
		g = atoi(*++l); //второй параметр(после имени программы) на входе увеличенный на 1. Целое число
		for (k = 0; k*k < g; b = k++ >> 1);
	}
}



1. Какой тип данных у тех переменных у которых не был указан тип данных ? Ранее такое действительно возможно ?
2.
Код: plaintext
1.
b = k++ >> 1

равносильно
Код: plaintext
1.
(k>>1)+1

? На всякий случай спросил.

Не говорите мне пожалуйста что делает этот код, если вам сразу всё понятно.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38677989
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и с переменной " к ", тут видимо побочный эффект, то есть идёт изменение самой переменной, и ещё присваивание.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38677990
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Далее идёт
Код: plaintext
1.
for (h = g; ++h);



Не хватает оператора ; в for. Или так тоже ранее можно было ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38677992
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SSна входе увеличенный на 1. Целое число


Это бред. Это ведь указатель сдвигается с имени программы. Я это в принципе написал сразу, а затем бред приписал.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38677995
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury3. Далее идёт
Код: plaintext
1.
for (h = g; ++h);




Не хватает оператора ; в for. Или так тоже ранее можно было ?
Такого там нет.
Есть такое "for(h= 0;h*h<= g;++h)"

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

Это как в футболе. Если играть со слабыми соперниками и всегда на идеальном газоне никогда не научишься играть хорошо.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678000
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 вопрос, сам ответил. Не равносильно относительно переменной b
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678001
Фотография 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.
#include <stdlib.h>
#include <stdio.h>

int a[900];//тут компилятор сразу ругается, предполагаю что в 1984 если не указывалчся тип данных, по умолчанию был
//например char. Хотя Си обладал явной типзацией ? Или нет.
int b;
int c;
int d = 1;
int e = 1;
int f;
int g;
int h;
int O;


int main(int k, char** l)
{
	g = atoi(*++l);		
	for (k =0; k*k<	g; b = k++ >> 1); 
	for (h = 0; h*h <=g; ++h);		
	--h; 
	c = ((h += g>h*(h + 1)) - 1) >> 1;
	
	while (d <= g)
	{
		++O; 
		for (f = 0; f<O&&d <= g; ++f)
			a[b << 5 | c] = d++,b += e; 
		for (f = 0; f<O&&d <= g;++f)
			a[b << 5 | c] = d++, c += e; 
		e = -e;
	}

	for (c = 0; c<h; ++c)
	{
		for (b = 0; b<k; ++b)
		{
			if (b<k/2) a[b << 5 | c] ^= a[(k - (b + 1))<< 5 | c] ^= a[b << 5 | c] ^= a[(k - (b + 1)) << 5 | c]; 
			printf(a[b << 5 | c] ? "%-4d" : "    ", a[b <<5|c]);
		}		
		putchar('\n');
	}
}
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678026
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рефакторинг первых строк в первом приближении,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	g = atoi(*++l);//считываем в второй параметр из строки аргументов (1 параметр - имя программы)		
	for (k = 0; k*k< g; b = k++ >> 1);//k ближайший целый корень из числа на входе программы. b=(k-1-(k-1)%2)/2 
	//Две строчки ниже можно заменить на h=k-1
	//h=k-1
	for (h = 0; h*h <=g; ++h);		
	--h;

	//(g>h*(h + 1)) ? h++ : false;
	//c = (h - 1) >> 1;
	c = ((h += g>h*(h + 1)) - 1) >> 1;//Корректировки над h, инициализация с. Я бы заменил эту строчку двумя строчками выше



Хотя тут ещё можно упростить всё что касается h.

Пока те замены что я предлагаю верны ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678045
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	while (d <= g)
	{
		++O; 
		for (f = 0; f < O && d <= g; ++f)
		{
			a[b << 5 | c] = d++, b += e;
		}
		for (f = 0; f<O && d<=g;++f)
			a[b << 5 | c] = d++, c += e; 
		e = -e;
		printf("O=%i \n", O);
	}



В этом участке кода
Код: plaintext
1.
a[b << 5 | c] = d++, b += e;


1.В элемент массива записывается d
2. Происходит инкримент d
3. К b добавляется e

Так ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678102
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAnatoly Moskovsky Какой смысл разбирать такие программы?

Это как в футболе. Если играть со слабыми соперниками и всегда на идеальном газоне никогда не научишься играть хорошо.

Это абсолютный бред. И это высказывание, и такие состязания.
Кроме как для развлечения они ни для чего не нужны.
Я уверен, что только для этого эти соревнования и были придуманы.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678104
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
int a[900];//тут компилятор сразу ругается, предполагаю что в 1984 если не указывалчся тип данных, по умолчанию был
//например char. Хотя Си обладал явной типзацией ? Или нет.


int был, а не char.

Это в классическом K&R C было. Если сейчас включить такой режим, напр. в GCC, думаю, скомпилируется.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678156
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да написал бы Достоевский Идиота если бы он не читал Гете, Бальзака и Гофмана ? Там похлеще чем этот код.
Неужели все считают что такой код не нужен и не полезен ???
Я считаю крайне полезен.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678161
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЯ считаю крайне полезен.Чем? Возможностью "залезть на шкаф"?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678309
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryНеужели все считают что такой код не нужен и не полезен ???куда полезней было бы ознакомиться вот с чем: тынц
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678399
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 24.06.2014 11:31, SashaMercury wrote:

> Неужели все считают что такой код не нужен и не полезен ???
> Я считаю крайне полезен.

Да, не нужен и не очень полезен.
Читать и разбирать такой код отчасти конечно полезно, чтобы возможно
уточнить какие-то аспекты языка, которые в реальной жизни никогда и не
используются. Но польза в итоге весьма мала.



Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678408
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryДа написал бы Достоевский Идиота если бы он не читал Гете, Бальзака и Гофмана ? Там похлеще чем этот код.
Неужели все считают что такой код не нужен и не полезен ???
Я считаю крайне полезен.
Саш, тебя хочется кинуть на какой-то полезный проект. А то зря киловатты и лошадиные
силы тратишь.
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38678623
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov Чем? Возможностью "залезть на шкаф"?
если человек будет ориентироваться в таком коде, то насколько легко ему будет читать обычный код, находить в нём ошибки ? Прекрасная разминка для головы. Я понимаю что такое рефакторинг, но не знаю наверняка насколько это актуально. Думаю что актуально, читая такой код, и транслируя его в аналогичный, на том-же языке, человек улучшает свои способности в этом разделе программирования. Да и вообще, этот код очень красивый. Его просто приятно разбирать. Мне приятно.

Да, ещё наверняка есть такие люди что ищут уязвимости в коде, и скрытые ловушки, чтение и разбор такого кода тоже будет актуально для них.

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

Вы говорите развлечения ? А как-же без этого ;) Я не сомневаюсь что в глубине души вам такой код тоже нравится, и вам самим может быть и хочется поразвлечься и понять что он делает ;)

egorych, так это моя любимая книга по программированию, я её не прочитал всю, и не разобрал (слово разобрал тут ключевое), потому что к сожалению приходится занимать порой всякой фигней, и не получается уделять всё время до 18 математике и программированию. Но я постепенно её читаю, и разбираю(к данной книге это ключевое слово).
Даже топ создавал.

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

Это не плохой код.
Это код специально написанный чтобы запутать. Чем запутаннее тем лучше.

А плохой код, это код написан плохо неспециально, и чаще всего его автор и не подозревает что код плохой.

Уметь разбираться в этих двух видах кода, это совершенно разные скиллы, причем первый из них совершенно бесполезен в прикладной работе.

Это примерно как тренироваться жонглировать тенисным мячем чтобы хорошо играть теннис :)
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679156
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	while (d <= g)
	{
		++O;
		for (f = 0; f < O && d <= g; ++f)
		{
			a[b << 5 | c] = d++;
			b += e;
		}
		for (f = 0; f < O && d <= g; ++f)
		{
			a[b << 5 | c] = d++;
			c += e;
		}
		e = -e;
		//printf("O=%i b=%i c=%i e=%i\n", O,b,c,e);
	}



можно ли упростить этот участок кода ? Как я понял, тут происходит какой-то алгоритм сохранения всех чисел до g включительно. Обращение к элементу идёт через "маску" a[b << 5 | c]. b и с принимают значение от 0 до до h. Где h это целая часть корня g(округление в меньшую сторону).
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679157
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, а сколько времени потребуется хорошему разработчику(не K&R конечно, но очень хорошему) чтобы разобраться в том что делает этот код и сказать что делает эта программа ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679161
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот исправленная первая треть кода с правильными комментариями

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	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;
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679167
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вторая часть кода. Вот как с ней лучше работать. Я создал функцию отображения

Код: plaintext
1.
2.
3.
4.
int tr1(int x, int y)
{
	return (x << 5 | y);
}



Вот так теперь выглядит вторая часть кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
	while (d <= g)
	{
		++O;
		for (f = 0; f < O && d <= g; ++f)
		{
			a[tr1(b, c)] = d++;
			b += e;
		}
		for (f = 0; f < O && d <= g; ++f)
		{
			a[tr1(b,c)] = d++;
			c += e;
		}
		e = -e;
	}



А если нарисовать в каком порядке она заполняет массив всеми числами до g включительно, относительно параметров b and c , и классической матрицы a_00-верхлево, a_hk-низправо, вот что мы увидим
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679169
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остался вопрос только по этой сточке:
Код: plaintext
1.
if (b<k/2) a[b << 5 | c] ^= a[(k - (b + 1))<< 5 | c] ^= a[b << 5 | c] ^= a[(k - (b + 1)) << 5 | c]; 



все операции делать слева направо ?
сначала
Код: plaintext
1.
a[b << 5 | c] ^= a[(k - (b + 1))<< 5 | c]



затем результат побитово на
Код: plaintext
1.
a[b << 5 | c] 



и тд ?
...
Рейтинг: 0 / 0
Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
    #38679171
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryAnatoly Moskovsky, а сколько времени потребуется хорошему разработчику(не K&R конечно, но очень хорошему) чтобы разобраться в том что делает этот код и сказать что делает эта программа ?
Я могу только сказать, сколько времени потребуется чтобы убедить разработчика разбираться в таком.
Много. :)
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 1 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Анализ программного кода. International Obfucated C Code Contest. 1984. By Mike Laman
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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