We propose a novel algorithm that outputs the final standings of a soccer league, based on a simple dynamics that mimics a soccer tournament. In our model, a team is created with a defined potential(ability) which is updated during the tournament according to the results of previous games. The updated potential modifies a teams future winning/losing probabilities. We show that this evolutionary game is able to reproduce the statistical properties of final standings of actual editions of the Brazilian tournament (Brasileir~{a}o). However, other leagues such as the Italian and the Spanish tournaments have notoriously non-Gaussian traces and cannot be straightforwardly reproduced by this evolutionary non-Markovian model. A complete understanding of these phenomena deserves much more attention, but we suggest a simple explanation based on data collected in Brazil: Here several teams were crowned champion in previous editions corroborating that the champion typically emerges from random fluctuations that partly preserves the gaussian traces during the tournament. On the other hand, in the Italian and Spanish leagues only a few teams in recent history have won their league tournaments. These leagues are based on more robust and hierarchical structures established even before the beginning of the tournament. For the sake of completeness, we also elaborate a totally Gaussian model (which equalizes the winning, drawing, and losing probabilities) and we show that the scores of the Brasileir~{a}o cannot be reproduced. Such aspects stress that evolutionary aspects are not superfluous in our modeling. Finally, we analyse the distortions of our model in situations where a large number of teams is considered, showing the existence of a transition from a single to a double peaked histogram of the final classification scores. An interesting scaling is presented for different sized tournaments.