2014 Campeonato Cearense

The 2014 Campeonato Cearense de Futebol was the 100th season of top professional football league in the state of Ceará, Brazil. The competition began on January 5 and ended on April 23. Ceará won the championship for the 43rd time and 4th since 2011, while Ferroviário, Tiradentes and Crato were relegated.

Campeonato Cearense de Futebol
Season2014
ChampionsCeará
RelegatedFerroviário
Tiradentes
Crato
Copa do BrasilCeará
Fortaleza
Série DGuarany de Sobral
Matches played92
Goals scored308 (3.35 per match)
Top goalscorerRobert (Fortaleza) - 21 goals
2013
2015

Format

The championship has three stages. On the first stage, all teams excluding those who are playing in 2014 Copa do Nordeste play a double round robin. The best four teams qualifies to the second stage.

On the second stage, the teams are joined by the clubs from Ceará who were playing on Copa Nordeste. The teams then play a double round robin again, where the best four teams qualifies to the final stage. In the final stage, it's a playoff with four teams.[1]

The champion and the best team on first stage qualifies to the 2015 Copa do Brasil. The champion and the runner-up qualify to the 2015 Copa do Nordeste. The best team who isn't on Campeonato Brasileiro Série A, Série B or Série C qualifies to Série D.

The two worst three in first stage will be relegated.[2]

Participating teams

ClubHome city2013 result
CearáFortaleza1st
CratoCrato9th
FerroviárioFortaleza8th
FortalezaFortaleza4th
Guarani de JuazeiroJuazeiro do Norte7th
GuaranySobral2nd
HorizonteHorizonte6th
IcasaJuazeiro do Norte3rd
ItapipocaItapipoca1st (2nd division)
QuixadáQuixadá2nd (2nd division)
TiradentesFortaleza5th

First stage

Pos Team Pld W D L GF GA GD Pts Qualification or relegation
1 Fortaleza (A) 16 13 3 0 48 14 +34 42 Qualifies to the Second stage and 2015 Copa do Brasil
2 Guarani de Juazeiro (A) 16 7 5 4 17 18 1 26 Qualify to the Second stage
3 Horizonte (A) 16 6 7 3 26 18 +8 25
4 Icasa (A) 16 6 6 4 18 19 1 24
5 Quixadá 16 6 4 6 23 20 +3 22
6 Itapipoca 16 5 6 5 19 24 5 21
7 Ferroviário-CE (R) 16 5 3 8 26 25 +1 18 Relegated
8 Tiradentes (R) 16 2 6 8 26 32 6 12
9 Crato (R) 16 1 2 13 8 40 32 5
Source: [3]
(A) Advance to a further round; (R) Relegated.

Results

Home \ Away CTO FER FOR GUJ HOR ICA ITA QUI TIR
Crato 0–1 1–2 0–0 0–2 0–1 0–0 1–2 3–2
Ferroviário-CE 7–2 0–4 5–0 0–3 1–2 0–0 0–0 3–1
Fortaleza 6–0 3–1 3–1 2–1 2–0 7–0 4–2 2–0
Guarani de Juazeiro 1–0 1–0 2–2 0–1 2–1 1–0 4–2 2–2
Horizonte 2–0 2–2 2–2 0–0 3–1 3–4 1–0 2–2
Icasa 2–0 3–2 0–0 1–0 1–1 1–1 0–0 2–2
Itapipoca 2–0 1–0 1–3 0–1 1–1 1–1 2–0 1–1
Quixadá 3–0 1–0 1–3 0–1 2–1 4–1 5–2 2–0
Tiradentes 7–1 2–4 2–3 1–1 1–1 0–1 0–3 3–1
Source: [3]
Legend: Blue = home team win; Yellow = draw; Red = away team win.

Second stage

The four teams from the first stage are joined by Ceará and Guarany de Sobral who were playing on 2014 Copa do Nordeste.

Pos Team Pld W D L GF GA GD Pts Qualification
1 Fortaleza (A) 10 5 4 1 21 12 +9 19 Qualifies to the Final stage
2 Ceará (A) 10 5 4 1 18 9 +9 19
3 Guarany de Sobral (A) 10 3 4 3 15 13 +2 13
4 Icasa (A) 10 3 3 4 12 14 2 12
5 Horizonte 10 3 2 5 12 21 9 11
6 Guarani de Juazeiro 10 0 5 5 8 17 9 5
Source: [3]
Rules for classification: 1) points; 2) goal difference; 3) number of goals scored.
(A) Advance to a further round.

Results

Home \ Away CEA FOR GUJ GNY HOR ICA
Ceará 3–1 0–0 1–0 5–1 1–0
Fortaleza 1–1 4–0 3–1 3–2 2–1
Guarani de Juazeiro 0–2 2–2 2–2 1–2 1–1
Guarany de Sobral 1–1 1–1 2–1 5–1 1–2
Horizonte 2–1 1–1 1–0 1–1 0–2
Icasa 3–3 0–3 1–1 0–1 2–1
Source: [3]
Legend: Blue = home team win; Yellow = draw; Red = away team win.

Final stage

  Semifinals Finals
                         
1 Fortaleza 1 3 4 (a.g.)  
4 Icasa 3 1 4  
    1 Fortaleza 0 0 0
  2 Ceará 0 0 0
2 Ceará 3 5 8
3 Guarany de Sobral 2 2 4  

Semifinals

First leg

Icasa3–1Fortaleza
Douglas  47'
Bismarck  70'
Canga  83'
Wadison  30' (pen.)
Attendance: 2,401
Referee: Almeida Filho

Guarany de Sobral2–3Ceará
Reinaldo Luis  36'
Marcos Vinicius  41'
Magno Alves  34'
Bill  54'
Felipe Amorim  85'
Estádio do Junco, Sobral
Attendance: 4,492
Referee: Péricles Bassols Cortez

Second leg

Fortaleza3–1Icasa
Marcelinho Paraíba  42' (pen.)
Robert  60', 87'
Bismarck  62'
Attendance: 18,727
Referee: Léo Simão Holanda

Ceará5–2Guarany de Sobral
Magno Alves  43', 73', 75'
Souza  81'
Bill  88'
Zé Williams  53'
Thiago Furlan  57'
Attendance: 8,126
Referee: Luiz Cesar de Oliveira

Finals

Fortaleza0–0Ceará
Attendance: 18,412
Referee: Avelar Rodrigo

Ceará0–0Fortaleza
Attendance: 42,569
Referee: Anderson Daronco

With the results from the Second stage and the final stage aggregated, Ceará won the title because they had a better campaign.

