sbachinin / bracketry

Visualize bracket of a knockout tournament in the browser
https://bracketry.app/
MIT License
9 stars 0 forks source link

In tennis qualifying events, there are no semifinals and finals. How to remove the default semifinal and final rounds? #11

Open jingxiang opened 4 weeks ago

sbachinin commented 3 weeks ago

Oh, that's an interesting question. Didn't know about that. I think at the moment there is no simple way to do it. I will try to provide a solution asap.

sbachinin commented 2 weeks ago

~~I've added (not released yet) a dropNLastRounds option. In your case, you can get a tournament that stops at QF by providing { dropNLastRounds: 2 } Does it look ok?~~

sbachinin commented 2 weeks ago

~~Though perhaps it should be a part of data, not options... Need to think about it~~

sbachinin commented 2 weeks ago

Ok, the above solution was wrong. Instead I will add skippedLastRoundsCount field to the data object. So that { skippedLastRoundsCount: 2 } will indicate that a tournment terminates at QF. Does it sound good?

jingxiang commented 2 weeks ago

Yes, it seems like a good solution. The value of skippedLastRoundsCount needs to be customizable.

jingxiang commented 2 weeks ago

For example : https://tennisliveranking.com/en/tournament/china-open-beijing-chn/xx9Q The qualifying draws only had round1 and round2 Here is the source data: `

