Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / SQLite Новый топик    Ответить
 Анализ выпаших/ожидаемых чисел для казино  [new]
Stephov
Member

Откуда: Armenia
Сообщений: 22
Всем привет
Имеется база данных с уже выпавшими числами. Таблица Bet состоит из полей BetId - уникальный номер числа, по нему поставлен индекс. И Lucky - само число.
Числа выпадают в диалазоне 00,00 - 99,99.
Задача в следующем: вводится число, показывающее сколько последних строк таблицы надо анализировать, а также число, анализ на выпадение которого надо произвести. Анализ подразумевает вывод количества НЕвыпадений данного числа.
К примеру: вводятся 1000 и 0,15 - то есть, найти среди последних 1000 записей количество выпавших чисел меньше 0,15 или больше 99,84.

Поиск для диапазона больше 99,84:
Select count(1) as HighCount from bet 
where betid >
(
	select max(betid) as lastBetId from bet where 
	lucky > 99.84 AND 
	betid >
	( select min(betid) as minBetId FROM 
		( Select betid from bet
			order by betid desc
			limit 1000
		) A 
	)
);

выдает верное значение, если число больше 99,84 попадалось за последние 1000 записей.

Если же:
1. число не выпадало и select max(betid) as lastBetId равно null
или
2. число обнаружено в последней записи (и max(betid) равен максимальному betid в таблице)
то в обоих случаях результатом будет 0.

Как в первом случае вместо неверного "0" получить количество анализируемых строк, т.е. 1000, а во втором - верный "0"?

Это
Select case HighCount 
	when 0 then 1000
	else HighCount
       end as HighCount
from 
(Select count(1) as HighCount from bet 
where betid >
(
	select max(betid) as lastBetId from bet where 
	lucky > 99.84 AND 
	betid >
	( select min(betid) as minBetId FROM 
		( Select betid from bet
			order by betid desc
			limit 1000
		) A 
	)
))

верно для п1., но для 2. - опять же неверно..

И вообще, может сам подход к подсчету неоптимальный? Если есть предложения по улучшению - буду рад!
8 апр 18, 17:48    [21321743]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
White Owl
Member

Откуда:
Сообщений: 12390
Stephov
Всем привет
Имеется база данных с уже выпавшими числами. Таблица Bet состоит из полей BetId - уникальный номер числа, по нему поставлен индекс. И Lucky - само число.
Числа выпадают в диалазоне 00,00 - 99,99.
Задача в следующем: вводится число, показывающее сколько последних строк таблицы надо анализировать, а также число, анализ на выпадение которого надо произвести. Анализ подразумевает вывод количества НЕвыпадений данного числа.

Количество НЕвыпадений это общее число бросков минус количество выпадений.

То есть
with last1000 as (
   select Lucky from Bet order by BetId desc limit 1000
)
select 1000-count(*) from last1000 where Lucky=99.84


Stephov
К примеру: вводятся 1000 и 0,15 - то есть, найти среди последних 1000 записей количество выпавших чисел меньше 0,15 или больше 99,84.
ээээ... это уже вторая задча?
with last1000 as (
   select Lucky from Bet order by BetId desc limit 1000
)
select count(*) from last1000 where Lucky<0.15 or Lucky>99.84


И вообще, для кого инструкции пишут?
https://www.sql.ru/forum/983207/kak-prosit-pomoshhi-s-zaprosom
9 апр 18, 01:40    [21322195]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
Stephov
Member

Откуда: Armenia
Сообщений: 22
White Owl
И вообще, для кого инструкции пишут?
https://www.sql.ru/forum/983207/kak-prosit-pomoshhi-s-zaprosom

Табличка была маленькая, поэтому на словах сказал. Но вот и скрипт, с интересующими нас полями:
CREATE TABLE bet(betid bigint NOT NULL ,lucky decimal(18, 8))



White Owl
Количество НЕвыпадений это общее число бросков минус количество выпадений.

То есть
with last1000 as (
   select Lucky from Bet order by BetId desc limit 1000
)
select 1000-count(*) from last1000 where Lucky=99.84



Пардон, я неверно указал задачу.
Во-первых, нужна серия непрерывных НЕвыпадений. Во-вторых, ставки делаются не на конкретное число, а на весь диапазон.
К примеру, при ставке с шансом выигрыша 50% (коэффициент 2х), игрок может поставить на нижний диапазон 00,00 - 49,49 или верхний: 50,49 - 99,99. (Казино оставляет себе 1%, который между 49,49 - 50,49)

Выше я приводил иной пример:
Stephov
К примеру: вводятся 1000 и 0,15 - то есть, найти среди последних 1000 записей количество выпавших чисел меньше 0,15 или больше 99,84

