Files
2025-02-09 02:33:45 -06:00

257 lines
7.4 KiB
Bash

#!/bin/bash
# Directory structure
CHALLENGE_DIR=~/challenge
TRACKING_DIR="$CHALLENGE_DIR/.tracking"
DATA_DIR="$TRACKING_DIR/data"
REPORT_DIR="$TRACKING_DIR/reports"
# Data files
PROGRESS_FILE="$DATA_DIR/progress.csv"
SCORE_FILE="$DATA_DIR/score.csv"
LOG_FILE="$DATA_DIR/challenge.log"
COMMAND_LOG="$DATA_DIR/commands.log"
TIME_LOG="$DATA_DIR/time.log"
HINT_FILE="$DATA_DIR/hints_used.csv"
ACHIEVEMENT_FILE="$DATA_DIR/achievements.csv"
ATTEMPT_FILE="$DATA_DIR/attempts.csv"
SKILL_FILE="$DATA_DIR/skills.csv"
# Formatting
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
BOLD='\033[1m'
NC='\033[0m'
# Achievement definitions with categories
declare -A ACHIEVEMENTS=(
# Speed achievements
["speed_demon"]="Complete any challenge in under 1 minute|speed"
["speed_runner"]="Complete 3 challenges in under 5 minutes|speed"
# Efficiency achievements
["efficiency_expert"]="Complete a challenge using minimal commands|efficiency"
["command_master"]="Use advanced command options|efficiency"
# Learning achievements
["self_learner"]="Complete without hints|learning"
["persistent"]="Try until success|learning"
["explorer"]="Try multiple solution approaches|learning"
# Skill achievements
["file_master"]="Master file operations|skill"
["permission_guru"]="Master permission management|skill"
["search_expert"]="Master file searching|skill"
)
# Skill tracking definitions
declare -A SKILLS=(
["file_ops"]="File Operations"
["permissions"]="Permission Management"
["search"]="File Search and Analysis"
["text_proc"]="Text Processing"
["monitoring"]="System Monitoring"
)
# Logging function with severity levels
log_message() {
local severity=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] [$severity] $message" >> "$DATA_DIR/challenge.log"
echo -e "${BLUE}[$severity]${NC} $message"
}
# Initialize environment with comprehensive setup
init_environment() {
log_message "INFO" "Initializing enhanced challenge environment..."
# Create directory structure
for dir in "$DATA_DIR" "$REPORT_DIR" "$CHALLENGE_DIR"/{files,backup,temp}; do
if ! mkdir -p "$dir"; then
log_message "ERROR" "Failed to create directory: $dir"
return 1
fi
done
# Initialize data files with headers
cat > "$PROGRESS_FILE" << EOF
challenge_id,timestamp,status,difficulty,skills_used
EOF
cat > "$SCORE_FILE" << EOF
challenge_id,points,timestamp,efficiency_bonus,speed_bonus
EOF
cat > "$ATTEMPT_FILE" << EOF
challenge_id,attempt_number,timestamp,commands_used,duration,success
EOF
cat > "$SKILL_FILE" << EOF
skill_id,level,experience,last_used
EOF
# Initialize skills
for skill in "${!SKILLS[@]}"; do
echo "$skill,1,0,0" >> "$SKILL_FILE"
done
setup_command_tracking
log_message "SUCCESS" "Environment initialized successfully"
}
# Enhanced command tracking
setup_command_tracking() {
local track_cmd='
command_status=$?
cmd=$(history 1 | cut -c 8-)
timestamp=$(date +%s)
echo "$timestamp|$command_status|$cmd" >> '"$COMMAND_LOG"'
analyze_command "$cmd"
'
if ! grep -q "PROMPT_COMMAND" ~/.bashrc; then
echo "PROMPT_COMMAND='$track_cmd'" >> ~/.bashrc
source ~/.bashrc
fi
}
# Command analysis for skill progression
analyze_command() {
local cmd=$1
case "$cmd" in
*find*) update_skill "search" 2 ;;
*chmod*|*chown*) update_skill "permissions" 2 ;;
*grep*|*sed*|*awk*) update_skill "text_proc" 2 ;;
*ps*|*top*|*netstat*) update_skill "monitoring" 2 ;;
esac
}
# Update skill progression
update_skill() {
local skill=$1
local exp_gain=$2
local current_level current_exp
IFS=, read -r _ current_level current_exp _ < <(grep "^$skill," "$SKILL_FILE")
current_exp=$((current_exp + exp_gain))
if [ $current_exp -ge $((current_level * 100)) ]; then
current_level=$((current_level + 1))
current_exp=0
log_message "SUCCESS" "🎓 Skill Level Up: ${SKILLS[$skill]} is now level $current_level!"
fi
sed -i "/^$skill,/c\\$skill,$current_level,$current_exp,$(date +%s)" "$SKILL_FILE"
}
# Enhanced progress tracking with recommendations
show_progress() {
clear
echo -e "\n${BOLD}🎮 Challenge Progress Report${NC}"
echo "=============================="
# Show statistics
show_statistics
# Show achievements by category
show_achievements
# Show skill progression
show_skills
# Show recommendations
show_recommendations
}
# Detailed statistics display
show_statistics() {
local total_score=0
local challenges_completed=0
while IFS=, read -r challenge points _ efficiency_bonus speed_bonus; do
[ -z "$challenge" ] && continue
total_score=$((total_score + points + ${efficiency_bonus:-0} + ${speed_bonus:-0}))
((challenges_completed++))
done < "$SCORE_FILE"
echo -e "\n${BOLD}📊 Statistics${NC}"
echo "----------------"
printf "Challenges Completed: %d/10\n" "$challenges_completed"
printf "Total Score: %d/1500\n" "$total_score"
printf "Average Score: %d\n" "$((total_score / (challenges_completed || 1)))"
}
# Achievement display by category
show_achievements() {
echo -e "\n${BOLD}🏆 Achievements${NC}"
echo "----------------"
local categories=("speed" "efficiency" "learning" "skill")
for category in "${categories[@]}"; do
echo -e "\n${YELLOW}${category^} Achievements:${NC}"
while IFS=, read -r achievement timestamp description; do
[ -z "$achievement" ] && continue
IFS='|' read -r achievement_desc achievement_cat <<< "${ACHIEVEMENTS[$achievement]}"
[[ "$achievement_cat" == "$category" ]] && echo " ✓ $achievement_desc"
done < "$ACHIEVEMENT_FILE"
done
}
# Skill progression display
show_skills() {
echo -e "\n${BOLD}🎓 Skills${NC}"
echo "----------------"
while IFS=, read -r skill level exp last_used; do
[ -z "$skill" ] && continue
local skill_name="${SKILLS[$skill]}"
local progress=$((exp * 100 / (level * 100)))
printf "%s (Level %d): [%-20s] %d%%\n" \
"$skill_name" "$level" \
"$(printf '#%.0s' $(seq 1 $((progress / 5))))" \
"$progress"
done < "$SKILL_FILE"
}
# Learning recommendations
show_recommendations() {
echo -e "\n${BOLD}📚 Recommendations${NC}"
echo "----------------"
# Analyze weak skills
local weakest_skill=""
local lowest_level=999
while IFS=, read -r skill level _; do
[ -z "$skill" ] && continue
if [ "$level" -lt "$lowest_level" ]; then
lowest_level=$level
weakest_skill=$skill
fi
done < "$SKILL_FILE"
[ -n "$weakest_skill" ] && echo "Focus on improving: ${SKILLS[$weakest_skill]}"
# Suggest next challenges based on skill levels
echo "Recommended next challenges:"
suggest_challenges
}
# Check if challenge is completed
is_challenge_completed() {
local challenge=$1
grep -q "^$challenge," "$SCORE_FILE"
return $?
}
# Award points function
award_points() {
local challenge=$1
local points=$2
echo "$challenge,$points,$(date +%s)" >> "$SCORE_FILE"
log_message "INFO" "Awarded $points points for challenge $challenge"
}