1,015 bytes · the TypeScript implementation · view raw
import { type DegreeDays } from"./energy_degree_days_types.ts";
const LIMIT = 1000; // 100.0 °C in tenthsfunction checkTemperature(what: string, value: number): void {
if (!Number.isInteger(value) || value < -LIMIT || value > LIMIT) {
thrownew RangeError(`${what} must be whole tenths of a degree from -1000 to 1000, received ${value}`);
}
}
/** * Heating and cooling degree days in tenths: each day adds how far its mean * fell below (heating) or rose above (cooling) the base. */exportfunction degreeDays(dailyMeanTemperatures: readonly number[], baseTemperature: number): DegreeDays {
checkTemperature("base temperature", baseTemperature);
let heating = 0;
let cooling = 0;
for (const mean of dailyMeanTemperatures) {
checkTemperature("daily mean temperature", mean);
if (mean < baseTemperature) heating += baseTemperature - mean;
elseif (mean > baseTemperature) cooling += mean - baseTemperature;
}
return { heating, cooling, days: dailyMeanTemperatures.length };
}