Files
hr-assessment-system/lib/utils/score-calculator.ts

190 lines
5.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export interface TestScore {
score: number
level: string
description: string
color: string
}
export function calculateLogicScore(correctAnswers: number, totalQuestions: number): TestScore {
const score = Math.round((correctAnswers / totalQuestions) * 100)
if (score >= 90) {
return {
score,
level: "優秀",
color: "bg-green-500",
description: "邏輯思維能力出色,具備卓越的分析和推理能力",
}
}
if (score >= 80) {
return {
score,
level: "良好",
color: "bg-blue-500",
description: "邏輯思維能力較強,能夠有效分析和解決問題",
}
}
if (score >= 70) {
return {
score,
level: "中等",
color: "bg-yellow-500",
description: "邏輯思維能力一般,有一定的分析能力",
}
}
if (score >= 60) {
return {
score,
level: "及格",
color: "bg-orange-500",
description: "邏輯思維能力需要提升,建議加強訓練",
}
}
return {
score,
level: "不及格",
color: "bg-red-500",
description: "邏輯思維能力有待加強,需要系統性訓練",
}
}
export function calculateCreativityScore(totalScore: number, maxScore: number): TestScore {
const score = Math.round((totalScore / maxScore) * 100)
if (score >= 85) {
return {
score,
level: "極具創意",
color: "bg-purple-500",
description: "擁有卓越的創新思維和想像力,能夠產生獨特的解決方案",
}
}
if (score >= 75) {
return {
score,
level: "很有創意",
color: "bg-blue-500",
description: "具備較強的創造性思維能力,善於創新",
}
}
if (score >= 65) {
return {
score,
level: "有一定創意",
color: "bg-green-500",
description: "具有一定的創新潛力,可以進一步培養",
}
}
if (score >= 50) {
return {
score,
level: "創意一般",
color: "bg-yellow-500",
description: "創造性思維有待提升,建議多參與創新活動",
}
}
return {
score,
level: "缺乏創意",
color: "bg-red-500",
description: "需要培養創新思維能力,建議接受創意思維訓練",
}
}
export function calculateCombinedScore(
logicScore: number,
creativityScore: number,
): {
overallScore: number
level: string
description: string
color: string
breakdown: {
logic: number
creativity: number
balance: number
}
} {
// 綜合分數邏輯40% + 創意40% + 平衡性20%
const logicWeight = 0.4
const creativityWeight = 0.4
const balanceWeight = 0.2
// 計算平衡性分數(兩項分數越接近,平衡性越高)
const scoreDiff = Math.abs(logicScore - creativityScore)
// 調整平衡性計算:差距在 20 分以內為滿分,差距越大扣分越少
const balanceScore = Math.max(0, 100 - Math.min(scoreDiff * 0.5, 50))
const overallScore = Math.round(
logicScore * logicWeight + creativityScore * creativityWeight + balanceScore * balanceWeight,
)
let level: string
let description: string
let color: string
if (overallScore >= 90) {
level = "卓越"
color = "bg-gradient-to-r from-purple-500 to-blue-500"
description = "綜合能力卓越,邏輯思維與創意能力並重,是理想的複合型人才"
} else if (overallScore >= 80) {
level = "優秀"
color = "bg-gradient-to-r from-blue-500 to-green-500"
description = "綜合能力優秀,在邏輯思維和創意能力方面都有良好表現"
} else if (overallScore >= 70) {
level = "良好"
color = "bg-gradient-to-r from-green-500 to-yellow-500"
description = "綜合能力良好,具備一定的邏輯思維和創意能力"
} else if (overallScore >= 60) {
level = "中等"
color = "bg-gradient-to-r from-yellow-500 to-orange-500"
description = "綜合能力中等,建議針對性提升薄弱環節"
} else {
level = "待提升"
color = "bg-gradient-to-r from-orange-500 to-red-500"
description = "綜合能力有待提升,建議系統性訓練邏輯思維和創意能力"
}
return {
overallScore,
level,
description,
color,
breakdown: {
logic: logicScore,
creativity: creativityScore,
balance: Math.round(balanceScore),
},
}
}
export function getRecommendations(logicScore: number, creativityScore: number): string[] {
const recommendations: string[] = []
if (logicScore < 70) {
recommendations.push("建議加強邏輯思維訓練,多做推理題和數學題")
recommendations.push("學習系統性思維方法,如思維導圖、流程圖等")
}
if (creativityScore < 70) {
recommendations.push("建議參與更多創意活動,如頭腦風暴、設計思維工作坊")
recommendations.push("培養好奇心,多接觸不同領域的知識和經驗")
}
const scoreDiff = Math.abs(logicScore - creativityScore)
if (scoreDiff > 20) {
if (logicScore > creativityScore) {
recommendations.push("您的邏輯思維較強,建議平衡發展創意能力")
} else {
recommendations.push("您的創意能力較強,建議平衡發展邏輯思維")
}
}
if (logicScore >= 80 && creativityScore >= 80) {
recommendations.push("您具備優秀的綜合能力,建議承擔更多挑戰性工作")
recommendations.push("可以考慮擔任需要創新和分析並重的領導角色")
}
return recommendations
}