PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (4): « 1 [2] 3 4 »

> Найдено сообщений: 52
kir55rus Отправлено: 11 Апреля, 2013 - 11:00:01 • Тема: Что-то вроде блэк и вайтлистов • Форум: Вопросы новичков

Ответов: 3
Просмотров: 174
OrmaJever, Спасибо огромное!
Но в Вашем примере нужно убрать инверсию перед in_array, когда идет проверка по вайтлисту

Все работает Улыбка
kir55rus Отправлено: 10 Апреля, 2013 - 19:46:05 • Тема: Что-то вроде блэк и вайтлистов • Форум: Вопросы новичков

Ответов: 3
Просмотров: 174
Здравствуйте. Есть массив:

CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.             [ab] => 79682717
  5.             [prj] => 167
  6.             [idv] => 962166332
  7.             [cat] => 272
  8.         )
  9.  
  10.     [1] => Array
  11.         (
  12.             [ab] => 79630699
  13.             [prj] => 107
  14.             [idv] => 962159779
  15.             [cat] => 272
  16.         )
  17.  
  18.     [2] => Array
  19.         (
  20.             [ab] => 79852698
  21.             [prj] => 14
  22.             [idv] => 962103066
  23.             [cat] => 226
  24.         )
  25. )



и есть черные и белые списки:

Белый список для поля [prj]


Черный список для поля [prj]


Белый список для поля [cat]


Черный список для поля [cat]


Итак, мне надо сделать следующее:
1) если есть вайтлист, то проверяем массив и возвращаем его уже без лишних значений
2) если вайта нет, удаляем те элементы массива, которые попадают под блэклист
3) если и черного списка нет, то ничего не делаем

Подскажите, как лучше это реализовать
Пока в уме только такая функция:

PHP:
скопировать код в буфер обмена
  1. function filters($arr, $wlprj, $blprj, $wlcat, $blcat){
  2.        
  3.         for($i=0, $c=count($arr), $cwlprj=count($wlprj), $cblprj=count($blprj), $cwlcat=count($wlcat), $cblcat=count($blcat); $i < $c; $i++){
  4.                
  5.                 if($cwlprj){//если есть белый список [prj]
  6.                         if(!array_search($arr[$i]['prj'], $wlprj)){ array_splice($arr, $i, 1); continue;} //удаляем этот элемент
  7.                 }elseif($cblprj){ //если есть черный лист [prj]
  8.                         if(!array_search($arr[$i]['prj'], $blprj)){ array_splice($arr, $i, 1); continue;} //удаляем этот элемент
  9.                 }
  10.  
  11. //то же самое со списками для [cat]
  12.                
  13.         }
  14.        
  15.         return $arr;
  16. }
  17.  
  18. $wlprj = array(14, 167);
  19. $blprj = array(469, 74);
  20. $wlcat = array();
  21. $blcat = array(226, 147);
  22.  
  23. filters($arr, $wlprj, $blprj, $wlcat, $blcat);



Но я не считаю это лучшим вариантом. Подскажите, как переделать функцию
Заранее благодарен
kir55rus Отправлено: 19 Февраля, 2013 - 18:17:05 • Тема: substr_count ищет не все вхождения • Форум: Вопросы новичков

Ответов: 8
Просмотров: 279
тогда даже если вхождение одно, будет ответ 2.. не совсем подходит
kir55rus Отправлено: 19 Февраля, 2013 - 17:53:21 • Тема: substr_count ищет не все вхождения • Форум: Вопросы новичков

Ответов: 8
Просмотров: 279
но если строка большая, то это займет много времени..
Нет ничего получше?
kir55rus Отправлено: 19 Февраля, 2013 - 17:42:43 • Тема: substr_count ищет не все вхождения • Форум: Вопросы новичков

Ответов: 8
Просмотров: 279
PHP:
скопировать код в буфер обмена
  1. function xcount($str, $pat, $c=0){
  2.         while(($n = strpos($str, $pat)) !== false){
  3.                 $c++; $str = substr($str, $n+1);
  4.         }
  5.         return $c;
  6. }


Вот так?
kir55rus Отправлено: 19 Февраля, 2013 - 17:29:09 • Тема: substr_count ищет не все вхождения • Форум: Вопросы новичков

Ответов: 8
Просмотров: 279
Здравствуйте

есть строка:
ABABAB

