Przejdź do zawartości

Moduł:Rekordy sezon: Różnice pomiędzy wersjami

Z Encyklopedia Poznanskiego Sportu
Utworzono nową stronę "local p = {} -- ========================================================= -- Module:Rekordy_sezon -- -- Rekordy drużyny w danym sezonie: -- - najwyższe zwycięstwo dom / wyjazd -- - najwyższa porażka dom / wyjazd -- - najwięcej punktów zawodnika dom / wyjazd -- - najwięcej minut dom / wyjazd -- - najwięcej asyst dom / wyjazd -- - najwięcej zbiórek dom / wyjazd -- - najwyższy EVAL dom / wyjazd -- - najwyższy +/- dom / wyjazd -- - najd…"
 
Nie podano opisu zmian
Linia 18: Linia 18:
-- Dane pobierane są wyłącznie z istniejących wpisów Cargo.
-- Dane pobierane są wyłącznie z istniejących wpisów Cargo.
-- =========================================================
-- =========================================================


function p.main(frame)
function p.main(frame)
Linia 37: Linia 36:
     end
     end


    -- Bezpieczne SQL
     local sezonSQL =
     local sezonSQL =
         mw.ustring.gsub(sezon, "'", "''")
         mw.ustring.gsub(sezon, "'", "''")
Linia 56: Linia 54:


         value = tostring(value)
         value = tostring(value)
        -- usuwamy ewentualne spacje
         value = mw.ustring.gsub(value, "%s+", "")
         value = mw.ustring.gsub(value, "%s+", "")


Linia 105: Linia 101:
     end
     end


    -- =====================================================
    -- NAZWA MECZU
    --
    -- WAŻNE:
    -- zawsze zachowujemy faktyczną kolejność gospodarze –
    -- goście.
    -- =====================================================


     local function nazwaMeczu(row)
     local function nazwaMeczu(row)
Linia 112: Linia 116:
         local strona = row.strona_meczu or ""
         local strona = row.strona_meczu or ""


         local tekst = ""
         local tekst =
 
             d1 .. " – " .. d2
        if d1 == druzyna then
 
            tekst =
                druzyna .. " – " .. d2
 
        elseif d2 == druzyna then
 
             tekst =
                d1 .. " – " .. druzyna
 
        else
 
            tekst =
                d1 .. " – " .. d2
 
        end


         if strona ~= "" then
         if strona ~= "" then


             if d1 == druzyna then
             return "[[" ..
 
                 strona ..
                return "[[" .. strona .. "|" ..
                 "|" ..
                    druzyna .. " – " .. d2 .. "]]"
                tekst ..
 
                "]]"
            elseif d2 == druzyna then
 
                 return "[[" .. strona .. "|" ..
                    d1 .. " – " .. druzyna .. "]]"
 
            else
 
                 return "[[" .. strona .. "|" ..
                    tekst .. "]]"
 
            end


         end
         end
Linia 157: Linia 134:




     local function rekordowyWpis(lista, wartosc)
     -- =====================================================
 
    -- KOPIOWANIE TABELI
        local wynik = {}
    --
    -- Dzięki temu każdy rekord indywidualny otrzymuje
    -- własną tabelę i własne pole "wartosc".
    -- =====================================================


        for _, item in ipairs(lista) do
    local function kopiujItem(item)


            if item.wartosc == wartosc then
        local nowy = {}
 
                table.insert(
                    wynik,
                    item
                )
 
            end


        for klucz, wartosc in pairs(item) do
            nowy[klucz] = wartosc
         end
         end


         return wynik
         return nowy
 
    end
 
 
    local function dodajDoRekordu(lista, item)
 
        table.insert(
            lista,
            item
        )


     end
     end
Linia 272: Linia 237:
         if g1 and g2 and miejsce then
         if g1 and g2 and miejsce then


             local zdobyte = 0
             local zdobyte
             local stracone = 0
             local stracone


             if miejsce == "dom" then
             if miejsce == "dom" then
Linia 286: Linia 251:


             end
             end


             local roznica =
             local roznica =
Linia 300: Linia 264:
                 zdobyte = zdobyte,
                 zdobyte = zdobyte,
                 stracone = stracone,
                 stracone = stracone,
                 roznica = roznica,
                 roznica = roznica,


