Subdomain Visit Count

MediumArrayHash TableStringCounting

Solution

export function subdomainVisits(cpdomains: string[]): string[] {
  const visits = new Map<string, number>();
  for (const cpdomain of cpdomains) {
    const [rep, domain] = cpdomain.split(' ');
    for (const subdomain of subdomains(domain)) {
      visits.set(subdomain, (visits.get(subdomain) ?? 0) + parseInt(rep));
    }
  }
  return [...visits].map(([subdomain, visit]) => `${visit} ${subdomain}`);
}
 
function* subdomains(domain: string) {
  const levels = domain.split('.').reverse();
  let subdomain = '';
  for (const level of levels) {
    subdomain = subdomain.length === 0 ? level : `${level}.${subdomain}`;
    yield subdomain;
  }
}