Created
February 13, 2021 23:29
-
-
Save mboeh/5f5ba557f4759bcdac1a3ff8f5a5b807 to your computer and use it in GitHub Desktop.
playing with some styles for obfuscating text
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
class NoiseCensor | |
def initialize(chars = "&^%@*#") | |
@noise = chars.split(//).shuffle.cycle | |
end | |
def censor(text) | |
@noise.take(text.length).join | |
end | |
end | |
class StarCensor | |
def initialize(star = '*') | |
@star = star | |
end | |
def censor(text) | |
@star * text.length | |
end | |
end | |
class JumbleCensor | |
def censor(text) | |
newtext = text = text.split(//) | |
newtext = text.shuffle until newtext != text | |
newtext.join | |
end | |
end | |
class VoidCensor | |
def censor(text) | |
'' | |
end | |
end | |
class DevowelizeCensor | |
def initialize(base = VoidCensor.new, vowels: "aeiou") | |
@base = base | |
@regex = /[#{vowels}]/i | |
end | |
def censor(text) | |
text.gsub(@regex) {|char| @base.censor(char) } | |
end | |
end | |
class InnerCensor | |
def initialize(base) | |
@base = base | |
end | |
def censor(text) | |
text[0] + @base.censor(text[1..-2]) + text[-1] | |
end | |
end | |
class TextRedactor | |
def initialize(censor, forbidden_words) | |
@censor = censor | |
@forbidden_words = forbidden_words | |
end | |
def redact(text) | |
text.gsub(/\b(\w+)\b/) {|word| | |
if @forbidden_words.include?(word.downcase) | |
@censor.censor(word) | |
else | |
word | |
end | |
} | |
end | |
end | |
bad_text = <<EOF | |
Are you interested in cryptocurrency, diamond hands, or Tesla? Then I've got a great website for you: Reddit. | |
- Love, Elon Musk | |
EOF | |
bad_words = %w[cryptocurrency tesla reddit elon musk diamond] | |
[NoiseCensor, StarCensor, JumbleCensor, DevowelizeCensor].each do |censor| | |
puts "== #{censor} == " | |
puts | |
redactor = TextRedactor.new(InnerCensor.new(censor.new), bad_words) | |
puts redactor.redact(bad_text) | |
puts | |
end |
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
== NoiseCensor == | |
Are you interested in c^*#@&%^*#@&%y, d^*#@&d hands, or T^*#a? Then I've got a great website for you: R^*#@t. | |
- Love, E^*n M^*k | |
== StarCensor == | |
Are you interested in c************y, d*****d hands, or T***a? Then I've got a great website for you: R****t. | |
- Love, E**n M**k | |
== JumbleCensor == | |
Are you interested in cpunrcytrorecy, dmoiand hands, or Tlesa? Then I've got a great website for you: Rdedit. | |
- Love, Eoln Msuk | |
== DevowelizeCensor == | |
Are you interested in cryptcrrncy, dmnd hands, or Tsla? Then I've got a great website for you: Rddt. | |
- Love, Eln Msk | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment