Python oferece muitas oportunidades para desafiar suas habilidades de programação. Vamos explorar problemas diversos e testar suas habilidades juntos!
1) Maior Poça
Imagine uma lista de números representando alturas de terreno. Sua tarefa é escrever uma função que encontre a maior poça no terreno quando chove, retornando suas coordenadas.
# Exemplo de uso
alturas_terreno = [2, 5, 1, 3, 2, 4, 5, 7, 4, 2, 3]
coordenadas = encontrar_maior_poca(alturas_terreno)
print(f"A maior poça está entre as alturas {alturas_terreno[coordenadas[0]:coordenadas[1]+1]} nas posições {coordenadas[0]} a {coordenadas[1]}.")
2) Encontrando Coordenadas de Ilhas
Dado um mapa 2D com 0s representando o mar e 1s representando ilhas, seu objetivo é escrever uma função chamada obter_ilhas(mapa) que retorne uma lista de conjuntos, onde cada conjunto representa uma ilha adjacente. Cada conjunto deve conter as coordenadas (linha, coluna) dos elementos pertencentes a essa ilha.
# Exemplo de uso
mapa = [
[1, 0, 0, 1],
[1, 1, 0, 1],
[0, 0, 1, 0],
[0, 0, 0, 0]
]
ilhas_encontradas = obter_ilhas(mapa)
for i, ilha in enumerate(ilhas_encontradas, 1):
print(f"Ilha {i}: {ilha}")
3) Cadeia de Palavras Mais Longa
Imagine que você possui uma lista de palavras em inglês e deseja encontrar a cadeia de palavras mais longa possível, onde a última letra de uma palavra é igual à primeira letra da próxima. Sua tarefa é escrever uma função chamada maior_cadeia_de_palavras(palavras) que recebe uma lista de palavras e retorna a cadeia mais longa possível. Por exemplo, dada a lista [“apple”, “elephant”, “tank”, “kitten”], a função deve retornar [“apple”, “elephant”, “tank”, “kitten”].
# Exemplo de uso
palavras = ["apple", "elephant", "tank", "kitten"]
resultado = maior_cadeia_de_palavras(palavras)
print(resultado)
4) Diamante Vazado
Agora, um desafio de padrões! Você precisa escrever uma função chamada diamante_vazado(string) que aceita uma string e imprime um padrão de diamante como mostrado abaixo. Se a string não tiver caracteres suficientes para formar um diamante perfeito, preencha os espaços com asteriscos (*).
# Exemplo de uso
diamante_vazado('abcdefgh')
a
b h
c g
d f
e
5) Coordenadas de Subidas
Dada uma lista de números representando alturas de terreno, escreva uma função chamada coordenadas_de_subidas(lista) que retorna uma lista de listas, onde cada lista contém alturas que formam uma subida. Uma subida é definida como um conjunto de alturas onde cada altura subsequente é maior que a anterior.
# Exemplo de uso
alturas_terreno = [1, 2, 3, 2, 4, 6, 5, 7, 8, 9]
resultado = coordenadas_de_subidas(alturas_terreno)
print(resultado)
6) Contém o Dígito 1 (Sem Strings)
Desafio matemático! Escreva uma função chamada contem_1(n) que aceita um número inteiro n e retorna True se o número contiver o dígito 1, e False caso contrário. A dificuldade está em resolver este problema sem usar strings ou métodos de string.
# Exemplos de uso
numero1 = 12345
numero2 = 987654321
numero3 = 0
print(contem_1(numero1)) # Deve retornar True
print(contem_1(numero2)) # Deve retornar False
print(contem_1(numero3)) # Deve retornar False
7) Mínimo de Moedas
Você tem uma lista de moedas com diferentes valores e um valor que deseja alcançar. Escreva uma função chamada min_moedas(moedas, valor) que retorna um dicionário representando o número mínimo de moedas necessárias para alcançar o valor desejado. Cada chave do dicionário deve ser o valor da moeda e o valor correspondente deve ser a quantidade mínima de moedas desse valor necessárias para atingir o objetivo.
# Exemplo de uso
moedas = [1, 2, 5, 10]
valor_desejado = 13
resultado = min_moedas(moedas, valor_desejado)
print(resultado)
8) Análise de Dicionário
Imagine que você possui uma string representando um dicionário Python, mas precisa convertê-la em um dicionário real em Python. Escreva uma função chamada analisar_dicionario(string) que aceita a string e retorna o dicionário correspondente. Você não pode usar bibliotecas ou as funções eval ou exec.
# Exemplo de uso
string = '{"nome": "Alice", "idade": 30, "cidade": "São Paulo"}'
dicionario = analisar_dicionario(string)
print(dicionario)
9) Quadrado Mágico
Um quadrado mágico é uma grade 3×3 com números de 1 a 9, onde a soma de cada linha, coluna e diagonal é igual a 15. Seu desafio é escrever uma função chamada resolver_quadrado_magico(quadrado) que recebe um quadrado mágico incompleto e o preenche com os números ausentes.
# Exemplo de uso
quadrado_incompleto = [
[5, None, 6],
[None, None, None],
[4, None, None]
]
solucao = resolver_quadrado_magico(quadrado_incompleto)
if solucao:
for linha in solucao:
print(linha)
else:
print("Não foi possível encontrar uma solução.")
10) Raiz Quadrada (Sem Funções Integradas)
Por último, mas não menos importante, escreva uma função chamada raiz_quadrada(n) que aceita um número inteiro n e retorna sua raiz quadrada. O desafio aqui é calcular a raiz quadrada sem usar funções ou operadores de raiz quadrada prontos.
# Exemplo de uso
numero = 25
resultado = raiz_quadrada(numero)
print(f"A raiz quadrada de {numero} é aproximadamente {resultado:.6f}")
11) Pirâmide de Letras
Um desafio de padrões novamente! Escreva uma função chamada piramide(string) que aceita uma string e imprime o padrão de pirâmide mostrado abaixo. Se houver letras insuficientes na string, preencha os espaços com asteriscos (*).
piramide('abcdef')
a
bc
def
12) Avaliação de Expressões Matemáticas
Por fim, você recebe uma string representando uma expressão matemática. Sua tarefa é escrever uma função chamada avaliar(expressao) que avalia a expressão e retorna o resultado. Você pode assumir que a expressão contém apenas operadores de adição, subtração, multiplicação e divisão, seguindo a regra PEMDAS (parênteses, exponenciação, multiplicação e divisão, adição e subtração).
# Exemplo de uso
expressao = "3 + (4 * 2) - 8 / 2"
resultado = avaliar(expressao)
print(resultado)
Conclusão
Estes desafios são projetados para aprimorar suas habilidades de programação e pensamento lógico. Sinta-se à vontade para testar suas soluções ou compartilhar suas respostas nos comentários. Divirta-se resolvendo esses quebra-cabeças de programação!