Ciphertext Analysis with Excel?

J

jjunginger

Hey guys, I have written a quick spreadsheet that does a character
frequency analysis on a given ciphertext string.

I have a question on improving the functionality:

Q: Is there a way to print out the ten most frequent bigrams (two
letter combinations) and trigrams (three letter combinations) with a
formula or VBscript?

I have attached the file for your review.

Thank you in advance for your assistance.

-JJ


+-------------------------------------------------------------------+
|Filename: Cryptanalysis Worksheet.zip |
|Download: http://www.excelforum.com/attachment.php?postid=5083 |
+-------------------------------------------------------------------+
 
T

Tom Ogilvy

Write the combinations to a page with their frequency, sort on frequency and
then print the top 10 or use an autofilter on the new data to show the top 10
and print that.
 
J

jjunginger

Thanks for the reply, Tom. How do I get all of the unique combinations
to a page, so I can sort them? Could you give me a snippet of
code/script or walk me through how to get that done?

Thanks again!

-Jeremy
 
J

jjunginger

Thanks for the reply, Tom. How do I get all of the unique combinations
to a page, so I can sort them? Could you give me a snippet of
code/script or walk me through how to get that done?

Thanks again!

-Jeremy
 
T

Tom Ogilvy

Sub ABC()
Dim i As Long, j As Long
Dim rw As Long, s As String
Dim s1 As String, k As Long
Dim kk As Long
s = Range("A2")
rw = 31
For i = 1 To 26
For j = 1 To 26
s1 = Chr(i + 64) & Chr(j + 64)
Cells(rw, 1) = s1

For kk = 1 To Len(s) - 1
If Mid(s, kk, 2) = s1 Then
Cells(rw, 2) = Cells(rw, 2) + 1
End If
Next
rw = rw + 1
Next j
Next i
Range("A31").Resize(rw - 31, 2).Sort Key1:=Range("B31"), _
Order1:=xlDescending, header:=xlNo
Range("A41:A706").EntireRow.Delete

rw = 43
For i = 1 To 26
For j = 1 To 26
For k = 1 To 26
s1 = Chr(i + 64) & Chr(j + 64) & Chr(k + 64)
Cells(rw, 1) = s1

For kk = 1 To Len(s) - 1
If Mid(s, kk, 3) = s1 Then
Cells(rw, 2) = Cells(rw, 2) + 1
End If
Next
rw = rw + 1
Next k
Next j
Next i
Range("A43").Resize(rw - 43, 2).Sort Key1:=Range("B43"), _
Order1:=xlDescending, header:=xlNo
Range("A53:A65536").EntireRow.Delete
End Sub
 
K

keepITcool

Tom

elegant. you missed the fact that "a2" has mixed case!

change s= Range("A2")
to s= UCase(Range("A2")

and you'll notice different results.


OP,

what are you doing in Column B and C??
those formulas are "hardcoded" and prone to errors.

I've shortened the formula in B by replacing the nested substitute to
upper

in b4:
=LEN($A$2)-LEN(SUBSTITUTE(UPPER($A$2),$A4,""))
in c4:
=$B4/LEN($A$2)*100

then copy down.

pls study Excel HELP
about Absolute and Relative references!

--
keepITcool
| www.XLsupport.com | keepITcool chello nl | amsterdam


Tom Ogilvy wrote in
<news:<[email protected]>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top