Задача №5

Розробити клас «Керівник танців»

ПоляМасив імен хлопців
Масив імен дівчат
МетодиМетод випадкового вибору імені хлопця
Метод випадкового вибору імені дівчини
Метод виведення пари для танців
Метод run , який ініціює через кожні 5 секунд виведення нової пари для танців

Рішення:

'use strict'

/** @type {(from: number, to: number) => number} */
function generateIntegerInRange(from, to) {
  return from + Math.floor(Math.random() * (to - from + 1))
}

/**
 * The DanceManager class is responsible for managing a dance event
 * where random pairs of boys and girls are displayed as dancing together.
 */
class DanceManager {
  /**
   * @param {string[]} boys
   * @param {string[]} girls
   */
  constructor(boys, girls) {
    this.boys = boys
    this.girls = girls
    this.interval = null
  }

  getRandomBoy() {
    const randomBoyIndex = generateIntegerInRange(0, this.boys.length - 1)

    return this.boys[randomBoyIndex]
  }

  getRandomGirl() {
    const randomGirlIndex = generateIntegerInRange(0, this.girls.length - 1)

    return this.girls[randomGirlIndex]
  }

  displayDancePair() {
    console.log(`Танцюють ${this.getRandomBoy()} та ${this.getRandomGirl()}!`)
  }

  /**
   * @param {number} [intervalSeconds = 1]
   */
  run(intervalSeconds = 5) {
    if (this.interval) {
      console.warn(`${this.constructor.name} вже запущено.`)
      return
    }

    console.log('Танцювальна вечірка розпочалась! 🕺💃')
    this.interval = setInterval(() => {
      this.displayDancePair()
    }, intervalSeconds * 1000)
  }

  stop() {
    if (this.interval !== null) {
      console.log('Танцювальна вечірка завершилась!')
      clearInterval(this.interval)
      this.interval = null
    }
  }
}

const boys = ['Іван', 'Богдан', 'Андрій', 'Петро', 'Стефан']
const girls = ['Галина', 'Світлана', 'Тетяна', 'Анна', 'Христина']
const privateDanceClub = new DanceManager(boys, girls)

privateDanceClub.run()

setTimeout(() => {
  privateDanceClub.stop()
}, 6e4)