Droga do wygody w liczeniu wyników w POPRZECZCE

in #polish29 days ago (edited)

To będzie wpis o kulisach liczenia wyników POPRZECZKI. Głównie o tabelach, także powodzenia w czytaniu. Może matematyczny umysł @maciejficek da radę i znałby krótszą drogę w osiągnięciu celu.

W wolnych chwilach długo myślałem o tym jak usprawnić i zautomatyzować naszą zabawę. Ten wpis jest o drodze do tego właśnie celu.

Poprzeczka ma już kilka lat. Właśnie wystartowała 35 edycja. Na początku był pomysł, potem hasło, następnie realizacja.

Sposób zapisu tej rywalizacji wytworzył się już na początku. Prosta tabela w arkuszu kalkulacyjnym gdzie "X" to zrzucenie poprzeczki, a "O" to pokonanie wyznaczonej wysokości.

Co parę dni "na oko" publikowane są bieżące wyniki. Nie jest to trudne. Sprawdzamy kółka przy najwyższych dniach. Następnie gdy są remisy to sprawdzamy kolejne dni. I tak dalej. Pomagają kolory w tabeli.

Najbardziej czasochłonne jest zbieranie danych. Przy zaległościach oznacza ono nieraz konieczność przejrzenia kilkudziesięciu wpisów. Ach gdyby dało się to łatwo zautomatyzować!

Każde podsumowanie to nowa porcja liczb. Ostateczny wynik, kolejne rekordy. Przez długi czas nagroda była uzależniona od kolejnych osiągnięć, którymi mogły być rekordy osobiste, poprawa wyniku z poprzedniego miesiąca itp.

To oznaczało kolejne analizowanie tabeli. Na dłuższą metę to było za dużo. Po 28 edycji powiedziałem dość tym szczegółom. One były za dużym ciężarem.

Pomału pracowałem nad automatyzacją tabeli. Przede wszystkim chodziło mi o to jak te wszystkie kołka i iksy przemienić w liczbowa tabelę z wynikami. Dużo było przy tym kopiowania i ręcznego zmieniania formuł.

Wstępne zabawy z formułami Excela wyróżniały się nadmiarem słowa "JEŻELI". Można by to słownie wytłumaczyć tak:
Jeżeli któryś z uczestników pokonał dany dzień to w tabeli po prawej stronie głównego arkusza zamień kółko na liczbę dzieląc limit kroków przez 1000.

To dopiero początek bo co zrobić ze strąceniami? Najprościej dawać punkty karne, ale najtrudniej je zróżnicować. Inaczej wszak liczy się stracenie 2 dni temu a inaczej 8 dni temu. Nad tym było najwięcej myślenia i nadal nie mam idealnego rozwiązania.

Przez miesiące w tabeli za każde strącenie były odejmowane mikro punkty (0,1). Tabela analizowała także wynik z dnia poprzedniego - przez to w przypadku remisu, jeśli poprzedniego dnia któryś z uczestników miał potknięcie to tabela mikro punktów to wychwytywała.

=JEŻELI(C36="O";JEŻELI($B36/1000-AT37>1;$B36/1000-0,1;$B36/1000);AT37)

Tu mamy przykład formuły jaką stosowałem do liczenia wyników. Jeżeli było strącenie to pod uwagę tabela brała komórkę niżej z punktowym wynikiem z dnia poprzedniego. Od wyniku głównego odejmowałem też 0,1 punktu.

Ten system działał przez kilkadziesiąt miesięcy, ale był bardzo ułomny.

Wyniki w tym systemie wyglądały jak powyżej. Po zaokrągleniu mieliśmy ostateczny wynik wyrażony w dniach, a te mikro punkty miały pomagać wychwytywać niektóre remisy. Niestety raczej nie pomagały bo i tak analiza "na oko" była skuteczniejsza.

Przez miesiące myślałem jak to rozwiązać by jednocześnie formuła nie zamieniła się w coś w rodzaju tego:

=JEŻELI(B2>97;"A+";JEŻELI(B2>93;"A"; JEŻELI(B2>89;"A-";JEŻELI(B2>87;"B+";JEŻELI(B2>83;"B";JEŻELI(B2>79; "B-";JEŻELI(B2>77;"C+";JEŻELI(B2>73;"C";JEŻELI(B2>69;"C-";JEŻELI(B2>57;"D+";JEŻELI(B2>53;"D";JEŻELI(B2>49;"D-";"F"))))))))))))

