Trilhas
/
Rust
Rust
/
Exercícios
/
Pontos de sela
Pontos de sela

Pontos de sela

Médio

Introdução

Você planeja construir uma casa na árvore num bosque perto da sua casa, para poder ver o sol nascer e se pôr.

Você conseguiu dados de uma empresa local de levantamento topográfico que mostram a altura de cada árvore em cada seção retangular do mapa. Você precisa analisar cada grade do mapa para encontrar boas árvores para a sua casa na árvore.

Uma boa árvore é as duas coisas:

  • mais alta que todas as árvores a leste e a oeste, para que você tenha a melhor vista possível dos nasceres e pores do sol.
  • mais baixa que todas as árvores ao norte e ao sul, para minimizar a quantidade de subidas nas árvores.

Instruções

Sua tarefa é encontrar as árvores em potencial onde você poderia construir sua casa na árvore.

A empresa de dados fornece os dados na forma de grades que mostram as alturas das árvores. As linhas da grade representam a direção leste-oeste, e as colunas representam a direção norte-sul.

Uma árvore aceitável é a maior da sua linha e, ao mesmo tempo, a menor da sua coluna.

Uma grade pode não ter nenhuma árvore boa. Ou pode ter uma, ou até várias.

Veja uma grade que tem exatamente uma árvore candidata.

      ↓
      1  2  3  4
    |-----------
  1 | 9  8  7  8
→ 2 |[5] 3  2  4
  3 | 6  6  7  1
  • A linha 2 tem os valores 5, 3, 2 e 4. O maior valor é 5.
  • A coluna 1 tem os valores 9, 5 e 6. O menor valor é 5.

Então o ponto em [2, 1] (linha: 2, coluna: 1) é um ótimo lugar para uma casa na árvore.

Os índices em Rust começam em 0

Por convenção, as sequências ordenadas de valores em Rust têm seu conteúdo numerado ("indexado") a partir de 0. Isso vale independentemente do que o restante da descrição do exercício neste README diz, como referências a índices que começam em 1, então você vai precisar subtrair 1 para converter esses números de índice nos números de índice do Rust.

Aviso sobre eficiência

Este exercício usa um vector of vectors para armazenar o conteúdo das matrizes. Embora este exercício tenha sido criado para ajudar os estudantes a entender conceitos básicos sobre vectors, como a indexação, e que tipos de dados aninhados são válidos, o vector of vectors não é a melhor escolha para álgebra matricial de alto desempenho nem para qualquer processamento eficiente de grandes volumes de dados.

A explicação detalhada dessa ineficiência está além do escopo deste exercício e desta trilha de aprendizagem em geral. Esse aspecto é conhecido como localidade de cache e você pode encontrar uma boa introdução a ele clicando nesse link, caso queira saber mais sobre os detalhes de uma arquitetura de computadores moderna.

Editar via GitHub O link abre em uma nova janela ou aba
Rust Exercism

Tudo pronto para começar Pontos de sela?

Crie sua conta no Exercism para aprender e dominar Rust com 99 exercícios e mentoria humana de verdade, tudo de graça.