代码模拟重庆高考平行志愿录取过程
class Candidate {
constructor(id, score, rank, volunteers) {
this.id = id;
this.score = score;
this.rank = rank;
this.volunteers = volunteers; // Array of { schoolId, majorCode }
}
}
class School {
constructor(id, name, capacity, scoreLines) {
this.id = id;
this.name = name;
this.capacity = capacity;
this.currentCount = 0;
this.scoreLines = scoreLines; // Map of { majorCode: scoreLine }
}
canAdmit(candidateScore, majorCode) {
const scoreLine = this.scoreLines[majorCode];
if (scoreLine === undefined) {
console.error(`No score line found for major code ${majorCode} in school ${this.name}`);
return false;
}
return candidateScore >= scoreLine && this.currentCount < this.capacity;
}
admitStudent() {
this.currentCount++;
}
}
function sortCandidates(candidates) {
return candidates.sort((a, b) => b.score - a.score || a.rank - b.rank); // Assuming rank breaks ties
}
function simulateAdmission(candidates, schools) {
const sortedCandidates = sortCandidates(candidates);
for (let candidate of sortedCandidates) {
for (let volunteer of candidate.volunteers) {
const school = schools.find(s => s.id === volunteer.schoolId);
if (school && school.canAdmit(candidate.score, volunteer.majorCode)) {
console.log(`Candidate ${candidate.id} with score ${candidate.score} is admitted to ${school.name} for major code ${volunteer.majorCode}`);
school.admitStudent();
break; // Stop checking other volunteers once admitted
}
}
}
// Optional: Print schools' current enrollment status
for (let school of schools) {
console.log(`School ${school.name} has admitted ${school.currentCount} students.`);
}
}
// Example data
const candidates = [
new Candidate(1, 650, 1, [{ schoolId: 1, majorCode: '501' }]),
new Candidate(2, 645, 2, [{ schoolId: 2, majorCode: '509' }]),
// Add more candidates as needed
];
const schools = [
new School(1, "School A", 100, { '501': 645 }),
new School(2, "School B", 150, { '509': 640 }),
// Add more schools with corresponding score lines
];
// Simulate the admission process
simulateAdmission(candidates, schools);
说明
-
Candidate 类:志愿列表中的对象现在包含学校ID和专业代码。
-
School 类:包含一个
scoreLines对象,用于存储每个专业代码的录取分数线。canAdmit方法接受考生分数和专业代码作为参数,并根据这些信息判断是否可以录取考生。 -
simulateAdmission 函数:在检查考生是否符合录取条件时,会传递考生分数和专业代码给
canAdmit方法。 -
示例数据:考生志愿包含专业代码,学校数据包含对应专业代码的录取分数线。
谢谢您的来访,欢迎关注交流!以下是我的个人联系方式
电子邮箱:spring.wind2006@163.com,QQ:402085437,微信号:tm402085437

浙公网安备 33010602011771号