Linia 505: Linia 468:
     -- =====================================================
     -- =====================================================
     -- FUNKCJA DODAJĄCA REKORD INDYWIDUALNY
     -- FUNKCJA DODAJĄCA REKORD INDYWIDUALNY
    --
    -- KLUCZOWA POPRAWKA:
    -- każdy rekord dostaje kopię itemu.
     -- =====================================================
     -- =====================================================


Linia 516: Linia 482:
         local lista =
         local lista =
             tabela[miejsce]
             tabela[miejsce]
        -- Tworzymy osobną kopię dla tej kategorii
        local nowy =
            kopiujItem(item)
        nowy.wartosc =
            wartosc
        -- Pierwszy rekord


         if #lista == 0 then
         if #lista == 0 then
            item.wartosc =
                wartosc


             table.insert(
             table.insert(
                 lista,
                 lista,
                 item
                 nowy
             )
             )


Linia 535: Linia 508:
             lista[1].wartosc
             lista[1].wartosc


        -- Nowy rekord


         if wartosc > obecna then
         if wartosc > obecna then
            item.wartosc =
                wartosc


             tabela[miejsce] = {
             tabela[miejsce] = {
                 item
                 nowy
             }
             }
        -- Rekord ex aequo


         elseif wartosc == obecna then
         elseif wartosc == obecna then
            item.wartosc =
                wartosc


             table.insert(
             table.insert(
                 lista,
                 lista,
                 item
                 nowy
             )
             )


Linia 841: Linia 813:
             -- =============================================
             -- =============================================
             -- DOM
             -- DOM
            --
            -- UWAGA:
            -- seria domowa liczona jest tylko z meczów
            -- domowych.
             -- =============================================
             -- =============================================


Linia 891: Linia 859:
             -- =============================================
             -- =============================================
             -- WYJAZD
             -- WYJAZD
            --
            -- Seria wyjazdowa liczona tylko z meczów
            -- wyjazdowych.
             -- =============================================
             -- =============================================


Linia 1014: Linia 979:


                 if wartosc == "" then
                 if wartosc == "" then
                     wartosc =
                     wartosc =
                         tostring(item.minuty)
                         tostring(item.minuty)
                 end
                 end


Linia 1096: Linia 1063:
     )
     )


     table.insert(
     table.insert(wynik, "")
        wynik,
        ""
    )




