mirror of
https://github.com/krahets/hello-algo.git
synced 2026-06-16 07:08:21 +08:00
* Add Russian docs site baseline * Add Russian localized codebase * Polish Russian code wording * Update ru code translation. * Update code translation and chapter covers. * Fix pythontutor extraction. * Add README and landing page. * placeholder of profiles * Use figures of English version * Remove chapter paperbook
74 lines
1.7 KiB
Swift
74 lines
1.7 KiB
Swift
/**
|
||
* File: simple_hash.swift
|
||
* Created Time: 2023-07-01
|
||
* Author: nuomi1 (nuomi1@qq.com)
|
||
*/
|
||
|
||
/* Аддитивное хеширование */
|
||
func addHash(key: String) -> Int {
|
||
var hash = 0
|
||
let MODULUS = 1_000_000_007
|
||
for c in key {
|
||
for scalar in c.unicodeScalars {
|
||
hash = (hash + Int(scalar.value)) % MODULUS
|
||
}
|
||
}
|
||
return hash
|
||
}
|
||
|
||
/* Мультипликативное хеширование */
|
||
func mulHash(key: String) -> Int {
|
||
var hash = 0
|
||
let MODULUS = 1_000_000_007
|
||
for c in key {
|
||
for scalar in c.unicodeScalars {
|
||
hash = (31 * hash + Int(scalar.value)) % MODULUS
|
||
}
|
||
}
|
||
return hash
|
||
}
|
||
|
||
/* XOR-хеширование */
|
||
func xorHash(key: String) -> Int {
|
||
var hash = 0
|
||
let MODULUS = 1_000_000_007
|
||
for c in key {
|
||
for scalar in c.unicodeScalars {
|
||
hash ^= Int(scalar.value)
|
||
}
|
||
}
|
||
return hash & MODULUS
|
||
}
|
||
|
||
/* Хеширование с циклическим сдвигом */
|
||
func rotHash(key: String) -> Int {
|
||
var hash = 0
|
||
let MODULUS = 1_000_000_007
|
||
for c in key {
|
||
for scalar in c.unicodeScalars {
|
||
hash = ((hash << 4) ^ (hash >> 28) ^ Int(scalar.value)) % MODULUS
|
||
}
|
||
}
|
||
return hash
|
||
}
|
||
|
||
@main
|
||
enum SimpleHash {
|
||
/* Driver Code */
|
||
static func main() {
|
||
let key = "Hello Algo"
|
||
|
||
var hash = addHash(key: key)
|
||
print("Хеш-сумма сложением = \(hash)")
|
||
|
||
hash = mulHash(key: key)
|
||
print("Хеш-сумма умножением = \(hash)")
|
||
|
||
hash = xorHash(key: key)
|
||
print("Хеш-сумма XOR = \(hash)")
|
||
|
||
hash = rotHash(key: key)
|
||
print("Хеш-сумма с циклическим сдвигом = \(hash)")
|
||
}
|
||
}
|