User:Mwn3d/Seasoning Sandwich Caesar Cipher: Difference between revisions
Content added Content deleted
m (Updated to use arrays instead of Maps. No idea what I was thinking.) |
(This is probably getting way too crazy...add code to make the noise look more like the actual message with word length restrictions) |
||
Line 25: | Line 25: | ||
StringBuilder encoded = new StringBuilder(); |
StringBuilder encoded = new StringBuilder(); |
||
if(addNoise){ //if we are encoding |
if(addNoise){ //if we are encoding |
||
StringBuilder noise = genNoise(enc |
StringBuilder noise = genNoise(enc); //get noise based on the original string ignoring non-letter characters |
||
noise.insert((int)(Math.random() * noise.length()), " " + enc + " "); //insert the message into a random place in the noise |
noise.insert((int)(Math.random() * noise.length()), " " + enc + " "); //insert the message into a random place in the noise |
||
Line 46: | Line 46: | ||
* Generate noise to surround the actual message |
* Generate noise to surround the actual message |
||
*/ |
*/ |
||
private static StringBuilder genNoise(String |
private static StringBuilder genNoise(String orig){ |
||
//remove all non-word chars for figuring out which letters to include in noise |
|||
String enc = orig.replaceAll("\\W", ""); |
|||
//get the number of each letter needed to bring them all up to the same frequency |
//get the number of each letter needed to bring them all up to the same frequency |
||
int[] invertedFreq = invert(letterFreq(enc)); |
int[] invertedFreq = invert(letterFreq(enc)); |
||
Line 60: | Line 63: | ||
StringBuilder noise = new StringBuilder(); |
StringBuilder noise = new StringBuilder(); |
||
Random rand = new Random(); |
Random rand = new Random(); |
||
double meanLen = getMeanLen(orig.split("\\b++")); |
|||
⚫ | |||
double std = getStdDev(orig.split("\\b++")); |
|||
⚫ | |||
while(rawNoise.length() > 0){ //while we still have letters left to add |
while(rawNoise.length() > 0){ //while we still have letters left to add |
||
Line 71: | Line 77: | ||
if(waitForSpace == 0){ //if we hit the wait time |
if(waitForSpace == 0){ //if we hit the wait time |
||
noise.append(' '); //add a space |
noise.append(' '); //add a space |
||
do{ |
|||
waitForSpace = |
waitForSpace = (int)(rand.nextGaussian() * std + meanLen) + 1; //select a new wait time |
||
}while(waitForSpace == 0); |
|||
} |
} |
||
} |
} |
||
Line 106: | Line 114: | ||
return freqLet; |
return freqLet; |
||
} |
|||
private static double getMeanLen(String[] words){ |
|||
int total = 0; |
|||
for(String word:words){ |
|||
total += word.length(); |
|||
} |
|||
return (double)total / words.length; |
|||
} |
|||
private static double getStdDev(String[] words){ |
|||
double mean = getMeanLen(words); |
|||
int totalDiff = 0; |
|||
for(String word:words){ |
|||
totalDiff += (int)Math.pow(word.length() - mean, 2); |
|||
} |
|||
return Math.sqrt(totalDiff / words.length); |
|||
} |
} |
||
}</lang> |
}</lang> |
||
{{out}} |
{{out}} |
||
<pre>The quick brown fox Jumped over the lazy Dog and then he landed on a cat and it hurt |
<pre>The quick brown fox Jumped over the lazy Dog and then he landed on a cat and it hurt |
||
tsl wu ebjc usjx ab ld xuj tx jos g rl nj ne khnh hg ny fsr su yvik kj wds vvw bxyu xwld lhn mrrl wdv wocvr h gep oeb bzyi ftq cguow ndaiz raj vgybqp ahqd ftq xmlk pas mzp ftqz tq xmzpqp az m omf mzp uf tgdf ve ci cci ekh ykcbi ar oiy ek ong |
|||
hgz ki spxq igxl op zr lix hl xcg u fz bx bs yvbv vu bm tgf gi mjwy yx krg jjk plmi lkzr zvb affz krj kcqjf v usd csp pnmw the quick brown fox jumped over the lazy dog and then he landed on a cat and it hurt js qw qqw syv myqpw of cwm sy cbu</pre> |