05-30-2006, 01:00 PM
This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given. If you are the owner of the thread, please contact administration.
No support is given. If you are the owner of the thread, please contact administration.
Just a simple idea of mine, the ability to encode/decode a string. Could be used for security in saves (although you need to force decode them) or in puzzles.
First, the addition to the string class:
Code:
class String
# Just call it as string.encode("list_to_use"), remember, it does not change the
# String(like sub&gsub) so use string = string.encode("list_to_use") to change
def encode(codelist = "default")
if CodeLists.singleton_methods.include?(codelist) and codelist != "empty"
@codelist = toto("CodeLists.#{codelist}")
else
@codelist = CodeLists.default
end
array = self.clone.scan(/./)
for i in 0..array.size
next unless @codelist.key?(array[i])
array[i] = @codelist[array[i]]
end
pie = array.join
pie.codelist = @codelist
pie
end
# A def to set codelist. Protected so it can't be used outside the string.
def codelist=(codelist)
unless @codelist.is_a? Hash
@codelist = codelist
end
end
protected :codelist=
# Same as encode, but reversed.
# Use force if you loaded a string from a file or so.
def decode(force = nil)
if force != nil
if CodeLists.singleton_methods.include?(codelist) and codelist != "empty"
@codelist = toto("CodeLists.#{codelist}")
else
@codelist = CodeLists.default
end
end
return self unless @codelist
array = self.clone.scan(/./)
for i in 0..array.size
next unless @codelist.value?(array[i])
array[i] = @codelist.index(array[i])
end
pie = array.join
pie
end
end
All instructions are in the comments.
Now, the module containing codelists, with 2 examples, 1 to make random ones and 1 empty one. Note that in these lists symbols and spaces are not programmed but could be done easily (are programmed in random).
Code:
module CodeLists
# An empty list, for easy builds.
def self.empty
list = {}
list["A"] = ""
list["B"] = ""
list["C"] = ""
list["D"] = ""
list["E"] = ""
list["F"] = ""
list["G"] = ""
list["H"] = ""
list["I"] = ""
list["J"] = ""
list["K"] = ""
list["L"] = ""
list["M"] = ""
list["N"] = ""
list["O"] = ""
list["P"] = ""
list["Q"] = ""
list["R"] = ""
list["S"] = ""
list["T"] = ""
list["U"] = ""
list["V"] = ""
list["W"] = ""
list["X"] = ""
list["Y"] = ""
list["Z"] = ""
list["a"] = ""
list["b"] = ""
list["c"] = ""
list["d"] = ""
list["e"] = ""
list["f"] = ""
list["g"] = ""
list["h"] = ""
list["i"] = ""
list["j"] = ""
list["k"] = ""
list["l"] = ""
list["m"] = ""
list["n"] = ""
list["o"] = ""
list["p"] = ""
list["q"] = ""
list["r"] = ""
list["s"] = ""
list["t"] = ""
list["u"] = ""
list["v"] = ""
list["w"] = ""
list["x"] = ""
list["y"] = ""
list["z"] = ""
list["0"] = ""
list["1"] = ""
list["2"] = ""
list["3"] = ""
list["4"] = ""
list["5"] = ""
list["6"] = ""
list["7"] = ""
list["8"] = ""
list["9"] = ""
return list
end
# Randomize list. I think this one is the most secure. Note that you will be unable
# To decode if you save in a file.
def self.random
alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
"Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i",
"j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1",
"2","3","4","5","6","7","8","9"," ","`","~","!","@","#","$","%","€","^","&",
"*","(",")","-","_","+","=","[","]","{","}","|","\\",";",":","\"","