ArtemiiKravchuk / рандом

MTP модуль для роботи із випадковими числами. Генерація випадкового числа в заданому проміжку, вибір випадкового елемента списку, перемішати список, випадкове логічне значення та інше...

Отримати
взяти "хмарний.пак.укр/рандом/0.1.0"
0.1.0
;--
MTP модуль Мавки для роботи із випадковими числами
Кравчук Артемій, [email protected], https://github.com/ArtemiiKravchuk

Версія 0.1.0, останні зміни 31.03.2023
--;


модуль рандом

  ;; повертає випадкове число між 0 та 1
  дія число() число
    global.Math.random()
  кінець

  ;; повертає випадкове ціле число у даному проміжку від мінімального значення (включно) до максимального (виключно)
  дія проміжок(мін число, макс число, шаг число = 1) число
    якщо мін == пусто або макс == пусто
      впасти "функція рандом.проміжок() повинна отримати як мінімум 2 аргументи: мінімальне (включно) та максимальне (виключно) числа." 
    кінець
    значення = []
    перебрати діапазон(мін, макс, шаг) як елемент
      значення.додати(елемент)
    кінець
    значення[global.Math.trunc(число()*значення.довжина())]
  кінець

  ;; повертає випадковий елемент списку
  дія елемент(вхідний_список список) щось
    вхідний_список[проміжок(0, вхідний_список.довжина())]
  кінець

  ;; повертає випадкові елементи списку, кількість передається як другий аргумет
  дія елементи(вхідний_список список, кількість число) список
    якщо кількість-global.Math.trunc(кількість)!=0
      впасти "функція рандом.елементи(): другий аргумент (кількість) повинен бути цілим, кількість=%(кількість)."
    кінець
    якщо кількість > 0
      результат = []
      перебрати діапазон(0, кількість)
        результат.додати(вхідний_список[проміжок(0, вхідний_список.довжина())])
      кінець
      результат
    інакше
      впасти "функція рандом.елементи(): кількість не може дорівнювати або бути меншим за нуль, кількість=%(кількість)."
    кінець
  кінець

  ;; повертає випадковий ключ словнику
  дія ключ(вхідний_словник словник) щось
    ключі = []
    перебрати вхідний_словник.ключі() як ключ
      ключі.додати(ключ)
    кінець
    елемент(ключі)
  кінець

  ;; повертає випадкове значення із словника
  дія значення(вхідний_словник словник) щось
    вхідний_словник[ключ(вхідний_словник)]
  кінець

  ;; повертає випадкове логічне значення ("так" або "ні")
  дія логічне(вага1 число = 1, вага2 число = 1) число
    якщо вага1-global.Math.trunc(вага1)!=0 або вага2-global.Math.trunc(вага2)!=0
      впасти "функція рандом.логічне(): значення ваги повинно бути цілим, вага1=%(вага1), вага2=%(вага2)."
    кінець
    якщо вага1>0 і вага2>0
      можливі_результати = []
      перебрати діапазон(0, вага1+вага2) як ітерація
        якщо ітерація < вага1
          можливі_результати.додати(так)
        інакше
          можливі_результати.додати(ні)
        кінець
      кінець
      елемент(можливі_результати)
    інакше
      впасти "функція рандом.логічне(): значення ваги не може дорівнювати або бути меншим за нуль, вага1=%(вага1), вага2=%(вага2)."
    кінець
  кінець

  ;; повертає НОВИЙ список, складений із елементів даного у випадковому порядку
  дія перемішати(вхідний_список список) список
    новий_список = []
    поки вхідний_список.довжина() > 0
      випадковий_елемент = елемент(вхідний_список)
      новий_список.додати(випадковий_елемент)
      змінений_список = []
      вже_перенесено = ні
      перебрати вхідний_список як елементи
        якщо ( елементи != випадковий_елемент ) або ( вже_перенесено == так )
          змінений_список.додати(елементи)
        інакше
          вже_перенесено = так
        кінець
      кінець
      вхідний_список = змінений_список
    кінець
    новий_список
  кінець

  дати число
  дати проміжок
  дати елемент
  дати елементи
  дати ключ
  дати значення
  дати логічне
  дати перемішати
кінець

дати рандом
Версії