summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2014-09-25 12:43:20 +0200
committeremkael <emkael@tlen.pl>2014-09-25 12:43:20 +0200
commit0045d332be334cb6aeb92db06d8bca668dec994a (patch)
tree38613b9c2966cf3384c637fdfa31ae7e7119b362
parent1cd8ad6730256b303d8aaa7e9179c1674d2977fd (diff)
* próba uogólnienia dla dowolnej liczby rozdań (3, 4, 5, 6, wg wytycznych Czai)
-rw-r--r--patton-bam.sql35
-rw-r--r--patton-imp.sql38
2 files changed, 38 insertions, 35 deletions
diff --git a/patton-bam.sql b/patton-bam.sql
index ec5113e..b3689d3 100644
--- a/patton-bam.sql
+++ b/patton-bam.sql
@@ -44,7 +44,7 @@ CREATE TABLE patton_scores (
h_bam FLOAT, -- punkty BAMowe dla gospodarzy
v_bam FLOAT -- punkty BAMowe dla gości
);
-
+
-- Tabela kompilująca saldo druzyn w meczu
DROP TABLE IF EXISTS patton_sums;
CREATE TABLE patton_sums (
@@ -120,8 +120,8 @@ INSERT INTO patton_scores
JOIN scores s2 ON pb.rnd = s2.rnd AND pb.segment = s2.segment AND pb.tabl = s2.tabl AND pb.board = s2.board AND s2.room = 2;
UPDATE patton_scores SET v_bam = -h_bam;
--- Zmienna pomocnicza do wyliczenia punktów za saldo w zależności od liczby rozdań w rundzie.
-SET @boards_per_segment = IF ((SELECT boardspersegment FROM admin) = 4, 1, 0.5); -- Dla 4 rozdań: = 1.0, dla 3 rozdań: = 0.5
+-- Zmienna pomocnicza: liczby rozdań w rundzie.
+SET @boards_per_segment = (SELECT boardspersegment FROM admin);
-- Wypełniamy tabelę salda.
DELETE FROM patton_sums;
@@ -140,31 +140,30 @@ INSERT INTO patton_sums
UPDATE patton_sums SET max_saldo = IF (h_saldo > v_saldo, h_saldo, v_saldo);
-- Roboczo liczymy wynik za saldo względem wyniku 0:0
--- Jeśli róznica salda > 1/3 maksymalnego, to gospodarze zdobywają:
--- * 2 punkty przy 4 rozdaniach
--- * 1 punkt przy 3 rozdaniach
-UPDATE patton_sums SET h_points = 2 * @boards_per_segment
+-- Jeśli róznica salda > 1/3 maksymalnego, to gospodarze zdobywają
+-- n/2 punktów przy n rozdaniach
+UPDATE patton_sums SET h_points = @boards_per_segment / 2
WHERE (max_saldo - v_saldo) / max_saldo > 1/3;
-- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to gospodarze zdobywają:
--- * 2 punkty przy 4 rozdaniach
--- * 1 punkt przy 3 rozdaniach
-UPDATE patton_sums SET h_points = 1 * @boards_per_segment
+-- * 1 punkt przy 4 rozdaniach
+-- * 1/6 * n, zaokrągloną do 0.1 przy n rozdaniach
+UPDATE patton_sums SET h_points = IF(@boards_per_segment = 4, 1, ROUND(@boards_per_segment / 6, 1))
WHERE (max_saldo - v_saldo) / max_saldo BETWEEN 1/10 AND 1/3;
-- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają:
--- * 2 punkty przy 4 rozdaniach
--- * 1 punkt przy 3 rozdaniach
-UPDATE patton_sums SET h_points = -2 * @boards_per_segment
+-- n/2 punktów przy n rozdaniach
+UPDATE patton_sums SET h_points = -(@boards_per_segment / 2)
WHERE (max_saldo - h_saldo) / max_saldo > 1/3;
-- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają:
-- * 1 punkt przy 4 rozdaniach
--- * 0.5 punktu przy 3 rozdaniach
-UPDATE patton_sums SET h_points = -1 * @boards_per_segment
+-- * 1/6 * n, zaokrągloną do 0.1 przy n rozdaniach
+UPDATE patton_sums SET h_points = -IF(@boards_per_segment = 4, 1, ROUND(@boards_per_segment / 6, 1))
WHERE (max_saldo - h_saldo) / max_saldo BETWEEN 1/10 AND 1/3;
-- Druga drużyna zdobywa dopełnienie do zera.
UPDATE patton_sums SET v_points = -h_points;
--- Podnosimy wynik za saldo z punktu odniesienia 0:0 do właściwego remisu, zależnego od liczby rozdań (2:2 dla 4, 1:1 dla 3)
-UPDATE patton_sums SET v_points = v_points + 2 * @boards_per_segment;
-UPDATE patton_sums SET h_points = h_points + 2 * @boards_per_segment;
+-- Podnosimy wynik za saldo z punktu odniesienia 0:0 do właściwego remisu,
+-- zależnego od liczby rozdań (2:2 dla 4, 1.5:1.5 dla 3 - n/2:n/2 dla n rozdań)
+UPDATE patton_sums SET v_points = v_points + @boards_per_segment / 2;
+UPDATE patton_sums SET h_points = h_points + @boards_per_segment / 2;
-- Kompilujemy wyrównania Pattonowe, jako sumę wyrównań z BAMów i punktów za saldo
DELETE FROM patton_adjustments;
diff --git a/patton-imp.sql b/patton-imp.sql
index 46529c6..d1dc2e9 100644
--- a/patton-imp.sql
+++ b/patton-imp.sql
@@ -128,12 +128,12 @@ INSERT INTO patton_scores
JOIN scores s2 ON pb.rnd = s2.rnd AND pb.segment = s2.segment AND pb.tabl = s2.tabl AND pb.board = s2.board AND s2.room = 2;
UPDATE patton_scores SET v_bam = -h_bam;
--- Zmienna pomocnicza do wyliczenia punktów za saldo w zależności od liczby rozdań w rundzie.
-SET @boards_per_segment = IF ((SELECT boardspersegment FROM admin) = 4, 1, 0.5); -- Dla 4 rozdań: = 1.0, dla 3 rozdań: = 0.5
--- Nadpisujemy tabelę VP na wiecznie remisową (6:6 dla 4 rozdań, 4.5:4.5 dla 3 rozdań)
-UPDATE tabvp SET vpew = 3 + 3 * @boards_per_segment WHERE dimp = 0;
+-- Zmienna pomocnicza: liczba rozdań w rundzie.
+SET @boards_per_segment = (SELECT boardspersegment FROM admin);
+-- Nadpisujemy tabelę VP na wiecznie remisową (6:6 dla 4 rozdań, 4.5:4.5 dla 3 rozdań, 3/2*n:3/2*n dla n rozdań)
+UPDATE tabvp SET vpew = 1.5 * @boards_per_segment WHERE dimp = 0;
UPDATE tabvp SET vpns = vpew WHERE dimp = 0;
-UPDATE matches SET vph = 3 + 3 * @boards_per_segment;
+UPDATE matches SET vph = 1.5 * @boards_per_segment;
UPDATE matches SET vpv = vph;
-- Wypełniamy tabelę salda.
@@ -151,28 +151,32 @@ INSERT INTO patton_sums
-- Wybieramy maksymalne saldo
UPDATE patton_sums SET max_saldo = IF (h_saldo > v_saldo, h_saldo, v_saldo);
--- Jeśli róznica salda > 1/3 maksymalnego, to gospodarze zdobywają:
--- * 2 punkty przy 4 rozdaniach
--- * 1 punkt przy 3 rozdaniach
-UPDATE patton_sums SET h_points = 2 * @boards_per_segment
+
+-- Roboczo liczymy wynik za saldo względem wyniku 0:0
+-- Jeśli róznica salda > 1/3 maksymalnego, to gospodarze zdobywają
+-- n/2 punktów przy n rozdaniach
+UPDATE patton_sums SET h_points = @boards_per_segment / 2
WHERE (max_saldo - v_saldo) / max_saldo > 1/3;
-- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to gospodarze zdobywają:
--- * 2 punkty przy 4 rozdaniach
--- * 1 punkt przy 3 rozdaniach
-UPDATE patton_sums SET h_points = 1 * @boards_per_segment
+-- * 1 punkt przy 4 rozdaniach
+-- * 1/6 * n, zaokrągloną do 0.1 przy n rozdaniach
+UPDATE patton_sums SET h_points = IF(@boards_per_segment = 4, 1, ROUND(@boards_per_segment / 6, 1))
WHERE (max_saldo - v_saldo) / max_saldo BETWEEN 1/10 AND 1/3;
-- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają:
--- * 2 punkty przy 4 rozdaniach
--- * 1 punkt przy 3 rozdaniach
-UPDATE patton_sums SET h_points = -2 * @boards_per_segment
+-- n/2 punktów przy n rozdaniach
+UPDATE patton_sums SET h_points = -(@boards_per_segment / 2)
WHERE (max_saldo - h_saldo) / max_saldo > 1/3;
-- Jeśli róznica salda > 1/10 maksymalnego, ale < 1/3, to goście zdobywają:
-- * 1 punkt przy 4 rozdaniach
--- * 0.5 punktu przy 3 rozdaniach
-UPDATE patton_sums SET h_points = -1 * @boards_per_segment
+-- * 1/6 * n, zaokrągloną do 0.1 przy n rozdaniach
+UPDATE patton_sums SET h_points = -IF(@boards_per_segment = 4, 1, ROUND(@boards_per_segment / 6, 1))
WHERE (max_saldo - h_saldo) / max_saldo BETWEEN 1/10 AND 1/3;
-- Druga drużyna zdobywa dopełnienie do zera.
UPDATE patton_sums SET v_points = -h_points;
+-- Podnosimy wynik za saldo z punktu odniesienia 0:0 do właściwego remisu,
+-- zależnego od liczby rozdań (2:2 dla 4, 1.5:1.5 dla 3 - n/2:n/2 dla n rozdań)
+UPDATE patton_sums SET v_points = v_points + @boards_per_segment / 2;
+UPDATE patton_sums SET h_points = h_points + @boards_per_segment / 2;
-- Kompilujemy wyrównania Pattonowe, jako sumę BAMów i punktów za saldo
DELETE FROM patton_adjustments;