substr_count('ABABAB', 'ABAB') выдаст 1, хотя на самом деле там 2 подстроки

ABABAB и ABABAB

то есть эти подстроки пересекаются
Что посоветуете, как посчитать количество подстрок?
kir55rus Отправлено: 18 Февраля, 2013 - 18:59:44 • Тема: Оптимизировать код • Форум: Вопросы новичков

Ответов: 0
Просмотров: 61
Здравствуйте. вот код:

PHP:
скопировать код в буфер обмена
  1. function xstr($str){
  2.         global $c;
  3.  
  4.         for($i=2, $len=strlen($str); $i<=$len; $i++){
  5.                
  6.                 $tstr = substr($str, 0, $i);
  7.                 if(substr_count($tstr, "b") == substr_count($tstr, "a")) $c++;
  8.        
  9.         }
  10.         if(2 < strlen($str)) xstr(substr($str, 1));
  11.         return true;
  12. }
  13.  
  14. $c=0;
  15. xstr("abbsb");
  16.  


что он делает:
из строки abcd получит: (на этих буквах нагляднее. на самом делал работа идет только с a и b)

Во время получения этих строк, он считает количество букв a и b в них. И если их количество равно, то увеличивает счетчик на 1
В итоге в переменной $c будет количество подстрок, в которых количество букв a и b равно

Как можно реализовать подобное, но более оптимально? может формулы какие-нибудь...
Нужно сократить время работы скрипта

В конечном итоге нам нужно узнать сколько подстрок в данной строке, у которых количество a и b одинаковое

Благодарен за ответы
kir55rus Отправлено: 18 Февраля, 2013 - 13:18:24 • Тема: Несколько задач, которые не проходят несколько проверок • Форум: Если скрипт не работает

Ответов: 4
Просмотров: 1749
да.. но сделать это не получится, т.к. входные файлы не дают на руки Недовольство, огорчение
kir55rus Отправлено: 17 Февраля, 2013 - 11:41:06 • Тема: Несколько задач, которые не проходят несколько проверок • Форум: Если скрипт не работает

Ответов: 4
Просмотров: 1749
philimon, Спасибо. Взял из вашего способа проверку. Теперь скрипт проходит 9 из 10 тестов..

матрицу проверял. вот результат: (сделал на буквах, чтобы было легче проследить перемещение. как оказалось, все правильно)

CODE (htmlphp):
скопировать код в буфер обмена
  1. rryqv
  2. fcasp  - 0 поворотов
  3. pkjht
  4. rthty
  5. uhIst
  6.  
  7.  
  8. urpfr  - 1 поворто
  9. htkcr
  10. Ihjay
  11. sthsq
  12. tytpv
  13.  
  14.  
  15. tsIhu  - 2 поворота
  16. ythtr
  17. thjkp
  18. psacf
  19. vqyrr
  20.  
  21.  
  22. vptyt  - 3 поворота
  23. qshts
  24. yajhI
  25. rckth
  26. rfpru


Получается, проблема где-то в самой "примерке" и проверке..
kir55rus Отправлено: 16 Февраля, 2013 - 18:18:22 • Тема: Несколько задач, которые не проходят несколько проверок • Форум: Если скрипт не работает

Ответов: 4
Просмотров: 1749
Здравствуйте

Задача 1.
в файле i.txt хранятся данные в формате:

CODE (htmlphp):
скопировать код в буфер обмена
  1. 1 0 1 1 1
  2. 1 1 1 0 1
  3. 0 1 1 1 1
  4. 1 1 0 1 1
  5. 1 1 1 0 1
  6. r r y q v
  7. f c a s p
  8. p k j h t
  9. r t h t y
  10. u h I s t

первые 5 строчек - это своеобразный ключ
последние 5 строчек - замок, к которому нужно "примерить" ключ.
Как это все происходит:
давайте представим, что ключ - это бумажка (0 - отверстие, 1 - сам лист).
а замок - это буквы, написанные на листе

Нам нужно определить, подходит ли ключ. А подходит он только в том случае, если после наложения останутся буквы t, s, t, a, r (то есть их положение совпадет с нулями).
Важное замечание! ключ можно поворачивать по часовой стрелке до 3х раз. то есть наложили, если не подошел, перевернули, опять наложили и т.д.

В ответ надо вывести No, если ключ не подходит, либо, если подходит:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Yes
  2. количество необходимых поворотов


