Fletcher 16 (#9775)

* Add files via upload

* Update fletcher16.py

* Update fletcher16.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update fletcher16.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update fletcher16.py

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update fletcher16.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
rtang09 2023-10-04 23:12:08 -07:00 committed by GitHub
parent 935d1d3225
commit 4b6301d4ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

36
hashes/fletcher16.py Normal file
View File

@ -0,0 +1,36 @@
"""
The Fletcher checksum is an algorithm for computing a position-dependent
checksum devised by John G. Fletcher (19342012) at Lawrence Livermore Labs
in the late 1970s.[1] The objective of the Fletcher checksum was to
provide error-detection properties approaching those of a cyclic
redundancy check but with the lower computational effort associated
with summation techniques.
Source: https://en.wikipedia.org/wiki/Fletcher%27s_checksum
"""
def fletcher16(text: str) -> int:
"""
Loop through every character in the data and add to two sums.
>>> fletcher16('hello world')
6752
>>> fletcher16('onethousandfourhundredthirtyfour')
28347
>>> fletcher16('The quick brown fox jumps over the lazy dog.')
5655
"""
data = bytes(text, "ascii")
sum1 = 0
sum2 = 0
for character in data:
sum1 = (sum1 + character) % 255
sum2 = (sum1 + sum2) % 255
return (sum2 << 8) | sum1
if __name__ == "__main__":
import doctest
doctest.testmod()