Skip to content

Commit

Permalink
add solution for challenge n° 03 by @imalisoon
Browse files Browse the repository at this point in the history
  • Loading branch information
imalisoon committed Oct 19, 2024
1 parent df32927 commit 5ecee80
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
15 changes: 15 additions & 0 deletions desafio-03/imalisoon/python/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Desafio 03: Palindromos
Solução implementada sem uso de conversão pra string :).

## Sobre a solução
Primeiro defini a função que faz a verificação do número que é recebido por parâmetro, e retorna um `bool`, `True` caso seja palindromo e `False` caso não.

Já no escopo da função defini duas variáveis, `number_copy` que cria uma cópia do número original que vai ser usada para gerar o numero reverso sem ter que mexer no número original e `number_reverse` que vai ser o número reverso.

> para escrever um numero ao contrario matematicamente primeiro usasse a operação `mod (%)`, que pega o numero, divide por **10** e o resto é exatamente o ultimo digito do número.
> depois que extrair o ultimo digito, usa a variável `number_reverse` pra criar o numero ao contrário, digito por digito. pegando o valor atual multiplicando por **10** e somando com o ultimo digito extraido.
> agora, pegamos a copia do numero original (`number_copy`) e removemos o ultimo digito usando divisão inteira (`//` no python).
Ao final do laço e no fim da função verificamos se o numero invertido (`number_reverse`) é igual a o número original, caso seja, a operação retornará `True` iformando que é palindromo.

Agora é so chamar a função usando um `loop` do *número incial* (`first_number`) ate o *ultimo numero* (`last_number`) e verificar cada numero do laço passando como argumento na chamada da função, assim imprimindo-o caso retorne `True`.
48 changes: 48 additions & 0 deletions desafio-03/imalisoon/python/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env python3
# author: Alison gh: @imalisoon

def is_palindrome(number: int) -> bool:
number_copy: int = number
number_reverse: int = 0

while number_copy > 0:
last_digit: int = number_copy % 10
number_reverse = number_reverse * 10 + last_digit

number_copy = number_copy // 10

return number_reverse == number

def get_input(msg) -> str:
return input(msg)


if __name__ == "__main__":
MAX = (1 << 64) - 1
while True:
try:
first_number: int = int(get_input("Informe o primeiro numero: "))
last_number: int = int(get_input("Informe o ultimo numero: "))

except ValueError:
print("O primeiro e ultimo numero precisam ser interios positivos, nao letras!")
continue

if first_number <= 0 or last_number <= 0:
print("O primeiro e ultimo numero precisam ser POSITIVOS! nao negativos ou ZEROS.")
continue

if last_number < first_number:
print("O ultimo numero nao pode ser MENOR que o primeiro numero")
continue

if first_number > MAX or last_number > MAX:
print("EPA! primeiro ou segundo excedem o valor limite. Tente denovo.")
continue

break

print(f"\nPalindromos de {first_number} a {last_number}")
for n in range(first_number, last_number+1):
if is_palindrome(n):
print(n)

0 comments on commit 5ecee80

Please sign in to comment.