V adfgvx = ‘ADFGVX’ F encrypt(plainText, polybius, key) V s = ‘’ L(ch) plainText L(r) 6 L(c) 6 I polybius[r][c] == ch s ‘’= :adfgvx[r]‘’:adfgvx[c] DefaultDict[Char, String] cols L(ch) s cols[key[L.index % key.len]] ‘’= ch V result = ‘’ L(k) sorted(cols.keys()) I !result.empty result ‘’= ‘ ’ result ‘’= cols[k] R result F decrypt(cipherText, polybius, key) V skey = sorted(key) V cols = [‘’] * key.len V idx = 0 L(col) cipherText.split(‘ ’) cols[key.findi(skey[idx])] = col idx++ V s = ‘’ L(i) 0 .< key.len L(col) cols I i < col.len s ‘’= col[i] V result = ‘’ L(i) (0 .< s.len - 1).step(2) V r = :adfgvx.findi(s[i]) V c = :adfgvx.findi(s[i + 1]) result ‘’= polybius[r][c] R result V polybius = [[Char("\0")] * 6] * 6 V alphabet = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’ random:shuffle(&alphabet) L(r) 6 L(c) 6 polybius[r][c] = alphabet[6 * r + c] print("6 x 6 Polybius square:\n") print(‘ | A D F G V X’) print(‘---------------’) L(row) polybius print(adfgvx[L.index]‘ | ’row.join(‘ ’)) V words = File(‘unixdict.txt’).read().split("\n").filter(w -> w.len == 9 & w.len == Set(Array(w)).len) V key = random:choice(words).uppercase() print("\nThe key is "key) V PlainText = ‘ATTACKAT1200AM’ print("\nPlaintext : "PlainText) V cipherText = encrypt(PlainText, polybius, key) print("\nEncrypted : "cipherText) V plainText = decrypt(cipherText, polybius, key) print("\nDecrypted : "plainText)