GotAI.NET

Форум: Проблемы искусственного интеллекта

 

Регистрация | Вход

 Все темы | Новая тема Стр.4 (5)<< < Пред. | След. > >>   Поиск:  
 Автор Тема: На: я серый кардинал России
гость
178.176.219.*
На: я серый кардинал России
Добавлено: 27 май 20 16:59
Цитата:
Автор: гость
На всякий случай тебе еще одна подсказка:
в твоем варианте обращений в массив при проверке за два хода (игрока и компа) - 48 = 2*(9+9+6), в моем варианте - 18, почти в 3 раза быстрее..

Упс, это я пошутил. У тебя на самом деле тоже мало, потому как условия вложенные, не обратил внимания, но один хрен, будет медленнее, и немасштабируемо. Ты бы код мог хотя бы сократить в два раза, сделав функцию с аргументом 1 или 0, у тебя же проверка для компа и игрока практически одинаковые куски кода. Сейчас еще немного перебрал свой вариант, вынес условия некоторые из цикла, кое что лишнее убрал, получился, может не намного более быстрый, но красивый, короткий и масштабируемый вариант.
[Ответ][Цитата]
Ilya Geller
Сообщений: 3462
На: я серый кардинал России
Добавлено: 27 май 20 17:11
Цитата:
Автор: гость


Упс, это я пошутил. У тебя на самом деле тоже мало, потому как условия вложенные, не обратил внимания, но один хрен, будет медленнее, и немасштабируемо. Ты бы код мог хотя бы сократить в два раза, сделав функцию с аргументом 1 или 0, у тебя же проверка для компа и игрока практически одинаковые куски кода. Сейчас еще немного перебрал свой вариант, вынес условия некоторые из цикла, кое что лишнее убрал, получился, может не намного более быстрый, но красивый, короткий и масштабируемый вариант.

Так Сифилек Венерический — бог или что? Хотя бы программирования?
[Ответ][Цитата]
гость
178.176.219.*
На: я серый кардинал России
Добавлено: 27 май 20 17:20
Цитата:
Автор: Ilya Geller
Так Сифилек Венерический — бог или что? Хотя бы программирования?

дворник обычный, код лучше конечно, чем у rrr3, но до программиста недотягивает, и уж, до "серого кардинала России", точно, слишком много о себе возомнил.
[Ответ][Цитата]
гость
185.220.101.*
На: я серый кардинал России
Добавлено: 27 май 20 17:54
Цитата:
Автор: гость


дворник обычный, код лучше конечно, чем у rrr3, но до программиста недотягивает, и уж, до "серого кардинала России", точно, слишком много о себе возомнил.
rrr3 не писал свой код, ему кто то писал, а потом этот кодер трагически умер, не исключенно что изза кода rrr3
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 1292
На: я серый кардинал России
Добавлено: 27 май 20 21:44
Цитата:
Автор: гость
Никого не волнует, ведешся ты или нет на что-то. Просто ты или подтвердишь свою квалификацию, или окажешся обычным лохом - дворником, который должен был бы подметать собачьи какашки, но, по недоразумению в его руках оказалась клавиатура..

с первого раза похоже до тебя не дошло
придётся разжёвывать
если сделать одну проверку, а не две, то если игрок выиграл комп конечно скажет что он выиграл, но в наглую сходит на последок
вот что сделает твой чудевр
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 1292
На: я серый кардинал России
Добавлено: 27 май 20 23:38
Изменено: 27 май 20 23:55
Цитата:
Автор: IvanVlaskin1976
void main(void) {
int x,y;
char MaccuB[3][3];
a01:
for(x=0;x<3;x++) {
for(y=0;y<3;y++) {
MaccuB[x][y]=' ';
}
}
a02:
printf("BBeguTe X(1-3) u Y(1-3):\n");
scanf("%d %d",&x,&y);
if((x!=1&&x!=2&&x!=3)||(y!=1&&y!=2&&y!=3)||MaccuB[x-1][y-1]!=' ') {
printf("HeBepHblij xog\n");
goto a02;
}
MaccuB[x-1][y-1]='X';
printf("+-+-+-+\n");
for(y=0;y<3;y++) {
printf("|%c|%c|%c|\n",MaccuB[0][y],MaccuB[1][y],MaccuB[2][y]);
printf("+-+-+-+\n");
}
for(x=0;x<3;x++) if(MaccuB[x][0]=='X'&&MaccuB[x][1]=='X'&&MaccuB[x][2]=='X') goto a03;
for(y=0;y<3;y++) if(MaccuB[0][y]=='X'&&MaccuB[1][y]=='X'&&MaccuB[2][y]=='X') goto a03;
if(MaccuB[0][0]=='X'&&MaccuB[1][1]=='X'&&MaccuB[2][2]=='X') goto a03;
if(MaccuB[2][0]=='X'&&MaccuB[1][1]=='X'&&MaccuB[0][2]=='X') goto a03;
printf("Komn xoguT KaK\n");
a04:
x=rand()%3;
y=rand()%3;
if(MaccuB[x][y]!=' ') goto a04;
MaccuB[x][y]='O';
printf("+-+-+-+\n");
for(y=0;y<3;y++) {
printf("|%c|%c|%c|\n",MaccuB[0][y],MaccuB[1][y],MaccuB[2][y]);
printf("+-+-+-+\n");
}

for(x=0;x<3;x++) if(MaccuB[x][0]=='O'&&MaccuB[x][1]=='O'&&MaccuB[x][2]=='O') goto a05;
for(y=0;y<3;y++) if(MaccuB[0][y]=='O'&&MaccuB[1][y]=='O'&&MaccuB[2][y]=='O') goto a05;
if(MaccuB[0][0]=='O'&&MaccuB[1][1]=='O'&&MaccuB[2][2]=='O') goto a05;
if(MaccuB[2][0]=='O'&&MaccuB[1][1]=='O'&&MaccuB[0][2]=='O') goto a05;
goto a02;
a03:
printf("Bbl no6eguJlu\n");
goto a06;
a05:
printf("Bbl npou7paJlu\n");
a06:
printf("CHoBa?(1-Yes 0-No)\n");
scanf("%d",&x);
if(x==1) goto a01;
}

крестики-нолики я написал на спор за несколько часов, классическая задача

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

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


void main(void) {
int x,y,хog;
char MaccuB[3][3];
a01:
for(x=0;x<3;x++) {
for(y=0;y<3;y++) {
MaccuB[x][y]=' ';
}
}
for(хog=1;хog<=9;хog++) {
a02:
printf("BBeguTe X(1-3) u Y(1-3):\n");
scanf("%d %d",&x,&y);
if((x!=1&&x!=2&&x!=3)||(y!=1&&y!=2&&y!=3)||MaccuB[x-1][y-1]!=' ') {
printf("HeBepHblij xog\n");
goto a02;
}
MaccuB[x-1][y-1]='X';
printf("+-+-+-+\n");
for(y=0;y<3;y++) {
printf("|%c|%c|%c|\n",MaccuB[0][y],MaccuB[1][y],MaccuB[2][y]);
printf("+-+-+-+\n");
}
for(x=0;x<3;x++) if(MaccuB[x][0]=='X'&&MaccuB[x][1]=='X'&&MaccuB[x][2]=='X') goto a03;
for(y=0;y<3;y++) if(MaccuB[0][y]=='X'&&MaccuB[1][y]=='X'&&MaccuB[2][y]=='X') goto a03;
if(MaccuB[0][0]=='X'&&MaccuB[1][1]=='X'&&MaccuB[2][2]=='X') goto a03;
if(MaccuB[2][0]=='X'&&MaccuB[1][1]=='X'&&MaccuB[0][2]=='X') goto a03;
printf("Komn xoguT KaK\n");
a04:
x=rand()%3;
y=rand()%3;
if(MaccuB[x][y]!=' ') goto a04;
MaccuB[x][y]='O';
printf("+-+-+-+\n");
for(y=0;y<3;y++) {
printf("|%c|%c|%c|\n",MaccuB[0][y],MaccuB[1][y],MaccuB[2][y]);
printf("+-+-+-+\n");
}

for(x=0;x<3;x++) if(MaccuB[x][0]=='O'&&MaccuB[x][1]=='O'&&MaccuB[x][2]=='O') goto a05;
for(y=0;y<3;y++) if(MaccuB[0][y]=='O'&&MaccuB[1][y]=='O'&&MaccuB[2][y]=='O') goto a05;
if(MaccuB[0][0]=='O'&&MaccuB[1][1]=='O'&&MaccuB[2][2]=='O') goto a05;
if(MaccuB[2][0]=='O'&&MaccuB[1][1]=='O'&&MaccuB[0][2]=='O') goto a05;
}
printf("Hu4b9|\n");
goto a06;
a03:
printf("Bbl no6eguJlu\n");
goto a06;
a05:
printf("Bbl npou7paJlu\n");
a06:
printf("CHoBa?(1-Yes 0-No)\n");
scanf("%d",&x);
if(x==1) goto a01;
}
[Ответ][Цитата]
гость
178.176.216.*
На: я серый кардинал России
Добавлено: 28 май 20 2:02
Я имел в виду, что проверка после хода компа и проверка после хода - это одна и таже функция проверки, только с разными аргументами. например:

int function (AnsiString igrok)
{
}
Эта функция вызывается после хода компа с аргументом igrok="X", и после хода игрока с аргументом "O", а возвращает целое: 0 - игра не закончена 1- выиграл игрок, 2 - выиграл комп, 3 - ничья.

Это уж точно, что ты рано радовался, но дело не в том, что ничьи нет, я тоже на нее забил. Ты так и не догадался, не буду тянуть кота за яйца. Расскажу на словах как у тебя, и как должно быть, код писать не буду, сам, может напишешь.

На самом деле, вариантов проверки у меня не один, какие то более красивые получились, какие-то более быстрые, вот один из них, более быстрый, чем у тебя, но не такой красивый, как мой первый вариант:

