function findAndPrintWorst10Sites(metric, lanternMetrics) {
  if (!process.env.PRINT_WORST) return;

  /** @type {Map<string, LanternEvaluation[]>} */
  const groupedByURL = new Map();
  for (const site of allEvaluations) {
    const group = groupedByURL.get(site.url) || [];
    group.push(site);
    groupedByURL.set(site.url, group);
  }

  /** @type {LanternEvaluation[]} */
  const worstEntries = [];
  for (const entries of groupedByURL.values()) {
    const matchingEntries = entries.filter(entry => lanternMetrics.includes(entry.lanternMetric));
    const minDiffAsPercent = Math.min(...matchingEntries.map(entry => entry.diffAsPercent));
    const minEntry = matchingEntries.find(entry => minDiffAsPercent === entry.diffAsPercent);
    if (!minEntry) continue;
    worstEntries.push(minEntry);
  }

  console.log(chalk.bold(`\n ------- Worst 10 ${metric} -------`));
  worstEntries
    .sort((a, b) => b.diffAsPercent - a.diffAsPercent)
    .slice(0, 10)
    .forEach(entry => {
      console.log(
        entry.actual < entry.expected
          ? chalk.cyan('underestimated')
          : chalk.yellow('overestimated'),
        entry.metric,
        chalk.gray('by'),
        Math.round(entry.diff),
        chalk.gray('on'),
        chalk.magenta(entry.url)
      );
    });
}
@param {keyof TargetMetrics} metric
@param {string[]} lanternMetrics