fork download
  1. from collections import*
  2. c=Counter
  3. g='_ I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX XXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL'.split()
  4. def n(a,k):
  5. if a:
  6. for i in range(max(i.count(a[0])for i in{v:k for k,v in enumerate(g)})*26+1):yield from n(a[1:],{**k,**{a:k[a]+b for a,b in c(g[i+k[a[0]]]).items()}})
  7. else:yield k
  8. def f(q,w):
  9. for i in n(e:='ABCDEFGHIJKLMNOPQRSTUVWXYZ',c((s:=(q+w).replace(S:=' ',''))+e)):
  10. for x in range(len(k:=[j for j in i if(j in s)^1==i[j]])):
  11. r={a:b for a,b in i.items()if(a in k[:x])^1}
  12. if(all((s+''.join(g[b]+a for a,b in r.items())).count(i)==r[i]for i in r)):return q+S+', '.join(g[r[v]]+S+v for v in[*r][:-1])+S+w+S+g[r[[*r][-1]]]+S+[*r][-1]
  13.  
  14. print(f('IN HAC SENTENTIA SVNT','ET'))
  15. print(f('THIS IS A TEST','A NEW TEST'))
  16. print(f('THIS SENTENCE CONTAINS','AND'))
Success #stdin #stdout 0.12s 14060KB
stdin
Standard input is empty
stdout
IN HAC SENTENTIA SVNT XXXII I, V N, II H, III A, II C, III S, IV E, V T, VII V, I G, I J, I K, I L, I M, I O, I P, I Q, I R, I U, I W, IV X, I Y ET I Z
THIS IS A TEST VI T, II H, XXXII I, V S, III A, IV E, II N, II W, I D, I F, I G, I J, I K, I L, I M, I O, I P, I Q, I R, I U, VI V, IV X, I Y A NEW TEST I Z
THIS SENTENCE CONTAINS IV T, II H, XXXVII I, IV S, IV E, VI N, III C, II O, III A, II D, I G, I J, I K, I L, I M, I P, I Q, I R, I U, VIII V, I W, IV X, I Y AND I Z