Linia 1111: Linia 1075:
     )
     )


     table.insert(
     table.insert(wynik, "")
        wynik,
        ""
    )


     table.insert(
     table.insert(
Linia 1127: Linia 1088:




    -- -----------------------------------------------------
     -- NAJWYŻSZE ZWYCIĘSTWO
     -- NAJWYŻSZE ZWYCIĘSTWO
    -- -----------------------------------------------------


     table.insert(
     table.insert(wynik, "|-")
        wynik,
        "|-"
    )


     table.insert(
     table.insert(
Linia 1158: Linia 1114:




    -- -----------------------------------------------------
     -- NAJWYŻSZA PORAŻKA
     -- NAJWYŻSZA PORAŻKA
    -- -----------------------------------------------------


     table.insert(
     table.insert(wynik, "|-")
        wynik,
        "|-"
    )


     table.insert(
     table.insert(
Linia 1189: Linia 1140:




     table.insert(
     table.insert(wynik, "|}")
        wynik,
     table.insert(wynik, "")
        "|}"
    )
 
 
     table.insert(
        wynik,
        ""
    )




Linia 1210: Linia 1153:
     )
     )


     table.insert(
     table.insert(wynik, "")
        wynik,
        ""
    )


     table.insert(
     table.insert(
Linia 1269: Linia 1209:
     for _, rekord in ipairs(rekordyLista) do
     for _, rekord in ipairs(rekordyLista) do


         table.insert(
         table.insert(wynik, "|-")
            wynik,
            "|-"
        )


         table.insert(
         table.insert(
Linia 1300: Linia 1237:




     table.insert(
     table.insert(wynik, "|}")
        wynik,
     table.insert(wynik, "")
        "|}"
    )
 
 
     table.insert(
        wynik,
        ""
    )




Linia 1321: Linia 1250:
     )
     )


     table.insert(
     table.insert(wynik, "")
        wynik,
        ""
    )


     table.insert(
     table.insert(
Linia 1337: Linia 1263:




    -- -----------------------------------------------------
     -- SERIA WYGRANYCH
     -- SERIA WYGRANYCH
    -- -----------------------------------------------------


     table.insert(
     table.insert(wynik, "|-")
        wynik,
        "|-"
    )


     table.insert(
     table.insert(
Linia 1376: Linia 1297:




    -- -----------------------------------------------------
     -- SERIA PORAŻEK
     -- SERIA PORAŻEK
    -- -----------------------------------------------------


     table.insert(
     table.insert(wynik, "|-")
        wynik,
        "|-"
    )


     table.insert(
     table.insert(
Linia 1415: Linia 1331:




     table.insert(
     table.insert(wynik, "|}")
        wynik,
        "|}"
    )





Wersja z 11:04, 17 sie 2026

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Rekordy sezon/opis

local p = {}

-- =========================================================
-- Module:Rekordy_sezon
--
-- Rekordy drużyny w danym sezonie:
--   - najwyższe zwycięstwo dom / wyjazd
--   - najwyższa porażka dom / wyjazd
--   - najwięcej punktów zawodnika dom / wyjazd
--   - najwięcej minut dom / wyjazd
--   - najwięcej asyst dom / wyjazd
--   - najwięcej zbiórek dom / wyjazd
--   - najwyższy EVAL dom / wyjazd
--   - najwyższy +/- dom / wyjazd
--   - najdłuższa seria zwycięstw ogółem / dom / wyjazd
--   - najdłuższa seria porażek ogółem / dom / wyjazd
--
-- Dane pobierane są wyłącznie z istniejących wpisów Cargo.
-- =========================================================

function p.main(frame)

    -- =====================================================
    -- PARAMETRY
    -- =====================================================

    local sezon = frame.args.sezon or ""
    local druzyna = frame.args.druzyna or ""

    if sezon == "" then
        return "'''Błąd:''' nie podano sezonu."
    end

    if druzyna == "" then
        return "'''Błąd:''' nie podano drużyny."
    end

    local sezonSQL =
        mw.ustring.gsub(sezon, "'", "''")

    local druzynaSQL =
        mw.ustring.gsub(druzyna, "'", "''")


    -- =====================================================
    -- FUNKCJE POMOCNICZE
    -- =====================================================

    local function liczba(value)

        if value == nil or value == "" then
            return 0
        end

        value = tostring(value)
        value = mw.ustring.gsub(value, "%s+", "")

        return tonumber(value) or 0

    end


    local function wynikMeczu(row)

        local g1 = tonumber(row.gole1 or "")
        local g2 = tonumber(row.gole2 or "")

        if g1 and g2 then
            return g1, g2
        end

        local wynik = row.wynik or ""

        local a, b =
            wynik:match("(%d+)%s*:%s*(%d+)")

        if a and b then
            return tonumber(a), tonumber(b)
        end

        return nil, nil

    end


    local function miejsceMeczu(row)

        local d1 = row.druzyna1 or ""
        local d2 = row.druzyna2 or ""

        if d1 == druzyna then
            return "dom"
        end

        if d2 == druzyna then
            return "wyjazd"
        end

        return nil

    end


    -- =====================================================
    -- NAZWA MECZU
    --
    -- WAŻNE:
    -- zawsze zachowujemy faktyczną kolejność gospodarze –
    -- goście.
    -- =====================================================

    local function nazwaMeczu(row)

        local d1 = row.druzyna1 or ""
        local d2 = row.druzyna2 or ""
        local strona = row.strona_meczu or ""

        local tekst =
            d1 .. " – " .. d2

        if strona ~= "" then

            return "[[" ..
                strona ..
                "|" ..
                tekst ..
                "]]"

        end

        return tekst

    end


    -- =====================================================
    -- KOPIOWANIE TABELI
    --
    -- Dzięki temu każdy rekord indywidualny otrzymuje
    -- własną tabelę i własne pole "wartosc".
    -- =====================================================

    local function kopiujItem(item)

        local nowy = {}

        for klucz, wartosc in pairs(item) do
            nowy[klucz] = wartosc
        end

        return nowy

    end


    -- =====================================================
    -- POBRANIE MECZÓW
    -- =====================================================

    local fieldsMecze = table.concat({

        "Mecze.id=mecz",
        "Mecze.data=data",
        "Mecze.sezon=sezon",
        "Mecze.druzyna1=druzyna1",
        "Mecze.druzyna2=druzyna2",
        "Mecze.gole1=gole1",
        "Mecze.gole2=gole2",
        "Mecze.wynik=wynik",
        "Mecze.strona_meczu=strona_meczu"

    }, ",")


    local argsMecze = {

        where =
            "(Mecze.druzyna1='" ..
            druzynaSQL ..
            "' OR Mecze.druzyna2='" ..
            druzynaSQL ..
            "')" ..
            " AND Mecze.sezon='" ..
            sezonSQL ..
            "'",

        orderBy = "Mecze.data ASC",

        limit = 5000

    }


    local mecze =
        mw.ext.cargo.query(
            "Mecze",
            fieldsMecze,
            argsMecze
        )


    if not mecze or #mecze == 0 then

        return
            "''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"

    end


    -- =====================================================
    -- REKORDY MECZOWE
    -- =====================================================

    local najwyzszeZwyciestwo = {
        dom = {},
        wyjazd = {}
    }

    local najwyzszaPorazka = {
        dom = {},
        wyjazd = {}
    }


    -- =====================================================
    -- PRZETWARZANIE MECZÓW
    -- =====================================================

    for _, row in ipairs(mecze) do

        local g1, g2 =
            wynikMeczu(row)

        local miejsce =
            miejsceMeczu(row)

        if g1 and g2 and miejsce then

            local zdobyte
            local stracone

            if miejsce == "dom" then

                zdobyte = g1
                stracone = g2

            else

                zdobyte = g2
                stracone = g1

            end

            local roznica =
                zdobyte - stracone


            local item = {

                mecz = row.mecz or "",
                data = row.data or "",
                miejsce = miejsce,

                zdobyte = zdobyte,
                stracone = stracone,
                roznica = roznica,

                tekst =
                    nazwaMeczu(row),

                wynik =
                    tostring(g1) ..
                    ":" ..
                    tostring(g2)

            }


            -- =============================================
            -- ZWYCIĘSTWO
            -- =============================================

            if roznica > 0 then

                local lista =
                    najwyzszeZwyciestwo[miejsce]

                if #lista == 0 then

                    table.insert(
                        lista,
                        item
                    )

                else

                    local obecna =
                        lista[1].roznica

                    if roznica > obecna then

                        najwyzszeZwyciestwo[miejsce] = {
                            item
                        }

                    elseif roznica == obecna then

                        table.insert(
                            lista,
                            item
                        )

                    end

                end

            end


            -- =============================================
            -- PORAŻKA
            -- =============================================

            if roznica < 0 then

                local lista =
                    najwyzszaPorazka[miejsce]

                local przegrana =
                    math.abs(roznica)

                item.przegrana =
                    przegrana

                if #lista == 0 then

                    table.insert(
                        lista,
                        item
                    )

                else

                    local obecna =
                        lista[1].przegrana

                    if przegrana > obecna then

                        najwyzszaPorazka[miejsce] = {
                            item
                        }

                    elseif przegrana == obecna then

                        table.insert(
                            lista,
                            item
                        )

                    end

                end

            end

        end

    end


    -- =====================================================
    -- POBRANIE STATYSTYK ZAWODNIKÓW
    -- =====================================================

    local fieldsZawodnicy = table.concat({

        "UdzialZawodnika.zawodnik=zawodnik",
        "UdzialZawodnika.druzyna=druzyna_zawodnika",
        "UdzialZawodnika.gol=gol",
        "UdzialZawodnika.minuty=minuty",
        "UdzialZawodnika.minuty_format=minuty_format",
        "UdzialZawodnika.asysta=asysta",
        "UdzialZawodnika.zbiorka=zbiorka",
        "UdzialZawodnika.eval=eval",
        "UdzialZawodnika.plusminus=plusminus",

        "Mecze.id=mecz",
        "Mecze.data=data",
        "Mecze.druzyna1=druzyna1",
        "Mecze.druzyna2=druzyna2",
        "Mecze.gole1=gole1",
        "Mecze.gole2=gole2",
        "Mecze.wynik=wynik",
        "Mecze.strona_meczu=strona_meczu"

    }, ",")


    local argsZawodnicy = {

        join =
            "UdzialZawodnika.mecz=Mecze.id",

        where =
            "UdzialZawodnika.druzyna='" ..
            druzynaSQL ..
            "'" ..
            " AND Mecze.sezon='" ..
            sezonSQL ..
            "'" ..
            " AND UdzialZawodnika.minuty > 0",

        orderBy =
            "Mecze.data ASC",

        limit = 10000

    }


    local zawodnicy =
        mw.ext.cargo.query(
            "UdzialZawodnika,Mecze",
            fieldsZawodnicy,
            argsZawodnicy
        )


    -- =====================================================
    -- REKORDY INDYWIDUALNE
    -- =====================================================

    local rekordy = {

        punkty = {
            dom = {},
            wyjazd = {}
        },

        minuty = {
            dom = {},
            wyjazd = {}
        },

        asysty = {
            dom = {},
            wyjazd = {}
        },

        zbiorki = {
            dom = {},
            wyjazd = {}
        },

        eval = {
            dom = {},
            wyjazd = {}
        },

        plusminus = {
            dom = {},
            wyjazd = {}
        }

    }


    -- =====================================================
    -- FUNKCJA DODAJĄCA REKORD INDYWIDUALNY
    --
    -- KLUCZOWA POPRAWKA:
    -- każdy rekord dostaje kopię itemu.
    -- =====================================================

    local function dodajRekord(
        tabela,
        miejsce,
        wartosc,
        item
    )

        local lista =
            tabela[miejsce]

        -- Tworzymy osobną kopię dla tej kategorii
        local nowy =
            kopiujItem(item)

        nowy.wartosc =
            wartosc


        -- Pierwszy rekord

        if #lista == 0 then

            table.insert(
                lista,
                nowy
            )

            return

        end


        local obecna =
            lista[1].wartosc


        -- Nowy rekord

        if wartosc > obecna then

            tabela[miejsce] = {
                nowy
            }


        -- Rekord ex aequo

        elseif wartosc == obecna then

            table.insert(
                lista,
                nowy
            )

        end

    end


    -- =====================================================
    -- PRZETWARZANIE STATYSTYK ZAWODNIKÓW
    -- =====================================================

    if zawodnicy then

        for _, row in ipairs(zawodnicy) do

            local miejsce =
                miejsceMeczu(row)

            if miejsce then

                local wartoscPunktow =
                    liczba(row.gol)

                local wartoscMinut =
                    liczba(row.minuty)

                local wartoscAsyst =
                    liczba(row.asysta)

                local wartoscZbiorek =
                    liczba(row.zbiorka)

                local wartoscEval =
                    liczba(row.eval)

                local wartoscPlusminus =
                    liczba(row.plusminus)


                local item = {

                    zawodnik =
                        row.zawodnik or "",

                    mecz =
                        row.mecz or "",

                    data =
                        row.data or "",

                    miejsce =
                        miejsce,

                    tekst =
                        nazwaMeczu(row),

                    wynik =
                        row.wynik or "",

                    minuty_format =
                        row.minuty_format or "",

                    punkty =
                        wartoscPunktow,

                    minuty =
                        wartoscMinut,

                    asysty =
                        wartoscAsyst,

                    zbiorki =
                        wartoscZbiorek,

                    eval =
                        wartoscEval,

                    plusminus =
                        wartoscPlusminus

                }


                -- =========================================
                -- PUNKTY
                -- =========================================

                dodajRekord(
                    rekordy.punkty,
                    miejsce,
                    wartoscPunktow,
                    item
                )


                -- =========================================
                -- MINUTY
                -- =========================================

                dodajRekord(
                    rekordy.minuty,
                    miejsce,
                    wartoscMinut,
                    item
                )


                -- =========================================
                -- ASYSTY
                -- =========================================

                dodajRekord(
                    rekordy.asysty,
                    miejsce,
                    wartoscAsyst,
                    item
                )


                -- =========================================
                -- ZBIÓRKI
                -- =========================================

                dodajRekord(
                    rekordy.zbiorki,
                    miejsce,
                    wartoscZbiorek,
                    item
                )


                -- =========================================
                -- EVAL
                -- =========================================

                dodajRekord(
                    rekordy.eval,
                    miejsce,
                    wartoscEval,
                    item
                )


                -- =========================================
                -- PLUS / MINUS
                -- =========================================

                dodajRekord(
                    rekordy.plusminus,
                    miejsce,
                    wartoscPlusminus,
                    item
                )

            end

        end

    end


    -- =====================================================
    -- SERIE
    -- =====================================================

    local serie = {

        wszystkie = {
            wygrane = 0,
            przegrane = 0
        },

        dom = {
            wygrane = 0,
            przegrane = 0
        },

        wyjazd = {
            wygrane = 0,
            przegrane = 0
        }

    }


    local aktualna = {

        wszystkie = {
            W = 0,
            P = 0
        },

        dom = {
            W = 0,
            P = 0
        },

        wyjazd = {
            W = 0,
            P = 0
        }

    }


    -- =====================================================
    -- OBLICZANIE SERII
    -- =====================================================

    for _, row in ipairs(mecze) do

        local g1, g2 =
            wynikMeczu(row)

        local miejsce =
            miejsceMeczu(row)

        if g1 and g2 and miejsce then

            local wynik

            if miejsce == "dom" then

                if g1 > g2 then
                    wynik = "W"
                elseif g1 < g2 then
                    wynik = "P"
                else
                    wynik = "R"
                end

            else

                if g2 > g1 then
                    wynik = "W"
                elseif g2 < g1 then
                    wynik = "P"
                else
                    wynik = "R"
                end

            end


            -- =============================================
            -- OGÓŁEM
            -- =============================================

            if wynik == "W" then

                aktualna.wszystkie.W =
                    aktualna.wszystkie.W + 1

                aktualna.wszystkie.P = 0

                if aktualna.wszystkie.W >
                    serie.wszystkie.wygrane then

                    serie.wszystkie.wygrane =
                        aktualna.wszystkie.W

                end

            elseif wynik == "P" then

                aktualna.wszystkie.P =
                    aktualna.wszystkie.P + 1

                aktualna.wszystkie.W = 0

                if aktualna.wszystkie.P >
                    serie.wszystkie.przegrane then

                    serie.wszystkie.przegrane =
                        aktualna.wszystkie.P

                end

            else

                aktualna.wszystkie.W = 0
                aktualna.wszystkie.P = 0

            end


            -- =============================================
            -- DOM
            -- =============================================

            if miejsce == "dom" then

                if wynik == "W" then

                    aktualna.dom.W =
                        aktualna.dom.W + 1

                    aktualna.dom.P = 0

                    if aktualna.dom.W >
                        serie.dom.wygrane then

                        serie.dom.wygrane =
                            aktualna.dom.W

                    end

                elseif wynik == "P" then

                    aktualna.dom.P =
                        aktualna.dom.P + 1

                    aktualna.dom.W = 0

                    if aktualna.dom.P >
                        serie.dom.przegrane then

                        serie.dom.przegrane =
                            aktualna.dom.P

                    end

                else

                    aktualna.dom.W = 0
                    aktualna.dom.P = 0

                end

            end


            -- =============================================
            -- WYJAZD
            -- =============================================

            if miejsce == "wyjazd" then

                if wynik == "W" then

                    aktualna.wyjazd.W =
                        aktualna.wyjazd.W + 1

                    aktualna.wyjazd.P = 0

                    if aktualna.wyjazd.W >
                        serie.wyjazd.wygrane then

                        serie.wyjazd.wygrane =
                            aktualna.wyjazd.W

                    end

                elseif wynik == "P" then

                    aktualna.wyjazd.P =
                        aktualna.wyjazd.P + 1

                    aktualna.wyjazd.W = 0

                    if aktualna.wyjazd.P >
                        serie.wyjazd.przegrane then

                        serie.wyjazd.przegrane =
                            aktualna.wyjazd.P

                    end

                else

                    aktualna.wyjazd.W = 0
                    aktualna.wyjazd.P = 0

                end

            end

        end

    end


    -- =====================================================
    -- FORMATOWANIE REKORDÓW MECZOWYCH
    -- =====================================================

    local function tekstMeczow(lista)

        if not lista or #lista == 0 then
            return "—"
        end

        local wynik = {}

        for _, item in ipairs(lista) do

            table.insert(
                wynik,
                item.tekst ..
                " (" ..
                item.wynik ..
                ", " ..
                (item.roznica >= 0
                    and ("+" .. item.roznica)
                    or tostring(item.roznica)) ..
                ")"
            )

        end

        return table.concat(
            wynik,
            "<br>"
        )

    end


    -- =====================================================
    -- FORMATOWANIE REKORDÓW ZAWODNIKÓW
    -- =====================================================

    local function tekstZawodnikow(
        lista,
        typ
    )

        if not lista or #lista == 0 then
            return "—"
        end

        local wynik = {}

        for _, item in ipairs(lista) do

            local zawodnikLink =
                "[[" ..
                item.za