Jump to content

Playfair cipher: Difference between revisions

→‎{{header|zkl}}: dawn of the brain dead
(→‎{{header|zkl}}: dawn of the brain dead)
Line 1,488:
text-=text - keyTable; // remove unencodable characters
if(deadChr=="Q") text-=deadChr; else text=text.replace("J","I");
 
text=text.pump(String,T(Void.Read,1,False),
fcn(a,b=""){ if(a==b) a+"X"+b else a+b });
if(text.len().isOdd) text+="Z";
 
row:='wrap(c){ keyTable.index(c)/5 };
Line 1,495 ⟶ 1,499:
ltrAt:='wrap(r,c) { keyTable[r*5 + c] };
 
sink:=Sinktext.pump(String);, Void.Read, //-->digraph
foreach a in 'wrap(texta,b){
if((ra:=row(a))==(rb:=row(b))) return(ltrRight(a) + ltrRight(b));
b:=__aWalker._next() and __aWalker.value or "X";
else if((ca:=col(a))==(cb:=col(b))) return(ltrBelow(a) + ltrBelow(b));
if(a==b){
else return(ltrAt(ra,cb) + ltrAt(rb,ca));
if(b=="X"){ // "XX" is pathological
if(a==b}){
if(not __aWalker.atEnd) __aWalker.push(b);
b="Z";
}
else { __aWalker.push(b); b="X"; }
}
sink.write(
if((ra:=row(a))==(rb:=row(b))) ltrRight(a) + ltrRight(b);
else if((ca:=col(a))==(cb:=col(b))) ltrBelow(a) + ltrBelow(b);
else ltrAt(ra,cb) + ltrAt(rb,ca);
);
}
sink.close()
.pump(String,Void.Read,"".create.fp(" ")).strip(); // insert blanks
}</lang>
Line 1,536 ⟶ 1,529:
e:=playfair(msg,keyTable); e.println();
decodePF(e,keyTable).println();
playfair("X", keyTable).println() : decodePF(_,keyTable).println();
playfair("XX",keyTable).println() : decodePF(_,keyTable).println();</lang>
{{out}}
Line 1,543 ⟶ 1,535:
BM OD ZB XD NA BE KU DM UI XM MO UV IF
HI DE TH EG OL DI NT HE TR EX ES TU MP
MM MW
XX XZ
MW MW
XZ XZ
</pre>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.