Ciphertext Analysis with Excel?

  • Thread starter Thread starter jjunginger
  • Start date Start date
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 |
+-------------------------------------------------------------------+
 
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.
 
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
 
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
 
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
 
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

Back
Top