Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Опыты по Теории Вероятностей / 21 сообщений из 21, страница 1 из 1
11.10.2010, 05:56
    #36891815
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Опыты по Теории Вероятностей

Для наших опытов создадим очень простую функцию, которая случайным образом будет возвращать целые числа в интервале, заданном входным параметром:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
drop function RandInt;

CREATE FUNCTION RandInt (X integer) 
RETURNS integer 
LANGUAGE SQL 
CONTAINS SQL 
NO EXTERNAL ACTION 
not DETERMINISTIC 
RETURN int(X * Rand() + . 5 );
В принципе её можно не создавать, но она сильно упрощает задачу и делает решение красивее и доступней для понимания.

Так RandInt(1) иммитирует бросание монеты: 0 - решка, 1 - орёл.

Подбросим монетку:

Код: plaintext
1.
2.
3.
4.
select case when randint(test) =  0  then 'Tail'
            else 'Head'
       end "Game With Dime" 
from
(select  1  test from sysibm.sysdummy1) tst;

Где Tail - Решка, а Head соответсвенно - Орёл

Будем подбрасывать её много раз (например 10000 раз), чтобы найти Математическое Ожидание.

Наверное устанем, если не используем возможности

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
with prob (k, maxK, total) as
(select  0 ,  10000 ,  0  from sysibm.sysdummy1
union all
select k +  1 , maxK, total + randint( 1 )
from prob
where k +  1  <= maxK
) 
select maxK, total from prob
where k = maxK;
Испытайте сами на своём компьютере и убедитесь как близко математическое ожидание к середине: 10000 / 2 = 5000.

Lenny
...
Рейтинг: 0 / 0
11.10.2010, 17:33
    #36893174
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Моделирование броска кости.

Как известно, может выпасть от 1 до 6:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select case when dice = 1 then 'One'
                 when dice = 2 then 'Two'
                 when dice = 3 then 'Three'
                 when dice = 4 then 'Four'
                 when dice = 5 then 'Five'
            else 'Six'
       end "Game With Dice" 
from
(select randint(5) + 1 dice from sysibm.sysdummy1) dce;
...
Рейтинг: 0 / 0
11.10.2010, 17:39
    #36893192
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Моделирование броска кости.

Как известно, может выпасть от 1 до 6:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select case when dice =  1  then 'One'
                 when dice =  2  then 'Two'
                 when dice =  3  then 'Three'
                 when dice =  4  then 'Four'
                 when dice =  5  then 'Five'
            else 'Six'
       end "Game With Dice" 
from
(select randint( 5 ) +  1  dice from sysibm.sysdummy1) dce;
...
Рейтинг: 0 / 0
11.10.2010, 20:29
    #36893488
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Моделирование броска кости.

Можно сделать и красивее:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
select gm.dice
from
(select randint( 5 ) +  1  rdc from sysibm.sysdummy1) dce
join table
(
select case when rdc =  1  then '    '
                 when rdc =  2  then  ' * '
                 when rdc =  3  then  '*  '
                 when rdc =  4  then  '* *'
                 when rdc =  5  then  '* *'
                 when rdc =  6  then  '** '
       end dice
from sysibm.sysdummy1

union all

select case when rdc =  1  then  ' * '
                 when rdc =  2  then  '    '
                 when rdc =  3  then  ' * '
                 when rdc =  4  then  '    '
                 when rdc =  5  then  ' * '
                 when rdc =  6  then  '** '
       end dice
from sysibm.sysdummy1

union all

select case when rdc =  1  then  '   '
                 when rdc =  2  then  ' * '
                 when rdc =  3  then  '  *'
                 when rdc =  4  then  '* *'
                 when rdc =  5  then  '* *'
                 when rdc =  6  then  '** '
       end dice
from sysibm.sysdummy1
) gm
On  1  =  1 
;
...
Рейтинг: 0 / 0
13.10.2010, 16:04
    #36897400
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Случайные перестановки букв в слове:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with Input (word) as 
(select 'database2' from sysibm.sysdummy1
)
,
RandCharOrder (randword, remword, k) as
(select varchar('',  1000 ), strip(word), length(word)  
   from Input
union all
select randword || substr(remword, pos,  1 ), 
case when pos =  1  and length(remword) >  1 
     then substr(remword, pos +  1 )
     when length(remword) =  1 
     then remword
     else substr(remword,  1 , pos -  1 ) || substr(remword, pos +  1 )
end, ch.k -  1 
from RandCharOrder ch, Input, 
table
(select randint(length(remword) -  1 ) +  1  pos, ch.k
from sysibm.sysdummy1 ) rr

Where length(remword) >  0  and ch.k -  1  >=  0  
) 
select word, randword from RandCharOrder, Input
where k =  0 
...
Рейтинг: 0 / 0
16.10.2010, 14:27
    #36902961
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Change RandInt function, override RandInt

