Created
July 15, 2009 03:49
-
-
Save avescodes/147432 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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