Skip to content

Instantly share code, notes, and snippets.

@m3nd3s
Created April 12, 2011 17:00
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 m3nd3s/915920 to your computer and use it in GitHub Desktop.
Save m3nd3s/915920 to your computer and use it in GitHub Desktop.
Classe para identificar se a somatório de letras de palavras de uma frase são primas
#http://dojopuzzles.com/problemas/exibe/palavras-primas/
class PalavraPrima
attr_accessor :phrase
def initialize
@@letters =[]
"a".upto("z") { |l| @@letters << l }
"A".upto("Z") { |l| @@letters << l }
end
def number_from_letter(letter)
@@letters.index(letter) + 1
end
def sum_words
words_sum = []
words = self.phrase.split(" ")
words.each do |word|
sum = 0
word.each_char do |c|
sum += number_from_letter(c)
end
words_sum << sum
end
words_sum
end
def prime?(number)
(number-1).downto 2 do |n|
if (number % n == 0)
return false
end
end
end
def word_prime
retorno = []
sum_words.each do |word|
if prime?(word)
retorno << "#{word}:primo"
else
retorno << "#{word}:naoprimo"
end
end
retorno.join(" ")
end
end
# Problema
# http://dojopuzzles.com/problemas/exibe/palavras-primas/
require File.expand_path(File.dirname(__FILE__) + '/../programa')
describe PalavraPrima do
before :all do
@palavra = PalavraPrima.new
end
it 'deveria retornar um array de int' do
soma = @palavra.number_from_letter('A')
soma.kind_of?(Integer).should be_true
end
it 'deveria retornar 1 quando for passado a' do
soma = @palavra.number_from_letter('a')
soma.should eql(1)
end
it 'deveria retornar 2 quando for passado b' do
soma = @palavra.number_from_letter('b')
soma.should eql(2)
end
it 'deveria retornar 3 quando for ab' do
@palavra.phrase = "ab"
@palavra.sum_words.should eql([3])
end
it 'deveria retornar 3 quando "a b"' do
@palavra.phrase = "a b"
@palavra.sum_words.should eql([1, 2])
end
it 'deveria retornar primo quando for 3' do
@palavra.prime?(3).should be_true
end
it 'deveria retornar primo quando for 5' do
@palavra.prime?(5).should be_true
end
it 'deveria retornar primo quando for 13' do
@palavra.prime?(13).should be_true
end
it 'deveria retornar false quando for 6' do
@palavra.prime?(6).should be_false
end
it 'deveria retornar false quando for 55' do
@palavra.prime?(55).should be_false
end
it 'deveria retornar true quando for 11' do
@palavra.prime?(11).should be_true
end
it 'deveria retornar "3:primo 4:naoprimo 3:primo" quando for c bb c' do
@palavra.phrase = "c bb c"
@palavra.word_prime.should eql("3:primo 4:naoprimo 3:primo")
end
it 'deveria retornar "4:naoprimo 3:primo 3:primo" quando for bb c c' do
@palavra.phrase = "bb c c"
@palavra.word_prime.should eql("4:naoprimo 3:primo 3:primo")
end
it 'deveria retornar "31:primo" ' do
@palavra.phrase = "E"
@palavra.word_prime.should eql("31:primo")
end
it 'deveria retornar "31:primo 28:naoprimo 26:naoprimo" ' do
@palavra.phrase = "E Aa z"
@palavra.word_prime.should eql("31:primo 28:naoprimo 26:naoprimo")
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment