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:
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
Portanto, o ponto em [2, 1] (linha: 2, coluna: 1) é um excelente sítio para uma casa na árvore.
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")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.