//
// main.swift
//
// Astralogic
// <https://forums.macrumors.com/threads/how-to-compile-c-on-a-mac.2114710/>
import Foundation
extension String {
func encrypt(using: String) -> UInt32 {
let tables: [String: [UInt8]] = [
"god": [ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38
, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
, "reverseGod": [ 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39
, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26]
, "masonic": [ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45
, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58]
, "reverseMasonic": [ 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46
, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33]
, "masterNumber": [ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
, "reverseMasterNumber": [ 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24
, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
, "masterBuilder": [ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34
, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]
, "reverseMasterBuilder": [ 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35
, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22]
, "vortex": [ 1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19
, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38]
, "reverseVortex": [ 38, 37, 35, 34, 32, 31, 29, 28, 26, 25, 23, 22, 20
, 19, 17, 16, 14, 13, 11, 10, 8, 7, 5, 4, 2, 1]
, "foundation": [ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56
, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
, "reverseFoundation": [ 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57
, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44]
, "god2ndLevel": [ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76]
, "reverseGod2ndLevel": [ 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64
, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51]
, "god3rdLevel": [ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88
, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101]
, "reverseGod3rdLevel": [ 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89
, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76]
]
let message = self.trimmingCharacters(in: .whitespacesAndNewlines).lowercased().utf8
let table = tables[using]
var value: UInt32 = 0
for element in message {
let index = element.hashValue - String("a").utf8.first!.hashValue
value += UInt32(table![index])
}
return value
}
public var isAlphabetic: Bool {
guard !isEmpty else { return false }
let characterSet = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
guard nil == rangeOfCharacter(from: characterSet.inverted) else {
return false
}
return true
}
}
let encryptors = [
(" God Cipher:", "god" ) // 0
, (" Rev. God:", "reverseGod" ) // 1
, (" Masonic:", "masonic" ) // 2
, (" Rev. Masonic:", "reverseMasonic" ) // 3
, (" Master Number:", "masterNumber" ) // 4
, ("Rev. Master Number:", "reverseMasterNumber" ) // 5
, (" Master Builder:", "masterBuilder" ) // 6
, ("Rev. Master Number:", "reverseMasterBuilder") // 7
, (" Vortex:", "vortex" ) // 8
, (" Rev. Vortex:", "reverseVortex" ) // 9
, (" Foundation:", "foundation" ) // 10
, (" Rev. Foundation:", "reverseFoundation" ) // 11
, (" God Level 2:", "god2ndLevel" ) // 12
, (" Rev. God Level 2:", "reverseGod2ndLevel" ) // 13
, (" God Level 3:", "god3rdLevel" ) // 14
, (" Rev. God Level 3:", "reverseGod3rdLevel" ) // 15
]
let width = String(UInt32.max).count
while ( true ) {
let line = readLine(strippingNewline: true)
if let line = line {
if !line.isAlphabetic {
print("Invalid characters, must use a-zA-Z only!")
continue
}
for (index, encryptor) in encryptors.enumerated() {
let encrypted = line.encrypt(using: encryptor.1)
let lead = (index % 4) == 0 ? "\n" : " "
let formatting = lead + "%@%\(width)d"
print(String(format: formatting, encryptor.0, encrypted), separator: "", terminator: "")
}
print("")
}
}