Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 12.1 — Tabela Hash com HashMap e Padrão Entry API

Contexto: Tabela Hash com HashMap e Padrão Entry API no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.

Requisitos de Execução:

  1. Contar frequência de palavras em texto utilizando mapa.entry(palavra).or_insert(0).

Resultado Esperado

Contagem de frequência calculada via Entry API em passagem única.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_1_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// hashmap_entry.rs
use std::collections::HashMap;

fn main() {
    let texto = "rust sistemas rust alta performance";
    let mut contagem = HashMap::new();
    for palavra in texto.split_whitespace() {
        *contagem.entry(palavra).or_insert(0) += 1;
    }
    println!("Contagem: {:?}", contagem);
}

🔍 Nível 2: Prática

Problema 12.2 — Conjuntos com HashSet e Operações de Teoria dos Conjuntos

Contexto: Conjuntos com HashSet e Operações de Teoria dos Conjuntos no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.

Requisitos de Execução:

  1. Calcular interseção e união entre dois HashSet de identificadores de permissão.

Resultado Esperado

Interseção de conjuntos calculada com complexidade O(N).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_2_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// hashset_ops.rs
use std::collections::HashSet;

fn main() {
    let admin_perms: HashSet<_> = ["read", "write", "delete"].into();
    let user_perms: HashSet<_> = ["read", "write"].into();
    let comuns: Vec<_> = admin_perms.intersection(&user_perms).collect();
    println!("Permissoes comuns: {:?}", comuns);
}

⚡ Nível 3: Integração

Problema 12.3 — Pipeline de Iteradores com .map(), .filter() e .collect()

Contexto: Pipeline de Iteradores com .map(), .filter() e .collect() no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.

Requisitos de Execução:

  1. Filtrar números pares, elevar ao quadrado e coletar em um novo Vec<i32>.

Resultado Esperado

Pipeline de iteradores avaliado com zero alocações intermediárias.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_3_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// iterator_pipeline.rs
fn main() {
    let nums = vec![1, 2, 3, 4, 5, 6];
    let pares_ao_quadrado: Vec<i32> = nums.into_iter()
        .filter(|&n| n % 2 == 0)
        .map(|n| n * n)
        .collect();
    println!("Resultado: {:?}", pares_ao_quadrado);
}

🏆 Nível 4: Desafio Corporativo

Problema 12.4 — Criação de Custom Iterator Implementando a Trait Iterator

Contexto: Criação de Custom Iterator Implementando a Trait Iterator no contexto de Coleções Padrão (Vec, HashMap, HashSet) e Iteradores.

Requisitos de Execução:

  1. Criar struct ContadorFibonacci implementando a trait Iterator com método next().

Resultado Esperado

Iterador customizado gerando sequência infinita de Fibonacci sob demanda.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_4_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Coleções Padrão (Vec, HashMap, HashSet) e Iteradores
🔑 Gabarito de Código & Solução Comentada
// custom_iterator.rs
struct FiboIter { a: u64, b: u64 }
impl FiboIter { fn new() -> Self { Self { a: 0, b: 1 } } }

impl Iterator for FiboIter {
    type Item = u64;
    fn next(&mut self) -> Option<Self::Item> {
        let atual = self.a;
        self.a = self.b;
        self.b = atual + self.b;
        Some(atual)
    }
}

fn main() {
    let primeiros_5: Vec<_> = FiboIter::new().take(5).collect();
    println!("Fibo: {:?}", primeiros_5);
}