In this

**HackerEarth Roy and Cipher Disk problem solution,**Roy's friends have been spying on his text messages, so Roy thought of an algorithm to encrypt text messages.The Encryption algorithm is as follows:

- We say a message to be encrypted as Plain Text and an encrypted form of the message as Cipher.
- Plain Text consists of lower case alphabets only.
- Consider the Cipher Disk.

Initially, we start with 0 (zero). For each character in Plain Text, we move either clockwise or anti-clockwise on the disk depending on which way is closest to where we are currently standing.

If both clockwise and anti-clockwise distances are equal, we give priority to clockwise movement.

Clockwise movements are represented using positive numbers while Anti-clockwise movements are represented as negative numbers.

Roy needs your help in implementing this algorithm. Given a Plain Text message, your task is to encrypt it using the above algorithm and print the Cipher Text.

## HackerEarth Roy and Cipher Disk problem solution.

`def roy_and_cipher_disk():`

base = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1]

pre = []

for i in xrange(26):

tmp = base[(26-i):] + base[:(26-i)]

pre.append(tmp)

for t in xrange(input()):

s = raw_input()

slen = len(s)

res = []

curr = 'a'

for i in xrange(slen):

res.append(str(pre[ord(curr)-ord('a')][ord(s[i])-ord('a')]))

curr = s[i]

print ' '.join(res)

roy_and_cipher_disk()

### Second solution

`t=input()`

assert(t<=100 and t>=1)

while t:

x=raw_input()

cur=0

n=len(x)

assert(n<=100 and n>=1)

for i in xrange(n):

p=ord(x[i])-97

assert(p<26)

j=cur

distc=dista=0

while 1:

if j==p: break

distc += 1

j = (j+1)%26

j=cur

while 1:

if j==p: break

dista += 1

j = (j-1+26)%26

if distc<=dista: print distc,

else: print -1*dista,

cur=p

print

t-=1

## 0 Comments