Продолжу на нем.
Итак, игрок хочет сделать ставку с шансом 0,15% (выплата 660х). И анализирует, например, последние 1000 ставок, чтоб найти самую длинную непрерывную серию НЕвыпадения чисел в диапазоне 00,00 - 00,15 ИЛИ 99,84 - 99,99.
Результатом одного общего или двух отдельных запросов (для сторон < 49,49 и > 50,49) ожидается получить два числа:
LowCount HighCount
300 800

Если для совершения ставки он ждет, например, серию из 800 НЕвыпадений, то уже время ставить на диапазон >= 99.84!
9 апр 18, 10:22    [21322497]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
White Owl
Member

Откуда:
Сообщений: 12390
Stephov
Табличка была маленькая, поэтому на словах сказал. Но вот и скрипт, с интересующими нас полями:
CREATE TABLE bet(betid bigint NOT NULL ,lucky decimal(18, 8))
А данные для таблички где?

Stephov
ожидается получить два числа:
LowCount HighCount
300 800

Если для совершения ставки он ждет, например, серию из 800 НЕвыпадений, то уже время ставить на диапазон >= 99.84!
И откуда взялись эти цифры?
11 апр 18, 00:24    [21328156]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
Stephov
Member

Откуда: Armenia
Сообщений: 22
White Owl
Stephov
Табличка была маленькая, поэтому на словах сказал. Но вот и скрипт, с интересующими нас полями:
CREATE TABLE bet(betid bigint NOT NULL ,lucky decimal(18, 8))
А данные для таблички где?

Вот данные:
betidlucky
10001520515.86
10001530829.13
10001580994.00
10001620245.72

и так далее.
White Owl
Stephov
ожидается получить два числа:
LowCount HighCount
300 800

Если для совершения ставки он ждет, например, серию из 800 НЕвыпадений, то уже время ставить на диапазон >= 99.84!
И откуда взялись эти цифры?

Эти цифры для примера: если, допустим, за последние 1000 строк было обнаружено 300 невыпадений в диапазоне 00,00-00,015 и 800 невыпадений в диапазоне 99,84 - 99,99.
11 апр 18, 01:06    [21328176]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
White Owl
Member

Откуда:
Сообщений: 12390
https://www.sql.ru/forum/983207/kak-prosit-pomoshhi-s-zaprosom

Пункт 5 как раз для тебя.
11 апр 18, 21:07    [21331180]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
Stephov
Member

Откуда: Armenia
Сообщений: 22
White Owl,

Задача решена, прошу удалить тему с вопросом.
11 апр 18, 22:30    [21331370]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
White Owl
Member

Откуда:
Сообщений: 12390
Ну так поделись ответом то!
11 апр 18, 23:13    [21331446]     Ответить | Цитировать Сообщить модератору
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3013
Stephov
White Owl,

Задача решена, прошу удалить тему с вопросом.


Здесь темы не удаляются, когда-нибудь инопланетяне открjют и почитают, как ты опровергал теорию вероятностей
12 апр 18, 11:26    [21332546]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Анализ выпаших/ожидаемых чисел для казино  [new]
germanlazar
Member

Откуда:
Сообщений: 2
Рассмотрим пример. Пусть на столе выставлен ряд фишек rrrgggbbb, и крупье объявил последовательности rg и gb. Игрок, например, может забрать фишки rg, лежащие на третьем и четвёртом местах слева. После этого крупье сдвинет фишки, и на столе получится ряд rrggbbb. Ещё дважды забрав фишки rg, игрок добьётся того, что на столе останутся фишки bbbи игра закончится, так как игроку больше нечего забрать со стола. Игрок мог бы действовать и по-другому — на втором и третьем ходах забрать не последовательности rg, а последовательности gb. Тогда на столе остались бы фишки rrb. Аналогично, игрок мог бы добиться того, чтобы в конце остались ряды rrr или rbb.

После окончания игры полученные фишки игрок меняет на деньги. Цена фишки зависит от её цвета.

Требуется написать программу определяющую максимальную сумму, которую сможет получить игрок.
Входные данные

В первой строке входных данных содержится число K (1 ≤ K ≤ 26) — количество цветов фишек. Каждая из следующих K строк начинается со строчной латинской буквы, обозначающей цвет. Далее в той же строке через пробел следует целое число Xi (1 ≤ Xi ≤ 150, i = 1..K) — цена фишки соответствующего цвета.

В (K+2)-ой строке описан ряд фишек, лежащих на столе в начале игры. Ряд задаетсяL строчными латинскими буквами (1 ≤ L ≤ 150), которые обозначают цвета фишек ряда.

В следующей строке содержится число N(1 ≤ N ≤ 150) — количество последовательностей, которые были объявлены крупье. В следующих N строках записаны эти последовательности. Гарантируется, что сумма длин этих N строк не превосходит 150 символов, и все они непустые.
Выходные данные

Выведите единственное целое число — максимальную сумму денег, которую может получить игрок.
3 май 19, 11:45    [21877270]     Ответить | Цитировать Сообщить модератору
Все форумы / SQLite Ответить