Natale si avvicina e Babbo Natale sta ultimando i preparativi. Uno degli aspetti più delicati riguarda l’attrezzatura. La slitta è sottoposta a forti pressioni, e anche le renne, porelle, devono dare il massimo. Per di più nell’arco di una sola notte attraversano tutti i climi del pianeta. Per proteggerle adeguatamente Babbo Natale calcola la temperatura dei ogni località e copre, o scopre, le renne alla bisogna. Ovviamente non basta la temperatura misurata dal termometro: serve la temperatura percepita.
Il problema: Baby, It’s Cold Outside ❄️

Il problema 18 del Dev Advent Calendar 🎅 è abbastanza semplice. Devo calcolare la temperatura percepita conoscendo la velocità del vento (ovvero della slitta di Babbo Natale) e la temperatura esterna. Il risultato può essere sia in gradi centigradi sia in gradi Fahrenheit.
La cosa più difficile è trovare la formula corretta. O, meglio, la formula più comune. Cercando in internet ho trovato questo articolo:
Tralascio tutti conti da fare e riporto solamente la formula:
Temperatura Percepita = 13.12 + 0.6215T – 11.37 (V^0.16) + 0.3965T (V^0.16)
Dove
- T: temperatura in gradi celsius
- V: velocità del vento in chilometri all’ora
Posso convertire in JavaScript per ottenere questa funzione:
const windChillCelsius = (temperature, windSpeed) =>
13.12 +
0.6215 * temperature -
11.37 * windSpeed ** 0.16 +
0.3965 * temperature * windSpeed ** 0.16;
Usando invece il sistema imperiale:
Temperatura Percepita = 35.74 + 0.6215T – 35.75 (V^0.16) + 0.4275T (V^0.16)
Con
- T: temperatura in gradi fahrenheit
- V: velocità del vento in miglia all’ora
const windChillFahrenheit = (temperature, windSpeed) =>
35.74 +
0.6215 * temperature -
35.75 * windSpeed ** 0.16 +
0.4275 * temperature * windSpeed ** 0.16;
Unendo questi due pezzi di codice ottengo:
export const calculateWindchill = (
temperature,
windSpeed,
units = undefined
) => {
const result =
units === "US"
? fahrenheit(temperature, windSpeed)
: celsius(temperature, windSpeed);
return Math.round(result);
};
Convertire numeri da un sistema all’altro
Il problema è abbastanza semplice ma possono presentarsi alcune complicazioni con la conversione da un sistema di misura all’altro.
Non ho intenzione di scrivere una trattazione completa, mi limito a riportare qui le funzioni di conversione che potranno servirmi in futuro.
Convertire Chilometri e Miglia
const kmToMiles = (km) => km * 0.621371;
const milesToKm = (miles) => miles / 0.621371;
Convertire Celsius e Fahrenheit
const celsiusToFahrenheit = (celsius) => celsius * 1.8 + 32;
const fahrenheitToCelsius = (fahrenheit) => (fahrenheit - 32) / 1.8;
Con questo è davvero tutto per oggi.