mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
Add a SwiftUI iOS app that plays the same maturita content.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
3f88e55f33
commit
6c7336c7bb
33 changed files with 4498 additions and 10 deletions
60
ios/Maturita/Data/Answers.swift
Normal file
60
ios/Maturita/Data/Answers.swift
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import Foundation
|
||||
|
||||
func normalizeAnswer(_ input: String?) -> String {
|
||||
var pre = ""
|
||||
for ch in (input ?? "").lowercased() {
|
||||
switch ch {
|
||||
case "ä": pre += "ae"
|
||||
case "ö": pre += "oe"
|
||||
case "ü": pre += "ue"
|
||||
case "ß": pre += "ss"
|
||||
default: pre.append(ch)
|
||||
}
|
||||
}
|
||||
let decomp = pre.decomposedStringWithCanonicalMapping
|
||||
var out = ""
|
||||
var prevSpace = false
|
||||
for scalar in decomp.unicodeScalars {
|
||||
let v = scalar.value
|
||||
if (0x0300...0x036F).contains(v) || (0x1AB0...0x1AFF).contains(v) ||
|
||||
(0x1DC0...0x1DFF).contains(v) || (0x20D0...0x20FF).contains(v) ||
|
||||
(0xFE20...0xFE2F).contains(v) {
|
||||
continue
|
||||
}
|
||||
if CharacterSet.whitespacesAndNewlines.contains(scalar) {
|
||||
if !out.isEmpty && !prevSpace { out.append(" ") }
|
||||
prevSpace = true
|
||||
continue
|
||||
}
|
||||
if !CharacterSet.alphanumerics.contains(scalar) { continue }
|
||||
prevSpace = false
|
||||
out.unicodeScalars.append(scalar)
|
||||
}
|
||||
return out.trimmingCharacters(in: .whitespaces)
|
||||
}
|
||||
|
||||
func answerAccepts(_ selNorm: String, _ ans: String?) -> Bool {
|
||||
guard let ans, !ans.isEmpty else { return false }
|
||||
return ans.split(separator: "|").contains { normalizeAnswer(String($0)) == selNorm }
|
||||
}
|
||||
|
||||
func answerIncomplete(_ selNorm: String, _ ans: String?) -> Bool {
|
||||
guard !selNorm.isEmpty, let ans, !ans.isEmpty else { return false }
|
||||
for part in ans.split(separator: "|") {
|
||||
let a = normalizeAnswer(String(part))
|
||||
if a.hasPrefix(selNorm + " ") && a.count > selNorm.count + 1 { return true }
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func netTxtEq(_ a: String?, _ b: String?) -> Bool {
|
||||
guard let a, let b else { return a == b }
|
||||
let x = a.filter { !$0.isWhitespace }.lowercased()
|
||||
let y = b.filter { !$0.isWhitespace }.lowercased()
|
||||
return x == y
|
||||
}
|
||||
|
||||
func hasUmlaut(_ s: String?) -> Bool {
|
||||
guard let s else { return false }
|
||||
return s.contains(where: { "äöüÄÖÜß".contains($0) })
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue