ใบงานที่ 4 - Tuple & Set
1) โจทย์ (8 คะแนน)
โรงเรียนวิทยาศาสตร์แห่งหนึ่งกำลังจะจัดงาน Science Fair ขึ้นในเดือนมกราคม 2565 ภายในงานนอกจากจะมีการนำเสนอโครงงานแล้ว ยังให้ผู้เข้าร่วมงานลงทะเบียนทำกิจกรรมต่าง ๆ ฝ่ายลงทะเบียนมีข้อมูลการลงทะเบียนแต่ละกิจกรรม ซึ่งเก็บเป็นเซตของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรมนั้น ๆ ตัวอย่างการเก็บข้อมูล เช่น
a = {'004', '003', '032', '097'}
คือเซตของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรม A
b = {'003', '004'}
คือเซตของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรม B
c = {'120', '097', '003'}
คือเซตของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรม C
ฝ่ายลงทะเบียนต้องการทราบข้อมูล 2 อย่าง ได้แก่
-
รหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรมอย่างน้อยหนึ่งกิจกรรม เช่น
-
ผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรม A หรือ B อย่างน้อยหนึ่งกิจกรรม
ซึ่งถ้าพิจารณาตามตัวอย่างด้านบน คำตอบคือ รหัส
'003', '004', '032', '097'
-
-
รหัสผู้เข้าร่วมงานที่ลงทะเบียนทำบางกิจกรรมเหมือนกัน เช่น
-
ผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรม A และ B
ซึ่งถ้าพิจารณาตามตัวอย่างด้านบน คำตอบคือ รหัส
'003'
และ'004'
-
ผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรม A และ B และ C
ซึ่งถ้าพิจารณาตามตัวอย่างด้านบน คำตอบคือ รหัส
'003'
-
จงเขียนฟังก์ชัน sciAct
ดังนี้
เป็นฟังก์ชันที่รับ arguments ที่เป็นข้อมูลประเภท set
(เซตของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรมนั้น ๆ) กี่ตัวก็ได้ (สมมติว่ากิจกรรมมีไม่จำกัด) แล้วส่งค่ากลับเป็นลิสต์ของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำกิจกรรมอย่างน้อยหนึ่งกิจกรรม และลิสต์ของรหัสผู้เข้าร่วมงานที่ลงทะเบียนทำบางกิจกรรมเหมือนกัน ทั้งนี้ ข้อมูลภายในทั้งสองลิสต์ให้เรียงลำดับข้อมูลตามตัวอักษร A -> Z
ตัวอย่างการเรียกใช้ฟังก์ชัน sciAct
a = {'004', '003', '032', '097'}
b = {'003', '004'}
c = {'120', '097', '003'}
print(sciAct(a, b))
print(sciAct(c, a, b))
ซึ่งผลลัพธ์ที่ควรได้ คือ
(['003', '004', '032', '097'], ['003', '004'])
(['003', '004', '032', '097', '120'], ['003'])