def VGRPBench_score(data):
    """
    Calculate scores for VGRPBench puzzles by category.
    
    Args:
        data: DataFrame containing evaluation results
        
    Returns:
        pandas.DataFrame: Aggregated scores by category
    """
    # Get unique categories without 'overall'
    cates = list(set(data['category']))
    ret = defaultdict(list)

    for c in cates:
        ret['category'].append(c)
        # Filter data for the current category
        sub = data[data['category'] == c]
        
        # Calculate perception score (as percentage with 2 decimal places)
        perception_score = round(np.mean(sub['perception_correct']) * 100, 2)
        ret['Perception Score'].append(perception_score)
        
        # Calculate answer score (as percentage with 2 decimal places)
        answer_score = round(np.mean(sub['answer_correct']) * 100, 2)
        ret['Answer Score'].append(answer_score)
        
    return pd.DataFrame(ret)

    Calculate scores for VGRPBench puzzles by category.
    
    Args:
        data: DataFrame containing evaluation results
        
    Returns:
        pandas.DataFrame: Aggregated scores by category
    
vlmeval/dataset/utils/vgrpbench/evaluation.py