для примера выше будет выведен ответ


еще 1 пример входного файла:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1 1 1 1 1
  2. 1 0 1 1 1
  3. 1 1 1 1 0
  4. 1 1 1 1 0
  5. 0 1 0 1 1
  6. r r y q v
  7. f c a s p
  8. p k j h t
  9. r t h t y
  10. u h I s t

Ответ на выходе должен быть No

Итак, мой исходник:
PHP:
скопировать код в буфер обмена
  1. $data = file('i.txt');//загружаем данные
  2.  
  3. $key[0] = explode(" ", $data[0].' '.$data[1].' '.$data[2].' '.$data[3].' '.$data[4]); // массив для ключа. каждый элемент массива - цифра 1 или 0
  4. $code = explode(" ", $data[5].' '.$data[6].' '.$data[7].' '.$data[8].' '.$data[9]);     // замок. принцип, как и у ключа
  5.  
  6. for($i=0; $i < 5; $i++) // "переварачиваем" ключ по часовой стрелке. это 1 поворот
  7.         for($j=20+$i; $j >= 0; $j -= 5)
  8.                 $key[1][] = $key[0][$j];
  9.                
  10. $key[2] = array_reverse($key[0]); // 2 поворота
  11. $key[3] = array_reverse($key[1]); // 3 поворота
  12.  
  13. $t = "No"; // начальное значение ответа
  14.  
  15. for($i=0; $i<4; $i++){ // "запоминаем" буквы, которые были на месте дырок во всех случаях
  16.        
  17.         foreach($key[$i] as $k => $v){ //если попали на 0, то записываем в массив answ букву, которая на его месте
  18.                 if((int)$v == 0) $answ[$i][] = $code[$k];
  19.         }
  20.        
  21.         sort($answ[$i]); //сортируем массив в алфавитном порядке
  22.        
  23.         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'){ //если все буквы подошли, то меняем сообщение
  24.                 $t = "Yes\r\n".$i;
  25.                 break;
  26.         }
  27.        
  28. }//если буква не подошла, то повторяем цикл
  29.  
  30.  
  31. file_put_contents('o', $t); //записываем ответ


Скрипт проходит 2 из 10 тестов. не могу найти проблему. (тестирую не я. еще примеров входных файлов нет)


Задача 2
Ребята собрались на озере и решили поиграть в блинчики (кидать камушки в воду, чтобы они отскакивали). всего было N человек. Ребята договорились, что считать количество соприкосновений они будут только на дистанции L от берега.
Нужно сказать, кто из мальчиков выиграл

Входные данные:
Первая строка - число N
Вторая строка - дистанция L
последующие строки - информация о броске мальчика в формате: первая цифра H - количество соприкосновений с водой, затем H чисел - расстояний от берега до места, где камень коснулся воды

Пример входного файла:


3 участника
4 - ограничение
блинчик первого мальчика каснулся с водой всего 1 раз на дистанции 1 метр от берега
блинчик второго мальчика подскочил 2 раза. 1 касание с водой на 1 метре от берега, второе - на 2
и т.д.

на выходе мы должны получить порядковый номер мальчика, который выиграл. в данном случае - 3

2й пример входного файла:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 3
  2. 4
  3. 1 8
  4. 3 1 3 4
  5. 6 20 30 40 100 110 120

Ответ - 2

Мой исходник:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $data = file('i.txt');//загружаем данные
  3.  
  4. $n = $data[0]; //количество участников
  5. $l = $data[1]; // дистанция
  6.  
  7. $players = array(); //массив с результатами
  8.  
  9. for($i=2, $c = $n+2; $i< $c; $i++){ //перебор результатов
  10.         $temp = explode(" ", $data[$i]); //массив с результатами 1 мальчика
  11.         $c2 = $temp[0]; // количество прыжков блинчика
  12.         unset($temp[0]);
  13.        
  14.         $players[$i-1] = 0;
  15.         foreach($temp as $v) //перебираем результат
  16.                 if((int)$v <= (int)$l){ $players[$i-1] += (int)$v; //если результат меньше ограничения, то записываем его
  17.                
  18.                
  19.         }
  20.        
  21.  
  22.        
  23.        
  24. }
  25.  
  26.  
  27.  
  28. arsort($players); //сортируем от большего к меньшему
  29.  
  30.  
  31. foreach($players as $k => $v){
  32.         file_put_contents('o.txt', trim($k)); //записываем результат
  33.         break;
  34. }


