import Foundation /// The pattern and hue an account with no picture shows, as `identicon` and /// `hue` in web/src/lib/format.ts make them, so it's the same on the pages. enum Identicon { static func hue(_ seed: String) -> Int { var h: UInt32 = 7 for byte in seed.utf8 { h = h &* 31 &+ UInt32(byte) } return Int(h % 360) } /// The cells of a 5×5 pattern, each its column and row, mirrored left to right. static func cells(_ seed: String) -> [(x: Int, y: Int)] { var h: UInt32 = 0x811c9dc5 for byte in seed.utf8 { h = (h ^ UInt32(byte)) &* 0x01000193 } var cells: [(x: Int, y: Int)] = [] for i in 0..<15 where (h >> UInt32(i)) & 1 == 1 { let (x, y) = (i / 5, i % 5) cells.append((x, y)) if x < 2 { cells.append((4 - x, y)) } } return cells } }