# Programming Snapshot – Go Algorithms » Linux Magazine

0
22

Instead of the coach determining the team lineup, an algorithm selects the players based on their strengths for Mike Schilli’s amateur soccer team.

At the weekly pickup soccer game in my adopted hometown of San Francisco, with 16 players signed up for an eight-on-eight match, there is always the question of who is going to compete against whom on match day. Preparing the team sheet is usually something taken care of by experienced players, but it is time-consuming and it leads to endless discussions about whether the eight players on one side are simply too skilled for the other eight players, leading to a lopsided game that is no fun to play. To resolve this, I’ve developed an algorithm to generate the team lineup. This allows me to take an interesting excursion into the world of combinatorics and explore the development of suitable algorithms in this month’s column.

How many ways are there to assign 16 players to two teams of eight players each? If one team is fixed, the opponent’s team is automatically derived from the remaining participants; this means that the result is written in combinatorics style as “8 over 16,” which you compute as

`(16*15*...*10*9) / (8*7*...*2*1)`

[…]