Итак, мне надо сделать следующее:
1) если есть вайтлист, то проверяем массив и возвращаем его уже без лишних значений
2) если вайта нет, удаляем те элементы массива, которые попадают под блэклист
3) если и черного списка нет, то ничего не делаем
Подскажите, как лучше это реализовать
Пока в уме только такая функция:
Во время получения этих строк, он считает количество букв a и b в них. И если их количество равно, то увеличивает счетчик на 1
В итоге в переменной $c будет количество подстрок, в которых количество букв a и b равно
Как можно реализовать подобное, но более оптимально? может формулы какие-нибудь...
Нужно сократить время работы скрипта
В конечном итоге нам нужно узнать сколько подстрок в данной строке, у которых количество a и b одинаковое
первые 5 строчек - это своеобразный ключ
последние 5 строчек - замок, к которому нужно "примерить" ключ.
Как это все происходит:
давайте представим, что ключ - это бумажка (0 - отверстие, 1 - сам лист).
а замок - это буквы, написанные на листе
Нам нужно определить, подходит ли ключ. А подходит он только в том случае, если после наложения останутся буквы t, s, t, a, r (то есть их положение совпадет с нулями).
Важное замечание! ключ можно поворачивать по часовой стрелке до 3х раз. то есть наложили, если не подошел, перевернули, опять наложили и т.д.
В ответ надо вывести No, если ключ не подходит, либо, если подходит:
for($i=0;$i<4;$i++){// "запоминаем" буквы, которые были на месте дырок во всех случаях
foreach($key[$i]as$k=>$v){//если попали на 0, то записываем в массив answ букву, которая на его месте
if((int)$v== 0)$answ[$i][]=$code[$k];
}
sort($answ[$i]);//сортируем массив в алфавитном порядке
if(trim($answ[$i][0])=='a'&&trim($answ[$i][1])=='r'&&trim($answ[$i][2])=='s'&&trim($answ[$i][3])=='t'&&trim($answ[$i][4])=='t'){//если все буквы подошли, то меняем сообщение
Скрипт проходит 2 из 10 тестов. не могу найти проблему. (тестирую не я. еще примеров входных файлов нет)
Задача 2
Ребята собрались на озере и решили поиграть в блинчики (кидать камушки в воду, чтобы они отскакивали). всего было N человек. Ребята договорились, что считать количество соприкосновений они будут только на дистанции L от берега.
Нужно сказать, кто из мальчиков выиграл
Входные данные:
Первая строка - число N
Вторая строка - дистанция L
последующие строки - информация о броске мальчика в формате: первая цифра H - количество соприкосновений с водой, затем H чисел - расстояний от берега до места, где камень коснулся воды
3 участника
4 - ограничение
блинчик первого мальчика каснулся с водой всего 1 раз на дистанции 1 метр от берега
блинчик второго мальчика подскочил 2 раза. 1 касание с водой на 1 метре от берега, второе - на 2
и т.д.
на выходе мы должны получить порядковый номер мальчика, который выиграл. в данном случае - 3
for($i=0,$len=strlen($str)-2;$i<=$len;$i++){// цикл будет повторяться до тех пор, пока i будет меньше или равен длине строки
for($j=2,$len2=strlen($str);$j<=$len2;$j++){// цикл повторяется до тех пор, пока j <= длине новой строки
$strarr[]=substr($str, 0,$j);//в массив заносим варианты строк. substr обрезает строку с 0 по j-й символ. то есть из строки abcd мы получим массив array(ab, abc, abcd);
}
$str=substr($str, 1);// убираем самый левый символ. то есть из строки abcd получим bcd
}
//после всех этих кругов из строки abcd получим массив: arr(ab, abc, abcd, bc, bcd, cd)
$c=0;//количество подходящих цепочек
foreach($strarras$v){//пребор массива. $v - значение элемента массива
//echo $v.'<br>';
$a=0;$b=0;
$a=substr_count($v,"a");// считаем, сколько символов 'a' в строке
p.s.комментарии делал на буква abcd, чтобы было нагляднее
И последняя задача
На каждой клетке поля размером NxN лежит цифра. Путешественник идет по полю и суммирует числа. как только он получает число K или больше, он останавливается. Нужно определить на какой клетке он остановился. Либо, если он не досчитал до числа K, то нужно вывести 0
Внимание. Свое движение человек начинает в верхнем левом углу. затем идет вправо до конца поля, спускается на 1 клетку вниз, идет до конца влево, опять спускается на 1 келтку вниз и т.д.
Заранее благодарен за помощь. я не прошу давать мне готовые исходники, можете просто подсказать, в каком месте может возникнуть ошибка при таких-то и таких-то значениях
есть некоторое число N. нужно разложить его на множители и вывести два, сумма которых наименьшая.
Например, N = 24
Раскладываем на множители:
24 = 2*2*2*3 (простые числа)
из этих чисел можно составить пары, произведение которых будет равно 24:
2 и 12 (2 и 2*2*3)
4 и 6 (2*2 и 2*3)
8 и 3 (2*2*2 и 3)
2+12 = 14
4+6=10
8+3=11
Наименьшая сумма равна 10, следовательно нужно вывести два числа: 4 и 6
Как реализовать такое?
не хотелось бы лепить кучу циклов в коде... (решето Эратосфена, чтобы разложить на множители, само разложение, перебор чисел, составление пар...)
Здравствуйте!
Имеется строка:
$str = '<html><php echo "<body>1</body>"; ?> </html>';
нужно как-то выполнить php код в этой строке и результат вывести на экран, чтобы получилось:
<html><body>1</body></html>
Пока в мыслях только то, что нужно использовать функцию eval, но как? ведь в строке помимо echo есть еще и html-теги