Again, I may be reading your code incorrect but something like:private func generateLoserLocationFunction(numberOfPlayers: Int) -> (column: Int, row: Int) -> (column: Int, row: Int) {return { row, column inlet newCol = -2 * columnswitch numberOfPlayers {case 8:switch column {case 0:return (newCol, row / 2)case 1:return (newCol, row ^ 1)}case 16:switch column {case 0:return (newCol, row / 2)case 1:return (newCol, 3 - row)case 2:return (newCol, row ^ 1)}case 32:switch column {case 0:return (newCol, row / 2)case 1:return (newCol, (row + 4) % 8)case 2:return (newCol, row)case 3:return (newCol, row ^ 1)}default:return (newCol,0)}}It's not a big change, 35 lines instead of 50 but if I'm reading it right, it should do the same thing your existing versiondoes.