Индекс Джини меток тепличных измерений

тема: Энтропия, Gini и сплит · уровень: базовый

Условие

Автоматическая система собирает показания датчиков в теплице. Для каждой записи агроном указал метку состояния растений: NORMAL, DRY или OVERHEAT. Иногда метка отсутствует и обозначается символом -.

Требуется вычислить индекс Джини набора известных меток. Записи с меткой - в расчёте не участвуют. Если среди известных меток всего k записей, а метка c встретилась count(c) раз, то индекс Джини равен

G = 1 - Σ (count(c) / k)²,

где сумма берётся по всем различным известным меткам.

Если несколько меток встречаются одинаковое число раз, каждая из них отдельно учитывается в сумме; дополнительный выбор не производится. Гарантируется, что известна хотя бы одна метка.

Индекс Джини нужно вывести с тремя знаками после точки. Округление выполняется до ближайшего значения, а при ровно равных расстояниях выбирается значение с большей последней цифрой.

Формат ввода

В первой строке задано целое число n — число записей датчиков.

В следующих n строках заданы четыре значения: температура воздуха temperature, влажность humidity, концентрация углекислого газа co2 и метка состояния label.

Формат вывода

Выведите одно число — индекс Джини известных меток с тремя знаками после точки.

Ограничения

1 ≤ n ≤ 1000.

-20 ≤ temperature ≤ 60.

0 ≤ humidity ≤ 100.

300 ≤ co2 ≤ 5000.

label имеет длину от 1 до 8 символов и равно NORMAL, DRY, OVERHEAT или -.

Среди строк есть хотя бы одна строка, у которой label не равно -.

Решить задачу с автопроверкой на Python →

Куда дальше