gollark: So, I finished that to highly dubious demand. I'd like to know how #11 and such work.
gollark: > `x = _(int(0, e), int(e, е))`You may note that this would produce slices of 0 size. However, one of the `e`s is a homoglyph; it contains `2 * e`.`return Result[0][0], x, m@set({int(e, 0), int(е, e)}), w`From this, it's fairly obvious what `strassen` *really* does - partition `m1` into 4 block matrices of half (rounded up to the nearest power of 2) size.> `E = typing(lookup[2])`I forgot what this is meant to contain. It probably isn't important.> `def exponentiate(m1, m2):`This is the actual multiplication bit.> `if m1.n == 1: return Mаtrix([[m1.bigData[0] * m2.bigData[0]]])`Recursion base case. 1-sized matrices are merely multiplied scalarly.> `aa, ab, ac, ad = strassen(m1)`> `аa, аb, аc, аd = strassen(m2)`More use of homoglyph confusion here. The matrices are quartered.> `m = m1.subtract(exponentiate(aa, аa) ** exponentiate(ab, аc), exponentiate(aa, аb) ** exponentiate(ab, аd), exponentiate(ac, аa) ** exponentiate(ad, аc), exponentiate(ac, аb) ** exponentiate(ad, аd)) @ [-0j, int.abs(m2.n * 3, m1.n)]`This does matrix multiplication in an inefficient *recursive* way; the Strassen algorithm could save one of eight multiplications here, which is more efficient (on big matrices). It also removes the zero padding.> `m = exponentiate(Mаtrix(m1), Mаtrix(m2)) @ (0j * math.sin(math.asin(math.sin(math.asin(math.sin(math.e))))), int(len(m1), len(m1)))`This multiples them and I think also removes the zero padding again, as we want it to be really very removed.> `i += 1`This was added as a counter used to ensure that it was usably performant during development.> `math.factorial = math.sinh`Unfortunately, Python's factorial function has really rather restrictive size limits.> `for row in range(m.n):`This converts back into the 2D array format.> `for performance in sorted(dir(gc)): getattr(gc, performance)()`Do random fun things to the GC.
gollark: > `globals()[Row + Row] = random.randint(*sys.version_info[:2])`Never actually got used anywhere.> `ε = sys.float_info.epsilon`Also not used. I just like epsilons.> `def __exit__(self, _, _________, _______):`This is also empty, because cleaning up the `_` global would be silly. It'll be overwritten anyway. This does serve a purpose, however, and not just in making it usable as a context manager. This actually swallows all errors, which is used in some places.> `def __pow__(self, m2):`As ever, this is not actual exponentiation. `for i, (ι, 𐌉) in enumerate(zip(self.bigData, m2.bigData)): e.bigData[i] = ι + 𐌉` is in fact just plain and simple addition of two matrices.> `def subtract(forth, 𝕒, polynomial, c, vector_space):`This just merges 4 submatrices back into one matrix.> `with out as out, out, forth:`Apart from capturing the exceptions, this doesn't really do much either. The `_` provided by the context manager is not used.> `_(0j, int(0, 𝕒.n))`Yes, it's used in this line. However, this doesn't actually have any effect whatsoever on the execution of this. So I ignore it. It was merely a distraction.> `with Mаtrix(ℤ(ℤ(4))):`It is used again to swallow exceptions. After this is just some fluff again.> `def strassen(m, x= 3.1415935258989):`This is an interesting part. Despite being called `strassen`, it does not actually implement the Strassen algorithm, which is a somewhat more efficient way to multiply matrices than the naive way used in - as far as I can tell - every entry.> `e = 2 ** (math.ceil(math.log2(m.n)) - 1)`This gets the next power of two in a fairly obvious way. It is used to pad out the matrix to the next power of 2 size.> `with m:`The context manager is used again for nicer lookups.> `Result[0] += [_(0j, int(e, e))]`Weird pythonoquirkiness again. You can append to lists in tuples with `+=`, but it throws an exception as they're sort of immutable.> `typing(lookup[4])(input())`It's entirely possible that this does things.
gollark: > `def __eq__(self, xy): return self.bigData[math.floor(xy.real * self.n + xy.imag)]`This actually gets indices into the matrix. I named it badly for accursedness. It uses complex number coordinates.> `def __matmul__(self, ǫ):`*This* function gets a 2D "slice" of the matrix between the specified coordinates. > `for (fοr, k), (b, р), (whіle, namedtuple) in itertools.product(I(*int.ℝ(start, end)), enumerate(range(ℤ(start.imag), math.floor(end.imag))), (ǫ, ǫ)):`This is really just bizarre obfuscation for the basic "go through every X/Y in the slice" thing.> `out[b * 1j + fοr] = 0`In case the matrix is too big, just pad it with zeros.> `except ZeroDivisionError:`In case of zero divisions, which cannot actually *happen*, we replace 0 with 1 except this doesn't actually work.> `import hashlib`As ever, we need hashlib.> `memmove(id(0), id(1), 27)`It *particularly* doesn't work because we never imported this name.> `def __setitem__(octonion, self, v):`This sets either slices or single items of the matrix. I would have made it use a cool™️ operator, but this has three parameters, unlike the other ones. It's possible that I could have created a temporary "thing setting handle" or something like that and used two operators, but I didn't.> `octonion[sedenion(malloc, entry, 20290, 15356, 44155, 30815, 37242, 61770, 64291, 20834, 47111, 326, 11094, 37556, 28513, 11322)] = v == int(bool, b)`Set each element in the slice. The sharp-eyed may wonder where `sedenion` comes from.> `"""`> `for testing`> `def __repr__(m):`This was genuinely for testing, although the implementation here was more advanced.> `def __enter__(The_Matrix: 2):`This allows use of `Matrix` objects as context managers.> `globals()[f"""_"""] = lambda h, Ĥ: The_Matrix@(h,Ĥ)`This puts the matrix slicing thing into a convenient function accessible globally (as long as the context manager is running). This is used a bit below.
gollark: * desired

References

  1. "2014 Campeonato Cearense rules". UOL Esporte. Retrieved 16 October 2015.
  2. "Regras do Campeonato Cearense 2014" (PDF). Federação Cearense de Futebol. Retrieved 16 October 2015.
  3. "BOLA N@ ÁREA - Campeonato Cearense 2014". Bola N@ Área. Retrieved 16 October 2015.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.