Percursos
/
Python
Python
/
Exercícios
/
Pontos de sela
Pontos de sela

Pontos de sela

Fácil

Introdução

Planeias construir uma casa na árvore num bosque perto da tua casa, para poderes ver o nascer e o pôr do sol.

Obtiveste dados de uma empresa de topografia local que mostram a altura de cada árvore em cada secção retangular do mapa. Precisas de analisar cada grelha do mapa para encontrares boas árvores para a tua casa na árvore.

Uma boa árvore é, ao mesmo tempo:

  • mais alta do que qualquer árvore a leste e a oeste, para teres a melhor vista possível do nascer e do pôr do sol.
  • mais baixa do que qualquer árvore a norte e a sul, para minimizares a quantidade de vezes que tens de trepar às árvores.

Instruções

A tua tarefa é encontrar as árvores potenciais onde podes construir a tua casa na árvore.

A empresa de dados fornece os dados em grelhas que mostram as alturas das árvores. As linhas da grelha representam a direção este-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 grelha pode não ter nenhuma árvore boa. Ou pode ter uma, ou até várias.

Eis uma grelha 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.

Portanto, o ponto em [2, 1] (linha: 2, coluna: 1) é um excelente sítio para uma casa na árvore.

Mensagens de exceção

Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda bastante na depuração. Nas situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.

Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError se a matrix for irregular. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.

Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:

# if the matrix is irregular
raise ValueError("irregular matrix")
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Pontos de sela?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.