Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solve(arr) {
- const courses = new Map();
- // course regex
- const coursePattern = /(?<name>[\w#]+):\s(?<cap>\d+)/;
- const studentPattern = /(?<username>\w+)\[(?<credit>\d+)\] with email (?<email>\w+@\w+\.\w+) joins (?<course>[\w#]+)/;
- for (const e of arr) {
- if (coursePattern.test(e)) {
- const {name: course, cap: capacity} = e.match(coursePattern).groups;
- if (!courses.has(course)) {
- courses.set(course, {students: [], capacity: Number(capacity)});
- } else {
- courses.get(course).capacity += Number(capacity);
- }
- } else if (studentPattern.test(e)) {
- const {username, email,credit, course} = e.match(studentPattern).groups;
- if (courses.has(course)) {
- if (courses.get(course).capacity > 0) {
- courses.get(course).students.push({username, email, credit: Number(credit)});
- courses.get(course).capacity--;
- }
- }
- }
- }
- [...courses.entries()]
- .sort((a, b) => {
- return b[1].students.length - a[1].students.length;
- })
- .forEach(e => {
- console.log(`${e[0]}: ${courses.get(e[0]).capacity} places left`);
- courses.get(e[0]).students
- .sort((a, b) => {
- return b.credit - a.credit;
- })
- .forEach(s => console.log(`--- ${s.credit}: ${s.username}, ${s.email}`));
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement