Skip to content

Instantly share code, notes, and snippets.

@Revokee
Last active November 11, 2023 09:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Revokee/9533538 to your computer and use it in GitHub Desktop.
Save Revokee/9533538 to your computer and use it in GitHub Desktop.
EP1 - MAC 2166 - 2014
"""Obs.: No comeco do EP, ele diz que a intencao eh voce aprender a usar numeros inteiros. Problema:
O tipo int em Python, por motivos que nao vou me extender, usa a quantidade de bits disponiveis no
processador, portanto, se voce rodar esse EP em um computador de 32 bits, o exemplo 3 do EP ira dar
errado, por causa de Overflow na quantidade de bits. Entretanto, em uma arquitetura 64 bits, voce
nao deve ter nenhum problema. Mas vamos falar a verdade, esses caras do IME ou sao muito sadicos por
nao alertar voces bixos, ou muito burros mesmo. Quem quiser ler os motivos de o Python unificar o
tipo int e long veja nesse link:
http://www.devx.com/opensource/Article/41398
"""
#EP1: O código de Vigenère
print("O código de Vigenère\n\n")
#Como inicio do EP, vamos ler um numero digitado pelo usuario do programa.
number = int(input("Digite um número ......: "))
#Voce pode descomentar a linha abaixo para verificar que o numero foi digitado corretamente
#print ("Número digitado: %s \n" %(number))
#Vamos agora verificar qual a chave que o usuario deseja.
key = int(input("Digite o valor da chave: "))
#Voce pode descomentar a linha abaixo para verificar que a chave foi digitada corretamente
#print ("Chave digitada: %s \n" %(key))
#Vamos iniciar o algoritmo do EP agora.
#A formula da chave, como dito no enunciado eh Ci = (Ni + K)%10, vou declarar uma variavel cIndex, que sera utilizada diversas vezes
cIndex = 0
#Vamos declarar o numero final a ser mostrado ao usuario, que nada mais eh que nosso numero cifrado
finalNumber = 0
#Vou usar uma variavel de controle k, para saber em que passo estamos do loop
k = 1
#Vou usar uma variavel de controle i, para me manter dentro do loop enquanto meu numero nao acabar
i = 1
#Antes de iniciar nosso loop, um ultimo passo, salvar nossa chave primaria!
primaryKey = key
while i == 1:
#Vamos pegar o ultimo digito do numero, este eh nosso Ni
lastDigit = (number% 10)
#Vamos pegar tambem o ultimo numero da nossa chave
lastKey = (key%10)
#Voce pode usar a linha abaixo para debuggar o prorama, ou para aprender!
#print("\n Chave: ",key,"\n Ultimo Digito da Chave: ", lastKey)
#Vamos calcular agora o indice do numero
cIndex = (lastDigit + lastKey)%10
#E formar nosso numero final
finalNumber = finalNumber + (cIndex*k)
#Voce pode usar a linha abaixo para debuggar o prorama, ou para aprender!
#print("\n Estamos formando o numero final:" ,finalNumber)
#Vamos crescer em 10 nossa variavel de controle, ou seja, andamos um digito na nossa chave final
k = k*10
#Vamos verificar se estamos no ultimo digito da nossa chave, se estivermos, vamos ter que comecar tudo novamente
if lastKey == key:
key = primaryKey
else:
#Nao estamos no ultimo digito de nossa chave, portanto vamos apenas "descascar"
#Python, por padrao, ao fazer uma divisao, retorna um float, vamos transformar em int novamente
key = int((key/10))
#Antes de "descascar" nosso numero, vamos verificar se tambem nao estamos no ultimo digito
#Voce pode usar a linha abaixo para debuggar o prorama, ou para aprender!
#print("\n Numero: ", number ,"\nUltimo Digito do Numero: ", lastDigit)
if lastDigit == number:
#Se entramos neste loop, estamos no ultimo numero, vamos calcular a chave dele e sair do loop
i = 0
else:
#Nao estamos no ultimo digito! Vamos "descascar" e continuar nosso programa
#Python, por padrao, ao fazer uma divisao, retorna um float, vamos transformar em int novamente
number = int((number/10))
#Recomecando o while. Va la pra cima! Hehehe
#Voila, nosso numero final
print("O valor cifrado é : %s \n:" %(finalNumber))
@Revokee
Copy link
Author

Revokee commented Mar 13, 2014

@Revokee
Copy link
Author

Revokee commented Mar 13, 2014

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment