Nikanr |
Отправлено: 27 Марта, 2020 - 12:22:18
|
Специалист
Покинул форум
Сообщений всего: 231
Дата рег-ции: Март 2019
Репутация: 5
|
У нас есть два массива
CODE:string txt_1[4]={"y","r","yy"};
string txt_2[8]={"y","b","yy","r","yy","r"};
Нам нужно найти такую последовательность действий, что бы узнать все номера ячеек в массиве txt_2 соотв. элементам в массиве txt_1. После того как мы узнаем номер ячейки в массиве txt_2 соотв. элементу в массиве txt_1, он сдвигается и ячейки объединяются до 3х штук одинаковых элементов идущих подряд. {допустим была последовательность "yy","r","yy", мы нашли "r", массив стал "y","yyy"}.
Для массива выше последовательность решений будет следующая(если делать руками): 0-5-4 Т.е сначала "y", потом находим последнюю "r", и предпоследние "yy". Если мы возьмем последовательность 0-3-n, ячейки буду сдвинуты на "y","yyy" и последовательность действий будет неверная.
P:S Еще массивы с примерами решения. Цвета могут быть 3х типов: r-red, y-yellow, b-blue. Массив сдвигается вправо (или можно просто "" заменять ячейки которые нашли)
CODE:string txt_1[3]={"y","bb","rr"};
string txt_2[7]={"y","b","y","r","bb","y","r"};
//Решение: 5-4-3
CODE:string txt_1[3]={"r","yy","bb"};
string txt_2[8]={"y","b","y","r","y","b","y","r"};
//Решение: 3-2-1
(Отредактировано автором: 27 Марта, 2020 - 12:30:05) |
|
|
Nikanr |
Отправлено: 28 Марта, 2020 - 07:19:44
|
Специалист
Покинул форум
Сообщений всего: 231
Дата рег-ции: Март 2019
Репутация: 5
|
Цитата: Количество элементов в первом массиве всегда 3?
Скорее всего да, больше не видел
Цитата: Почему не 0-5-2?
А если уж массив сдвигается, то 0-4-1. Потому что
(Добавление)
Потому что первый "y" удалиться и 0 элементом станет "b".
Можно и так, забыл уточнить(Отредактировано автором: 28 Марта, 2020 - 07:20:31) |
|
|
Zireael |
Отправлено: 28 Марта, 2020 - 10:30:10
|
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:string txt_1[3]={"y","bb","rr"}
string txt_2[7]={"y","b","y","r","bb","y","r"}
int result[3]; // сюда запишется результат
// вызов функции
if(capcha(#txt_1[0], #txt_2[0], sizearray(txt_2), #result[0]))messagebox(format(result[0])+" "+format(result[1])+" "+format(result[2]));
else messagebox("Решение не найдено");
function capcha(string #s, string #s2, int size_s2, int #output)
{
new string tmp_arr[size_s2+1]; // временные массивы
new string tmp_arr2[size_s2+1];
for(int i=0; i<size_s2-1; i++) // поиск первого элемента
{
if(s[0] == s2[i])
{
copy_array(#s2[0], #tmp_arr[0], size_s2); // скопировать данные во временный массив
delete_array(#tmp_arr[0], size_s2, i); // удалить из него найденный элемент
merger(#tmp_arr[0], size_s2); // объединить соседние строки
for(int j=0; j<size_s2-1; j++) // поиск второго элемента
{
if(s[1] == tmp_arr[j])
{
copy_array(#tmp_arr[0], #tmp_arr2[0], size_s2);
delete_array(#tmp_arr2[0], size_s2, j);
merger(#tmp_arr2[0], size_s2);
for(int k=0; k<size_s2-1; k++) // поиск третьего элемента
{
if(s[2] == tmp_arr2[k])
{
output[0]=i; output[1]=j; output[2]=k; // записать результат
delete tmp_arr; delete tmp_arr2; return 1; // возвращаем 1, ответ найден
}
}
}
}
}
}
delete tmp_arr; delete tmp_arr2; return 0; // возвращаем 0, ответ не найден
}
function copy_array(string #s, string #s2, int size_s2)
{
for(int i=0; i<size_s2; i++)s2[i]=s[i];
}
function delete_array(string #s, int size_array, int pos)
{
for(int i=pos; i<size_array-1; i++)s[i]=s[i+1]; s[i]="";
}
function merger(string #s, int size_array)
{
string temp;
char c[4];
for(int i=0; i<size_array-1; i++)
{
strcpy(#c[0], s[i]);
if (regexsearch(1, #temp, s[i+1], format(#c[0], 1)))
{
if (size(s[i+1]) == 3)return;
if (size(s[i]) == 3){temp=s[i]; s[i]=s[i+1]; s[i+1]=temp; return;}
if (size(s[i]) == 2 && size(s[i+1]) == 2){s[i]=temp; s[i+1]=temp+temp+temp; return;}
int size_=size(s[i])+size(s[i+1]); s[i]="";
for(int j=0; j<size_; j++)s[i]=s[i]+temp;
delete_array(#s[0], size_array, i+1);
return;
}
}
} |
|
|
|