Скрипт проходит 10 из 20 тестов


Задача 3
есть строка вида abbababa. нужно сказать, сколько в ней цепочек, в которых количество a и b одинаковое.

Например, строка aba
ответ: 2 цепочки (ab и ba)

пример2: строка abbababa
ответ: 13

порядок букв в цепочках может повторяться! Например, в прошлом примере будет несколько одинаковых цепочек:
abbababa

Мой исходник:
PHP:
скопировать код в буфер обмена
  1. $data = file('i.txt');//загружаем данные из файла. каждая строчка будет отдельным элементом массива
  2.  
  3. $strarr = array();
  4.  
  5. $str=trim($data[1]);//str = строчке
  6.  
  7. for($i=0, $len=strlen($str)-2; $i<= $len; $i++){ // цикл будет повторяться до тех пор, пока i будет меньше или равен длине строки
  8.        
  9.        
  10.         for($j=2, $len2=strlen($str); $j <= $len2; $j++){ // цикл повторяется до тех пор, пока j <= длине новой строки
  11.                
  12.                 $strarr[] = substr($str, 0, $j); //в массив заносим варианты строк. substr обрезает строку с 0 по j-й символ. то есть из строки abcd мы получим массив array(ab, abc, abcd);
  13.         }
  14.        
  15.         $str=substr($str, 1); // убираем самый левый символ. то есть из строки abcd получим bcd
  16.        
  17. }
  18.  
  19. //после всех этих кругов из строки abcd получим массив: arr(ab, abc, abcd, bc, bcd, cd)
  20.  
  21. $c=0; //количество подходящих цепочек
  22.  
  23. foreach($strarr as $v){ //пребор массива. $v - значение элемента массива
  24.         //echo $v.'<br>';
  25.         $a=0; $b=0;
  26.         $a = substr_count($v, "a"); // считаем, сколько символов 'a' в строке
  27.         $b = substr_count($v, "b"); // сколько 'b' в строке
  28.         if($a == $b && $a !=0 && $b != 0) $c++; // если количество равно, то увеличиваем C на 1
  29. }
  30.         echo $c;
  31. file_put_contents('o.txt', $c); //записываем это число в файл

p.s.комментарии делал на буква abcd, чтобы было нагляднее


И последняя задача
На каждой клетке поля размером NxN лежит цифра. Путешественник идет по полю и суммирует числа. как только он получает число K или больше, он останавливается. Нужно определить на какой клетке он остановился. Либо, если он не досчитал до числа K, то нужно вывести 0

Внимание. Свое движение человек начинает в верхнем левом углу. затем идет вправо до конца поля, спускается на 1 клетку вниз, идет до конца влево, опять спускается на 1 келтку вниз и т.д.

Пример входных данных:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 4 24
  2. 1 2 3 4
  3. 1 2 3 4
  4. 1 2 3 4
  5. 1 2 3 4

4 - число N (размер поля)
24 - K (необходимая сумма)
в остальных строчках - цифры, которые лежат на поле

ответ для данного примера - 11

второй пример:
PHP:
скопировать код в буфер обмена
  1. 4 50
  2. 1 2 3 4
  3. 1 2 3 4
  4. 1 2 3 4
  5. 1 2 3 4

ответ - 0

мой исходник:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $data = file('i.txt'); //загружаем данные
  4.  
  5. $a = explode(" ", $data[0]); //массив. первый элемент - N, второй - K
  6.  
  7. $track = array(); //создаем массив, в котором в нормальном порядке будут расположены числа
  8.  
  9. for($i=0; $i < $a[0]; $i++)
  10.         if($i % 2 == 0) $track = array_merge($track, explode(" ", $data[1+$i]));
  11.         else $track = array_merge($track, array_reverse(explode(" ", $data[1+$i])));
  12. /*
  13. если это первая строчка, то переворачивать ее не надо => записываем как есть
  14. если это вторая строчка, то ее надо перевернуть => переворчиваем и дописываем в первый массив
  15. и т.д.
  16. */
  17.        
  18.  
  19. $n=0; $b=0;
  20. for($i=0, $c=$a[0]*$a[0]; $b < $a[1] && $i < $c; $i++, $n++) //проходим по полученной дороге
  21.         $b += $track[$i]; //если мы еще не набрали нужную сумму и если поле не закончилось, то прибавляем число с клетки
  22.  
  23.  
  24. if($b >= $a[1]) $t = $n; //если мы набрали нужное число, то записываем его в ответ
  25. else $t = 0; //иначе в ответ - 0
  26. file_put_contents('o.txt', $t); //выводим ответ