Chyba wymyśliłem!
Czuję wyraźnie krok do przodu! Oto przykład nowej formuły:

=JEŻELI(C5="x";$B5/1000$B5/1000$B5/1000*0,000001;(JEŻELI(C5="";"";$B5/1000)))

A teraz wytłumaczenie:

Na nowo stworzyłem tabelę z punktami, która w dużo prostszy sposób zamienia kółka i iksy na liczby. Jest ona na prawo od głównego arkusza z wynikami. Prosta zasada - kółko to punkty odpowiadające temu od ilu dni trwa rozgrywka (=limit z kolejnego dnia podzielić na 1000).

Druga prosta zasada to liczenie potknięć. Iksy zamieniane są na liczby w ten sposób, że dzień rozgrywki podnoszony jest do potęgi trzeciej i następnie mnożony przez 0,000001. W ten sposób powstają mikro punkty, które stworzą dokładną klasyfikację. Te mikro punkty narastają w zależności od dnia rozgrywki bardzo szybko. Przez to zrzucenie poprzeczki w pierwszym dniu jest niemal niewidoczne dla punktacji.

Słowem klucz w powyższym wytłumaczeniu jest zamiana punktów karnych (0,1) na bardziej szczegółowe (np. 0,052). W przybliżeniu nadal punkty oznaczają dzień do którego dotrwał nasz uczestnik, ale ułamki tworzą dokładną klasyfikację.


Powyżej przykład jak liczbowo oceniać ostatnie wyniki. Strącenia są małymi ułamkami a udane próby - liczbami całkowitymi. Kolejna tabela przechwyci z tej liczby maksymalne w kolumnach (te oznaczają wynik wyrażony w dniach) oraz te malutkie punkty karne. Suma tych punktów karnych w kolumnach powinna dać w miarę poprawną klasyfikację.

Pomnożenie przez 0,000001 daje pewność, że mikro punkty zawsze jednak będą ułamkiem ileś miejsc po przecinku. Nie zmienią więc wyników, a jedynie zmienią kolejność.


Konieczne było utworzenie kolejnej tabeli z klasyfikacją i wynikami na bieżąco. Przykład powyżej. To jest w sumie wada, ale także szansa.

Z tej powyższej tabeli dość łatwo daje się wyciągnąć dokładną klasyfikację, która zmienia się jak tylko wstawimy gdzieś O lub X.

O to mi właśnie chodziło. Już nie trzeba zmieniać X/O na liczby np. 27 lub 26,1 by jeden uczestnik wyprzedził drugiego. Teraz jest dokładniej.

Jest też wada, którą skrywa mniej wyraźna czcionka. Excelowe formuły, które rozumiem, nie przepadają za remisami. Dlatego wprowadziłem dodatkowo klasyfikację ze względu na historyczne osiągnięcia, którą w powyższych tabelach też można zobaczyć.

Ze wstępnych testów jakie teraz robię to jest ułatwienie i w sumie ten cały tekst o tym właśnie jest.

Sort:  

I didn't think about it enough to understand the details, but that sounds promising. Talking about automation, a long time ago, when I wanted to learn a bit more about python and Hive, I had in mind a script to read the Actifit reports and populate the table with X or O. It actually seems fairly simple. But like many of my ideas, it quickly stopped because of laziness, but maybe some day I will get back into this.
!ALIVE

@poprzeczka! You Are Alive so I just staked 0.1 $ALIVE to your account on behalf of @ manuvert. (4/20)

The tip has been paid for by the We Are Alive Tribe through the earnings on @alive.chat, feel free to swing by our daily chat any time you want, plus you can win Hive Power (2x 50 HP) and Alive Power (2x 500 AP) delegations (4 weeks), and Ecency Points (4x 50 EP), in our chat every day.

These nested formulas are a nightmare to get them right. !LOLZ

What do you call a hippo who says something and does the complete opposite?
A hippocrite

Credit: reddit
@poprzeczka, I sent you an $LOLZ on behalf of ervin-lemark

(2/2)
Delegate Hive Tokens to Farm $LOLZ and earn 110% Rewards. Learn more.