mirror of
https://github.com/cedricbonhomme/Stegano.git
synced 2025-05-12 17:18:30 +02:00
Ackermann is now encapsulated in a generator.
This commit is contained in:
parent
1704aec690
commit
5694e5c806
2 changed files with 21 additions and 2 deletions
|
@ -118,14 +118,14 @@ def ackermann_naive(m: int, n: int) -> int:
|
||||||
return ackermann(m - 1, ackermann(m, n - 1))
|
return ackermann(m - 1, ackermann(m, n - 1))
|
||||||
|
|
||||||
|
|
||||||
def ackermann(m: int, n: int) -> int:
|
def ackermann_fast(m: int, n: int) -> int:
|
||||||
"""Ackermann number.
|
"""Ackermann number.
|
||||||
"""
|
"""
|
||||||
while m >= 4:
|
while m >= 4:
|
||||||
if n == 0:
|
if n == 0:
|
||||||
n = 1
|
n = 1
|
||||||
else:
|
else:
|
||||||
n = ackermann(m, n - 1)
|
n = ackermann_fast(m, n - 1)
|
||||||
m -= 1
|
m -= 1
|
||||||
if m == 3:
|
if m == 3:
|
||||||
return (1 << n + 3) - 3
|
return (1 << n + 3) - 3
|
||||||
|
@ -136,6 +136,13 @@ def ackermann(m: int, n: int) -> int:
|
||||||
else:
|
else:
|
||||||
return n + 1
|
return n + 1
|
||||||
|
|
||||||
|
def ackermann(m: int) -> Iterator[int]:
|
||||||
|
"""Ackermann written as a generator.
|
||||||
|
"""
|
||||||
|
n = 0
|
||||||
|
while True:
|
||||||
|
yield ackermann_fast(m, n)
|
||||||
|
n += 1
|
||||||
|
|
||||||
def fibonacci() -> Iterator[int]:
|
def fibonacci() -> Iterator[int]:
|
||||||
"""Generate the sequence of Fibonacci.
|
"""Generate the sequence of Fibonacci.
|
||||||
|
|
|
@ -54,6 +54,18 @@ class TestLSBSet(unittest.TestCase):
|
||||||
generators.eratosthenes())
|
generators.eratosthenes())
|
||||||
|
|
||||||
self.assertEqual(message, clear_message)
|
self.assertEqual(message, clear_message)
|
||||||
|
|
||||||
|
def test_hide_and_reveal_with_ackermann(self):
|
||||||
|
messages_to_hide = ["foo"]
|
||||||
|
for message in messages_to_hide:
|
||||||
|
secret = lsbset.hide("./tests/sample-files/Lenna.png", message,
|
||||||
|
generators.ackermann(m=3))
|
||||||
|
secret.save("./image.png")
|
||||||
|
|
||||||
|
clear_message = lsbset.reveal("./image.png",
|
||||||
|
generators.ackermann(m=3))
|
||||||
|
|
||||||
|
self.assertEqual(message, clear_message)
|
||||||
|
|
||||||
def test_hide_and_reveal_with_shift(self):
|
def test_hide_and_reveal_with_shift(self):
|
||||||
messages_to_hide = ["a", "foo", "Hello World!", ":Python:"]
|
messages_to_hide = ["a", "foo", "Hello World!", ":Python:"]
|
||||||
|
|
Loading…
Add table
Reference in a new issue