updated project 2
This commit is contained in:
@@ -9,6 +9,18 @@ declare -A CHALLENGE_CATEGORIES=(
|
||||
["text"]="Text Processing"
|
||||
["proc"]="Process Management"
|
||||
["net"]="Network Operations"
|
||||
["pipe"]="Pipelines & Redirection"
|
||||
["shell"]="Shell Scripting"
|
||||
["git"]="Git Operations"
|
||||
)
|
||||
|
||||
# Challenge difficulty descriptions
|
||||
declare -A DIFFICULTY_DESCRIPTIONS=(
|
||||
[1]="Beginner - Basic command usage"
|
||||
[2]="Intermediate - Combined commands"
|
||||
[3]="Advanced - Complex operations"
|
||||
[4]="Expert - System administration"
|
||||
[5]="Master - Advanced scripting"
|
||||
)
|
||||
|
||||
# Challenge definitions with metadata
|
||||
@@ -181,19 +193,40 @@ verify_result() {
|
||||
local end_time=$(date +%s)
|
||||
|
||||
if [[ "$actual" == "$expected" ]]; then
|
||||
log_message "SUCCESS" "Challenge $challenge_id: $message"
|
||||
update_challenge_status "$challenge_id" "1" "$end_time"
|
||||
log_message "SUCCESS" "Challenge $challenge_id completed successfully!"
|
||||
echo -e "\n${GREEN}🎉 Congratulations! Challenge completed!${NC}"
|
||||
echo -e "${BLUE}Summary:${NC}"
|
||||
echo -e "- Time taken: $(format_duration $((end_time - start_time)))"
|
||||
echo -e "- Commands used: $(get_command_count "$challenge_id")"
|
||||
|
||||
# Calculate bonus points
|
||||
# Calculate and award points
|
||||
local duration=$((end_time - start_time))
|
||||
local command_count=$(get_command_count "$challenge_id")
|
||||
local bonus_points=$(calculate_bonus_points "$duration" "$command_count")
|
||||
local total_points=$((100 + bonus_points))
|
||||
|
||||
echo -e "\n${YELLOW}Points earned:${NC}"
|
||||
echo -e "- Base points: 100"
|
||||
echo -e "- Time bonus: $time_bonus"
|
||||
echo -e "- Efficiency bonus: $efficiency_bonus"
|
||||
echo -e "- Total points: $total_points"
|
||||
|
||||
# Update progress
|
||||
update_challenge_status "$challenge_id" "1" "$end_time"
|
||||
award_points "$challenge_id" "$total_points"
|
||||
|
||||
# Show next challenge suggestion
|
||||
suggest_next_challenge "$challenge_id"
|
||||
|
||||
award_points "$challenge_id" "$((100 + bonus_points))"
|
||||
return 0
|
||||
else
|
||||
log_message "ERROR" "Challenge $challenge_id: Completed $actual/$expected checks"
|
||||
update_challenge_status "$challenge_id" "0" "$end_time"
|
||||
log_message "ERROR" "Challenge incomplete: $actual/$expected requirements met"
|
||||
echo -e "\n${RED}Challenge not completed yet.${NC}"
|
||||
echo -e "Progress: $actual/$expected requirements met"
|
||||
echo -e "\n${YELLOW}Tips:${NC}"
|
||||
echo -e "- Use 'hint' command for guidance"
|
||||
echo -e "- Check your work carefully"
|
||||
echo -e "- Try breaking down the task into smaller steps"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -263,4 +296,120 @@ list_challenges() {
|
||||
echo "Task: $task"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Function to add new challenge
|
||||
add_challenge() {
|
||||
local id=$1
|
||||
local type=$2
|
||||
local name=$3
|
||||
local difficulty=$4
|
||||
local skills=$5
|
||||
local task=$6
|
||||
local hints=$7
|
||||
local requirements=$8
|
||||
local criteria=$9
|
||||
|
||||
# Validate challenge ID format
|
||||
if [[ ! $id =~ ^[1-9]\.[1-5]$ ]]; then
|
||||
log_message "ERROR" "Invalid challenge ID format. Must be level.number (e.g., 1.1)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Validate challenge type
|
||||
if [[ -z "${CHALLENGE_CATEGORIES[$type]}" ]]; then
|
||||
log_message "ERROR" "Invalid challenge type. Available types: ${!CHALLENGE_CATEGORIES[*]}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Validate difficulty
|
||||
if ((difficulty < 1 || difficulty > 5)); then
|
||||
log_message "ERROR" "Invalid difficulty. Must be between 1 and 5"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Add challenge to CHALLENGES array
|
||||
CHALLENGES[$id]="${type}|${name}|${difficulty}|${skills}|${task}|${hints}|${requirements}|${criteria}"
|
||||
log_message "SUCCESS" "Added challenge $id: $name"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to list available challenges by category
|
||||
list_challenges_by_category() {
|
||||
local category=${1:-all}
|
||||
|
||||
echo -e "\n${BOLD}Available Challenges:${NC}"
|
||||
echo "===================="
|
||||
|
||||
if [[ "$category" == "all" ]]; then
|
||||
for cat in "${!CHALLENGE_CATEGORIES[@]}"; do
|
||||
echo -e "\n${BLUE}${CHALLENGE_CATEGORIES[$cat]}:${NC}"
|
||||
for id in "${!CHALLENGES[@]}"; do
|
||||
IFS='|' read -r type name difficulty skills task hints requirements criteria <<< "${CHALLENGES[$id]}"
|
||||
if [[ ${type%%_*} == "$cat" ]]; then
|
||||
echo -e "${YELLOW}$id${NC} ($(printf '★%.0s' $(seq 1 "$difficulty"))) - $name"
|
||||
echo -e " ${CYAN}Skills:${NC} $skills"
|
||||
echo -e " ${CYAN}Task:${NC} $task"
|
||||
fi
|
||||
done
|
||||
done
|
||||
else
|
||||
if [[ -z "${CHALLENGE_CATEGORIES[$category]}" ]]; then
|
||||
log_message "ERROR" "Invalid category. Available categories: ${!CHALLENGE_CATEGORIES[*]}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "\n${BLUE}${CHALLENGE_CATEGORIES[$category]}:${NC}"
|
||||
for id in "${!CHALLENGES[@]}"; do
|
||||
IFS='|' read -r type name difficulty skills task hints requirements criteria <<< "${CHALLENGES[$id]}"
|
||||
if [[ ${type%%_*} == "$category" ]]; then
|
||||
echo -e "${YELLOW}$id${NC} ($(printf '★%.0s' $(seq 1 "$difficulty"))) - $name"
|
||||
echo -e " ${CYAN}Skills:${NC} $skills"
|
||||
echo -e " ${CYAN}Task:${NC} $task"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to suggest next challenge
|
||||
suggest_next_challenge() {
|
||||
local current_id=$1
|
||||
local level=${current_id%.*}
|
||||
local number=${current_id#*.}
|
||||
|
||||
echo -e "\n${BLUE}What's next?${NC}"
|
||||
|
||||
# Suggest next challenge in same level
|
||||
local next_number=$((number + 1))
|
||||
local next_id="${level}.${next_number}"
|
||||
|
||||
if [[ -n "${CHALLENGES[$next_id]:-}" ]]; then
|
||||
IFS='|' read -r type name difficulty skills task hints requirements criteria <<< "${CHALLENGES[$next_id]}"
|
||||
echo -e "→ Try challenge ${YELLOW}$next_id${NC}: $name"
|
||||
else
|
||||
# Suggest first challenge of next level
|
||||
local next_level=$((level + 1))
|
||||
local next_id="${next_level}.1"
|
||||
if [[ -n "${CHALLENGES[$next_id]:-}" ]]; then
|
||||
IFS='|' read -r type name difficulty skills task hints requirements criteria <<< "${CHALLENGES[$next_id]}"
|
||||
echo -e "→ Ready for next level? Try ${YELLOW}$next_id${NC}: $name"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to format duration
|
||||
format_duration() {
|
||||
local seconds=$1
|
||||
local minutes=$((seconds / 60))
|
||||
local hours=$((minutes / 60))
|
||||
minutes=$((minutes % 60))
|
||||
seconds=$((seconds % 60))
|
||||
|
||||
if ((hours > 0)); then
|
||||
printf "%dh %dm %ds" $hours $minutes $seconds
|
||||
elif ((minutes > 0)); then
|
||||
printf "%dm %ds" $minutes $seconds
|
||||
else
|
||||
printf "%ds" $seconds
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user