скрипт проходит 18 из 20 тестов


Заранее благодарен за помощь. я не прошу давать мне готовые исходники, можете просто подсказать, в каком месте может возникнуть ошибка при таких-то и таких-то значениях
kir55rus Отправлено: 08 Февраля, 2013 - 16:21:50 • Тема: Задача с числами • Форум: Вопросы новичков

Ответов: 10
Просмотров: 1061
Спасибо за ответы!
Понравилась идея с извлечением корня из числа.
То есть возьмем все то же число 24
sqrt(24) ~ 4.9

Начинаем перебор от 5


PHP:
скопировать код в буфер обмена
  1. $a = 24;
  2.  
  3. for($sq = sqrt($a), $i = (int)($sq+0.99); $i <= $a; $i++){
  4.  
  5.         if($a % $i == 0){
  6.                 echo $i.' и '.($a/$i);
  7.                 break;
  8.         }
  9.  
  10. }


Вот и получаем 2 числа. И при этом используем всего 1 цикл Улыбка
Спасибо огромное!
kir55rus Отправлено: 07 Февраля, 2013 - 17:26:16 • Тема: Задача с числами • Форум: Вопросы новичков

Ответов: 10
Просмотров: 1061
Здравствуйте.

есть некоторое число 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

Как реализовать такое?
не хотелось бы лепить кучу циклов в коде... (решето Эратосфена, чтобы разложить на множители, само разложение, перебор чисел, составление пар...)

Заранее благодарен
kir55rus Отправлено: 29 Января, 2013 - 16:59:02 • Тема: Обновление страницы • Форум: JavaScript & VBScript

Ответов: 0
Просмотров: 486
Здравствуйте. Есть 2 страницы:

1.html:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head> <title> 1.html </title> </head>
  3. <body>
  4. <a href="2.html" target="_blank" onClick="popupWin = window.open(this.href, 'script', 'location,width=500,height=300'); popupWin.focus(); return false;">Открыть 2.html</a>
  5. </body>
  6. </html>


2.html:
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head> <title> 2.html </title> </head>
  3. <body>
  4. <h1>Это 2.html</h1>
  5. </body>
  6. </html>


Пояснение: в первом файле ссылка на второй. если нажать на эту ссылку, откроется новое окно со страницей 2.html

Задача: нужно сделать так, чтобы после закрытия окна со страницей 2.html автоматически обновлялось окно с 1.html
Заранее благодарен за ответы
kir55rus Отправлено: 13 Сентября, 2012 - 19:17:11 • Тема: лайк вконтакте • Форум: Вопросы новичков

Ответов: 2
Просмотров: 288
Здравствуйте, нужно с помощью curl и php поставить лайк вк.

отправляю post на url http://vk[dot]com/like.php
al=1&from=wall_one&hash=HASH&object=wallID_СТЕНЫ&wall=1

Hash предварительно парсится. например, hash со страницы http://vk[dot]com/wall111574305_10570 будет 95af0681e36a3761ec

Запрос отправляется удачно, но лайк не ставится. в чем проблема?

зы. в контакте перед отправкой post-запроса авторизован
kir55rus Отправлено: 05 Сентября, 2012 - 19:41:41 • Тема: строка с html и php (eval) • Форум: Вопросы новичков

Ответов: 0
Просмотров: 72
Здравствуйте!
Имеется строка:
$str = '<html><php echo "<body>1</body>"; ?> </html>';
нужно как-то выполнить php код в этой строке и результат вывести на экран, чтобы получилось:
<html><body>1</body></html>

Пока в мыслях только то, что нужно использовать функцию eval, но как? ведь в строке помимо echo есть еще и html-теги

Заранее благодарен за ответы!

UPD. ответ нашел сам http://stackoverflow[dot]com/questio[dot][dot][dot]aluates-html-php

Цитата:
eval(' ?>'.$htmlandphp.'<?php ');

Страниц (4): « 1 [2] 3 4 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB