Executando verificação de segurança...
1

Interview question of the week #444

Se você gosta de desafios de lógica e algoritmos para aquecer os motores durante a semana, provavelmente conhece a newsletter da Cassidoo, onde toda semana ela envia uma questão de entrevista técnica.

Nesse meu repositório é possível encontrar as minhas soluções dos desafios anteriores:ebdonato/cassidoo-questions

Questão da semana

A proposta é escrever uma função que receba uma grade 2D de números e um fator de zoom k \ge 2. O objetivo é transformar cada célula original em um bloco de tamanho k \times k com o mesmo valor, retornando a grade expandida.

Exemplo

zoom([[1, 2], [3, 4]], 2)
// Resultado:
// [
//   [1, 1, 2, 2],
//   [1, 1, 2, 2],
//   [3, 3, 4, 4],
//   [3, 3, 4, 4]
// ]

zoom([[7, 8, 9]], 3)
// Resultado:
// [
//   [7, 7, 7, 8, 8, 8, 9, 9, 9],
//   [7, 7, 7, 8, 8, 8, 9, 9, 9],
//   [7, 7, 7, 8, 8, 8, 9, 9, 9]
// ]

Minha solução

/**
 * Zooms in on a 2D array by repeating each element k times both horizontally and vertically.
 * @template T - The type of elements in the array
 * @param arr - A 2D array to zoom in on
 * @param k - The zoom factor (must be >= 2). Each element will be repeated k times in both dimensions
 * @returns A new 2D array with each element repeated k times horizontally and vertically
 * @throws {Error} If k is less than 2
 * @example
 * zoom([[1, 2], [3, 4]], 2)
 * // Returns: [[1, 1, 2, 2], [1, 1, 2, 2], [3, 3, 4, 4], [3, 3, 4, 4]]
 */
export function zoom<T>(arr: T[][], k: number): T[][] {
  if (k < 2) throw new Error("k must be greater than or equal to 2");

  return arr.flatMap((row) =>
    Array.from({ length: k }, () => row.flatMap((item) => Array(k).fill(item))),
  );
}
Carregando publicação patrocinada...