Here's a simple Ruby program that opens a text file, then uses a series of simple algorithms to look for hidden words in the text. For instance, it looks at only odd words, only even words, then looks at Nth characters, Nth words, and also Fibonacci words and characters.
I wrote this program one night after a friend wrote something, and their email seemed weird, like they were saying one thing, but the writing was a little choppy, like there was hidden text within the text. In my case I saved his email to a file named my_file.txt, and then parsed it with this script.
So, here's a Ruby program that uses several algorithms to look for potentially hidden text or phrases inside of a larger block of text.
# hidden_text.rb
# devdaily.com
# feel free to use this program however you like.
def get_file_as_string(filename)
data = ''
f = File.open(filename, "r")
f.each_line do |line|
data += line
end
return data
end
def print_odd(count)
return true if count.modulo(2) != 0
return false
end
def print_even(count)
return true if count.modulo(2) == 0
return false
end
#------------ word-based output ----------------#
def print_even_words(text)
words = text.split
count = 1
words.each { |w|
print w if print_even(count)
print " "
count = count + 1
}
end
def print_odd_words(text)
words = text.split
count = 1
words.each { |w|
print w if print_odd(count)
print " "
count = count + 1
}
end
def print_nth_words(text, n, offset=0)
words = text.split
count = offset
while (count < words.length-offset) do
print words[count]
print " "
count = count + n
end
end
def print_fib_words(text)
words = text.split
fib_last = 1
fib_older = 1
fib_next = 1
while (fib_next < words.length) do
print words[fib_next-1]
print " "
fib_next = fib_last + fib_older #
fib_older = fib_last #
fib_last = fib_next #
return if fib_next >= words.length
end
end
#------------ character-based output ----------------#
def print_odd_chars(text)
words = text.split(//)
count = 1
words.each { |w|
print w if print_odd(count)
count = count + 1
}
end
def print_even_chars(text)
words = text.split(//)
count = 1
words.each { |w|
print w if print_even(count)
count = count + 1
}
end
def print_nth_chars(text, n, offset=0)
words = text.split(//)
count = offset
while (count < words.length-offset) do
print words[count]
count = count + n
end
end
def print_fib_chars(text)
words = text.split(//)
fib_last = 1
fib_older = 1
fib_next = 1
while (fib_next < words.length) do
print words[fib_next-1]
fib_next = fib_last + fib_older
fib_older = fib_last
fib_last = fib_next
return if fib_next >= words.length
end
end
################
# MAIN #
################
# TO-DO: Every method could take an "offset" value.
text = get_file_as_string 'my_file.txt'
print_odd_words(text)
puts "\n============"
print_even_words(text)
puts "\n============"
print_nth_chars(text,10,1)
puts "\n============"
print_nth_words(text,10)
puts "\n============"
print_fib_words(text)
puts "\n============"
print_fib_chars(text)
Feel free to use this Ruby program however you like. If you find bugs, or make improvements, please let me know.

