Блять аноны, подскажите, я уже изъебался нахуй с этого говна, есть вот такая проверка массива в цикле foreach ( $array as $key => $value )if ( stristr( $array[$key]['title'], $_GET['search'] ) )Условие проверяет есть ли то что написано в GET в значении в многомерном массиве, если я ввожу слово с большой буквы - то всё находит, но если с маленькой, то блять пиздец 0 совпадений, ну как нахуй так а? Я же использую stristr(), а она регистронезависимая, у меня уже мозг взрывает нахуйЯ уже и пытался привести всё в нижний регистр через mb_strtolower(), и удалить лишние символы с помощью trim(), и использовать stripos(), и preg_match(), нихуя, этот пидорас находит только те слова что совпадают с написанием в массиве, а если я меняю регистр одной из букв - то уже 0 совпадений нахуй, я блять уже горю нахуй что этому пидорасу от меня нужно, какого хуя, простоphp5.2
Аноны, много лет у нас в задачнике висит задача про Банкомат (есть банкомат, в нем есть ограниченное количество купюр нескольких номиналов, как выдать сумму K?). Но все это время я сам не знал оптимального решения, и предлагал решать ее полным перебором. То есть, берем все возможные комбинации всех банкнот, пока не получим нужную сумму. Однако, если банкнот много, перебор будет очень долгим. Например, если у нас 1000 банкнот 4 видов, и надо выдать очень большую сумму, то придется перебирать 1000 x 1000 x 1000 x 1000 = 10004 = 1 триллион комбинаций. Даже на современном компьютере это долго. Как же тогда банкоматы справляются с проблемой? Я даже думал, не поменять ли условия задачи, а то, может быть, я даю нерешаемую задачу людям. А в интернете находятся задачи про банкомат с неограниченным количеством купюр. Однако сегодня, я прочел, что такая задача сводится к задаче о рюкзаке и решаема за более быстрое время за счет динамического программирования.Кажется, я нашел способ решить задачу быстрее. Например, в примере выше нам потребуется лишь 40002 = 16 миллионов шагов.
>>2006032А stristr разве поддерживает Юникод и UTF-8? Прочитай-ка урок https://github.com/codedokode/pasta/blob/master/php/strings-utf8.md
>>2006071Если купюры конкретные, естественных номиналов, то задача конечно простая. Это когда тебе надо работать с заранее неизвестными купюрами, например в 16, 17, 983 и 3751 рубль (заранее неизвестными), вот тогда уже сложно становится.
>>2006096Я могу ошибаться, но простой "жадный" алгоритм работает только при таких наборах купюр, когда любую большую купюру можно заменить целым числом более мелких. Например, 1000, 500, 100: 1000 = 2x500, 500 = 5x100, потому алгоритм работает.Если же взять купюры 500, 200 и 100 то 500 нельзя набрать купюрами по 200 и алгоритм не сработает.
>>2006096Вот пример, где "жадный" алгоритм не работает.Есть купюры: 5x500, 3x200, 0x100. Надо выдать 600. Тут "жадный" алгоритм возьмет 1 купюру по 500, останется 100 в остатке, но их он выдать не сможет.
>>2006075То есть весь этот пиздец потому что я ищу русское слово? То есть stristr не может правильно привести слово из массива в нижний регистр чтобы сравнить? Выход это прописать mb_internal_encoding('utf-8') и использовать mb_stristr?
Кстати, наша задача про банкомат эквивалентна задаче про грабителя (вот видите, наши задачи полезны и в реальной жизни): Грабитель проник в банк и нашел там N золотых слитков весом w1, w2 .. WN. В его рюкзак может поместиться не более K килограмм. Какие слитки он должен выбрать, чтобы унести как можно больше золота.---Если заменить "золотой слиток весом x" на "1 купюра номиналом X", то получается задача про банкомат.
>>2006110Всё верно, но всё равно алгоритм элементарно "хардкодится". Тебе надо только отдельно рассматривать случаи набора некоторых сумм.Для варианта в 100, 200 и 500 рублей вполне подойдёт обычная жадная схема500 = 500600 = 500+100 (проще, чем 200+200+200)700 = 500+200Если бы была схема, где купюры 50, 300, 500 рублей, то чуть хитрее было бы, скажем 600 = 300+300, что лучше, чем 500+50+50Но обычно можно придумать решение частное, прописав некоторые исключения.Когда рандомные номиналы, вот тогда уже надо ДП подключать.
>>2006121>Если заменить "золотой слиток весом x" на "1 купюра номиналом X", то получается задача про банкомат. Очевидно нет. Банкомат должен конкретную сумму выдать, а грабитель должен взять сумму не больше K. Но можно чуть меньше.
>>2006122Нет, жадный алгоритм тут не сработает. Посмотри внимательно на ситуацию в >>2006112 . Там нет 100-рублевых купюр и жадный алгоритм не сможет выдать 600 рублей.>>2006130Грабитель пытается взять как можно больше (но не более K). Мы можем запустить алгоритм грабителя, а в конце просто посмотреть, сколько он набрал. Если это число меньше, чем требуемая сумма K, то выдать ее невозможно (иначе бы грабитель смог её собрать). Если набранное количество золота равно требуемой сумме K, то возможно.>>2006120Никакое количество проклятий не заставит stristr работать с utf-8. Надо переписывать на использование mb-функций.
>>2006180Я сижу в других тредах, где к программированию на PHP принято относиться поплёвывая свысока.Посмотрел, что за задачка здесь обсуждается. Там конкретные купюры:есть банкомат, в нём фиксированный набор купюр в 100, 500, 1000, 5000 рублей. Нужно проверить, можно ли выдать нужную сумму, и если можно, то выдать её наименьшим количеством купюр.Это, всё-таки, другая задача, чем задача о сборке рюкзака. И в данном частном случае сильно более простая, потому что любую купюру старшего номинала можно выдать купюрами меньших номиналов. Нет даже истории о купюрах в 200 и 500 рублей. Тут ДП даже и не нужно.Задача о рюкзаке намного сложнее.
>>2006219> где к программированию на PHP принято относиться поплёвывая свысокаванильный жс хуже если тебя утешит