Untitled
unknown
plain_text
10 months ago
4.4 kB
7
Indexable
ACHIEVEMENTS = {
'first_sort': {
'id': 'first_sort',
'name': 'Beginner Sorter',
'description': 'Sort your first item',
'condition': lambda metrics: metrics['basic_metrics']['total_items_sorted'] >= 1
},
'early_bird': {
'id': 'early_bird',
'name': 'Early Bird',
'description': 'Sort items before 9 AM',
'condition': lambda metrics: any(hour < 9 for hour in metrics['hour_coverage']['hours_sorted'])
},
'night_owl': {
'id': 'night_owl',
'name': 'Night Owl',
'description': 'Sort items after 8 PM',
'condition': lambda metrics: any(hour >= 20 for hour in metrics['hour_coverage']['hours_sorted'])
},
'sorting_expert': {
'id': 'sorting_expert',
'tiers': ['bronze', 'silver', 'gold'],
'name': 'Sorting Expert',
'thresholds': [100, 500, 1000],
'description': 'Master sorter progression',
'condition': lambda metrics, tier_idx: metrics['basic_metrics']['total_items_sorted'] >= [100, 500, 1000][tier_idx]
},
'perfect_balance': {
'id': 'perfect_balance',
'name': 'Perfect Balance',
'description': 'Keep all bins within 20% fill level of each other for 7 days',
'condition': lambda metrics: metrics.get('balance_tracking', {}).get('days_within_threshold', 0) >= 7
},
'time_lord': {
'id': 'time_lord',
'name': 'Time Lord',
'description': 'Sort items in every hour of the day',
'condition': lambda metrics: len(set(metrics['hour_coverage']['hours_sorted'])) == 24
},
'weekend_warrior': {
'id': 'weekend_warrior',
'name': 'Weekend Warrior',
'description': 'Sort items on 4 consecutive weekends',
'condition': lambda metrics: metrics['hour_coverage']['weekend_streak']['count'] >= 4
},
'seasonal_master': {
'id': 'seasonal_master',
'name': 'Seasonal Master',
'description': 'Sort items in both summer and winter',
'condition': lambda metrics: all(metrics['seasonal_tracking']['seasonal_counts'][season] > 0
for season in ['summer', 'winter'])
},
'summer_sorter': {
'id': 'summer_sorter',
'name': 'Summer Sorter',
'description': 'Sort 500 items during summer months',
'condition': lambda metrics: metrics['seasonal_tracking']['seasonal_counts']['summer'] >= 500
},
'daily_dedication': {
'id': 'daily_dedication',
'name': 'Daily Dedication',
'description': 'Sort items 7 days in a row',
'condition': lambda metrics: metrics['short_term_tracking']['current_sorting_streak']['days'] >= 7
},
'monthly_master': {
'id': 'monthly_master',
'name': 'Monthly Master',
'description': 'Sort items every day for a month',
'condition': lambda metrics: metrics['short_term_tracking']['current_sorting_streak']['days'] >= 30
},
'quick_draw': {
'id': 'quick_draw',
'name': 'Quick Draw',
'description': 'Sort 3 items within 5 minutes',
'condition': lambda metrics: metrics['short_term_tracking']['items_last_5_minutes']['count'] >= 3
},
'tree_hero': {
'id': 'tree_hero',
'name': 'Tree Hero',
'description': 'Save equivalent of 10 trees through paper recycling',
'condition': lambda metrics: metrics['environmental_impact']['trees_saved'] >= 10
},
'eco_warrior': {
'id': 'eco_warrior',
'tiers': ['bronze', 'silver', 'gold'],
'name': 'Earth Saver',
'description': 'Save CO2 through proper recycling',
'thresholds': [10, 50, 100],
'condition': lambda metrics, tier_idx: metrics['environmental_impact']['co2_saved'] >= [10, 50, 100][tier_idx]
},
}
# Add bin specialization achievements
for bin_type in ['Paper', 'Organic', 'Recycling', 'Residual']:
achievement_id = f'{bin_type.lower()}_specialist'
ACHIEVEMENTS[achievement_id] = {
'id': achievement_id,
'name': f'{bin_type} Specialist',
'description': f'Sort 100 {bin_type} items',
'condition': lambda metrics, bt=bin_type: sum(1 for result in metrics['basic_metrics']['classification_results']
if result['classification_result'] == bt) >= 100
}Editor is loading...
Leave a Comment