1985–86 FIBA European Champions Cup

The 1985–86 FIBA European Champions Cup was the 29th edition of the FIBA European Champions Cup club competition (now called EuroLeague). The Final was held at the Sportcsarnok in Budapest, Hungary, on April 3, 1986. It was won by Cibona for the second time in a row. They defeated Žalgiris in the finals, by a result of 94–82.

1985–86 FIBA European Champions Cup
LeagueFIBA European Champions Cup
SportBasketball
Final
Champions Cibona
  Runners-up Žalgiris

Competition system

  • 25 teams (European national domestic league champions, plus the then current title holders), playing in a tournament system, played knock-out rounds on a home and away basis. The aggregate score of both games decided the winner.
  • The six remaining teams after the knock-out rounds entered a Semifinal Group Stage, which was played as a round-robin. The final standing was based on individual wins and defeats. In the case of a tie between two or more teams after the group stage, the following criteria was used: 1) number of wins in one-to-one games between the teams; 2) basket average between the teams; 3) general basket average within the group.
  • The winner and the runner-up of the Semifinal Group Stage qualified for the final, which was played at a predetermined venue.

Preliminary round

Team 1 Agg. Team 2 1st leg 2nd leg
Partizani Tirana 162-175 Aris 81–80 81–95

First round

Team 1 Agg. Team 2 1st leg 2nd leg
Neptune 178-182 Klosterneuburg 84–99 94–83
Galatasaray 203-231 Cibona 97–110 106–121
Honvéd 151-162 Fribourg Olympic 84–80 67–82
Real Madrid 151-137 Murray Edinburgh 75–65 76–72
Solna 182-201 Nashua EBBC 95–93 87–108
Kingston 185-232 Maccabi Elite Tel Aviv 93–112 92–120
AEL 113-202 Akademik Varna 49–121 64–81
Inter Slovnaft 167-229 Žalgiris 97–123 70–106
NMKY Helsinki 183-166 Zagłębie 91–81 92–85
Simac Milano 233-122 T71 Dudelange 116–48 117–74
Bayer 04 Leverkusen 148-182 Aris 76–93 72–89
Limoges CSP 177-171 Sunair Oostende 87–78 90–93

Second round

Team 1 Agg. Team 2 1st leg 2nd leg
Klosterneuburg 153-183 Cibona 83–98 70–85
Fribourg Olympic 149-173 Real Madrid 68–84 81–89
Nashua EBBC 181-216 Maccabi Elite Tel Aviv 95–113 86–103
Akademik Varna 152-222 Žalgiris 87–125 65–97
NMKY Helsinki 182-207 Simac Milano 92-106 90–101
Aris 176-186 Limoges CSP 89–81 87–105

Semifinal group stage

Key to colors
     Top two places in the group advance to Final
TeamPldPtsWLPFPA
1. Cibona 101773977933
2. Žalgiris 101773931915
3. Simac Milano 101664881837
4. Real Madrid 101555944906
5. Maccabi Elite Tel Aviv 101446907946
6. Limoges CSP 1011199101013

Final

April 3, Sportcsarnok, Budapest

Team 1  Score  Team 2
Cibona 94–82 Žalgiris
1985–86 FIBA European Champions Cup
Champions

Cibona
2nd Title

Awards

FIBA European Champions Cup Finals Top Scorer

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

    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.