Search code examples
pythonrot13

Decode python rot13 string


I've a rot13 encoded string in python and I've to decode it:

"Gur dhvpx oebja sbk whzcrq bire gur ynml qbt"

Is it possible to do in python? I can't find any method to do it.

Please help!

This is what I've tried:

s = "Gur dhvpx oebja sbk whzcrq bire gur ynml qbt"
s1 = ""
for i in range(len(s)):
    c = s[i]
    if c >= 'a' and c <= 'm': c += 13
    elif c > 'A' and c < 'M': c += 13
    elif c >= 'n' and c < 'z': c -= 13
    elif c >= 'N' and c <= 'Z': c -= 13
    s1 += c
    print(c)
print(s1)

Solution

  • To decode a rot13 encoded string, say s, simply take rot13 of the string once again, i.e. compute rot13(s).

    If you are not familiar how to compute rot13 in python, try googling a bit and you'll surely find one. I googled and found a solution that works pretty well : https://stackoverflow.com/a/3269756/3293087 [Note that it works only on python2 and not python3 since string.maketrans was removed from python3.]

    I'll write the code here for completeness :

    # Python 2 solution
    import string
    rot13Table = string.maketrans( 
        "ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", 
        "NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
    rot13 = lambda s : string.translate(s, rot13Table)
    
    print rot13("Hello World!") 
    # Outputs "Uryyb Jbeyq!"
    

    Note : I'm not going to write the decoded string corresponding to what the OP originally posted, since its quite offensive and homophobic. Anyone interested can do it themselves.

    Update : I also found a solution that works for python 2 & 3 both from this SO answer. It turns out there is a builtin rot13 encoder in python in the codecs module :

    # Python 2 & 3 compatible
    import codecs
    rot13 = lambda s : codecs.getencoder("rot-13")(s)[0]
    
    # Answer
    rot13("Gur dhvpx oebja sbk whzcrq bire gur ynml qbt")
    

    Update 2 : Since the OP is adamant to know the answer and does not seem to have python installed, I have a created JS solution https://codepen.io/anon/pen/zPYVQP. Others please proceed with caution.