# -*- coding: utf-8 -*-
import random
keyboard = [ u"йцукенгшщзхъ" ,
u"фывапролджэ" ,
u"ячсмитьбю" ]
def find_character( x) :
for row in range ( len ( keyboard) ) :
for column in range ( len ( keyboard[ row] ) ) :
if x == keyboard[ row] [ column] :
return [ row, column]
return None
def within_keyboard( row, column) :
return 0 <= row < len ( keyboard) and 0 <= column < len ( keyboard[ row] )
def get_variants( x) :
directions = [ ( 0 , 1 ) , ( 1 , 0 ) , ( 0 , -1 ) , ( -1 , 0 ) ,
( 1 , 1 ) , ( -1 , 1 ) , ( -1 , -1 ) , ( 1 , -1 ) ] + [ ( 0 , 0 ) ] * 25
cell = find_character( x)
if cell == None :
return [ ]
else :
[ row, column] = cell
return [ keyboard[ row + x] [ column + y]
for ( x, y) in directions
if within_keyboard( row + x, column + y) ]
def mobilify_character( x) :
variants = get_variants( x)
if variants == [ ] :
return x
else :
return variants[ random .randint ( 0 , len ( variants) - 1 ) ]
def mobilka( text) :
return '' .join ( [ mobilify_character( x) for x in text] )
print mobilka( u"в плюсах и дишке удобно сделано это" )
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCmltcG9ydCByYW5kb20KCmtleWJvYXJkID0gW3Ui0LnRhtGD0LrQtdC90LPRiNGJ0LfRhdGKIiwKICAgICAgICAgICAgdSLRhNGL0LLQsNC/0YDQvtC70LTQttGNIiwKICAgICAgICAgICAgdSLRj9GH0YHQvNC40YLRjNCx0Y4iXQoKZGVmIGZpbmRfY2hhcmFjdGVyKHgpOgogICAgZm9yIHJvdyBpbiByYW5nZShsZW4oa2V5Ym9hcmQpKToKICAgICAgICBmb3IgY29sdW1uIGluIHJhbmdlKGxlbihrZXlib2FyZFtyb3ddKSk6CiAgICAgICAgICAgIGlmIHggPT0ga2V5Ym9hcmRbcm93XVtjb2x1bW5dOgogICAgICAgICAgICAgICAgcmV0dXJuIFtyb3csIGNvbHVtbl0KICAgIHJldHVybiBOb25lCgpkZWYgd2l0aGluX2tleWJvYXJkKHJvdywgY29sdW1uKToKICAgIHJldHVybiAwIDw9IHJvdyA8IGxlbihrZXlib2FyZCkgYW5kIDAgPD0gY29sdW1uIDwgbGVuKGtleWJvYXJkW3Jvd10pCgpkZWYgZ2V0X3ZhcmlhbnRzKHgpOgogICAgZGlyZWN0aW9ucyA9IFsoMCwgMSksICgxLCAwKSwgKDAsIC0xKSwgKC0xLCAwKSwKICAgICAgICAgICAgICAgICAgKDEsIDEpLCAoLTEsIDEpLCAoLTEsIC0xKSwgKDEsIC0xKV0gKyBbKDAsIDApXSAqIDI1CiAgICBjZWxsID0gZmluZF9jaGFyYWN0ZXIoeCkKICAgIGlmIGNlbGwgPT0gTm9uZToKICAgICAgICByZXR1cm4gW10KICAgIGVsc2U6CiAgICAgICAgW3JvdywgY29sdW1uXSA9IGNlbGwKICAgICAgICByZXR1cm4gW2tleWJvYXJkW3JvdyArIHhdW2NvbHVtbiArIHldCiAgICAgICAgICAgICAgICBmb3IgKHgsIHkpIGluIGRpcmVjdGlvbnMKICAgICAgICAgICAgICAgIGlmIHdpdGhpbl9rZXlib2FyZChyb3cgKyB4LCBjb2x1bW4gKyB5KV0KCmRlZiBtb2JpbGlmeV9jaGFyYWN0ZXIoeCk6CiAgICB2YXJpYW50cyA9IGdldF92YXJpYW50cyh4KQogICAgaWYgdmFyaWFudHMgPT0gW106CiAgICAgICAgcmV0dXJuIHgKICAgIGVsc2U6CiAgICAgICAgcmV0dXJuIHZhcmlhbnRzW3JhbmRvbS5yYW5kaW50KDAsIGxlbih2YXJpYW50cykgLSAxKV0KCmRlZiBtb2JpbGthKHRleHQpOgogICAgcmV0dXJuICcnLmpvaW4oW21vYmlsaWZ5X2NoYXJhY3Rlcih4KSBmb3IgeCBpbiB0ZXh0XSkKCnByaW50IG1vYmlsa2EodSLQsiDQv9C70Y7RgdCw0YUg0Lgg0LTQuNGI0LrQtSDRg9C00L7QsdC90L4g0YHQtNC10LvQsNC90L4g0Y3RgtC+IikK