У тебя сейчас проверяется все игровое поле, все горизонтали/вертикали/диагонали которые есть. А зачем ты их все проверяешь? Ведь проверять надо только линии, проходящие через клетку, на которую поставили последний ход. Остальные линии либо проверены в предыдущих ходах, либо заведомо незакрыты. Будет или 2, или 3 или, максимум 4 проверки, если эта клетка в центре., у тебя же проверяется при каждом ходе 3 вертикали + 3 горизонтали + 2 диагонали = 8.

Поэтому проверка будет функцией следующего вида, с аргументами, включая координаты клетки:
int function (AnsiString igrok, int x, int y)
{
}

Как узнать, что клетка на главной диагонали? x=y. А на второстепенной? Сам догадаешся. И не надо запихивать в if столко значений массива, сделай масштабируемую функцию, используя, for. Вот и все, ничего сложного.
[Ответ][Цитата]
гость
185.220.101.*
На: я серый кардинал России
Добавлено: 28 май 20 3:37
Вспоминаем:
Цитата:
Автор: гость 185.220.100.*
Ставлю 10$ что 188.170.175.* облажается и жутко опозорится, так что потеряет честь.

Результат:
Цитата:
Автор: гость
код писать не буду


То есть наш друг очередной раз унизился и полностью потерял честь, будь он япошкой то выпустил себе кишки.
[Ответ][Цитата]
гость
185.220.101.*
На: я серый кардинал России
Добавлено: 28 май 20 3:41
ЗЫ хотя собственно так как уже неделю тянется этот челенж, гость 185.220.100 проиграл уже и по временным критериям, сколько же можно писать тривиальный код в 50 строк? За сколько тогда он напишет 11000 системного кода???
[Ответ][Цитата]
гость
178.176.216.*
На: я серый кардинал России
Добавлено: 28 май 20 3:43
Цитата:
Автор: гость

Вспоминаем:

Результат:


То есть наш друг очередной раз унизился и полностью потерял честь, будь он япошкой то выпустил себе кишки.

Ты дурак, чтоли? или читать не умеешь. Облажался как раз не я. Могу и код написать если потребуется, я рассказал ване на словах, что он должен сделать. Читай внимательнее мои посты
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 1292
На: я серый кардинал России
Добавлено: 28 май 20 21:48
Цитата:
Автор: гость
Ты дурак, чтоли? или читать не умеешь. Облажался как раз не я. Могу и код написать если потребуется, я рассказал ване на словах, что он должен сделать. Читай внимательнее мои посты

не думаю что я облажался
мой код это гармония красоты кода, лаконичности и скорости
а твой код может убить лаконичность при сомнительной его скорости
[Ответ][Цитата]
гость
188.170.192.*
На: я серый кардинал России
Добавлено: 28 май 20 23:32
Если ты дурак, то это не лечится.
[Ответ][Цитата]
гость
188.170.173.*
На: я серый кардинал России
Добавлено: 29 май 20 1:58
На всякий случай выложу твой код (не свой), вдруг у тебя действительно умственная отсталость. В твоем коде в проверке циклы for - не нужны, можешь их убрать. Обрати внимание, что x и y - координаты последнего хода:

//проверка поля 3*3 на наличие заполненных строк/столбцов/диагоналей
int mass[3][3];
mass[0][0]=1; mass[0][1]=0; mass[0][2]=2;
mass[1][0]=1; mass[1][1]=0; mass[1][2]=2;
mass[2][0]=1; mass[2][1]=0; mass[2][2]=1;

int x=1; //координата последнего хода по x
int y=1; //координата последнего хода по y
f = 1; //1 - один, если ходит комп, 2 - если игрок

//for(x=0;x<3;x++)
{
if(mass[x][0]==f && mass[x][1]== f && mass[x][2]==f)
{
ListBox1->Items->Add("горизонталь");
}
}

//for(y=0;y<3;y++)
{
if(mass[0][y]==f && mass[1][y]==f && mass[2][y]==f)
{
ListBox1->Items->Add("вертикаль");
}
}

if(mass[0][0]==f && mass[1][1]==f && mass[2][2]==f)
{
ListBox1->Items->Add("диагональ");
}

if(mass[2][0]==f && mass[1][1]==f && mass[0][2]==f)
{
ListBox1->Items->Add("диагональ");
}
[Ответ][Цитата]
гость
188.170.194.*
На: я серый кардинал России
Добавлено: 29 май 20 2:24
Координаты перепутал, та которая по x - она по y и наоборот, но это неважно, общий смысл, я надеюсь, понятен.
[Ответ][Цитата]
IvanVlaskin1976
Сообщений: 1292
На: я серый кардинал России
Добавлено: 30 май 20 9:31
Цитата:
Автор: гость
Если ты дурак, то это не лечится.

был бы дурак сложнейший код за несколько часов бы не написал
[Ответ][Цитата]
 Стр.4 (5)1  2  3  [4]  5<< < Пред. | След. > >>