The function RandInt(integer) is working now in intervals:
[0, X] when X > 0
[X, 0] when X < 0
[0, 1] when X in (0, 1)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
drop function RandInt(integer);

CREATE FUNCTION RandInt (X integer) 
RETURNS integer 
LANGUAGE SQL 
CONTAINS SQL 
NO EXTERNAL ACTION 
not DETERMINISTIC 
RETURN 
case when X =  0  
then int( 1  * Rand() + . 5 )
else int(X * Rand() +  0 . 5  * sign(X))
end
;

The function RandInt(integer, integer) is overriding RandInt(integer) and
working in intervals:
[start#, end#] when end# >= start#
[end#, start#] when end# <= start#

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE FUNCTION RandInt (start# integer, end# integer) 
RETURNS integer 
LANGUAGE SQL 
CONTAINS SQL 
NO EXTERNAL ACTION 
not DETERMINISTIC 
RETURN RandInt(end# - start#) + start#;

What could be also interesting to us:
Create statement of RandInt(integer, integer) function consists call to
parent function RandInt(integer).

Example of using new functions:

Код: plaintext
1.
2.
select 
randint( 500 ) int1, randint( 1000 ) int2, randint( 500 ,  1000 ) int3
from sysibm.sysdummy1;
...
Рейтинг: 0 / 0
17.10.2010, 17:19
    #36903933
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Сенсация: одни и те же номера выпали в "Лото" два раза за месяц

В минувшую субботу состоялся очередной розыгрыш лотереи "Лото". Выиграли номера 13, 14, 26, 32, 33 и 36. Следует отметить, что те же самые числа выпадали на розыгрыше, состоявшемся менее месяца назад – 21 сентября.

По мнению специалистов, статистическая вероятность такого события составляет 0,00000000000025.

При этом число победителей оказалось намного больше обычного.
Не менее 92 человек решили, что выигравшие один раз числа выпадут снова, и отметили их.
Правда, лишь трое из них угадали дополнительный номер – 2 (миспар хазак), и каждый из них получит по четыре миллиона шекелей. Дополнительный номер, выпавший в сентябре, был 1.

Число угадавших правильно 5 номеров и дополнительный составило 14 человек, каждый из них получит 6.561 шекелей.

http://www.newsru.co.il/israel/17oct2010/loto8005.html

Вопрос:
Правильно ли "учёные" подсчитали вероятность этого события ?
...
Рейтинг: 0 / 0
23.10.2010, 23:35
    #36916231
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Change RandInt function, override RandInt

The function RandInt(integer) is working now in intervals:
[0, X] when X > 0
[X, 0] when X < 0
[0, 1] when X in (0, 1)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
drop function RandInt(integer);

CREATE FUNCTION RandInt (X integer) 
RETURNS integer 
LANGUAGE SQL 
CONTAINS SQL 
NO EXTERNAL ACTION 
not DETERMINISTIC 
RETURN 
case when X =  0  
then int( 1  * Rand() + . 5 )
else int(X * Rand() +  0 . 5  * sign(X))
end
;

The function RandInt(integer, integer) is overriding RandInt(integer) and
working in intervals:
[start#, end#] when end# >= start#
[end#, start#] when end# <= start#

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE FUNCTION RandInt (start# integer, end# integer) 
RETURNS integer 
LANGUAGE SQL 
CONTAINS SQL 
NO EXTERNAL ACTION 
not DETERMINISTIC 
RETURN RandInt(end# - start#) + start#;

What could be also interesting to us:
Create statement of RandInt(integer, integer) function consists call to
parent function RandInt(integer).

Example of using new functions:

Код: sql
1.
2.
select 
randint(500) int1, randint(1000) int2, randint(500, 1000) int3
from sysibm.sysdummy1;
...
Рейтинг: 0 / 0
24.10.2010, 00:02
    #36916249
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Dice game / two players / 3 dices

We will use the RandInt(m, n) function, because of dice has numbers (in random sequence)
from 1 to 6, so it will be RandInt(1, 6) for each dice:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Select 
player1.dice1, player1.dice2, player1.dice3, 
player2.dice1, player2.dice2, player2.dice3, 
(player1.dice1 + player1.dice2 + player1.dice3) player1,
(player2.dice1 + player2.dice2 + player2.dice3) player2,
case when (player1.dice1 + player1.dice2 + player1.dice3) >
          (player2.dice1 + player2.dice2 + player2.dice3)
     then 'Player1  WIN !' 
     when (player1.dice1 + player1.dice2 + player1.dice3) <
          (player2.dice1 + player2.dice2 + player2.dice3)
     then 'Player2  WIN !' 
     else 'Tie (draw)' 
end result   
from
(select randint( 1 ,  6 ) dice1, randint( 1 ,  6 ) dice2, randint( 1 ,  6 ) dice3
from sysibm.sysdummy1) player1
,
(select randint( 1 ,  6 ) dice1, randint( 1 ,  6 ) dice2, randint( 1 ,  6 ) dice3
from sysibm.sysdummy1) player2 
...
Рейтинг: 0 / 0
24.10.2010, 00:11
    #36916253
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
авторRETURN int(X * Rand() + .5);

Так RandInt(1) иммитирует бросание монеты: 0 - решка, 1 - орёл.
С RandInt(1) все верно. А дальше?

Rand() - число от 0 до 1

2 * Rand() - число от 0 до 2

2 * Rand() + 0.5 - число от 0.5 до 2.5

int(2 * Rand() + 0.5):
- для чисел [0.5; 1) даст 0 (1/4 всего интервала);
- для чисел [1; 2) даст 1 (1/2 всего интервала);
- для чисел [2; 2.5] даст 2 (1/4 всего интервала).

И это по-вашему равномернораспределенное подбрасывание трехгранного кубика?
...
Рейтинг: 0 / 0
24.10.2010, 01:31
    #36916331
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Edd.DragonавторRETURN int(X * Rand() + .5);

Так RandInt(1) иммитирует бросание монеты: 0 - решка, 1 - орёл.
С RandInt(1) все верно. А дальше?

Rand() - число от 0 до 1

2 * Rand() - число от 0 до 2

2 * Rand() + 0.5 - число от 0.5 до 2.5

int(2 * Rand() + 0.5):
- для чисел [0.5; 1) даст 0 (1/4 всего интервала);
- для чисел [1; 2) даст 1 (1/2 всего интервала);
- для чисел [2; 2.5] даст 2 (1/4 всего интервала).

И это по-вашему равномернораспределенное подбрасывание трехгранного кубика?
Вы забыли кое-что: INT: Function RETURN int(X * Rand() + .5)
Следовательно: 2 * Rand() + 0.5 - число от 0.5 до 2.5 ==>
RandInt(2) = int(2 * Rand() + 0.5) - число от 0 до 2
...
Рейтинг: 0 / 0
24.10.2010, 01:39
    #36916338
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Lkhiger
Вы забыли кое-что: INT: Function RETURN int(X * Rand() + .5)
Следовательно: 2 * Rand() + 0.5 - число от 0.5 до 2.5 ==>
RandInt(2) = int(2 * Rand() + 0.5) - число от 0 до 2

Да я что спорю!? Конечно от 0 до 2. Я в точности это же и написал, не?

Я- для чисел [0.5; 1) даст 0 (1/4 всего интервала);
- для чисел [1; 2) даст 1 (1/2 всего интервала);
- для чисел [2; 2.5] даст 2 (1/4 всего интервала).

А теперь все-таки прочтите без спешки и поймите смысл этой цитаты. В ней сказано, что функция (как вы и задумали) возвращает в этом случае 0, 1 или 2. Но кроме этого показано, в СКОЛЬКИХ случаях она вернет 0, в скольких 1, и в скольких 2. Из 1000 чисел примерно 250 раз выпадет 0, 250 раз 2, и целых 500 раз единица.
...
Рейтинг: 0 / 0
24.10.2010, 02:56
    #36916375
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Edd.DragonLkhiger
Вы забыли кое-что: INT: Function RETURN int(X * Rand() + .5)
Следовательно: 2 * Rand() + 0.5 - число от 0.5 до 2.5 ==>
RandInt(2) = int(2 * Rand() + 0.5) - число от 0 до 2

Да я что спорю!? Конечно от 0 до 2. Я в точности это же и написал, не?

Я- для чисел [0.5; 1) даст 0 (1/4 всего интервала);
- для чисел [1; 2) даст 1 (1/2 всего интервала);
- для чисел [2; 2.5] даст 2 (1/4 всего интервала).

А теперь все-таки прочтите без спешки и поймите смысл этой цитаты. В ней сказано, что функция (как вы и задумали) возвращает в этом случае 0, 1 или 2. Но кроме этого показано, в СКОЛЬКИХ случаях она вернет 0, в скольких 1, и в скольких 2. Из 1000 чисел примерно 250 раз выпадет 0, 250 раз 2, и целых 500 раз единица.
Красивое рассуждение ! Вы забыли, однако, что 0.5 действует на всех интервалах, поэтому то орёл/решка выпадают равномерно.

Можно было записать формулу и по-иному, так:
Код: plaintext
RandInt(X) = Round(X * rand(), 0)
Или так:
Код: plaintext
RandInt(X) = X * rand() + rand()

Но это не сильно бы повлияло на результат.
...
Рейтинг: 0 / 0
25.10.2010, 14:17
    #36918055
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Lkhiger
Красивое рассуждение ! Вы забыли, однако, что 0.5 действует на всех интервалах, поэтому то орёл/решка выпадают равномерно.

Мда...

Орел решка, т.е. 0-1 логично что выпадают равномерно! И это я тоже в самом начале написал. А вы в упор не видите, что в остальных случаях (т.е. начиная с 0-1-2) равномерности нет и быть не может. Я же пошагово расписал/разжевал как так выходит. А вы мне в ответ воду льете мол, "фигня и неправда". Где ошибка в моих рассуждениях - тыкните носом и покажите как будет.

Не заставляйте меня в третий раз повторять ту же цитату, в смысл которой вы упорно не хотите вникнуть. Почему я должен вам доказываить то, что очевидно и что вы сами в состоянии проверить. Подбросте трех- или более гранную кость и посчитайте сколько каких значений у вас выпало. Поровну?

Вот результаты 10 000 подбрасываний от 2 до 6 граней:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
 0 :   5092 
 1 :   4908 

======

 0 :   2474 
 1 :   5050 
 2 :   2476 

======

 0 :   1660 
 1 :   3285 
 2 :   3400 
 3 :   1655 

======

 0 :   1230 
 1 :   2453 
 2 :   2509 
 3 :   2553 
 4 :   1255 

======

 0 :   991 
 1 :   2010 
 2 :   1975 
 3 :   2048 
 4 :   2004 
 5 :   972 

Сами же могли проверить прежде чем возражать.

________________________________________________________________


авторМожно было записать формулу и по-иному, так:
RandInt(X) = Round(X * rand(), 0)
Но это не сильно бы повлияло на результат.
Точно! Крайних значений снова будет вдвое меньше, чем средних! )))
...
Рейтинг: 0 / 0
25.10.2010, 14:25
    #36918074
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
А делать можно например так:

Floor((X + 1) * Rand());

В таком случае при X = 2 получим случайное число от 0 до 3 (не включая 3) и далее
- [0; 1) округляется до 0;
- [1; 2) округляется до 1;
- [2; 3) округляется до 2.

Ровно 3 никогда не будет. Т.к. если верить мануалу ( http://msdn.microsoft.com/en-us/library/ms177610.aspx ) RAND возвращает число от 0 до 1, не включая единицу, т.е. от 0 до 0.9999...
...
Рейтинг: 0 / 0
25.10.2010, 16:04
    #36918382
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Edd.DragonА делать можно например так:

Floor((X + 1) * Rand());

В таком случае при X = 2 получим случайное число от 0 до 3 (не включая 3) и далее
- [0; 1) округляется до 0;
- [1; 2) округляется до 1;
- [2; 3) округляется до 2.

Ровно 3 никогда не будет. Т.к. если верить мануалу ( http://msdn.microsoft.com/en-us/library/ms177610.aspx ) RAND возвращает число от 0 до 1, не включая единицу, т.е. от 0 до 0.9999...
Отличная работа ! Правда я не вижу разницы между FLOOR и INT.

А как себя ведёт функция, когда Х = 0, или Х = -1 ?

Поэтому предлагаю:
Код: plaintext
1.
2.
3.
RandInt (X) = 
CASE WHEN X in (0, 1) THEN int(RAND() + RAND())
         ELSE int(X * RAND() + SIGN(X) * RAND())
END
...
Рейтинг: 0 / 0
25.10.2010, 16:16
    #36918422
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Код: plaintext
1.
2.
3.
RandInt (X) = 
CASE WHEN X in (0, 1) THEN int(RAND() + RAND(1))         
ELSE int(X * RAND() + SIGN(X) * RAND(1))
END
...
Рейтинг: 0 / 0
27.10.2010, 00:16
    #36921667
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Lkhiger
Правда я не вижу разницы между FLOOR и INT.

Заигрался и забыл поменять

Lkhiger
А как себя ведёт функция, когда Х = 0, или Х = -1 ?

Поэтому предлагаю:
Код: plaintext
1.
2.
3.
RandInt (X) = 
CASE WHEN X in (0, 1) THEN int(RAND() + RAND())
         ELSE int(X * RAND() + SIGN(X) * RAND())
END

При нуле смысл функции - вернуть случайное число от 0 до X=0, т.е. 0.

При отрицательном нужно сделать тоже, что и при положительном, но вернуть результат с минусом.

Ваш же вариант для такого случая
Код: plaintext
ELSE int(X * RAND() + SIGN(X) * RAND())
вы получается снова предложили, не проверив.

Покажите сколько каких значений в диапазоне [-4; 0] по вашей формуле выпадет при 10 000 подбрасываний.
...
Рейтинг: 0 / 0
27.10.2010, 00:21
    #36921673
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Стоп! Прошу прощения, то я уже накосячил. Конечно, все верно.

Только нужен один рендом, а то сумма N величин распределенных по равномерному закону (рендомы) стремится к величине распределенной по нормальному закону (при достаточно большом N). Т.е. суммируя несколько рендомов мы портим равномерность распределения.

Код: plaintext
int((X + SIGN(X)) * RAND())
...
Рейтинг: 0 / 0
27.10.2010, 06:41
    #36921829
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Edd.DragonСтоп! Прошу прощения, то я уже накосячил. Конечно, все верно.

Только нужен один рендом, а то сумма N величин распределенных по равномерному закону (рендомы) стремится к величине распределенной по нормальному закону (при достаточно большом N). Т.е. суммируя несколько рендомов мы портим равномерность распределения.

Код: plaintext
int((X + SIGN(X)) * RAND())

Ok, but....

При Х = 0 неопределённость исчезает, однако....
...
Рейтинг: 0 / 0
27.10.2010, 07:00
    #36921837
Lkhiger
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Опыты по Теории Вероятностей
Интересно создать ещё одну функцию
Код: plaintext
RandInt () 
, которая действует на всём интервале целых чисел:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE FUNCTION RandInt () 
RETURNS integer 
LANGUAGE SQL 
CONTAINS SQL 
NO EXTERNAL ACTION 
not DETERMINISTIC 
RETURN RandInt(- 2147483648 ,  2147483647 );

Эта функция без аргументов.

Интересно изучить её поведение. Даёт ли она целое близкое к 0 ?
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Опыты по Теории Вероятностей / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]