Posted on 03/09/2020 3:33:25 AM PDT by nikos1121
Todays Cryptogram
T NOPK TOCHHC KBED HGTZ T TODHOC DP CP, FLD
VDAPORHA DBEO EZZ WJ EYDHADBPLRBDV TV WJ YLAJ,
YLAJ DBED FATORV LIPO WPADEZV DBH RAHEDHVD HGTZV.
- HLATITCHV
Yesterdays Cryptogram
OFWWLRMKK LK ULVM F VLKK. CIT QTKS KOFPM LS SI MRYIC LS. NMPRFPE QMUSXMP
HLATITCHV, you menda deese.
3. Hals Helper
I did today's in my head and it took 5+ minutes - pretty sure it would have been a quickie if I used Hal's.
Hal’s Helper.
Oh boy, theres always one... lol
Pencil and paper.
Did pen and paper for a lot of years. Doing Hal’s, now. Some I’ll try in my head.
2&3
I always use Hal’s. Thanks for providing the link!
Can you share that with the group? Im like not real smart so youll have do it step by step?
3.
Probably about 4-5 minutes today.
To answer your question: 3 & 4. It just depends on how mentally tired I am in the evening.
Hal’s, this one took a long time for some reason. Trying them before morning coffee is usually a waste of time.
Here’s my vowel sniffer. I will post my formatter/histogram later. If you want my excel workbook give me contact information on freepmail, and I’ll send a copy.
If you uncomment the first line, and comment the line that hard wires the value of “string” it’s a function. As is, you have to edit it each time you run it to change the value of “string”. This example is from the last time I used it. In matlab and octave the apostrophe is a string delimiter, so you have to enter double apostrophes (’’) to represent a single apostrophe. In octave quote marks, “, can also be a string delimiter.
When you run it the results should be:
>> vowelsniffer
vowelChar =
D
F
G
K
L
M
U
Z
D 23
F 19
G 11
K 11
L 10
M 9
U 9
Z 8
Notice that D = A, F = D, G = T, K = E, L = M, M = G, U = O, Z = I, so that for small samples it does not work very well. Try it with a longer quote - it shouldn’t matter whether or not it’s encrypted, it simply performs statistical tests.
When I paste in the first three paragraphs of the Battle of Bennington from Wikipedia,unencrypted, this is the score:
A 325
E 268
G 251
I 209
K 198
O 187
U 183
Y 118
Not perfect, but better. These are the letters that “smell” like vowels when subjected to statistical tests.
%function [possibleVowels] = vowelsniffer(string)
%
% implements the algorithm in chapter 2 in
% Secret History: The Story of Cryptology (Discrete Mathematics
% and Its Applications) 1st Edition
% by Craig P. Bauer
% paste in the string you are analyzing here
string =’QKH BUIP QUH OKDFV GTK HUIOF’’V MIKDG EZGZKV ZQ GTK QSLYKI UW AKUAOK DIUSQF HTUL BUS VTUSOFQ’’G LDPK D VSFFKQ LURK. - FDRZF OKGGKILDQ’;
string = upper(string);
% pad the string with blanks. We look one character ahead and one back
string = [’ ‘,string,’ ‘];
contacts = zeros(26,26);
for rowValue = ‘A’:’Z’;
for columnValue = ‘A’:’Z’;
if columnValue == rowValue; continue;end
rowIndex = find(string == rowValue);
if isempty(rowIndex);continue;end
columnIndex = find(string(rowIndex+1)==columnValue);
if ~isempty(columnIndex)
contacts(abs(rowValue)-64, abs(columnValue)-64) = ...
contacts(abs(rowValue)-64, abs(columnValue)-64) + length(columnIndex);
end
columnIndex = find(string(rowIndex-1)==columnValue);
if ~isempty(columnIndex)
contacts(abs(rowValue)-64, abs(columnValue)-64) =...
contacts(abs(rowValue)-64, abs(columnValue)-64) + length(columnIndex);
end
end % for rowValue = ‘A’:’Z’;
end % for columnValue = ‘A’:’Z’;
workingMatrix = contacts;
rowSums = sum(workingMatrix,2);
isVowel = false(size(rowSums));
while(1);
rowSums = sum(workingMatrix,2);
[maxSum, ix] = max(rowSums);
if maxSum <= 0 ; break;end
ix = find(rowSums == maxSum); % allow for multiple values
isVowel(ix) = true;
%
workingMatrix(ix,:) = -1e6; % get these rows out of the way;
%
% subtract from every row not identified as a vowel twice the
% number of times it contacts the “vowel(s)” identified on this iteration,
% Which is the same as reversing the column value of the vowel contacts
workingMatrix(:,ix) = -workingMatrix(:,ix);
end
% print candidate “vowels” and their raw scores.
% raw scores are the number of times a letter contacts a different letter
% candidate vowels are letters that are not eliminated by subtracting from their
% score twice the number of times they contact a previously identified vowel.
rowSums = sum(contacts,2);
[~ , ix] = sort(rowSums, ‘descend’);
vowelChar = char(find(isVowel)+64)
for k = 1:sum(isVowel)
fprintf(’%c\t%d\n’, vowelChar(k), rowSums(ix(k)))
end
%endfunction
Disclaimer: Opinions posted on Free Republic are those of the individual posters and do not necessarily represent the opinion of Free Republic or its management. All materials posted herein are protected by copyright law and the exemption for fair use of copyrighted works.