de volta ao brog. ou não.

depois de mais de um ano, vou publicar alguma coisa aqui (uma besteirinha, mas espero, a partir de hoje, postar mais regularmente e algumas coisas mais interessantes e coisas menos interessantes também :P).

neste post, vou publicar um pequeno código em Ruby (tinha parado de estudar em 2008 – pra fazer a monografia – e depois acabei relaxando. tou voltando agora) pra relembrar alguma coisa que eu já tinha aprendido nessa linguagem. é um código simples de uma cifra de césar com deslocamento 3. a ideia partiu de uma postagem no Viva o Linux, onde o usuário postou o código em C.

o trabalho aqui foi basicamente “traduzir” o algoritmo com algumas adaptações (em vez de usar o deslocamento em si, eu usei o método tr, da classe String). acho q se eu fosse começar do zero, faria diferente… algum dia, quem sabe (já fiz um desse na faculdade, se eu achar o DVD de backup, coloco aqui).

chega de blá blá blá e vamos ao código:

#Encoding:UTF-8
# cifra_cesar.rb
# implementação de um algoritmo de cifra de césar
# baseado em um código publicado no Viva O Linux
# eu preferiria tratar todas as entradas e saídas fora dos métodos
# mas não quero mudar o código agora 
# (Ignorem isto, estou só #pensandoalto)
def clear
  # este código funciona apenas no Linux.
  # no caso do windows, o comando 'clear' 
  # deve ser subsituído por 'cls'
  system 'clear'
end
def encrypt
  clear
  puts 'Escreva a Palavra'
  s = gets.chomp 
  if s =~ /[^a-zA-Z ]/
    puts "Favor usar apenas letras e espaços"
    return
  end
  puts "Palavra encriptada: "
  # fiz uma gambiarra usando o método tr.
  # ele substitui os caracteres passados no 1° argumento
  # pelos caracteres passados no 2° argumento
  puts s.tr(
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ',
    'defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABC#'
  )
  puts ""
end
def decrypt
  clear
  puts 'Escreva a Sequência'
  s = gets.chomp
  if s =~ /[^a-zA-Z#]/
    puts "Sequência Inválida"
    return
  end
  puts 'Sua palavra é: '
  puts s.tr(
    'defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABC#',
    'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ '
  )
  puts ""
end
def menu
  # um menu simples
  clear
  STDOUT.flush
  puts ' ╔═════════════════════════════╗ '
  puts ' ║ Criptografia de César by T! ║ '
  puts ' ╟─────────────────────────────╢ '
  puts ' ║ 1. Encriptar                ║ '
  puts ' ║ 2. Decriptar                ║ '
  puts ' ║ 0. Sair                     ║ '
  puts ' ╚═════════════════════════════╝ '
  opcao = gets.chomp
  if opcao.eql?("0")
    puts 'Deseja realmente sair? (s/n)'
    exit if gets.chomp.eql?('s')
  end
  if opcao.eql?("1") 
    encrypt
    gets
  elsif opcao.eql?("2") 
    decrypt
    gets
  else
    puts "Opção errada. Escolha 1, 2 ou 0"
    gets
  end
  menu
end
# seria o método main em C
menu

PS: Alguém sabe como é que bota Realce de Sintaxe no WordPress?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s