Енисейская знать 2010
2010-11-01 15:05![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Съездили в Красноярск на фестиваль интеллектуальных игр «Енисейская знать». 8 (из 38 команд) место в ЧГК, чуть-чуть не прошли в плейофф Брейн-ринга.
Вот чего я не понимаю: почему для обсчёта результатов ЧГК пишут специальную программу на Delphi, где достаточно было бы spreadsheet’а типа Excel’я или OpenLibreOffice Calc.
Пусть у нас ожидается до 50 команд, 5 туров по 15 вопросов. Первичный критерий сортировки — сумма (количество взятых вопросов), вторичный — рейтинг (где рейтинг команды есть сумма рейтингов взятых ей вопросов, а рейтинг вопроса — единица плюс количество не взявших его команд).
Первые две колонки — № и название команды. Пишем соответствующие заголовки в A4:B4. Следующие 15 колонок (C:Q) — вопросы первого тура (1–15). Затем промежуточная сумма и рейтинг по туру (R — S1, S — R1). Потом (T:AL) — вопросы второго тура, промежуточная сумма и рейтинг по 2 туру, общая сумма и рейтинг по первым двум турам. Повторить до пятого тура включительно.
В ячейку A1 забиваем формулу =COUNTA($B$4:$B$53)
. Это будет количество команд.
В ячейку B1 вводим слово «Рейтинг». В C1 — формулу =1+$A$1-SUM(C$4:C$53)
, это будет рейтинг первого вопроса. Копируем эту формулу во все клетки первой строки, находящиеся в столбцах, соответствующих вопросам (C1:Q1, T1:AH1, AM1:BA1, BF1:BT1, BY1:CM1) — теперь у нас есть строчка рейтингов вопросов. (Чтобы это работало, отвеченный вопрос должен обозначаться единичкой, неотвеченный — нулём или пустой ячейкой.)
Считаем суммы по турам: R4 =SUM(C4:Q4)
, размножить по R4:R53, AI4:AI53, BB4:BB53, BU4:BU53, CN4:CN53. Суммарный рейтинг по туру: S4 =SUMPRODUCT(C$1:Q$1,C4:Q4)
(или =SUMIF(C4:Q4,">0",C$1:Q$1)
, если у вас Pocket Excel на КПК), размножить по S4:S53, AJ4:AJ53, BC4:BC53, BV4:BV53, CO4:CO53. Общие суммы и рейтинги за прошедшие туры: AK4 =R4+AI4
, размножить по AK4:AL53, BD4:BE53, BW4:BX53, CP4:CQ53.
Если мы ещё хотим показывать итоговое место, можно добавить вспомогательную колонку, где будет одновременно сумма и рейтинг: CR3 S.R
, CR4 =CP4+CQ4/10000
, размножить по CR4:CR53, формат Number, с 4 знаками после точки; и дальше считать место как 1 + количество команд, у которых эта величина выше, чем у данной: CS3 Mh
, CT3 Ml
, CS4 =1+COUNTIF($CR$4:$CR$53,">"&$CR4)
, CT4 =COUNTIF($CR$4:$CR$53,">="&$CR4)
, размножить CS4:CT4 на CS4:CT53. Колонка Mh будет показывать верхнюю границу мест, поделенных командой, Ml — нижнюю. При желании аналогичные колонки можно воткнуть после каждого тура.
Финальный штрих: на клетке C4 делаем Window | Freeze и рисуем решётку и/или красим промежуточные итоги каким-нибудь ненапряжным фоном.
После каждого тура сортируем таблицу по убыванию S.R и скроллим так, чтобы все вопросы тура было видно. Очень желательно, чтобы все команды тоже было видно — достигается установкой достаточно мелкого шрифта и включением полноэкранного режима без тулбаров.