17
Практика
1. Напишите PL/pgSQL-функцию, которая возвращает строку
заданной длины из случайных символов.
2. Задача про игру в «наперстки».
В одном из трех наперстков спрятан выигрыш.
Игрок выбирает один из этих трех. Ведущий убирает один из
двух оставшихся наперстков (обязательно пустой) и дает
игроку возможность поменять решение, то есть выбрать
второй из двух оставшихся.
Есть ли смысл игроку менять выбор или нет смысла менять
первоначальный вариант?
Задание: используя PL/pgSQL, посчитайте вероятность
выигрыша и для начального выбора, и для измененного.
Предварительно можно создать функцию rnd_integer, которая
возвращает случайное целое число в заданном диапазоне. Функция
будет полезна для решения обоих заданий.
Например: rnd_integer(30, 1000) → 616
1. Помимо длины строки на вход функции можно подавать список
допустимых символов. По умолчанию, это могут быть все символы
алфавита, числа и некоторые знаки. Для определения случайных
символов из списка можно использовать функцию rnd_integer.
Объявление функции может быть таким:
CREATE FUNCTION rnd_text(
len int,
list_of_chars text DEFAULT
'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэю
яABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789'
) RETURNS text AS ...
Пример вызова: rnd_text(10) → 'ЛжdфbЁ_OОJ'
2. Для решения можно использовать анонимный блок.
Сначала нужно реализовать одну игру и посмотреть, какой вариант
выиграл: начальный или измененный. Для загадывания и угадывания
одного из трех наперстков можно использовать rnd_integer(1,3).
Затем игру поместить в цикл и «сыграть», например, 1000 раз,
подсчитывая, какой вариант сколько раз победил. В конце через RAISE
NOTICE вывести значения счетчиков и выявить победивший вариант
(или отсутствие такового).