{"rounds":[{"name":"Round 1"},{"name":"Round 2"}],"matches":[{"roundIndex":0,"sides":[{"contestantId":"325936","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"333677","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"3","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":0},{"roundIndex":0,"sides":[{"contestantId":"317349","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"320728","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":1},{"roundIndex":0,"sides":[{"contestantId":"310440","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"6","subscore":3,"isWinner":true},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"329250","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"7","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":true}],"order":2},{"roundIndex":0,"sides":[{"contestantId":"321743","scores":[{"mainScore":"1","isWinner":false},{"mainScore":"3","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"321106","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":3},{"roundIndex":0,"sides":[{"contestantId":"310761","scores":[{"mainScore":"1","isWinner":false},{"mainScore":"3","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"324830","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":4},{"roundIndex":0,"sides":[{"contestantId":"335219","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"320945","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":5},{"roundIndex":0,"sides":[{"contestantId":"320408","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"4","isWinner":false},{"mainScore":"6","isWinner":true}],"winner":true},{"contestantId":"325807","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"6","isWinner":true},{"mainScore":"3","isWinner":false}],"winner":false}],"order":6},{"roundIndex":0,"sides":[{"contestantId":"313225","scores":[{"mainScore":"2","isWinner":false},{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true}],"winner":true},{"contestantId":"329614","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"3","isWinner":false},{"mainScore":"4","isWinner":false}],"winner":false}],"order":7},{"roundIndex":0,"sides":[{"contestantId":"320228","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"3","isWinner":false},{"mainScore":"4","isWinner":true}],"winner":true},{"contestantId":"323079","scores":[{"mainScore":"2","isWinner":false},{"mainScore":"6","isWinner":true},{"mainScore":"3","isWinner":false}],"winner":false}],"order":8},{"roundIndex":0,"sides":[{"contestantId":"328897","scores":[{"mainScore":"6","subscore":3,"isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true}],"winner":true},{"contestantId":"329627","scores":[{"mainScore":"7","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"2","isWinner":false}],"winner":false}],"order":9},{"roundIndex":0,"sides":[{"contestantId":"327101","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"333415","scores":[{"mainScore":"3","isWinner":false},{"mainScore":"3","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":10},{"roundIndex":0,"sides":[{"contestantId":"320543","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"324898","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"3","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":11},{"roundIndex":0,"sides":[{"contestantId":"318872","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"323451","scores":[{"mainScore":"2","isWinner":false},{"mainScore":"2","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":12},{"roundIndex":0,"sides":[{"contestantId":"120420","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"3","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"326907","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":13},{"roundIndex":0,"sides":[{"contestantId":"312413","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"322451","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"0","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":14},{"roundIndex":0,"sides":[{"contestantId":"326481","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"-","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"324750","scores":[{"mainScore":"3","isWinner":true},{"mainScore":"-","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":15},{"roundIndex":0,"sides":[{"contestantId":"326007","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"3","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"323087","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"0","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":16},{"roundIndex":0,"sides":[{"contestantId":"320592","scores":[{"mainScore":"3","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"319571","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":17},{"roundIndex":0,"sides":[{"contestantId":"325338","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"317805","scores":[{"mainScore":"2","isWinner":false},{"mainScore":"2","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":18},{"roundIndex":0,"sides":[{"contestantId":"317065","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"317443","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"4","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":19},{"roundIndex":0,"sides":[{"contestantId":"322087","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"0","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"315696","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":20},{"roundIndex":0,"sides":[{"contestantId":"316981","scores":[{"mainScore":"2","isWinner":false},{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true}],"winner":true},{"contestantId":"328142","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"2","isWinner":false},{"mainScore":"1","isWinner":false}],"winner":false}],"order":21},{"roundIndex":0,"sides":[{"contestantId":"316464","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"335195","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":22},{"roundIndex":0,"sides":[{"contestantId":"326929","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","subscore":5,"isWinner":true},{"mainScore":"6","isWinner":true}],"winner":true},{"contestantId":"320238","scores":[{"mainScore":"2","isWinner":false},{"mainScore":"7","isWinner":false},{"mainScore":"1","isWinner":false}],"winner":false}],"order":23},{"roundIndex":1,"sides":[{"contestantId":"325936","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"2","isWinner":false},{"mainScore":"6","subscore":2,"isWinner":true}],"winner":false},{"contestantId":"320728","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"6","isWinner":true},{"mainScore":"7","isWinner":false}],"winner":true}],"order":0},{"roundIndex":1,"sides":[{"contestantId":"329250","scores":[{"mainScore":"1","isWinner":false},{"mainScore":"4","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"321106","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":1},{"roundIndex":1,"sides":[{"contestantId":"324830","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"7","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"320945","scores":[{"mainScore":"1","isWinner":false},{"mainScore":"6","subscore":9,"isWinner":true},{"mainScore":"-","isWinner":true}],"winner":false}],"order":2},{"roundIndex":1,"sides":[{"contestantId":"320408","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"313225","scores":[{"mainScore":"3","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":3},{"roundIndex":1,"sides":[{"contestantId":"320228","scores":[{"mainScore":"5","isWinner":false},{"mainScore":"7","isWinner":true},{"mainScore":"7","isWinner":false}],"winner":true},{"contestantId":"328897","scores":[{"mainScore":"7","isWinner":true},{"mainScore":"5","isWinner":false},{"mainScore":"6","subscore":5,"isWinner":true}],"winner":false}],"order":4},{"roundIndex":1,"sides":[{"contestantId":"327101","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"320543","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"4","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":5},{"roundIndex":1,"sides":[{"contestantId":"318872","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"326907","scores":[{"mainScore":"1","isWinner":false},{"mainScore":"1","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":6},{"roundIndex":1,"sides":[{"contestantId":"312413","scores":[{"mainScore":"7","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"324750","scores":[{"mainScore":"5","isWinner":false},{"mainScore":"0","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":7},{"roundIndex":1,"sides":[{"contestantId":"326007","scores":[{"mainScore":"7","isWinner":false},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"319571","scores":[{"mainScore":"6","subscore":5,"isWinner":true},{"mainScore":"4","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":8},{"roundIndex":1,"sides":[{"contestantId":"325338","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"317065","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"2","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":9},{"roundIndex":1,"sides":[{"contestantId":"315696","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":false}],"winner":true},{"contestantId":"316981","scores":[{"mainScore":"0","isWinner":false},{"mainScore":"2","isWinner":false},{"mainScore":"-","isWinner":true}],"winner":false}],"order":10},{"roundIndex":1,"sides":[{"contestantId":"316464","scores":[{"mainScore":"4","isWinner":false},{"mainScore":"2","isWinner":false},{"mainScore":"-","isWinner":false}],"winner":false},{"contestantId":"326929","scores":[{"mainScore":"6","isWinner":true},{"mainScore":"6","isWinner":true},{"mainScore":"-","isWinner":true}],"winner":true}],"order":11}],"contestants":{"319571":{"players":[{"nationality":"de","title":"Tamara Korpatsch"}]},"323079":{"players":[{"nationality":"si","title":"Tamara Zidansek"}]},"326007":{"players":[{"nationality":"us","title":"A. Parks"}]},"325338":{"players":[{"nationality":"ua","title":"Yuliia Starodubtseva"}]},"323451":{"players":[{"nationality":"nl","title":"Arianne Hartono"}]},"322087":{"players":[{"nationality":"es","title":"Rebeka Masarova"}]},"325936":{"players":[{"nationality":"ru","title":"K. Rakhimova"}]},"326907":{"players":[{"nationality":"tr","title":"Z. Sonmez"}]},"333415":{"players":[{"nationality":"cn","title":"R. Zhang"}]},"316464":{"players":[{"nationality":"us","title":"Emina Bektas"}]},"326929":{"players":[{"nationality":"th","title":"M. Sawangkaew"}]},"316981":{"players":[{"nationality":"gb","title":"H. Watson"}]},"335219":{"players":[{"nationality":"cn","title":"Y. Shao"}]},"333677":{"players":[{"nationality":"cn","title":"Y. Qu"}]},"310440":{"players":[{"nationality":"de","title":"T. Maria"}]},"315696":{"players":[{"nationality":"kz","title":"Zarina Diyas"}]},"313225":{"players":[{"nationality":"cn","title":"J. Lu"}]},"312413":{"players":[{"nationality":"au","title":"Arina Rodionova"}]},"120420":{"players":[{"nationality":"us","title":"V. Lepchenko"}]},"317805":{"players":[{"nationality":"ca","title":"C. Zhao"}]},"320238":{"players":[{"nationality":"jp","title":"Nao Hibino"}]},"321743":{"players":[{"nationality":"us","title":"H. Chang"}]},"321106":{"players":[{"nationality":"hu","title":"D. Galfi"}]},"327101":{"players":[{"nationality":"us","title":"H. Baptiste"}]},"324750":{"players":[{"nationality":"jp","title":"Mai Hontama"}]},"328897":{"players":[{"nationality":"ru","title":"P. Kudermetova"}]},"324830":{"players":[{"title":"En-Shuo Liang"}]},"324898":{"players":[{"nationality":"nl","title":"Suzan Lamens"}]},"322451":{"players":[{"nationality":"cn","title":"Xiaodi You"}]},"329627":{"players":[{"nationality":"cz","title":"L. Fruhvirtova"}]},"320592":{"players":[{"nationality":"ge","title":"Mariam Bolkvadze"}]},"323087":{"players":[{"nationality":"cn","title":"H. Guo"}]},"317065":{"players":[{"nationality":"kr","title":"Su Jeong Jang"}]},"325807":{"players":[{"nationality":"cn","title":"S. Feng"}]},"317443":{"players":[{"nationality":"us","title":"S. Vickery"}]},"318872":{"players":[{"nationality":"es","title":"S. Sorribes Tormo"}]},"317349":{"players":[{"nationality":"rs","title":"Natalija Stevanovic"}]},"310761":{"players":[{"nationality":"it","title":"S. Errani"}]},"329250":{"players":[{"nationality":"by","title":"Aliona Falei"}]},"320728":{"players":[{"nationality":"au","title":"K. Birrell"}]},"320408":{"players":[{"nationality":"ro","title":"E. Ruse"}]},"335195":{"players":[{"nationality":"cn","title":"Z. Wei"}]},"320945":{"players":[{"nationality":"hr","title":"Jana Fett"}]},"326481":{"players":[{"nationality":"ru","title":"Sofya Lansere"}]},"328142":{"players":[{"nationality":"fr","title":"E. Jacquemot"}]},"320228":{"players":[{"nationality":"sk","title":"Rebecca Sramkova"}]},"320543":{"players":[{"nationality":"au","title":"P. Hon"}]},"329614":{"players":[{"nationality":"ca","title":"M. Stakusic"}]}}} --   |  

`