\documentclass{article}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{amsmath} % Required for text command

\begin{document}

\begin{table}[htbp]
\centering
\caption{Summary Statistics of Strategy Implementations}
\label{tab:strategy_stats_detailed}
\begin{tabular}{lr}
\toprule
Metric                            & Value \\
\midrule
Python Files Scanned              & 267 \\
Files Matching Axelrod List   & 239 \\
Strategies Analyzed†**        & 238 \\
\quad Stochastic Strategies‡      & 84 \\
\quad Deterministic Strategies‡ & 154 \\
\midrule
\multicolumn{2}{l}{\textit{Memory Depth Distribution††}} \\
\quad Stateless (Depth 0)       & 4 \\
\quad Memory One (Depth 1)      & 33 \\
\quad Finite (Depth > 1)        & 31 \\
\quad Infinite Memory           & 165 \\
\quad Unknown / Not Applicable  & 5 \\
\midrule
Minimum Lines of Code (LOC)§ & 23 \\
Maximum Lines of Code (LOC)§ & 278 \\
Average Lines of Code (LOC)§ & 76.1 \\
\midrule
Files with Issues¶         & 1 \\
Files Not In Axelrod List       & 28 \\
\bottomrule
\end{tabular}
\par\vspace{-0.5em}
\footnotesize{† Files matching Axelrod list (if checked) where `classifier` info was partially/fully obtained or status manually overridden.} \\
\footnotesize{** Includes 5 strategies with manually assigned stochastic status.} \\
\footnotesize{‡ Based on parsed `classifier['stochastic']` flag or manual override.} \\
\footnotesize{†† Based on parsed `classifier['memory_depth']` flag.} \\\footnotesize{§ LOC excludes comments/blank lines, calculated for 239 files matching the Axelrod list.} \\
\footnotesize{¶ Non-overridden files matching Axelrod list with parsing errors or missing/invalid `classifier` info (see console output).}
\end{table}

\end{document}
