fork(2) download
  1. import unicodedata
  2. s=input()
  3. k=[0x309B,0x309C,0x3063]
  4. m=[0x3083,0x3085,0x3087]
  5. e={0x3057:'shi',0x3061:'chi',0x3064:'tsu',0x3075:'fu'}
  6. d={0x3057:'ji',0x3061:'ji',0x3064:'dzu'}
  7. D=dict(zip('ksth','gzdb'))
  8. f=lambda c:unicodedata.name(c).split()[-1].lower()if ord(c)not in e else e[ord(c)]
  9. g=lambda c:d[c]if c in d else D[f(c)[0]]+f(c)[1:]
  10. R=[]
  11. r=[]
  12. t=[]
  13. i=0
  14. while i<len(s):
  15. c=ord(s[i])
  16. if c==k[0]:R[-1]=g(s[i-1])
  17. elif c==k[1]:R[-1]='p'+R[-1][1:]
  18. elif c in m:R[-1]=R[-1][:-1];n=f(s[i]);R+=[n[1:]]if r[-1]in[0x3057,0x3061]else[n];r+=[c]
  19. elif c==k[2]:t+=[len(R)]
  20. else:R+=[f(s[i])];r+=[c]
  21. i+=1
  22. for i in t:R[i]=R[i][0]+R[i]
  23. print ''.join(R)
Success #stdin #stdout 0.01s 8976KB
stdin
u'\u3075\u309C\u308D\u304F\u309B\u3089\u307F\u3093\u304F\u309B\u306F\u309C\u3059\u309B\u308B\u3053\u3046\u3068\u309B\u3053\u309B\u308B\u3075'
stdout
puroguramingupazurukoudogorufu