Skip to content

Instantly share code, notes, and snippets.

@avescodes
Created July 15, 2009 03:49
Show Gist options
  • Save avescodes/147432 to your computer and use it in GitHub Desktop.
Save avescodes/147432 to your computer and use it in GitHub Desktop.
require 'digest/sha1'
def suffix(seqnum)
o = ""
5.times do
o << (33 + (seqnum % 93)).chr
seqnum /= 93
end
return o
end
# apply_mask("ab",1) #=> 'Ab'
# but not working on ruby*12
def apply_mask(sentence,mask)
i = 0
sentence.gsub(/\S/) do |char|
char = char.swapcase if mask[i] == 1
i += 1
char
end
end
def sha1(phrase)
Digest::SHA1.hexdigest(phrase)
end
def suffix(seqnum)
o = ""
5.times do
o << (33 + (seqnum % 93)).chr
seqnum /= 93
end
return o
end
def suffix_to_seqnum(str)
total = 0
str.split('').map {|c| c[0] - 33 }.each_with_index do |num,i|
total += num * 93 ** i
end
return total
end
class PhraseGenerator
def initialize(case_seqnum=0,suffix_seqnum=0)
@words = ["ruby"]*12
@phrase = apply_mask(@words.join(' '),case_seqnum)
@case_seqnum = case_seqnum
@suffix_seqnum = suffix_seqnum
end
def permute_suffix
if ((@suffix_seqnum += 1) > 6956883693)
@suffix_seqnum = 0
return false
else
return true
end
end
def permute_caps
@case_seqnum += 1
@phrase = apply_mask(@words.join(' '),@case_seqnum)
end
def next
suffix=suffix(@suffix_seqnum)
full_phrase = "#{@phrase} #{suffix}"
hash = sha1(full_phrase)
rec = "#{hash},#{@case_seqnum},#{suffix}"
# permute something.
unless permute_suffix
permute_caps
end
return rec
end
end
case_num = ARGV.shift.to_i || 0
suff_num = suffix_to_sum(ARGV.shift || '!!!!!')
pg = PhraseGenerator.new(case_num,suff_num)
loop do
puts pg.next
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment