powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / IOCCC 1987 heckbert
10 сообщений из 10, страница 1 из 1
IOCCC 1987 heckbert
    #38895346
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Сегодня решил заняться чем-нибудь интересным. Ниже код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <ctype.h>
#include <stdio.h>
#define _ define
#_ A putchar
#_ B return
#_ C index
char*r,c[300001],*d=">=<=!===||&&->++-->><<",*i,*l,*j,*m,*k,*n,*h,*y;e,u=1,v,w,
f=1,p,s,x;main(a,b)char**b;{p=a>1?atoi(b[1]):79;r=c+read(0,j=l=i=c,300000);v=g(
j,&m);for(k=m;v!=2;j=k,m=n,v=w,k=m){w=g(k,&n);if(v==1&&m-j==1&&*j==35)e&&A(10),
e=f=0;if(!f&&v==3&&(char*)C(j,10)<m)A(10),e=0,f=1;else if(v>2&&(u||w)&&(f||u)&&
(l-i>1||*i!=61||n-k>1||!C("-*&",*k)))continue;else if(v==3)if(f&&e+1+n-k>p&&e)A
(10),e=0;else A(32),e++;else{if(f&&e+m-j>p&&e)A(10),e=0;e+=m-j;k=j;while(k<m)A(
*k++);}i=j;l=m;u=v;}e&&A(10);}g(j,m)char*j,**m;{if(j>=r)B*m=j,2;s=isdigit(*j)||
*j==46&&isdigit(j[1]);for(h=j;h<r;h++)if(!isalnum(*h)&&*h!=95&&(!s||*h!=46)&&(!
s||h[-1]!=101&&h[-1]!=69||!C("+-",*h)))break;if(h>j)B*m=h,0;x=1;for(h=j;h<r&&C(
" \t\n",*h);h++);if(h>j)h--,x=3;if(*j==34||*j==39)for(h=j+1;h<r&&*h!=*j;h++)if(
*h==92)h++;for(y=d;*y&&strncmp(y,j,2);y+=2);if(*y)h=j+1;if(!strncmp("/*",j,2)){
h=j+2;while(*++h!=42||*++h!=47);x=4;}*m=h+1;B x;}



У меня есть частично отформатированный вариант, но я его не выложил сюда. По 2 причинам, кому-то будет интереснее оригинал, а не то как я отформатировал, форматирование не такая сложная процедура.

Обратите внимание на первые строчки

Код: plaintext
1.
2.
3.
4.
5.
6.
#include <ctype.h>
#include <stdio.h>
#define _ define
#_ A putchar
#_ B return
#_ C index



Мне понятно что задумал автор, но VS ругается. Объясните пожалуйста, почему ранее такой синтаксис был корректен, а сейчас нет ?

PS
если кто-то поймёт что делает этот код, то пишите в спойлере, пожалуйста
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38895355
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё странно. Почему раньше функция atoi была определена в stdio.h или ctype.h (судя по коду выше), а сейчас она определена в stdlib.h
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38895399
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного изменил код, сохранив смысловую нагрузку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#define A putchar
#define B return
#define C index

char *r, c[300001], *d = ">=<=!===||&&->++-->><<", *i, *l, *j, *m, *k, *n, *h, *y; 
int e, u = 1, v, w, f = 1, p, s, x; 

int main(int a, char** b) 
{
	p = a>1 ? atoi(b[1]) : 79; 
	//если количество аргументов больше 1, то целое число p будет установлено в число соотвествующее первому параметру программы(при неудачной конвертации, в 0),
	//в противном случае, p=79
	r = c + read(0, j = l = i = c, 300000);
	//произойдёт считывание 3*10^5 байт из stdin
	//j,l,i инициализируются адресом начала массива 'c'
	//r будет проинициализирован первым байтом после окончания всех установленных байт в массиве 'c'
	
	v = g(j, &m); 



Функция g нигде не описана. Что это за функция? подскажите пожалуйста
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38895545
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ниже объявлена.
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38896718
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolf,

вижу, спасибо ! Привык что нельзя вызывать функцию если она ранее не объявлена(хотя бы), и даже не стал внизу её искать.
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38896745
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, а что за функция index ? Она точно нигде не описана
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38896817
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саш.

Парень который писал этот код - экономил место. Есть такой тренд. Типа 5КChess.
Сборище фриков.

Но ты зачем этот форум (уже не первый раз) тащишь это вырвиглазное месиво?
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38901958
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нравится разбирать такой код. Я ведь не прошу у Сообщества-"скажите мне что делает этот код". А спрашиваю только те моменты, что мне непонятны. Этот код относительно чистый. Практически отсутствуют макроопределения.

Про index не нашёл ничего. Что это может быть, если ранее не было такой функции ? Может быть у кого-нибудь есть догадки ? первое место где она встречается:

Код: plaintext
1.
2.
if (!isalnum(*h) && *h != 95 && (!s || *h != 46) && (!s || h[-1] != 101 && h[-1] != 69 || !index("+-", *h)))
		break; 
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38901966
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала замени ASCII коды на символы, т.е. 95 на '_', 46 на '.' и т.д.
Думаю сразу понятнее станет.
...
Рейтинг: 0 / 0
IOCCC 1987 heckbert
    #38902074
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryПро index не нашёл ничего.
google: gcc index function
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / IOCCC 1987 heckbert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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