Задача №9
Дано два списки прізвищ студентів, що відвідують гуртки з математики та історії.
- Підрахувати скільки студентів з гуртка історії також відвідують гурток математики.
- Також підрахувати скільки всього студентів відвідують хоча б один гурток.
Додатково: Дано третій список прізвищ студентів фізичного гуртка. Підрахувати:
- Скільки студентів відвідують усі три гуртки
- Скільки студентів відвідують історію та фізику, але не математику
- Скільки студентів відвідують лише математику
- Скільки студентів відвідують лише історію
- Скільки студентів відвідують лише фізику
- Скільки студентів відвідують лише один гурток
- Визначити чи хтось зі студентів математики або історії відвідує історію або математику, відповідно.
Рішення:
'use strict'
const mathClub = [
'Іваненко',
'Петренко',
'Коваль',
'Сидоренко',
'Мельник',
'Шевченко',
]
const historyClub = [
'Шевченко',
'Ткаченко',
'Петренко',
'Коваленко',
'Мороз',
'Литвин',
]
const physicsClub = [
'Іваненко',
'Литвин',
'Гончар',
'Коваль',
'Мороз',
'Ткаченко',
'Шевченко',
]
const mathClubSet = new Set(mathClub)
const historyClubSet = new Set(historyClub)
const physicsClubSet = new Set(physicsClub)
// =============================================================================
console.log('Математики:', mathClub)
console.log('Історики:', historyClub)
console.log('Фізики:', physicsClub)
// Підрахувати скільки студентів з гуртка з історії також відвідують гурток з математики
//? A∩B
console.log(
'Студенти, які відвідують гуртки історії та математики',
mathClubSet.intersection(historyClubSet).size,
)
// Також підрахувати скільки всього студентів відвідують хоча б один гурток
//? A∪B
const allStudentsSet = mathClubSet.union(historyClubSet)
console.log('Усі студенти', allStudentsSet.size)
//## Додатково
console.log('%cДодатково', 'font-size: 1.25rem;')
// Підрахувати скільки студентів відвідують усі три гуртки
//? A∩B∩C
const studentsVisitAllWorkshops = mathClubSet
.intersection(historyClubSet)
.intersection(physicsClubSet)
console.log('Відвідують усі три гуртки', studentsVisitAllWorkshops.size)
// Підрахувати скільки студентів відвідують лише історію та фізику, але не математику
//? B∩C\A
const historyAndPhysicsStudentsSize = historyClubSet
.intersection(physicsClubSet)
.difference(mathClubSet).size
console.log(
'Студенти, які відвідують гуртки історії та фізики, але не математики',
historyAndPhysicsStudentsSize,
)
// Підрахувати скільки студентів відвідують лише математику
//? A\B\C
const onlyMathSet = mathClubSet
.difference(historyClubSet)
.difference(physicsClubSet)
console.log('Лише математику', onlyMathSet.size)
// Підрахувати скільки студентів відвідують лише історію
//? B\A\C
const onlyHistorySet = historyClubSet
.difference(mathClubSet)
.difference(physicsClubSet)
console.log('Лише історію', onlyHistorySet.size)
// Підрахувати скільки студентів відвідують лише фізику
//? C\A\B
const onlyPhysicsSet = physicsClubSet
.difference(mathClubSet)
.difference(historyClubSet)
console.log('Лише фізику', onlyPhysicsSet.size)
// Підрахувати скільки студентів відвідують лише один гурток
//? (A\B\C)∪(B\A\C)∪(C\A\B)
const onlyOneSet = onlyMathSet.union(onlyHistorySet).union(onlyPhysicsSet)
console.log('Лише 1 гурток', onlyOneSet.size)
// Визначити чи хтось з математики або історії відвідує історію або математику, відповідно.
//? A∩B≠∅
console.log(
'Чи хтось з математики або історії відвідує історію або математику, відповідно',
!mathClubSet.isDisjointFrom(historyClubSet),
)
