projekty
/
krypto.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d5c9e9a
)
Nejlepsi posun integrovan do robota
author
Tomas Musil
<tomik.musil@gmail.com>
Thu, 22 Mar 2012 11:53:30 +0000
(12:53 +0100)
committer
Tomas Musil
<tomik.musil@gmail.com>
Thu, 22 Mar 2012 11:53:30 +0000
(12:53 +0100)
posuny.py
patch
|
blob
|
history
robot.py
patch
|
blob
|
history
diff --git
a/posuny.py
b/posuny.py
index
85e60a4
..
7145900
100644
(file)
--- a/
posuny.py
+++ b/
posuny.py
@@
-4,16
+4,16
@@
from ocesavac import ocesat
ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-def posun(char):
- if 65 <= ord(char) < 9
0
:
- return chr(ord(char) +
1
)
- if ord(char)
== 90
:
- return
'A'
+def posun(char
, pos=1
):
+ if 65 <= ord(char) < 9
1 - pos
:
+ return chr(ord(char) +
pos
)
+ if ord(char)
< 91 and ord(char) >= 91 - pos
:
+ return
chr(ord(char) + pos - 26)
else:
return char
def vsechny(zprava):
else:
return char
def vsechny(zprava):
- posunuty = zprava
+ posunuty = zprava
.upper()
analyza = []
for i in range(26):
posunuty = map(posun, posunuty)
analyza = []
for i in range(26):
posunuty = map(posun, posunuty)
@@
-23,20
+23,19
@@
def vsechny(zprava):
def eu_vzdalenost(v1, v2):
return sum([(x - y)**2 for (x, y) in zip(v1, v2)])
def eu_vzdalenost(v1, v2):
return sum([(x - y)**2 for (x, y) in zip(v1, v2)])
-def nejlepsi
_posun
(text):
+def nejlepsi(text):
ref = referencni.nacti('bref')
ref = referencni.nacti('bref')
- text = ocesat(text, False)
freq = dict()
freq = dict()
- for char in
text
:
+ for char in
ocesat(text, False)
:
freq[char] = freq.get(char, 0) + 1
celkem = sum(freq.values())
frekv = [float(freq.get(char, 0))/celkem for char in ABECEDA]
vzdalenost = eu_vzdalenost(frekv, ref.frekvence)
freq[char] = freq.get(char, 0) + 1
celkem = sum(freq.values())
frekv = [float(freq.get(char, 0))/celkem for char in ABECEDA]
vzdalenost = eu_vzdalenost(frekv, ref.frekvence)
- posun = 0
+ posun
uti
= 0
for i in range(1, 26):
for i in range(1, 26):
- frekv =
frekv[1:] + [frekv[0]
]
+ frekv =
[frekv[25]] + frekv[:-1
]
v2 = eu_vzdalenost(frekv, ref.frekvence)
if v2 < vzdalenost:
vzdalenost = v2
v2 = eu_vzdalenost(frekv, ref.frekvence)
if v2 < vzdalenost:
vzdalenost = v2
- posun = i
- return
posun
+ posun
uti
= i
+ return
(posunuti, ''.join([posun(char, posunuti) for char in text.upper()]))
diff --git
a/robot.py
b/robot.py
index
ee100cf
..
bebce87
100755
(executable)
--- a/
robot.py
+++ b/
robot.py
@@
-127,7
+127,10
@@
if mod_x:
analyza.append(jakobsen.desifruj(zprava, './bref'))
# Posuny v abecede
analyza.append(jakobsen.desifruj(zprava, './bref'))
# Posuny v abecede
-# TODO najit nejvhodnejsi posuny a vypsat jenom ty
+(posun, posunuty_text) = posuny.nejlepsi(zprava)
+analyza.append("\nNejlepsi posun ({0}):".format(posun))
+analyza.append(posunuty_text)
+
if 'P' in opsny or 'A' in opsny:
analyza.append("\nPosuny v abecede:")
analyza.append(posuny.vsechny(zprava))
if 'P' in opsny or 'A' in opsny:
analyza.append("\nPosuny v abecede:")
analyza.append(posuny.vsechny(zprava))