- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
$probabilities=array();
$get_items=mysql_query("SELECT * FROM `items` WHERE `iid` IN(".mysql_real_escape_string($case['items']).") AND `status`='1' AND `count`>'0' ORDER BY `probability` DESC;");
while($item=mysql_fetch_assoc($get_items)){
$probabilities[$item['probability']]=0;
}
$dices=$probabilities;
for($pi=100;$pi>=0;$pi--){
foreach($probabilities as $probability=>$pstate){
if(rand(1, 2)==2){
if($pi<=$probability){
$dices[$probability]=$dices[$probability]+1;
}
}
}
}
arsort($dices, SORT_NUMERIC);
$probability=reset(array_keys($dices));
$get_prize=mysql_query("SELECT * FROM `items` WHERE `iid` IN(".mysql_real_escape_string($case['items']).") AND `status`='1' AND `count`>'0' AND `probability`='".$probability."' ORDER BY RAND() LIMIT 1;");
Написал с нуля на заказ движок для очередного детского говноказино (розыгрыш пикселей для игр в "Steam").
Заказчик умолял сделать возможность управления вероятностью выпадения того или иного предмета (в процентах), что я и сделал. Вышеприведённый алгоритм как раз отвечает за выбор приза в соответствии с прописанными в настройках вероятностями. Сейчас кажется, что решение не самое "изящное".
Есть, что заметить по поводу алгоритма?
inho 02.11.2017 19:02 # +2
А вообще, слишком толсто
AnalPerOral 02.11.2017 19:12 # +3
Мне этот мусор неприятен. Я и между скобками, операторами и переменными-то пробелы не расставляю...
>>>"А вообще, слишком толсто"
Уже ищу свой тюбик с лубрикантом. Терпение, птенчик...
alex228 02.11.2017 19:42 # −1
AnalPerOral 02.11.2017 19:48 # −1
Чем он хорош? Зачем одни буквы в коде менять на другие?
SemaReal 03.11.2017 01:27 # −1
inkanus-gray 03.11.2017 04:25 # +2
PDO хорош только тем, что это унифицированная оболочка к разным СУБД. Однако, толку от этого мало, потому что при построении сложных систем всё равно приходится писать код, зависящий от СУБД.
Fike 03.11.2017 09:37 # +2
Однородность 95% кода, которую вы почему-то записываете в хуйню. На это обычно отвечают классическим "часто ли ты менял базу данных в проекте после его начала, зачем тебе вообще совместимость с кучей движков баз данных?", поэтому я сразу задам контр-вопрос: мало ли на свете фреймворков, которые точатся сразу под кучу движков, и авторы которых в гробу видали писать одно и тоже для каждого движка и получают за счет этого 95% совместимости кода сразу со всем?
> при построении сложных систем всё равно приходится писать код, зависящий от СУБД.
в нормальных сложных системах существует разделение read/write model, в базе данных специально проектируются вьюхи/таблицы под чтение, и все запросы опять сводятся к простой четверке CRUD. Только иногда требуется какая-то сложная хуйня, которую придумал модный UX-специалист - типа геопоиска по полигону или нечеткого поиска - и в этом случае это все вообще надо снимать с базы данных, потому что база данных для человеческого поиска не предназначена (как бы туда не стримились побольше специальных индексов для нечеткого поиска).
SemaReal 03.11.2017 17:26 # 0
В Perl есть DBI::DBD
В Python есть PEP 249
В Java есть JDBC
В .NET есть ADO.NET
и только пых кушает mysqli_query и радуется
>> в базе данных специально проектируются вьюхи/таблицы под чтение
К сожалению, это не всегда так. Мне тоже нравится работать с БД через вьюхи, но например Django ORM или Hibernate могут с этим поспорить.
Тем не менее, 80% кода можно унифицировать, и писать raw sql только для особых случаев
alex228 03.11.2017 18:13 # −1
уже нет
SemaReal 03.11.2017 18:14 # −1
Яху!!! Всего 20 лет понадобил0сь!
http://php.net/manual/ru/mysqli.query.php
Из этого примера сразу видно что ООП лучше процедурного подхода.
alex228 03.11.2017 18:16 # −1
SemaReal 03.11.2017 18:19 # 0
>>не испытываешь батхёрта, в отличие от ныне трендового JS. но
Если конечно ты не знаешь больше никаких языков кроме JS и PHP :)
>>это не помешало ему стать самым популярным языком для веба.
в те времена, когда выбор был между perl и Php:) выбор был понятен
Как только повылазили руби, груви, питон итд: так сразу и закочнилось
alex228 03.11.2017 18:24 # −1
SemaReal 03.11.2017 18:27 # 0
это логично
alex228 03.11.2017 18:29 # −1
пробовал много чего не вебовского C/C++, Basic, Dephi/Pascal, Fox Pro, Assembler etc.
subaru 11.03.2018 19:30 # 0
Пиздатый язык, обожаю разгребать говна на нем.
minusinho 11.03.2018 22:02 # 0
SemaReal 11.03.2018 22:31 # 0
В _некоторых_ ситуациях такое название валидно, но и там лучше сказать: "такие языки как си и сиплюсплюс"
subaru 12.03.2018 00:27 # +2
SemaReal 12.03.2018 00:33 # +1
subaru 12.03.2018 23:03 # 0
bormand 12.03.2018 23:07 # +2
SemaReal 12.03.2018 23:24 # 0
В некоторых городах есть еще такие люди, кстати, которые пишут и звонят на любую вакансию. Всегда. Обычно их знают HRы
minusinho 12.03.2018 23:32 # 0
SemaReal 12.03.2018 23:33 # 0
inho 12.03.2018 23:37 # 0
SemaReal 12.03.2018 23:40 # 0
inho 12.03.2018 23:35 # 0
хах, лол
subaru 12.03.2018 23:38 # 0
gost 05.11.2017 09:58 # +3
Сравнивать "PHP" и "JS" — это как выбирать между говном и говном.
1024-- 05.11.2017 14:42 # −2
Fike 05.11.2017 21:45 # −1
bormand 11.03.2018 04:49 # +1
substr, substring
alex228 03.11.2017 10:31 # −1
inkanus-gray 03.11.2017 10:45 # 0
inkanus-gray 03.11.2017 10:59 # 0
alex228 03.11.2017 15:27 # 0
inkanus-gray 03.11.2017 15:34 # −1
Подождите, посмотрю обсуждаемый код... AnalPerOral недавно вышел из криокамеры.
alex228 03.11.2017 15:36 # 0
vistefan 03.11.2017 15:39 # +1
inkanus-gray 03.11.2017 15:40 # 0
vistefan 03.11.2017 15:57 # 0
http://hackertyper.com/
roman-kashitsyn 03.11.2017 16:13 # −2
inkanus-gray 03.11.2017 16:16 # −1
roman-kashitsyn 03.11.2017 16:18 # 0
inkanus-gray 03.11.2017 16:23 # −1
roman-kashitsyn 03.11.2017 16:43 # +4
vistefan 03.11.2017 17:41 # 0
roman-kashitsyn 03.11.2017 17:46 # +2
Ada тоже
SemaReal 03.11.2017 17:53 # 0
vistefan 03.11.2017 17:53 # −1
SemaReal 03.11.2017 18:03 # 0
А форт, вроде, не наследник
Зато в форте типизации нет
SemaReal 03.11.2017 17:23 # 0
alex228 03.11.2017 18:28 # −1
AnalPerOral 05.11.2017 16:26 # +1
Эту простыню я наваял, полагаешь, также лишь для того, чтобы кого-то затроллить?
inkanus-gray 05.11.2017 16:37 # +4
https://ru.wikipedia.org/wiki/Рукопись_Войнича
AnalPerOral 05.11.2017 16:42 # +1
SemaReal 05.11.2017 17:31 # 0
AnalPerOral 05.11.2017 17:54 # 0
У неподготовленного читателя очко может сжаться от каменно-холодной авторитетности голоса, коим ты излагаешь спизженные минуту назад из Интернета сведения.
SemaReal 05.11.2017 17:57 # −1
AnalPerOral 05.11.2017 18:13 # 0
SemaReal 05.11.2017 18:36 # 0
inkanus-gray 05.11.2017 18:35 # +3
dxd 06.11.2017 09:17 # +1
inkanus-gray 06.11.2017 09:51 # 0
dxd 06.11.2017 11:28 # +2
AnalPerOral 06.11.2017 12:40 # +1
dxd 06.11.2017 13:34 # +2
AnalPerOral 06.11.2017 16:33 # −1
Ты и вся твоя родня не оставили там ни пяди поверхности, на которую я мог бы ступить.
roman-kashitsyn 06.11.2017 16:39 # +4
А что нам обсуждать-то ещё? То, как ты не можешь в тервер, prepared statements и нормальное форматирование кода?
inkanus-gray 06.11.2017 16:52 # −1
Например, в этих строках алгоритма точно нет:
Вместо этого сразу можно было написать комментарий, чем заполнен массив $probabilities.
Если автор показал нам эти строки, значит, хочет, чтобы мы их обсудили.
3.14159265 29.01.2018 18:47 # +5
> Нахуй мне ваш закон Ципфа?
Ха-ха-ха, добро пожаловать на ГК.
subaru 06.11.2017 13:11 # 0
roman-kashitsyn 03.11.2017 12:52 # +2
> $pi>=0;
Даже у предмета с "вероятностью" выпадения 0% есть шансы выпасть. Если он единственный, то этот шанс 1/2.
Если массив $dices будет пустой, то reset() вернёт FALSE, не приведёт ли это к кривому запросу в последней строке? Число со строкой же сравниваться будет. Впрочем, я не удивлюсь, если говномускуль съест это и не почешется.
Последний запрос (`count`>'0') не в транзакции, два конкурентных запроса могут получить по одному предмету с count = 1 В итоге: ты пишешь такие же дырявые сайты, как и те обезьяны, чьё творчество ты ломаешь
d_fomenok 03.11.2017 13:41 # 0
Мне однажды умный человек сказал, что это - плохо
inkanus-gray 03.11.2017 14:27 # 0
Уж лучше "LIMIT FLOOR(RAND() * @COUNT), 1".
Хотя самый быстрый вариант — "WHERE `id` >= FLOOR(RAND() * @COUNT) LIMIT 1".
Здесь @COUNT — заранее посчитанное к-во строк.
Fike 03.11.2017 14:38 # 0
эт если в айдишниках нет дыр
inkanus-gray 03.11.2017 14:41 # −1
С дырами работать будет, если использовать неравенство вместо точного равенства, но распределение будет неравномерным: элемент, расположенный после большой дыры, будет выпадать чаще, чем нужно. Как вариант можно использовать точное равенство и повторять запрос, если выпало ноль элементов, но это уже некрасиво.
vistefan 03.11.2017 14:44 # +2
Прям как в Что? Где? Когда?