JJ_iOS/JJUNGTABLE/Common/EDENON.swift
2024-06-26 12:38:42 +09:00

270 lines
9.0 KiB
Swift

//
// EDENON.swift
// JJUNGTABLE
//
// Created by Sean Kim on 6/13/24.
//
import Foundation
import Combine
/*
(5 )
)
: 12345678
: 20240612
0
1
.
- 1 0 .
)
1 2 3 4 5 6 7 8
2 0 2 4 0 6 1 2
: 03 02 05 08 05 12 08 10
2
1 (: n) 1 n 2 n-1 3 n-2 .
)
03 02 05 08 05 12 08 10
: 0310 0208 0512 0805
3
2 .
1 ,
1~2 ,
1~3 .
1~4 .
)
0310 0208 0512 0805
: 0310 -> 0 -> : 310 -> = 3100
: 0208 -> 02 -> : 08 -> = 0802
: 0512 -> 051 -> : 2 -> = 2051
: 0805 -> 0805 -> : -> = 0805
: 3100 0802 2051 0805
4
3 .
)
3100 0802 2051 0805
[ ]
: 3 0 2 0
: 1 8 0 8
: 0 0 5 0
: 0 2 1 5
: 3020 1808 0050 0215
5
4 (isToggle: default = false) .
4 .
1 = A, 2 = B, 3 = C, 4 = D, 5 = E, 6 = F, 7 = G, 8 = H, 9 = I isToggle false true .
0 isToggle Bool 0 1 9 (J~Z) .
0 2 0 . 4 .
)
3020 1808 0050 0215
- - isToggle
3 - C - F
0 - - T
2 - b - T
0 - - F
0000
0000 (J~Z)
1 - A - F
8 - H - F
0 - - T
8 - h - T
0000
0000 (J~Z)
0 - - F
0 - 2 - T - 0 2 2
5 - e - T
0 - - F
0000
0000 (J~Z)
0 - 2 - T - 0 0 2 2
2 - b - T
1 - a - T
5 - e - T
0000
0000 (J~Z)
: Cb AHh 2e 2bae
.
: 12345678
: 20240612
: Cb AHh 2e 2bae
*/
struct ENDC_ERROR:Error {
var caseType: CASE
var message: String
enum CASE: Error{
case EN_DIGIT
case DC_WRONG
}
}
func edon_E(value: String, key: String) -> Future<String, ENDC_ERROR> {
return Future { promise in
var result = ""
// 0:
if value.count != key.count { promise(.failure(ENDC_ERROR(caseType: .EN_DIGIT, message: "digit ERROR"))) }
/// 1: + +
/// <>
/// 1.
/// 2. 1 1 0 2
/// 3. 0 ~ index [index+1... end] .
/// 4. 3 .
/// 5. 4 String .
let sum = { () -> String in
var tempArray = ["","","",""]
let add = zip(value, key).map{
guard let first = Int(String($0)), let second = Int(String($1)) else { return ""}
return String(format: "%02d", first + second)
}
zip(add[...3],add[4...].reversed())
.map{"\($0)\($1)"}.enumerated()
.map { (index, value) in
let sumValue = value.map{$0}
return "\(String(sumValue[(index+1)...]))\(String(sumValue[...(index)]))"
}
.joined(separator: "")
.enumerated().map { (index, value) in
tempArray[index % 4] += "\(value)"
}
// print(tempArray)
// print(tempArray.joined(separator: ""))
return tempArray.joined(separator: "")
}()
// print(sum)
// print(String(Character(UnicodeScalar(73))))
//"I".unicodeScalars.first?.value
/// 2
/// [ : 65~73]
/// <>
/// 1.
var isToggle = false
var zCnt = 0
let ascii = { (value: Int) -> String in
if let scalar = UnicodeScalar(value) { return "\(scalar)" }
return ""
}
for value in sum {
if value == "0" {
isToggle.toggle()
zCnt += 1
if zCnt == 4 {
result += isToggle ? ascii(Int.random(in: 74...90)).lowercased() : ascii(Int.random(in: 74...90))
zCnt = 0
}
}
else {
if zCnt > 1 { result += "\(zCnt)" }
zCnt = 0
result += isToggle ? ascii(Int("\(value)")!+64).lowercased() : ascii(Int("\(value)")!+64)
}
}
promise(.success(result))
}
}
func edon_D(value: String, key: String) -> Future<String, ENDC_ERROR> {
return Future { promise in
var result = ""
var temp = ""
var isToggle = false
let ascii = { (value: String) -> Int in
if let scalar = value.unicodeScalars.first, let sInt = Int("\(scalar.value)") { return sInt }
return 0
}
// = 65~73, = 97~105
value.map {
if let codeNum = Int("\($0)") {
for _ in 0..<codeNum {
temp += "0"
isToggle.toggle()
}
}
else {
let code = ascii("\($0)")
if code > 64 && code < 74 {
if isToggle {
temp += "0\(code-64)"
isToggle.toggle()
}
else { temp += "\(code-64)" }
}
else if code > 96 && code < 106 {
if !isToggle {
temp += "0\(code-96)"
isToggle.toggle()
}
else { temp += "\(code-96)" }
}
else {
temp += "0000"
}
}
}
if temp.count % 4 > 0 { for _ in 0 ..< 4-(temp.count%4) { temp += "0" } }
var tempArray = ["","","",""]
temp.enumerated().map {(index,value) in tempArray[index%4] += "\(value)" }
var saveArray = [String].init(repeating: "", count: 8)
var saveTArray = [[String]]()
tempArray.enumerated().map {(index,value) in
let sepValue = value.map{$0}
saveTArray.append("\(String(sepValue[(3-index)...]))\(String(sepValue[...(3-index-1)]))".map{"\($0)"})
saveArray[index] = saveTArray[index][0...1].joined(separator: "")
saveArray[(7-index)] = saveTArray[index][2...3].joined(separator: "")
}
for (v,k) in zip(saveArray,key) {
if let value = Int(v), let key = Int("\(k)") {
if value-key > 0 { result += "\(value-key)" }
else { result += "\((value-key) * -1)" }
}
}
promise(.success(result))
}
}