From 8823d92e12598570f7633c5572f447080cdda60d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:40:58 +0000 Subject: [PATCH 1/7] Initial plan From 48859a81a21f2704c9476f695fecfe44831dc23b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:45:01 +0000 Subject: [PATCH 2/7] Add random ASCII art cats and improve CLI argument parsing Co-authored-by: SpaceTrucker2196 <641430+SpaceTrucker2196@users.noreply.github.com> --- embedded_production.swift | 26 ++-- main.swift | 221 ++++++++++++++++++++++----- meowpass | Bin 0 -> 115168 bytes meowpass_production.swift | 308 +++++++++++++++++++++++++++----------- 4 files changed, 419 insertions(+), 136 deletions(-) create mode 100755 meowpass diff --git a/embedded_production.swift b/embedded_production.swift index ceaacc8..b1a84fe 100644 --- a/embedded_production.swift +++ b/embedded_production.swift @@ -1,18 +1,5 @@ // MARK: - Embedded Cat Names Data (Production) let embeddedCatNames: [String] = [ - "A Cappella", - "A Cat", - "A Net (aka Nettie)", - "A'ja (pronounced \"Asia\")", - "A.C. (Alternating Current)", - "A.C. (Another Cat)", - "A.C. (Attack Cat)", - "A.C. (Attitude Cat)", - "A.D.D. (Attention Deficit Disorder)", - "A.J. (Angelina Jolie)", - "A.J. (Angelo Jo)", - "A.L.F. (Alien Life Form)", - "A.V.P. (Alien vs Predator)", "Aaargh", "Aaliyah", "Aaron", @@ -1000,4 +987,17 @@ let embeddedCatNames: [String] = [ "Barbarian", "Barbarino", "Barbeque", + "Barbi (after Barbara Streisand)", + "Barbossa", + "Barclay", + "Bardee", + "Barfly", + "Barfolemeow", + "Bariska", + "Barkley", + "Barky", + "Barley", + "Barley-Boo", + "Barn Cat", + "Barnabas (so named for Barnabas Collins of Dark Shadows)", ] diff --git a/main.swift b/main.swift index 5b96614..a49ac56 100644 --- a/main.swift +++ b/main.swift @@ -8,7 +8,14 @@ import Foundation // MARK: - ASCII Art and Lolcat Theme -let lolcatArt = """ + +/** + * Collection of ASCII art cats for randomized display + * Each run selects a random cat to display, adding variety to the user experience + */ +let asciiCats = [ + // Original lolcat + """ _,-;'''`' - . _/', `; `; \\ , _..,-'' ' ` ` `\\ @@ -18,13 +25,74 @@ let lolcatArt = """ ; (6_); (6_) ; | , \\ ' | ;; _,6 ,. ` `, ' `-._ // ,;.=..`_..=.,' -' ,'' _,// -_00_____`"=,,,=="',___,,,-----'''----'_'_'_''______00_ - Meow Password Generators of Secure Relavant + _00_____`"=,,,=="',___,,,-----'''----'_'_'_''______00_ + Meow Password Generators of Secure Relavant __,,-' /' /'_,,--'' | ( `' -""" + """, + + // Sitting cat + """ + /\\_/\\ + ( o.o ) + > ^ < + /| |\\ + (_| |_) + + 🐱 MeowPassword - Purrfectly Secure! 🐱 + """, + + // Happy cat + """ + |\\__/,| (`\\ + |_ _ |.--.) ) + ( T ) / + (((^_(((/(((_/ + + 😸 MeowPassword - Happy to Help! 😸 + """, + + // Stretching cat + """ + /\\_/\\ + ( ^.^ ) _ + \\ " / ( ) + ( | | ) + (__d b__) + + 😺 MeowPassword - Stretching Your Security! 😺 + """, + + // Playful cat + """ + /\\_/\\ ___ + = o_o =_______ \\ \\ + __^ __( \\.__) ) + (@)<_____>__(_____)____/ + + 😻 MeowPassword - Playfully Secure! 😻 + """, + + // Sleeping cat + """ + |\\ _,,,---,,_ + ZZZzz /,`.-'`' -. ;-;;,_ + |,4- ) )-,_. ,\\ ( `'-' + '---''(_/--' `-'\\_) + + 😴 MeowPassword - Quietly Securing... 😴 + """ +] + +/** + * Get a random ASCII art cat from the collection + * @return A randomly selected ASCII art string + */ +func getRandomCatArt() -> String { + return asciiCats.randomElement() ?? asciiCats[0] +} // MARK: - Configuration Structure /** @@ -37,40 +105,78 @@ struct PasswordConfig { let maxLength: Int // Maximum password length (15-50) let showTests: Bool // Whether to run test mode let copyToClipboard: Bool // Whether to copy result to clipboard + let showHelp: Bool // Whether to show help /** * Initialize configuration from command line arguments * @param arguments: Array of command line arguments */ init(arguments: [String]) { - var numNumbers = Int.random(in: 1...4) // Default range as specified in requirements - var numSymbols = 2 // Default value as specified in requirements - var maxLength = 25 // Default max length as specified in requirements + var numNumbers = Int.random(in: 3...5) // Default range: 3-5 numbers + var numSymbols = 2 // Default value: 2 symbols + var maxLength = 25 // Default max length: 25 characters var showTests = false var copyToClipboard = false + var showHelp = false // Parse command line arguments with validation - for i in 0..= 1 && value <= 10 { + numNumbers = value + i += 1 // Skip next argument (the value) + } else { + print("Warning: --numbers must be between 1-10. Using default.") + } + } else { + print("Warning: --numbers requires a numeric value. Using default.") } - case "--symbols": + + case "--symbols", "-s": if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - numSymbols = max(1, min(10, value)) // Clamp between 1-10 + if value >= 1 && value <= 10 { + numSymbols = value + i += 1 // Skip next argument (the value) + } else { + print("Warning: --symbols must be between 1-10. Using default.") + } + } else { + print("Warning: --symbols requires a numeric value. Using default.") } - case "--max-length": + + case "--max-length", "-m": if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - maxLength = max(15, min(50, value)) // Clamp between 15-50 + if value >= 15 && value <= 50 { + maxLength = value + i += 1 // Skip next argument (the value) + } else { + print("Warning: --max-length must be between 15-50. Using default.") + } + } else { + print("Warning: --max-length requires a numeric value. Using default.") } - case "--test": + + case "--test", "-t": showTests = true - case "--copy": + + case "--copy", "-c": copyToClipboard = true + + case "--help", "-h": + showHelp = true + default: - break + if arg.hasPrefix("-") { + print("Warning: Unknown option '\(arg)'. Use --help for usage information.") + } } + + i += 1 } self.numNumbers = numNumbers @@ -78,6 +184,7 @@ struct PasswordConfig { self.maxLength = maxLength self.showTests = showTests self.copyToClipboard = copyToClipboard + self.showHelp = showHelp } } @@ -443,22 +550,58 @@ func runBasicTests() { * Shows all available options and example usage */ func showHelp() { - print("MeowPassword - Cat Dyanmic Secure Password Generator") - print("") - print("Usage: meowpass [options]") - print("") - print("Options:") - print(" --numbers N Number of random numbers to insert (1-10, default: 3-5)") - print(" --symbols N Number of symbols to insert (1-10, default: 2)") - print(" --max-length N Maximum password length (15-50, default: 25)") - print(" --test Run tests") - print(" --copy Copy password to clipboard (macOS only)") - print(" --help Show this help message") - print("") - print("Examples:") - print(" meowpass") - print(" meowpass --numbers 4 --symbols 3 --max-length 30") - print(" meowpass --test") + print(""" + MeowPassword - Cat-Based Secure Password Generator + + USAGE: + meowpass [OPTIONS] + + OPTIONS: + -n, --numbers N Number of random numbers to insert (1-10) + Default: 3-5 (randomly chosen) + + -s, --symbols N Number of symbols to insert (1-10) + Default: 2 + + -m, --max-length N Maximum password length (15-50) + Default: 25 + + -t, --test Run comprehensive tests + + -c, --copy Copy generated password to clipboard + (macOS only) + + -h, --help Show this help message + + DESCRIPTION: + MeowPassword generates secure, memorable passwords using cat names + combined with Kolmogorov complexity analysis. Each run displays a + random ASCII art cat for a delightful experience! + + Features: + • 1000+ embedded cat names (no external files needed) + • Random ASCII art cat on each run + • Configurable security parameters + • Kolmogorov complexity scoring + • Generates 5 candidates and selects the most secure + + EXAMPLES: + Generate a password with default settings: + meowpass + + Generate with custom parameters: + meowpass --numbers 4 --symbols 3 --max-length 30 + meowpass -n 5 -s 4 -m 35 + + Generate and copy to clipboard: + meowpass --copy + meowpass -c + + Run tests: + meowpass --test + meowpass -t + + """) } // MARK: - Main Program @@ -466,7 +609,7 @@ func main() { let config = PasswordConfig(arguments: CommandLine.arguments) // Check for help - if CommandLine.arguments.contains("--help") { + if config.showHelp { showHelp() return } @@ -477,10 +620,10 @@ func main() { return } - // Show ASCII art and title - print(lolcatArt) - print("Meow Password - Cat Name Based Secure Password Generator") - print("========================================================") + // Show random ASCII art and title + print(getRandomCatArt()) + print("\nMeow Password - Cat Name Based Secure Password Generator") + print("==========================================================") // Load cat names (now from embedded data) let catNames = loadCatNames() diff --git a/meowpass b/meowpass new file mode 100755 index 0000000000000000000000000000000000000000..e14ada851925253d252e450b5648b4fe47bcff89 GIT binary patch literal 115168 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 literal 0 HcmV?d00001 diff --git a/meowpass_production.swift b/meowpass_production.swift index 473ab48..ff00a2a 100644 --- a/meowpass_production.swift +++ b/meowpass_production.swift @@ -1,18 +1,5 @@ // MARK: - Embedded Cat Names Data (Production) let embeddedCatNames: [String] = [ - "A Cappella", - "A Cat", - "A Net (aka Nettie)", - "A'ja (pronounced \"Asia\")", - "A.C. (Alternating Current)", - "A.C. (Another Cat)", - "A.C. (Attack Cat)", - "A.C. (Attitude Cat)", - "A.D.D. (Attention Deficit Disorder)", - "A.J. (Angelina Jolie)", - "A.J. (Angelo Jo)", - "A.L.F. (Alien Life Form)", - "A.V.P. (Alien vs Predator)", "Aaargh", "Aaliyah", "Aaron", @@ -1000,6 +987,19 @@ let embeddedCatNames: [String] = [ "Barbarian", "Barbarino", "Barbeque", + "Barbi (after Barbara Streisand)", + "Barbossa", + "Barclay", + "Bardee", + "Barfly", + "Barfolemeow", + "Bariska", + "Barkley", + "Barky", + "Barley", + "Barley-Boo", + "Barn Cat", + "Barnabas (so named for Barnabas Collins of Dark Shadows)", ] // @@ -1012,28 +1012,91 @@ let embeddedCatNames: [String] = [ import Foundation // MARK: - ASCII Art and Lolcat Theme -let lolcatArt = """ - __ - _,-;'''`'-,. - _/', `; `; `\\ + +/** + * Collection of ASCII art cats for randomized display + * Each run selects a random cat to display, adding variety to the user experience + */ +let asciiCats = [ + // Original lolcat + """ + _,-;'''`' - . + _/', `; `; \\ , _..,-'' ' ` ` `\\ - | ;._.,,-' .| |,_ ,, `\\ + | ;._.,,-' .| |,_ ' ' `\\ | `;' ;' ;, `, ; | ' ' . \\ `; __` ,'__ ` , ` ; | ; \\ - ; (6_); (6_) ; | , \\ ' | / - ;; _,' ,. ` `, ' `-._ | __//_________ - ,;.=..`_..=.,' -' ,'' _,--''------'''' -_pb__\\,`"=,,,=="',___,,,-----'''----'_'_'_''-;'' ------------------------''''''\\ \\''''' ) /' - `\\`,,,___/__/'_____, - `--,,,--,-,'''\\ - __,,-' /' ` + ; (6_); (6_) ; | , \\ ' | + ;; _,6 ,. ` `, ' `-._ // + ,;.=..`_..=.,' -' ,'' _,// + _00_____`"=,,,=="',___,,,-----'''----'_'_'_''______00_ + Meow Password Generators of Secure Relavant + __,,-' /' /'_,,--'' | ( `' + """, + + // Sitting cat + """ + /\\_/\\ + ( o.o ) + > ^ < + /| |\\ + (_| |_) + + 🐱 MeowPassword - Purrfectly Secure! 🐱 + """, + + // Happy cat + """ + |\\__/,| (`\\ + |_ _ |.--.) ) + ( T ) / + (((^_(((/(((_/ + + 😸 MeowPassword - Happy to Help! 😸 + """, + + // Stretching cat + """ + /\\_/\\ + ( ^.^ ) _ + \\ " / ( ) + ( | | ) + (__d b__) + + 😺 MeowPassword - Stretching Your Security! 😺 + """, + + // Playful cat + """ + /\\_/\\ ___ + = o_o =_______ \\ \\ + __^ __( \\.__) ) + (@)<_____>__(_____)____/ + + 😻 MeowPassword - Playfully Secure! 😻 + """, + + // Sleeping cat + """ + |\\ _,,,---,,_ + ZZZzz /,`.-'`' -. ;-;;,_ + |,4- ) )-,_. ,\\ ( `'-' + '---''(_/--' `-'\\_) + + 😴 MeowPassword - Quietly Securing... 😴 + """ +] -""" - +/** + * Get a random ASCII art cat from the collection + * @return A randomly selected ASCII art string + */ +func getRandomCatArt() -> String { + return asciiCats.randomElement() ?? asciiCats[0] +} // MARK: - Configuration Structure /** @@ -1046,40 +1109,78 @@ struct PasswordConfig { let maxLength: Int // Maximum password length (15-50) let showTests: Bool // Whether to run test mode let copyToClipboard: Bool // Whether to copy result to clipboard + let showHelp: Bool // Whether to show help /** * Initialize configuration from command line arguments * @param arguments: Array of command line arguments */ init(arguments: [String]) { - var numNumbers = Int.random(in: 3...5) // Default range as specified in requirements - var numSymbols = 2 // Default value as specified in requirements - var maxLength = 25 // Default max length as specified in requirements + var numNumbers = Int.random(in: 3...5) // Default range: 3-5 numbers + var numSymbols = 2 // Default value: 2 symbols + var maxLength = 25 // Default max length: 25 characters var showTests = false var copyToClipboard = false + var showHelp = false // Parse command line arguments with validation - for i in 0..= 1 && value <= 10 { + numNumbers = value + i += 1 // Skip next argument (the value) + } else { + print("Warning: --numbers must be between 1-10. Using default.") + } + } else { + print("Warning: --numbers requires a numeric value. Using default.") } - case "--symbols": + + case "--symbols", "-s": if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - numSymbols = max(1, min(10, value)) // Clamp between 1-10 + if value >= 1 && value <= 10 { + numSymbols = value + i += 1 // Skip next argument (the value) + } else { + print("Warning: --symbols must be between 1-10. Using default.") + } + } else { + print("Warning: --symbols requires a numeric value. Using default.") } - case "--max-length": + + case "--max-length", "-m": if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - maxLength = max(15, min(50, value)) // Clamp between 15-50 + if value >= 15 && value <= 50 { + maxLength = value + i += 1 // Skip next argument (the value) + } else { + print("Warning: --max-length must be between 15-50. Using default.") + } + } else { + print("Warning: --max-length requires a numeric value. Using default.") } - case "--test": + + case "--test", "-t": showTests = true - case "--copy": + + case "--copy", "-c": copyToClipboard = true + + case "--help", "-h": + showHelp = true + default: - break + if arg.hasPrefix("-") { + print("Warning: Unknown option '\(arg)'. Use --help for usage information.") + } } + + i += 1 } self.numNumbers = numNumbers @@ -1087,6 +1188,7 @@ struct PasswordConfig { self.maxLength = maxLength self.showTests = showTests self.copyToClipboard = copyToClipboard + self.showHelp = showHelp } } @@ -1141,13 +1243,12 @@ func createBasePhrase(from catNames: [String], maxLength: Int) -> String { // Ensure phrase is between 15 and maxLength characters as per specifications if joinedNames.count < 15 { // If too short, try adding more names to meet minimum length requirement - let additionalNames = selectRandomCatNames(from: catNames, count: 2) + let additionalNames = selectRandomCatNames(from: catNames, count: 5) let extended = joinedNames + additionalNames.joined() return String(extended.prefix(maxLength)) } else if joinedNames.count > maxLength { return String(joinedNames.prefix(maxLength)) } - return joinedNames } @@ -1194,7 +1295,7 @@ func insertRandomNumbers(into password: inout [Character], count: Int) { * @param count: Number of letters to replace with symbols (typically 2) */ func replaceLettersWithSymbols(in password: inout [Character], count: Int) { - let symbols = "!@#$%^&*()-_=+[]{}|;:,.<>?" + let symbols = "!@#$%^&*()-_=+[]{;:.<>?" let letterIndices = password.enumerated().compactMap { index, char in char.isLetter ? index : nil } @@ -1228,18 +1329,21 @@ func removeRepeatingLetters(in password: inout [Character]) { // MARK: - Complete Password Generation func generateSecurePassword(from catNames: [String], config: PasswordConfig) -> String { // Step 1: Select 3-5 cat names - let nameCount = Int.random(in: 3...5) + let nameCount = Int.random(in: 2...6) let selectedNames = selectRandomCatNames(from: catNames, count: nameCount) // Step 2: Create base phrase let basePhrase = createBasePhrase(from: selectedNames, maxLength: config.maxLength) - var password = Array(basePhrase.lowercased()) - + var password = Array( + basePhrase + .lowercased() + .replacingOccurrences(of: " ", with: "") +) // Step 3: Apply security transformations randomlyCapitalizeLetters(in: &password, count: 3) insertRandomNumbers(into: &password, count: config.numNumbers) replaceLettersWithSymbols(in: &password, count: config.numSymbols) - removeRepeatingLetters(in: &password) + // removeRepeatingLetters(in: &password) // Ensure final password doesn't exceed max length if password.count > config.maxLength { @@ -1334,11 +1438,11 @@ func analyzeComplexity(of password: String) -> (score: Double, analysis: String) let analysis = """ Meow Complexity Analysis: - Password: \(password) - - Tail Size: \(password.count) characters + - Tail Size: \(password.count) cm - Ball of Yarn Entropy: \(String(format: "%.3f", entropy)) bits - Mashing Resistance: \(String(format: "%.1f", compressionRatio * 100))% - Shiny Foil Ball Uniqueness: \(String(format: "%.1f", patternComplexity * 100))% - - Catnip Diversity: \(String(format: "%.1f", diversity * 100))% + - Percent of Organic NonGMO Catnip: \(String(format: "%.1f", diversity * 100))% - Overall Relavency: \(String(format: "%.2f", finalScore))/10.0 """ @@ -1382,15 +1486,15 @@ func testLoadCatNames() { print("\nTesting Cat Name Loading...") let catNames = loadCatNames() - assert(!catNames.isEmpty, "Should meow load cat names from embedded data") - assert(catNames.count > 100, "Should load a substantial meow number of cat names") + assert(!catNames.isEmpty, "Should Meow load cat names from embedded data") + assert(catNames.count > 100, "Should load a substantial Meow number of cat names") let nonEmptyNames = catNames.filter { !$0.isEmpty } - assertEqual(nonEmptyNames.count, catNames.count, "All loaded meow names should be non-empty") + assertEqual(nonEmptyNames.count, catNames.count, "All Meow Meow loaded names should be non-empty") // Test consistency of embedded loading let embeddedNames = loadCatNames(from: nil) - assertEqual(embeddedNames.count, catNames.count, "Should return same meow count for embedded names") + assertEqual(embeddedNames.count, catNames.count, "Should return same Meow count for embedded names") print("Cat names loaded meow: \(catNames.count)") print("First few names: \(Array(catNames.prefix(5)))") @@ -1401,7 +1505,7 @@ func testLoadCatNames() { * Validates that passwords meet all security requirements */ func testCompletePasswordGeneration() { - print("\nTesting Complete meow Password Generation...") + print("\nTesting MeowMeow Complete Password Generation...") let testNames = ["Fluffy", "Whiskers", "Shadow", "Mittens", "Tiger", "Luna", "Max", "Bella"] let config = PasswordConfig(arguments: []) @@ -1411,15 +1515,15 @@ func testCompletePasswordGeneration() { print("Generated password \(i): \(password)") - assert(password.count >= 10, "Password meow should be at least 10 characters") - assert(password.count <= config.maxLength + 10, "Password should not greatly meow exceed max length") + assert(password.count >= 10, "MeowPassword should be at least 10 characters") + assert(password.count <= config.maxLength + 10, "Password should not greatly exceed Meow max length") let hasNumbers = password.contains { $0.isNumber } let hasLetters = password.contains { $0.isLetter } let hasSymbols = password.contains { !$0.isLetter && !$0.isNumber } assert(hasNumbers, "Password should contain meow numbers") - assert(hasLetters, "Password should contain letters") + assert(hasLetters, "Password meow should contain letters") assert(hasSymbols, "Password should contain meow symbols") let (score, analysis) = analyzeComplexity(of: password) @@ -1433,13 +1537,13 @@ func testCompletePasswordGeneration() { * Executes comprehensive testing of all core functionality */ func runBasicTests() { - print("Running Basic meow MeowPassword Tests") + print("Running Basic MeowPassword Tests") print("=================================") testLoadCatNames() testCompletePasswordGeneration() - print("\nBasic Tests meow Complete!") + print("\nMeow Basic Tests Complete!") print("=====================") } @@ -1450,22 +1554,58 @@ func runBasicTests() { * Shows all available options and example usage */ func showHelp() { - print("MeowPassword - Lolcat-themed secure password generator") - print("") - print("Usage: meowpass [options]") - print("") - print("Options:") - print(" --numbers N Number of random numbers to insert (1-10, default: 3-5)") - print(" --symbols N Number of symbols to insert (1-10, default: 2)") - print(" --max-length N Maximum password length (15-50, default: 25)") - print(" --test Run tests") - print(" --copy Copy password to clipboard (macOS only)") - print(" --help Show this help message") - print("") - print("Examples:") - print(" meowpass") - print(" meowpass --numbers 4 --symbols 3 --max-length 30") - print(" meowpass --test") + print(""" + MeowPassword - Cat-Based Secure Password Generator + + USAGE: + meowpass [OPTIONS] + + OPTIONS: + -n, --numbers N Number of random numbers to insert (1-10) + Default: 3-5 (randomly chosen) + + -s, --symbols N Number of symbols to insert (1-10) + Default: 2 + + -m, --max-length N Maximum password length (15-50) + Default: 25 + + -t, --test Run comprehensive tests + + -c, --copy Copy generated password to clipboard + (macOS only) + + -h, --help Show this help message + + DESCRIPTION: + MeowPassword generates secure, memorable passwords using cat names + combined with Kolmogorov complexity analysis. Each run displays a + random ASCII art cat for a delightful experience! + + Features: + • 1000+ embedded cat names (no external files needed) + • Random ASCII art cat on each run + • Configurable security parameters + • Kolmogorov complexity scoring + • Generates 5 candidates and selects the most secure + + EXAMPLES: + Generate a password with default settings: + meowpass + + Generate with custom parameters: + meowpass --numbers 4 --symbols 3 --max-length 30 + meowpass -n 5 -s 4 -m 35 + + Generate and copy to clipboard: + meowpass --copy + meowpass -c + + Run tests: + meowpass --test + meowpass -t + + """) } // MARK: - Main Program @@ -1473,7 +1613,7 @@ func main() { let config = PasswordConfig(arguments: CommandLine.arguments) // Check for help - if CommandLine.arguments.contains("--help") { + if config.showHelp { showHelp() return } @@ -1484,10 +1624,10 @@ func main() { return } - // Show ASCII art and title - print(lolcatArt) - print("MEOWPASSWORD - Lolcat Secure Password Generator") - print("===============================================") + // Show random ASCII art and title + print(getRandomCatArt()) + print("\nMeow Password - Cat Name Based Secure Password Generator") + print("==========================================================") // Load cat names (now from embedded data) let catNames = loadCatNames() @@ -1510,7 +1650,7 @@ func main() { candidates.append((password, score, analysis)) print("Candidate \(i): \(password)") - print(" Complexity meow Score: \(String(format: "%.2f", score))/10.0") + print(" Meow Score: \(String(format: "%.2f", score))/10.0") print("") } @@ -1520,7 +1660,7 @@ func main() { return } - print("MOST SECURE PASSWORD meow SELECTED:") + print("MOST SECURE PASSWORD MEOW SELECTED:") print("Password: \(bestCandidate.password)") print("Final Meow Score: \(String(format: "%.2f", bestCandidate.score))/10.0") print("") From 9a8b7bbfb49476bbd6b17b1bf64c6c63bc782a0b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:45:56 +0000 Subject: [PATCH 3/7] Update README with detailed documentation for new features Co-authored-by: SpaceTrucker2196 <641430+SpaceTrucker2196@users.noreply.github.com> --- README.md | 103 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 92 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index f28adc4..ab9f697 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # MeowPassword -A command-line utility that generates secure, phrase-based passwords using cat names and Kolmogorov complexity analysis with a lolcat theme. +A command-line utility that generates secure, phrase-based passwords using cat names and Kolmogorov complexity analysis with a delightful cat theme. ## Features +- **🎨 Random ASCII Art Cats** - Displays a different adorable cat on each run for a delightful experience - **1000+ Embedded Cat Names** - No external file dependencies - **Secure Password Generation** - Creates passwords from 3-5 cat names with configurable length (15-50 characters) - **Advanced Security Transformations**: @@ -12,7 +13,7 @@ A command-line utility that generates secure, phrase-based passwords using cat n - Configurable symbols replacing letters (1-10, default: 2) - Removes repeating letters with random digits - **Kolmogorov Complexity Analysis** - Evaluates and selects the most secure password from 5 candidates -- **Lolcat Theme** - ASCII art and professional interface without emojis +- **Modern CLI Arguments** - Support for both long (`--option`) and short (`-o`) option formats - **Configurable Parameters** - Control numbers, symbols, and maximum length - **Clipboard Support** - Copy to clipboard (macOS only) - **Self-Contained Executable** - Single binary with embedded data @@ -44,43 +45,123 @@ meowpass ## Usage -### Generate Password +### Generate Password (Default Settings) ```bash meowpass ``` +Each run displays a random ASCII art cat! The program will: +1. Show a random cat ASCII art (6 different cats available) +2. Generate 5 password candidates using cat names +3. Analyze each candidate's security using Kolmogorov complexity +4. Select and display the most secure password + ### Generate with Custom Parameters + +Using long options: ```bash meowpass --numbers 4 --symbols 3 --max-length 30 ``` +Using short options: +```bash +meowpass -n 4 -s 3 -m 35 +``` + +Mix and match: +```bash +meowpass -n 5 --symbols 4 -m 40 +``` + ### Run Tests ```bash meowpass --test +# or +meowpass -t ``` ### Copy to Clipboard (macOS) ```bash meowpass --copy +# or +meowpass -c ``` ### Show Help ```bash meowpass --help +# or +meowpass -h ``` +## ASCII Art Feature +MeowPassword includes 6 different ASCII art cats that are randomly displayed each time you run the program: +- 🎨 Original detailed lolcat +- 🐱 Sitting cat +- 😸 Happy cat +- 😺 Stretching cat +- 😻 Playful cat +- 😴 Sleeping cat + +Each cat comes with its own personality and makes password generation more enjoyable! ## Command-Line Options -| Option | Description | Default | -|--------|-------------|---------| -| `--numbers N` | Number of random numbers to insert (1-10) | 3-5 | -| `--symbols N` | Number of symbols to insert (1-10) | 2 | -| `--max-length N` | Maximum password length (15-50) | 25 | -| `--test` | Run comprehensive tests | - | -| `--copy` | Copy password to clipboard (macOS only) | - | -| `--help` | Show help message | - | +MeowPassword supports both long and short option formats for convenience: + +| Long Option | Short | Description | Default | +|-------------|-------|-------------|---------| +| `--numbers N` | `-n N` | Number of random numbers to insert (1-10) | 3-5 (random) | +| `--symbols N` | `-s N` | Number of symbols to insert (1-10) | 2 | +| `--max-length N` | `-m N` | Maximum password length (15-50) | 25 | +| `--test` | `-t` | Run comprehensive tests | - | +| `--copy` | `-c` | Copy password to clipboard (macOS only) | - | +| `--help` | `-h` | Show detailed help message | - | + +### Option Details + +**Numbers (`-n`, `--numbers`)** +- Controls how many random digits (0-9) are inserted into the password +- Range: 1-10 +- Default: Randomly chosen between 3-5 for variety +- Example: `-n 4` inserts exactly 4 random digits + +**Symbols (`-s`, `--symbols`)** +- Controls how many special characters replace letters +- Range: 1-10 +- Default: 2 +- Available symbols: `!@#$%^&*()-_=+[]{;:.<>?` +- Example: `-s 3` replaces 3 letters with random symbols + +**Max Length (`-m`, `--max-length`)** +- Sets the maximum length of the generated password +- Range: 15-50 characters +- Default: 25 +- The password will not exceed this length +- Example: `-m 30` limits password to 30 characters + +### Usage Examples + +Generate a short, simple password: +```bash +meowpass -n 2 -s 1 -m 20 +``` + +Generate a long, complex password: +```bash +meowpass --numbers 8 --symbols 6 --max-length 45 +``` + +Generate and immediately copy to clipboard (macOS): +```bash +meowpass -n 5 -s 4 -c +``` + +View help for all options: +```bash +meowpass -h +``` ## Build System From 786dae1fd82cb4589ee997a589c47f322a23583c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:46:29 +0000 Subject: [PATCH 4/7] Add .gitignore and remove build artifacts from repository Co-authored-by: SpaceTrucker2196 <641430+SpaceTrucker2196@users.noreply.github.com> --- .gitignore | 11 + embedded_production.swift | 1003 ---------------------- meowpass | Bin 115168 -> 0 bytes meowpass_production.swift | 1696 ------------------------------------- 4 files changed, 11 insertions(+), 2699 deletions(-) create mode 100644 .gitignore delete mode 100644 embedded_production.swift delete mode 100755 meowpass delete mode 100644 meowpass_production.swift diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8c5d07d --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Build artifacts +meowpass +meowpass_production.swift +meowpass_combined.swift +embedded_production.swift + +# Temporary files +*.swp +*.swo +*~ +.DS_Store diff --git a/embedded_production.swift b/embedded_production.swift deleted file mode 100644 index b1a84fe..0000000 --- a/embedded_production.swift +++ /dev/null @@ -1,1003 +0,0 @@ -// MARK: - Embedded Cat Names Data (Production) -let embeddedCatNames: [String] = [ - "Aaargh", - "Aaliyah", - "Aaron", - "Ab", - "Ababa", - "Abba", - "Abba-daba", - "Abba-Goo", - "Abbey", - "Abbey Roads", - "Abbi-girl", - "Abbie", - "Abbot", - "Abbott", - "Abby", - "Abby-girl", - "Abby-normal", - "Abbykitty", - "Abcat", - "Abdul", - "Abe", - "Abednego", - "Abegale", - "Abel", - "Abelard", - "Abendigo", - "Abercrombie", - "Aberdeen", - "Abi", - "Abigail", - "Abigail Von Buttons", - "Abilene", - "Able", - "Abner", - "Abra", - "Abra (and Cadabra?)", - "Abracadabra", - "Abraham", - "Abraxas", - "Abrico", - "Abs", - "Absinthe", - "Absolon (from Chaucer's \"Cabterbury Tales\")", - "Absolut (named after the Swedish vodka)", - "Abstraction", - "Abu", - "Abubu", - "Aby", - "Abyss", - "Acat", - "Ace", - "Ace Baby Toadflakes", - "Ace Of Spades", - "Acey", - "Achille", - "Achilles (Greek mythology: Champion of the Greeks in the Trojan War)", - "Acis", - "Ackerly", - "Acorn", - "Acrolina", - "Acroy", - "Action", - "Ada", - "Ada Jane", - "Adacat", - "Adagio", - "Adakin Skywalker", - "Adam", - "Adam And Eve", - "Adams", - "Adcom", - "Addie", - "Addis", - "Addison", - "Addy", - "Addy-Tood", - "Adelaida", - "Adelaide", - "Ademma", - "Adidas", - "Adirondak", - "Adiza", - "Adlai", - "Adler", - "Admetus", - "Admiral", - "Adobe", - "Adolph", - "Adom", - "Adonis", - "Adrian", - "Adriatic", - "Adrock", - "Advance Cat", - "Aegyptos", - "Aelgifa (The Elven Gift - Old English)", - "Aelurus (Egyptian mythology, sacred cat)", - "Aenias", - "Aeolus (Greek God of the Wind)", - "Aerope", - "Aeros", - "Aesop", - "Aethelwyn", - "Aethra", - "Affinity", - "Afikoman", - "Afonia", - "Africa", - "African Queen", - "African-Americat", - "Afrikan", - "Afrikat", - "Agadore", - "Agamemnon", - "Agape (from the New Testament meaning unconditional love)", - "Agassi", - "Agatha", - "Agatha Christie", - "Agatha Christy", - "Agent Z", - "Aggedor", - "Aggie", - "Agili-tree", - "Agility", - "Agima", - "Agitador (Spanish for \"troublemaker\")", - "Agnes", - "Agrippina", - "Agustus", - "Ah Kinchil (Maya mythology: the sun god)", - "Ah Puch (Maya mythology: the god of death)", - "Ah-choo!", - "Ahab", - "Ahau Chamahez (Maya mythology: one of two gods of medicine)", - "Ahi", - "Ahlia", - "Ahmakiq (Maya mythology: god of agriculture)", - "Ahura Mazda", - "Aida", - "Aidan", - "Aiiy", - "Aikido", - "Aiko", - "Aimee", - "Air", - "Air Einstein", - "Air Raid", - "Airhead", - "AJ", - "Aja", - "Ajah (priesthood in fantasy games)", - "Ajax", - "Akaia", - "Akamai (Hawaiian for \"smart\")", - "Akasha", - "Akasha (character in Anne Rice's vampire chronicles)", - "Akasha (Queen Mother Vampire from Anne Rice's \"Queen of the Damned\")", - "Akbar", - "Akeel", - "Akeel The One Eyed", - "Akeela", - "Akeem", - "Akeisha", - "Aker (Egyptian mythology: the lion who guards the gates of dawn)", - "Akhen", - "Akhushtal (Maya mythology: goddess of childbirth)", - "Aki", - "Akim", - "Akira", - "Akita (Japanese breed of dog)", - "Aktil (after the mouse in \"Aktil's Big Swim\" children's book by Inga Moore)", - "Aku", - "Akula", - "Akuna", - "Al", - "Al Bundy", - "Al Capone", - "Al Pacino (after the actor)", - "Alabama", - "Alabaster", - "Aladara", - "Aladdin", - "Alakazam!", - "Alan", - "Alani", - "Alanna", - "Alaska", - "Alastair", - "Albatross", - "Albee (after the playwright Edward Albee)", - "Albert", - "Albert Einstein", - "Albert Oscelish Loudpurr", - "Alberta", - "Alberto", - "Albie-Capone", - "Albrecht", - "Alcatraz", - "Alchemy", - "Alcuin", - "Aldebaran", - "Aldo", - "Aldo Scalicki", - "Aldous (after the British author, Aldous Huxley)", - "Alecia", - "Alegra", - "Alegria Noah", - "Aleister", - "Aleksandra", - "Aleksei", - "Aleta", - "Alex", - "Alex P. Kitten", - "Alexa", - "Alexander", - "Alexander Blitzen Cody", - "Alexander Blue", - "Alexander-The-Great", - "Alexandra", - "Alexandra The Great", - "Alexandra The Grey", - "Alexandria", - "Alexandroupolis", - "Alexia", - "Alexis", - "Alf", - "Alfa Skywalker", - "Alfalfa", - "Alfanzo", - "Alfie", - "Alfie Moon (after the character in the \"Eastenders\" tv-series)", - "Alfiepet", - "Alfonzo", - "Alfred", - "Alfred \"Lord\" Tennyson", - "Alfreda", - "Algebra", - "Alger", - "Algernon", - "Algy", - "Ali", - "Ali Baba", - "Ali Kat", - "Ali Khat", - "Alia", - "Alibi", - "Alice", - "Alice B. Toe-Claws", - "Alice B. Toklas", - "Alien", - "Alika", - "Aliki", - "Alimony", - "Alina", - "Alise", - "Alistair", - "Alistair Jones", - "Alix", - "Aliza", - "Alize", - "All This and Heaven Too", - "Alla", - "Alladin", - "Allan", - "Allball", - "Allegra", - "Allegro", - "Allergen", - "Alley", - "Alley McClaw", - "Allie", - "Allie Cat", - "Allie Marie", - "Allison", - "Allison Jo", - "Allred", - "Allspice", - "Allura", - "Ally", - "Alma (Spanish for soul)", - "Almanzo", - "Almond Roca", - "Almost Paradise (song \"Almost Paradise\")", - "Aloha", - "Aloka", - "Alokee", - "Alomar", - "Alonzo", - "Alouiscious", - "Alowicious", - "Aloysius", - "Alpaca", - "Alpha", - "Alphie", - "Alpine", - "Alsatia", - "Althea", - "Alton", - "Aluminum", - "Alvin", - "Alwix", - "Alyssa", - "Alyx", - "Am-fats", - "Ama", - "Amable", - "Amadaeus", - "Amadala", - "Amadeus", - "Amadeus (after Mozart)", - "Amalthea", - "Amanda", - "Amandalina", - "Amanita", - "Amaretto", - "Amazing Grace", - "Amazon", - "Amba", - "Ambar", - "Ambassador", - "Amber", - "Amberwavesoffur", - "Ambidextrous", - "Ambiguity", - "Ambiguous Eunuch FarFromScrewin", - "Amble", - "Ambriel (Zodiac, guardian angel of Gemini)", - "Ambrose", - "Ambrose Ambrogo", - "Ambrose Bugger-Boo Pendragon", - "Ambrosia", - "Ambrosia Jean Marie", - "Ambrosious", - "Ambush", - "Amby", - "Amby (one of the feminine forms of Ambrose)", - "Amelia", - "Amelia Air-Cat", - "Amelia Earhart", - "Amelie (after the movie)", - "Amen-Ra", - "Amenhotep", - "America", - "American Pie", - "Americat", - "Amerito", - "Amethyst", - "Ami", - "Amida", - "Amidala", - "Amie", - "Amiga", - "Amigo", - "Amir", - "Amira (Female Arabian name, meaning \"princess\")", - "Ammie", - "Ammo", - "Amon", - "Amor (Spanish for \"love\")", - "Amore", - "Amos", - "Amour (French for \"love\")", - "Ampersand", - "Amphion", - "Amsterdam", - "Amtrak", - "Amulet", - "Amway", - "Amy", - "Amy Budd", - "Amydala", - "Ana", - "Ana-Hata", - "Anaakii (Japanese for \"anarchy\")", - "Anabel", - "Anabell", - "Anabelle", - "Anacharsis", - "Anaconda", - "Anais", - "Anakin", - "Anamokit (Indian for \"Little Thunder\")", - "Anastasia", - "Anastasia (after the Russian princess)", - "Anatevka", - "Anatole", - "Anatolius", - "Anatoly", - "Anchor", - "Anchors Away", - "Anchovey", - "Anchovy", - "Ancona", - "Andaconda", - "Andalusia", - "Anderson", - "Andi", - "Andie", - "Andilay, Andilay!", - "Andorra", - "Andouille (after the spicy Cajun sausage)", - "Andre", - "Andrea", - "Andrea Majorie", - "Andreas", - "Andrew", - "Andrew Elliott James David", - "Andrew Jackson", - "Android", - "Andromeda", - "Andy", - "Andy Rooney", - "Anfurnee", - "Angel", - "Angel Boy", - "Angel Cookie", - "Angel Eyes", - "Angel Marie", - "Angela", - "Angelee", - "Angelface", - "Angelica", - "Angelika", - "Angelika (after Angelika Foster-Gooding)", - "Angelina", - "Angeline", - "Angelo", - "Angelo Jo", - "Angie", - "Angstrom", - "Angus", - "Angus MacDoogal", - "Angus MacGuyver", - "Angus Pangus", - "Angus Suzy-Socks", - "Angy Poo", - "Ani", - "Ani Difranco", - "Anika", - "Anikki", - "Animal", - "Animophat", - "Anina", - "Anishka", - "Anita Blake (after the Laurel K. Hamilton novels)", - "Anitra", - "Ankelfraeseren", - "Ankle Biter", - "Ankle Dancer", - "Ann", - "Ann Jelly", - "Ann-Margaret", - "Anna", - "Anna-lynn", - "Annabel", - "Annabelle", - "Annakin (after Annakin Skywalker in the Star Wars movies)", - "Annapolis", - "Annapurna", - "Annelee", - "Annette", - "Annible", - "Annie", - "Annie Banannie", - "Annie Marie", - "Annie Pearl", - "Anniey", - "Anonka", - "Anonymous", - "Anouk (after Anouk Aimee)", - "Anouk Manouk", - "Anowa", - "Ansel", - "Ansel Adams", - "Ansel Catams", - "Antar (after a character in Arabic literature known for his bravery)", - "Antarctica", - "Antares", - "Antelope", - "Antha", - "Anthea", - "Anthem", - "Anthony", - "Anthrax P.H. (Poo Head) Zeppelin", - "Antic", - "Antigone", - "Anton", - "Anton B. Stanton", - "Antonia", - "Antonio", - "Antonio Banderas", - "Antony", - "Antony And Cleopatra", - "Antos", - "Antryg", - "Anubis", - "Anxiety", - "Anya", - "Apache", - "Aphrodisia", - "Aphrodite", - "Aphrodite, The Kitten Of Love", - "Apie", - "Apocalypse", - "Apocalypse Now", - "Apogee", - "Apollo", - "Apollo (the mythological god of light and truth)", - "Apollonia", - "Apothecary", - "Applaton", - "Apple", - "Apple Dog", - "Apple Pie", - "Applejack", - "Applesauce", - "Appleton", - "Appollinia", - "Apprentice", - "Appy", - "Apri", - "Apricot", - "April", - "Aptos", - "Apu", - "Aput", - "Apuu", - "Aqua", - "Aqua Girl", - "Aquarius", - "Ar-too", - "Arachne", - "Aragorn", - "Araine", - "Aramer", - "Aramis (one of the three muskateers)", - "Arapaho", - "Arbitration", - "Arbuckle (after the silent film comedian)", - "Arbutis", - "Arby", - "Archibald", - "Archie", - "Archie Bunker", - "Archima", - "Archimedes", - "Ardal", - "Area 51", - "Arejay Joseph (Arejay from the band Halestorm)", - "Arendal", - "Ares", - "Arf", - "Arfie", - "Arfur", - "Argent", - "Argo", - "Argon", - "Argos", - "Argus", - "Argyle", - "Ari", - "Aria", - "Ariadne (Greek mythology, daughter of King Minos of Crete)", - "Ariel", - "Ariel (from the movie \"The Little Mermaid\")", - "Ariela (Hebrew for \"female derivative of lioness\")", - "Arielle", - "Aries", - "Arietty", - "Arioch", - "Arista Kat", - "AristoCat", - "Aristophanes", - "Aristotle", - "Arizona", - "Arlene", - "Arlington", - "Arlo", - "Arly", - "Armageddon", - "Armani", - "Armie", - "Arms", - "Arms Von Hirshstein", - "Armstrong", - "Arnie", - "Arnold", - "Arnold Schwarzenegger", - "Arnold Shortzenlegger", - "Arpeggio", - "Arquette", - "Arriana", - "Arrow", - "Arsenic", - "Artemis", - "Artemis (Greek goddess of hunting and moon)", - "Artera", - "Artesian", - "Artful Dodger", - "Arthur", - "Arthur Ambrosius", - "Arti", - "Artie", - "Arty", - "Arvo", - "Arwen", - "Arwen Renaissance", - "Arzu (Turkish for \"desire\")", - "Asbury (after Asbury Park, NJ)", - "ASCII (computer term)", - "Ash", - "Ash-butt", - "Asha", - "Ashanti", - "Ashben", - "Asheema", - "Asher", - "Ashes", - "Ashes Too Ashes", - "Ashford", - "Ashika", - "Ashke", - "Ashleigh", - "Ashley", - "Ashley Cat", - "Ashley Olsen", - "Ashley Wilkes", - "Ashli", - "Ashlyn", - "Ashrei (Hebrew for \"happy\")", - "Ashton", - "Ashur", - "Asia", - "Asia Major", - "Asia Minor", - "Asimov", - "Asja", - "Aska", - "Asker", - "Askhim", - "Aslan", - "Asparagus", - "Aspen", - "Asphalt", - "Aspirin", - "Asscaught", - "Asset", - "Asta", - "Astarael", - "Astarte", - "Aster", - "Asterix", - "Asteroid", - "Asti", - "Asti Spumonte", - "Astor", - "Astra", - "Astro", - "Astroid", - "Astrology", - "Astroman", - "Astrophe", - "Asylum", - "Asymptote", - "Atair", - "Atari", - "Ateesha", - "Athalia", - "Athena (Goddess of War)", - "Athene", - "Athens", - "Athinai", - "Atilla", - "Atinna", - "Atlantic", - "Atlantis", - "Atlas", - "Atom", - "Atossa", - "Attacker", - "Atte", - "Atti (short for attitude)", - "Atticus", - "Attila", - "Attitude", - "Atude", - "Aubergine", - "Aubrey", - "Audacity", - "Audball", - "Auden (named after the poet W.H. Auden)", - "Audie", - "Audio", - "Auditor", - "Audrey", - "Audrey Hepburn", - "Audrey III", - "Audubon (after John James Audubon)", - "Augger-Dogger", - "Auggie", - "Auggie Doggie", - "Auggie or Augie", - "Augie", - "August", - "August Nights", - "Augusta", - "Auguste Eighth Month.", - "Augustiko", - "Augustin", - "Augustina", - "Augustine \"Gus\" Hoover", - "Augustus", - "Aunt Esther", - "Aunt Jemima", - "Aunt Kat", - "Aunt Margaret", - "Auntie Stella", - "Aura", - "Aureim", - "Aureole", - "Aurey", - "Aurora", - "Aurora Borealis", - "Aussie", - "Austin", - "Austin Meowers", - "Austin Powers", - "Autobahn", - "Autumn", - "Ava", - "Avagadros (after the mathmetician)", - "Avail", - "Avalanche", - "Avalon", - "Avanti", - "Avatar", - "Avery", - "Avis", - "Avocado", - "Avril", - "Awesie", - "Awesome Kitty", - "Awestruck", - "Awk", - "Axel", - "Axl", - "Axl Rose", - "Axle", - "Axon", - "Ayame (Japanese for \"iris\")", - "Ayesha (3rd wife of Mohammed)", - "Ayisha", - "Ayla", - "Aylin", - "Aymaya (Japanese for \"night rain\")", - "Ayra", - "Ayreh", - "Ayun (As Yet Un-named)", - "Azar", - "Azark", - "Azazel (means \"desert demon\", Bible: Leviticus)", - "Azil", - "Aziza (\"precious one\" in a few different languages)", - "Azmodius", - "Azour Mavreen", - "Azrael", - "Azreal", - "Aztec", - "Azure", - "Azzuki", - "Azzul", - "B-52", - "B-dee", - "B-Girl", - "B-Pal", - "B.A.", - "B.A. (Bad Attitude!)", - "B.A. Barrakus", - "B.B.", - "B.B. Kat", - "B.B. King", - "B.B. Kingcat", - "B.C.", - "B.C. (\"Buttercup\")", - "B.C. (Big Cat)", - "B.D. (\"Black Douglas\", after the feisty Scottish warrior)", - "B.D. (Bad Boy)", - "B.D. (Brain-Dead)", - "B.D.K. (\"Buddy D. Katt\")", - "B.e.r.u. (Banana Emergency Recovery Unit, also Luke Skywalkers aunt and an island in the Pacific Ocean)", - "B.G.", - "B.I.F. (Butt In Face)", - "B.J.", - "B.J. (Tom Robbin's character Bonanza Jellybean)", - "B.K.", - "B.M.W. (Black, Mahogany & White)", - "B.O.T. (Big Old Tom)", - "B.u.d. (\"Big Ugly and Dumb\")", - "B.W.", - "B.W. (Black White)", - "BA", - "Ba Shaleek Alshain", - "Ba' Boy", - "Baba", - "Babaganoush", - "Babalou (after the tv show)", - "Babar", - "Babbaboombanorsh", - "Babbit", - "Babbitt", - "Babe", - "Babee", - "Babers", - "Babester", - "Babette", - "Babirusa", - "Baboo", - "Baboon Butt", - "Babricus", - "Babs (after Barbra Streisand)", - "Babsy", - "Babuji Braveheart", - "Babur", - "Babushka", - "Baby", - "Baby Bear", - "Baby Beauty", - "Baby Boogens", - "Baby Boy", - "Baby Bug", - "Baby Butterscotch", - "Baby Cakes", - "Baby Cat", - "Baby Doe (sort of a Jane Doe thang)", - "Baby Dog", - "Baby Doll", - "Baby Doo II", - "Baby Dumpling", - "Baby Girl", - "Baby Grey.", - "Baby Guiness", - "Baby Head", - "Baby Jane", - "Baby Jesus", - "Baby Ki'n", - "Baby Kitten", - "Baby Kitty", - "Baby Kitty And Trouble", - "Baby Mimi", - "Baby Nesbit", - "Baby Ruth", - "Baby Seebs", - "Baby Spice", - "Baby Weeeeeeezel the little Frrrrrench Chat", - "Baby-Boogs", - "Baby-Doll", - "Baby-Doo", - "Baby-Face", - "Baby-Kitty", - "Baby-Roca (named after two favorite candies, Baby Ruth and Almond Roca)", - "Babycakes", - "Babycat", - "Babydoll", - "Babyface", - "Babygray", - "Babykins", - "Babyman", - "Babyshoes", - "Babytat", - "Bacabs (Maya mythology: the canopic gods)", - "Bacall", - "Bacardi", - "Baccarat", - "Bacchos", - "Bacchus", - "Bacci (pronounced: Baa-chie; Italian for \"kisses\")", - "Bach", - "Baci", - "Back", - "Backstreet Blues", - "Backstreet Kitty", - "Bacon", - "Bad Bad Boy", - "Bad Bad Leroy Brown", - "Bad Bess", - "Bad Cat", - "Bad Kitty", - "Bad Luck", - "Bada", - "Badger", - "Badjun", - "Badlands", - "Badness", - "BadShad", - "Baeki", - "Bafftub", - "Bag", - "Bag Lady", - "Bag O'Cat", - "Bagel", - "Baggage", - "Baggi pants", - "Baggins", - "Baggy", - "Bagheera", - "Baghera (black panther in \"The Jungle Book\")", - "Baghreeah", - "Bagira", - "Bagoas", - "Bagpuss", - "Baguette", - "Bahama Mama", - "Bailey", - "Bailey Emerald Isle", - "Bailey's Irish Cream (50% sweetness and 50% nuts)", - "Bain", - "Bainbridge", - "Baja", - "Bajan", - "Baka (Japanese insult, \"idiot\", \"moron\", \"fool\", \"dimwit\")", - "Baka-Neko", - "Baker", - "Baker (after the mountain in North Carolina, USA)", - "Baksheesh (means \"bribe\" in Arabic)", - "Balaena", - "Balbina", - "Balboa", - "Balder (Viking mythology: The God of light)", - "Balderdash", - "Baldric", - "Baldrick", - "Baldur", - "Baldur The Fairly Slow", - "Baldwin", - "Baldy", - "Bali", - "Balik", - "Balin", - "Balki", - "Ballbearing Mouse Trap", - "Ballerina", - "Ballou", - "Ballsy", - "Baloo", - "Balraj", - "Balthazar", - "Balzac", - "Bam", - "Bam-Bam", - "Bama", - "Bambalona", - "Bambam", - "Bambi", - "Bambina", - "Bambino", - "Bamboo", - "Bamboozler", - "Bams", - "Bamse", - "Banana Cabana", - "Banana Peel", - "Band-Aid", - "Bandanna", - "Bandit", - "Bandito", - "Bang (reference to the Unix ! symbol)", - "Bangladesh", - "Bangle", - "Bangui (capital of Central African Republic)", - "Banjer", - "Banjo", - "Banjo Blue", - "Bannana Fanna", - "Bannenay", - "Banner", - "Banquet", - "Banquo", - "Banshee", - "Banzai", - "Bar Room", - "Baracca", - "Barbara", - "Barbara Bush", - "Barbarella (after the Jane Fonda movie)", - "Barbarian", - "Barbarino", - "Barbeque", - "Barbi (after Barbara Streisand)", - "Barbossa", - "Barclay", - "Bardee", - "Barfly", - "Barfolemeow", - "Bariska", - "Barkley", - "Barky", - "Barley", - "Barley-Boo", - "Barn Cat", - "Barnabas (so named for Barnabas Collins of Dark Shadows)", -] diff --git a/meowpass b/meowpass deleted file mode 100755 index e14ada851925253d252e450b5648b4fe47bcff89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115168 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 diff --git a/meowpass_production.swift b/meowpass_production.swift deleted file mode 100644 index ff00a2a..0000000 --- a/meowpass_production.swift +++ /dev/null @@ -1,1696 +0,0 @@ -// MARK: - Embedded Cat Names Data (Production) -let embeddedCatNames: [String] = [ - "Aaargh", - "Aaliyah", - "Aaron", - "Ab", - "Ababa", - "Abba", - "Abba-daba", - "Abba-Goo", - "Abbey", - "Abbey Roads", - "Abbi-girl", - "Abbie", - "Abbot", - "Abbott", - "Abby", - "Abby-girl", - "Abby-normal", - "Abbykitty", - "Abcat", - "Abdul", - "Abe", - "Abednego", - "Abegale", - "Abel", - "Abelard", - "Abendigo", - "Abercrombie", - "Aberdeen", - "Abi", - "Abigail", - "Abigail Von Buttons", - "Abilene", - "Able", - "Abner", - "Abra", - "Abra (and Cadabra?)", - "Abracadabra", - "Abraham", - "Abraxas", - "Abrico", - "Abs", - "Absinthe", - "Absolon (from Chaucer's \"Cabterbury Tales\")", - "Absolut (named after the Swedish vodka)", - "Abstraction", - "Abu", - "Abubu", - "Aby", - "Abyss", - "Acat", - "Ace", - "Ace Baby Toadflakes", - "Ace Of Spades", - "Acey", - "Achille", - "Achilles (Greek mythology: Champion of the Greeks in the Trojan War)", - "Acis", - "Ackerly", - "Acorn", - "Acrolina", - "Acroy", - "Action", - "Ada", - "Ada Jane", - "Adacat", - "Adagio", - "Adakin Skywalker", - "Adam", - "Adam And Eve", - "Adams", - "Adcom", - "Addie", - "Addis", - "Addison", - "Addy", - "Addy-Tood", - "Adelaida", - "Adelaide", - "Ademma", - "Adidas", - "Adirondak", - "Adiza", - "Adlai", - "Adler", - "Admetus", - "Admiral", - "Adobe", - "Adolph", - "Adom", - "Adonis", - "Adrian", - "Adriatic", - "Adrock", - "Advance Cat", - "Aegyptos", - "Aelgifa (The Elven Gift - Old English)", - "Aelurus (Egyptian mythology, sacred cat)", - "Aenias", - "Aeolus (Greek God of the Wind)", - "Aerope", - "Aeros", - "Aesop", - "Aethelwyn", - "Aethra", - "Affinity", - "Afikoman", - "Afonia", - "Africa", - "African Queen", - "African-Americat", - "Afrikan", - "Afrikat", - "Agadore", - "Agamemnon", - "Agape (from the New Testament meaning unconditional love)", - "Agassi", - "Agatha", - "Agatha Christie", - "Agatha Christy", - "Agent Z", - "Aggedor", - "Aggie", - "Agili-tree", - "Agility", - "Agima", - "Agitador (Spanish for \"troublemaker\")", - "Agnes", - "Agrippina", - "Agustus", - "Ah Kinchil (Maya mythology: the sun god)", - "Ah Puch (Maya mythology: the god of death)", - "Ah-choo!", - "Ahab", - "Ahau Chamahez (Maya mythology: one of two gods of medicine)", - "Ahi", - "Ahlia", - "Ahmakiq (Maya mythology: god of agriculture)", - "Ahura Mazda", - "Aida", - "Aidan", - "Aiiy", - "Aikido", - "Aiko", - "Aimee", - "Air", - "Air Einstein", - "Air Raid", - "Airhead", - "AJ", - "Aja", - "Ajah (priesthood in fantasy games)", - "Ajax", - "Akaia", - "Akamai (Hawaiian for \"smart\")", - "Akasha", - "Akasha (character in Anne Rice's vampire chronicles)", - "Akasha (Queen Mother Vampire from Anne Rice's \"Queen of the Damned\")", - "Akbar", - "Akeel", - "Akeel The One Eyed", - "Akeela", - "Akeem", - "Akeisha", - "Aker (Egyptian mythology: the lion who guards the gates of dawn)", - "Akhen", - "Akhushtal (Maya mythology: goddess of childbirth)", - "Aki", - "Akim", - "Akira", - "Akita (Japanese breed of dog)", - "Aktil (after the mouse in \"Aktil's Big Swim\" children's book by Inga Moore)", - "Aku", - "Akula", - "Akuna", - "Al", - "Al Bundy", - "Al Capone", - "Al Pacino (after the actor)", - "Alabama", - "Alabaster", - "Aladara", - "Aladdin", - "Alakazam!", - "Alan", - "Alani", - "Alanna", - "Alaska", - "Alastair", - "Albatross", - "Albee (after the playwright Edward Albee)", - "Albert", - "Albert Einstein", - "Albert Oscelish Loudpurr", - "Alberta", - "Alberto", - "Albie-Capone", - "Albrecht", - "Alcatraz", - "Alchemy", - "Alcuin", - "Aldebaran", - "Aldo", - "Aldo Scalicki", - "Aldous (after the British author, Aldous Huxley)", - "Alecia", - "Alegra", - "Alegria Noah", - "Aleister", - "Aleksandra", - "Aleksei", - "Aleta", - "Alex", - "Alex P. Kitten", - "Alexa", - "Alexander", - "Alexander Blitzen Cody", - "Alexander Blue", - "Alexander-The-Great", - "Alexandra", - "Alexandra The Great", - "Alexandra The Grey", - "Alexandria", - "Alexandroupolis", - "Alexia", - "Alexis", - "Alf", - "Alfa Skywalker", - "Alfalfa", - "Alfanzo", - "Alfie", - "Alfie Moon (after the character in the \"Eastenders\" tv-series)", - "Alfiepet", - "Alfonzo", - "Alfred", - "Alfred \"Lord\" Tennyson", - "Alfreda", - "Algebra", - "Alger", - "Algernon", - "Algy", - "Ali", - "Ali Baba", - "Ali Kat", - "Ali Khat", - "Alia", - "Alibi", - "Alice", - "Alice B. Toe-Claws", - "Alice B. Toklas", - "Alien", - "Alika", - "Aliki", - "Alimony", - "Alina", - "Alise", - "Alistair", - "Alistair Jones", - "Alix", - "Aliza", - "Alize", - "All This and Heaven Too", - "Alla", - "Alladin", - "Allan", - "Allball", - "Allegra", - "Allegro", - "Allergen", - "Alley", - "Alley McClaw", - "Allie", - "Allie Cat", - "Allie Marie", - "Allison", - "Allison Jo", - "Allred", - "Allspice", - "Allura", - "Ally", - "Alma (Spanish for soul)", - "Almanzo", - "Almond Roca", - "Almost Paradise (song \"Almost Paradise\")", - "Aloha", - "Aloka", - "Alokee", - "Alomar", - "Alonzo", - "Alouiscious", - "Alowicious", - "Aloysius", - "Alpaca", - "Alpha", - "Alphie", - "Alpine", - "Alsatia", - "Althea", - "Alton", - "Aluminum", - "Alvin", - "Alwix", - "Alyssa", - "Alyx", - "Am-fats", - "Ama", - "Amable", - "Amadaeus", - "Amadala", - "Amadeus", - "Amadeus (after Mozart)", - "Amalthea", - "Amanda", - "Amandalina", - "Amanita", - "Amaretto", - "Amazing Grace", - "Amazon", - "Amba", - "Ambar", - "Ambassador", - "Amber", - "Amberwavesoffur", - "Ambidextrous", - "Ambiguity", - "Ambiguous Eunuch FarFromScrewin", - "Amble", - "Ambriel (Zodiac, guardian angel of Gemini)", - "Ambrose", - "Ambrose Ambrogo", - "Ambrose Bugger-Boo Pendragon", - "Ambrosia", - "Ambrosia Jean Marie", - "Ambrosious", - "Ambush", - "Amby", - "Amby (one of the feminine forms of Ambrose)", - "Amelia", - "Amelia Air-Cat", - "Amelia Earhart", - "Amelie (after the movie)", - "Amen-Ra", - "Amenhotep", - "America", - "American Pie", - "Americat", - "Amerito", - "Amethyst", - "Ami", - "Amida", - "Amidala", - "Amie", - "Amiga", - "Amigo", - "Amir", - "Amira (Female Arabian name, meaning \"princess\")", - "Ammie", - "Ammo", - "Amon", - "Amor (Spanish for \"love\")", - "Amore", - "Amos", - "Amour (French for \"love\")", - "Ampersand", - "Amphion", - "Amsterdam", - "Amtrak", - "Amulet", - "Amway", - "Amy", - "Amy Budd", - "Amydala", - "Ana", - "Ana-Hata", - "Anaakii (Japanese for \"anarchy\")", - "Anabel", - "Anabell", - "Anabelle", - "Anacharsis", - "Anaconda", - "Anais", - "Anakin", - "Anamokit (Indian for \"Little Thunder\")", - "Anastasia", - "Anastasia (after the Russian princess)", - "Anatevka", - "Anatole", - "Anatolius", - "Anatoly", - "Anchor", - "Anchors Away", - "Anchovey", - "Anchovy", - "Ancona", - "Andaconda", - "Andalusia", - "Anderson", - "Andi", - "Andie", - "Andilay, Andilay!", - "Andorra", - "Andouille (after the spicy Cajun sausage)", - "Andre", - "Andrea", - "Andrea Majorie", - "Andreas", - "Andrew", - "Andrew Elliott James David", - "Andrew Jackson", - "Android", - "Andromeda", - "Andy", - "Andy Rooney", - "Anfurnee", - "Angel", - "Angel Boy", - "Angel Cookie", - "Angel Eyes", - "Angel Marie", - "Angela", - "Angelee", - "Angelface", - "Angelica", - "Angelika", - "Angelika (after Angelika Foster-Gooding)", - "Angelina", - "Angeline", - "Angelo", - "Angelo Jo", - "Angie", - "Angstrom", - "Angus", - "Angus MacDoogal", - "Angus MacGuyver", - "Angus Pangus", - "Angus Suzy-Socks", - "Angy Poo", - "Ani", - "Ani Difranco", - "Anika", - "Anikki", - "Animal", - "Animophat", - "Anina", - "Anishka", - "Anita Blake (after the Laurel K. Hamilton novels)", - "Anitra", - "Ankelfraeseren", - "Ankle Biter", - "Ankle Dancer", - "Ann", - "Ann Jelly", - "Ann-Margaret", - "Anna", - "Anna-lynn", - "Annabel", - "Annabelle", - "Annakin (after Annakin Skywalker in the Star Wars movies)", - "Annapolis", - "Annapurna", - "Annelee", - "Annette", - "Annible", - "Annie", - "Annie Banannie", - "Annie Marie", - "Annie Pearl", - "Anniey", - "Anonka", - "Anonymous", - "Anouk (after Anouk Aimee)", - "Anouk Manouk", - "Anowa", - "Ansel", - "Ansel Adams", - "Ansel Catams", - "Antar (after a character in Arabic literature known for his bravery)", - "Antarctica", - "Antares", - "Antelope", - "Antha", - "Anthea", - "Anthem", - "Anthony", - "Anthrax P.H. (Poo Head) Zeppelin", - "Antic", - "Antigone", - "Anton", - "Anton B. Stanton", - "Antonia", - "Antonio", - "Antonio Banderas", - "Antony", - "Antony And Cleopatra", - "Antos", - "Antryg", - "Anubis", - "Anxiety", - "Anya", - "Apache", - "Aphrodisia", - "Aphrodite", - "Aphrodite, The Kitten Of Love", - "Apie", - "Apocalypse", - "Apocalypse Now", - "Apogee", - "Apollo", - "Apollo (the mythological god of light and truth)", - "Apollonia", - "Apothecary", - "Applaton", - "Apple", - "Apple Dog", - "Apple Pie", - "Applejack", - "Applesauce", - "Appleton", - "Appollinia", - "Apprentice", - "Appy", - "Apri", - "Apricot", - "April", - "Aptos", - "Apu", - "Aput", - "Apuu", - "Aqua", - "Aqua Girl", - "Aquarius", - "Ar-too", - "Arachne", - "Aragorn", - "Araine", - "Aramer", - "Aramis (one of the three muskateers)", - "Arapaho", - "Arbitration", - "Arbuckle (after the silent film comedian)", - "Arbutis", - "Arby", - "Archibald", - "Archie", - "Archie Bunker", - "Archima", - "Archimedes", - "Ardal", - "Area 51", - "Arejay Joseph (Arejay from the band Halestorm)", - "Arendal", - "Ares", - "Arf", - "Arfie", - "Arfur", - "Argent", - "Argo", - "Argon", - "Argos", - "Argus", - "Argyle", - "Ari", - "Aria", - "Ariadne (Greek mythology, daughter of King Minos of Crete)", - "Ariel", - "Ariel (from the movie \"The Little Mermaid\")", - "Ariela (Hebrew for \"female derivative of lioness\")", - "Arielle", - "Aries", - "Arietty", - "Arioch", - "Arista Kat", - "AristoCat", - "Aristophanes", - "Aristotle", - "Arizona", - "Arlene", - "Arlington", - "Arlo", - "Arly", - "Armageddon", - "Armani", - "Armie", - "Arms", - "Arms Von Hirshstein", - "Armstrong", - "Arnie", - "Arnold", - "Arnold Schwarzenegger", - "Arnold Shortzenlegger", - "Arpeggio", - "Arquette", - "Arriana", - "Arrow", - "Arsenic", - "Artemis", - "Artemis (Greek goddess of hunting and moon)", - "Artera", - "Artesian", - "Artful Dodger", - "Arthur", - "Arthur Ambrosius", - "Arti", - "Artie", - "Arty", - "Arvo", - "Arwen", - "Arwen Renaissance", - "Arzu (Turkish for \"desire\")", - "Asbury (after Asbury Park, NJ)", - "ASCII (computer term)", - "Ash", - "Ash-butt", - "Asha", - "Ashanti", - "Ashben", - "Asheema", - "Asher", - "Ashes", - "Ashes Too Ashes", - "Ashford", - "Ashika", - "Ashke", - "Ashleigh", - "Ashley", - "Ashley Cat", - "Ashley Olsen", - "Ashley Wilkes", - "Ashli", - "Ashlyn", - "Ashrei (Hebrew for \"happy\")", - "Ashton", - "Ashur", - "Asia", - "Asia Major", - "Asia Minor", - "Asimov", - "Asja", - "Aska", - "Asker", - "Askhim", - "Aslan", - "Asparagus", - "Aspen", - "Asphalt", - "Aspirin", - "Asscaught", - "Asset", - "Asta", - "Astarael", - "Astarte", - "Aster", - "Asterix", - "Asteroid", - "Asti", - "Asti Spumonte", - "Astor", - "Astra", - "Astro", - "Astroid", - "Astrology", - "Astroman", - "Astrophe", - "Asylum", - "Asymptote", - "Atair", - "Atari", - "Ateesha", - "Athalia", - "Athena (Goddess of War)", - "Athene", - "Athens", - "Athinai", - "Atilla", - "Atinna", - "Atlantic", - "Atlantis", - "Atlas", - "Atom", - "Atossa", - "Attacker", - "Atte", - "Atti (short for attitude)", - "Atticus", - "Attila", - "Attitude", - "Atude", - "Aubergine", - "Aubrey", - "Audacity", - "Audball", - "Auden (named after the poet W.H. Auden)", - "Audie", - "Audio", - "Auditor", - "Audrey", - "Audrey Hepburn", - "Audrey III", - "Audubon (after John James Audubon)", - "Augger-Dogger", - "Auggie", - "Auggie Doggie", - "Auggie or Augie", - "Augie", - "August", - "August Nights", - "Augusta", - "Auguste Eighth Month.", - "Augustiko", - "Augustin", - "Augustina", - "Augustine \"Gus\" Hoover", - "Augustus", - "Aunt Esther", - "Aunt Jemima", - "Aunt Kat", - "Aunt Margaret", - "Auntie Stella", - "Aura", - "Aureim", - "Aureole", - "Aurey", - "Aurora", - "Aurora Borealis", - "Aussie", - "Austin", - "Austin Meowers", - "Austin Powers", - "Autobahn", - "Autumn", - "Ava", - "Avagadros (after the mathmetician)", - "Avail", - "Avalanche", - "Avalon", - "Avanti", - "Avatar", - "Avery", - "Avis", - "Avocado", - "Avril", - "Awesie", - "Awesome Kitty", - "Awestruck", - "Awk", - "Axel", - "Axl", - "Axl Rose", - "Axle", - "Axon", - "Ayame (Japanese for \"iris\")", - "Ayesha (3rd wife of Mohammed)", - "Ayisha", - "Ayla", - "Aylin", - "Aymaya (Japanese for \"night rain\")", - "Ayra", - "Ayreh", - "Ayun (As Yet Un-named)", - "Azar", - "Azark", - "Azazel (means \"desert demon\", Bible: Leviticus)", - "Azil", - "Aziza (\"precious one\" in a few different languages)", - "Azmodius", - "Azour Mavreen", - "Azrael", - "Azreal", - "Aztec", - "Azure", - "Azzuki", - "Azzul", - "B-52", - "B-dee", - "B-Girl", - "B-Pal", - "B.A.", - "B.A. (Bad Attitude!)", - "B.A. Barrakus", - "B.B.", - "B.B. Kat", - "B.B. King", - "B.B. Kingcat", - "B.C.", - "B.C. (\"Buttercup\")", - "B.C. (Big Cat)", - "B.D. (\"Black Douglas\", after the feisty Scottish warrior)", - "B.D. (Bad Boy)", - "B.D. (Brain-Dead)", - "B.D.K. (\"Buddy D. Katt\")", - "B.e.r.u. (Banana Emergency Recovery Unit, also Luke Skywalkers aunt and an island in the Pacific Ocean)", - "B.G.", - "B.I.F. (Butt In Face)", - "B.J.", - "B.J. (Tom Robbin's character Bonanza Jellybean)", - "B.K.", - "B.M.W. (Black, Mahogany & White)", - "B.O.T. (Big Old Tom)", - "B.u.d. (\"Big Ugly and Dumb\")", - "B.W.", - "B.W. (Black White)", - "BA", - "Ba Shaleek Alshain", - "Ba' Boy", - "Baba", - "Babaganoush", - "Babalou (after the tv show)", - "Babar", - "Babbaboombanorsh", - "Babbit", - "Babbitt", - "Babe", - "Babee", - "Babers", - "Babester", - "Babette", - "Babirusa", - "Baboo", - "Baboon Butt", - "Babricus", - "Babs (after Barbra Streisand)", - "Babsy", - "Babuji Braveheart", - "Babur", - "Babushka", - "Baby", - "Baby Bear", - "Baby Beauty", - "Baby Boogens", - "Baby Boy", - "Baby Bug", - "Baby Butterscotch", - "Baby Cakes", - "Baby Cat", - "Baby Doe (sort of a Jane Doe thang)", - "Baby Dog", - "Baby Doll", - "Baby Doo II", - "Baby Dumpling", - "Baby Girl", - "Baby Grey.", - "Baby Guiness", - "Baby Head", - "Baby Jane", - "Baby Jesus", - "Baby Ki'n", - "Baby Kitten", - "Baby Kitty", - "Baby Kitty And Trouble", - "Baby Mimi", - "Baby Nesbit", - "Baby Ruth", - "Baby Seebs", - "Baby Spice", - "Baby Weeeeeeezel the little Frrrrrench Chat", - "Baby-Boogs", - "Baby-Doll", - "Baby-Doo", - "Baby-Face", - "Baby-Kitty", - "Baby-Roca (named after two favorite candies, Baby Ruth and Almond Roca)", - "Babycakes", - "Babycat", - "Babydoll", - "Babyface", - "Babygray", - "Babykins", - "Babyman", - "Babyshoes", - "Babytat", - "Bacabs (Maya mythology: the canopic gods)", - "Bacall", - "Bacardi", - "Baccarat", - "Bacchos", - "Bacchus", - "Bacci (pronounced: Baa-chie; Italian for \"kisses\")", - "Bach", - "Baci", - "Back", - "Backstreet Blues", - "Backstreet Kitty", - "Bacon", - "Bad Bad Boy", - "Bad Bad Leroy Brown", - "Bad Bess", - "Bad Cat", - "Bad Kitty", - "Bad Luck", - "Bada", - "Badger", - "Badjun", - "Badlands", - "Badness", - "BadShad", - "Baeki", - "Bafftub", - "Bag", - "Bag Lady", - "Bag O'Cat", - "Bagel", - "Baggage", - "Baggi pants", - "Baggins", - "Baggy", - "Bagheera", - "Baghera (black panther in \"The Jungle Book\")", - "Baghreeah", - "Bagira", - "Bagoas", - "Bagpuss", - "Baguette", - "Bahama Mama", - "Bailey", - "Bailey Emerald Isle", - "Bailey's Irish Cream (50% sweetness and 50% nuts)", - "Bain", - "Bainbridge", - "Baja", - "Bajan", - "Baka (Japanese insult, \"idiot\", \"moron\", \"fool\", \"dimwit\")", - "Baka-Neko", - "Baker", - "Baker (after the mountain in North Carolina, USA)", - "Baksheesh (means \"bribe\" in Arabic)", - "Balaena", - "Balbina", - "Balboa", - "Balder (Viking mythology: The God of light)", - "Balderdash", - "Baldric", - "Baldrick", - "Baldur", - "Baldur The Fairly Slow", - "Baldwin", - "Baldy", - "Bali", - "Balik", - "Balin", - "Balki", - "Ballbearing Mouse Trap", - "Ballerina", - "Ballou", - "Ballsy", - "Baloo", - "Balraj", - "Balthazar", - "Balzac", - "Bam", - "Bam-Bam", - "Bama", - "Bambalona", - "Bambam", - "Bambi", - "Bambina", - "Bambino", - "Bamboo", - "Bamboozler", - "Bams", - "Bamse", - "Banana Cabana", - "Banana Peel", - "Band-Aid", - "Bandanna", - "Bandit", - "Bandito", - "Bang (reference to the Unix ! symbol)", - "Bangladesh", - "Bangle", - "Bangui (capital of Central African Republic)", - "Banjer", - "Banjo", - "Banjo Blue", - "Bannana Fanna", - "Bannenay", - "Banner", - "Banquet", - "Banquo", - "Banshee", - "Banzai", - "Bar Room", - "Baracca", - "Barbara", - "Barbara Bush", - "Barbarella (after the Jane Fonda movie)", - "Barbarian", - "Barbarino", - "Barbeque", - "Barbi (after Barbara Streisand)", - "Barbossa", - "Barclay", - "Bardee", - "Barfly", - "Barfolemeow", - "Bariska", - "Barkley", - "Barky", - "Barley", - "Barley-Boo", - "Barn Cat", - "Barnabas (so named for Barnabas Collins of Dark Shadows)", -] - -// -// main.swift -// MeowPassword -// -// Created by Jeffrey Kunzelman on 8/23/25. -// - -import Foundation - -// MARK: - ASCII Art and Lolcat Theme - -/** - * Collection of ASCII art cats for randomized display - * Each run selects a random cat to display, adding variety to the user experience - */ -let asciiCats = [ - // Original lolcat - """ - _,-;'''`' - . - _/', `; `; \\ - , _..,-'' ' ` ` `\\ - | ;._.,,-' .| |,_ ' ' `\\ - | `;' ;' ;, `, ; | ' ' . \\ - `; __` ,'__ ` , ` ; | ; \\ - ; (6_); (6_) ; | , \\ ' | - ;; _,6 ,. ` `, ' `-._ // - ,;.=..`_..=.,' -' ,'' _,// - _00_____`"=,,,=="',___,,,-----'''----'_'_'_''______00_ - Meow Password Generators of Secure Relavant - __,,-' /' - /'_,,--'' - | ( - `' - """, - - // Sitting cat - """ - /\\_/\\ - ( o.o ) - > ^ < - /| |\\ - (_| |_) - - 🐱 MeowPassword - Purrfectly Secure! 🐱 - """, - - // Happy cat - """ - |\\__/,| (`\\ - |_ _ |.--.) ) - ( T ) / - (((^_(((/(((_/ - - 😸 MeowPassword - Happy to Help! 😸 - """, - - // Stretching cat - """ - /\\_/\\ - ( ^.^ ) _ - \\ " / ( ) - ( | | ) - (__d b__) - - 😺 MeowPassword - Stretching Your Security! 😺 - """, - - // Playful cat - """ - /\\_/\\ ___ - = o_o =_______ \\ \\ - __^ __( \\.__) ) - (@)<_____>__(_____)____/ - - 😻 MeowPassword - Playfully Secure! 😻 - """, - - // Sleeping cat - """ - |\\ _,,,---,,_ - ZZZzz /,`.-'`' -. ;-;;,_ - |,4- ) )-,_. ,\\ ( `'-' - '---''(_/--' `-'\\_) - - 😴 MeowPassword - Quietly Securing... 😴 - """ -] - -/** - * Get a random ASCII art cat from the collection - * @return A randomly selected ASCII art string - */ -func getRandomCatArt() -> String { - return asciiCats.randomElement() ?? asciiCats[0] -} -// MARK: - Configuration Structure - -/** - * Configuration structure for password generation parameters - * Handles command-line argument parsing and parameter validation - */ -struct PasswordConfig { - let numNumbers: Int // Number of random numbers to insert (1-10) - let numSymbols: Int // Number of random symbols to insert (1-10) - let maxLength: Int // Maximum password length (15-50) - let showTests: Bool // Whether to run test mode - let copyToClipboard: Bool // Whether to copy result to clipboard - let showHelp: Bool // Whether to show help - - /** - * Initialize configuration from command line arguments - * @param arguments: Array of command line arguments - */ - init(arguments: [String]) { - var numNumbers = Int.random(in: 3...5) // Default range: 3-5 numbers - var numSymbols = 2 // Default value: 2 symbols - var maxLength = 25 // Default max length: 25 characters - var showTests = false - var copyToClipboard = false - var showHelp = false - - // Parse command line arguments with validation - var i = 1 // Skip program name at index 0 - while i < arguments.count { - let arg = arguments[i] - - switch arg { - case "--numbers", "-n": - if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - if value >= 1 && value <= 10 { - numNumbers = value - i += 1 // Skip next argument (the value) - } else { - print("Warning: --numbers must be between 1-10. Using default.") - } - } else { - print("Warning: --numbers requires a numeric value. Using default.") - } - - case "--symbols", "-s": - if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - if value >= 1 && value <= 10 { - numSymbols = value - i += 1 // Skip next argument (the value) - } else { - print("Warning: --symbols must be between 1-10. Using default.") - } - } else { - print("Warning: --symbols requires a numeric value. Using default.") - } - - case "--max-length", "-m": - if i + 1 < arguments.count, let value = Int(arguments[i + 1]) { - if value >= 15 && value <= 50 { - maxLength = value - i += 1 // Skip next argument (the value) - } else { - print("Warning: --max-length must be between 15-50. Using default.") - } - } else { - print("Warning: --max-length requires a numeric value. Using default.") - } - - case "--test", "-t": - showTests = true - - case "--copy", "-c": - copyToClipboard = true - - case "--help", "-h": - showHelp = true - - default: - if arg.hasPrefix("-") { - print("Warning: Unknown option '\(arg)'. Use --help for usage information.") - } - } - - i += 1 - } - - self.numNumbers = numNumbers - self.numSymbols = numSymbols - self.maxLength = maxLength - self.showTests = showTests - self.copyToClipboard = copyToClipboard - self.showHelp = showHelp - } -} - -// MARK: - Embedded Cat Names Data - -/** - * Get embedded cat names from the compiled-in data - * Cat names are embedded during the build process to create a self-contained executable - * @return Array of cat names embedded during build process - */ -func getEmbeddedCatNames() -> [String] { - // Read the embedded cat names from the generated Swift file - return embeddedCatNames -} - -/** - * Load cat names from embedded data (legacy interface for compatibility) - * This function maintains backward compatibility while using embedded data - * @param filePath: Ignored parameter - always uses embedded data - * @return Array of cat names from embedded data - */ -func loadCatNames(from filePath: String? = nil) -> [String] { - // Always use embedded cat names for production builds - return getEmbeddedCatNames() -} - -// MARK: - Cat Name Selection and Processing - -/** - * Select random cat names from the available pool - * @param catNames: Array of available cat names to choose from - * @param count: Number of names to select (will be clamped to available count) - * @return Array of randomly selected cat names - */ -func selectRandomCatNames(from catNames: [String], count: Int) -> [String] { - guard !catNames.isEmpty, count > 0 else { return [] } - - let actualCount = min(count, catNames.count) - return Array(catNames.shuffled().prefix(actualCount)) -} - -/** - * Create base phrase from selected cat names with length constraints - * Ensures the phrase meets the 15-25 character requirement from specifications - * @param catNames: Array of selected cat names to combine - * @param maxLength: Maximum allowed length for the phrase - * @return Base phrase string within specified length constraints - */ -func createBasePhrase(from catNames: [String], maxLength: Int) -> String { - let joinedNames = catNames.joined() - - // Ensure phrase is between 15 and maxLength characters as per specifications - if joinedNames.count < 15 { - // If too short, try adding more names to meet minimum length requirement - let additionalNames = selectRandomCatNames(from: catNames, count: 5) - let extended = joinedNames + additionalNames.joined() - return String(extended.prefix(maxLength)) - } else if joinedNames.count > maxLength { - return String(joinedNames.prefix(maxLength)) - } - return joinedNames -} - -// MARK: - Password Security Transformations - -/** - * Randomly capitalize letters in the password array - * Implements the "3 letters randomly capitalized" requirement - * @param password: Mutable array of characters to modify - * @param count: Number of letters to capitalize (typically 3) - */ -func randomlyCapitalizeLetters(in password: inout [Character], count: Int) { - let letterIndices = password.enumerated().compactMap { index, char in - char.isLetter ? index : nil - } - - let indicesToCapitalize = Array(letterIndices.shuffled().prefix(count)) - - for index in indicesToCapitalize { - password[index] = Character(password[index].uppercased()) - } -} - -/** - * Insert random numbers into the password at random positions - * Implements the "3-5 numbers inserted randomly" requirement - * @param password: Mutable array of characters to modify - * @param count: Number of random numbers to insert - */ -func insertRandomNumbers(into password: inout [Character], count: Int) { - let numbers = "0123456789" - - for _ in 0..() - var previousChar: Character? - - for i in 0.. String { - // Step 1: Select 3-5 cat names - let nameCount = Int.random(in: 2...6) - let selectedNames = selectRandomCatNames(from: catNames, count: nameCount) - - // Step 2: Create base phrase - let basePhrase = createBasePhrase(from: selectedNames, maxLength: config.maxLength) - var password = Array( - basePhrase - .lowercased() - .replacingOccurrences(of: " ", with: "") -) - // Step 3: Apply security transformations - randomlyCapitalizeLetters(in: &password, count: 3) - insertRandomNumbers(into: &password, count: config.numNumbers) - replaceLettersWithSymbols(in: &password, count: config.numSymbols) - // removeRepeatingLetters(in: &password) - - // Ensure final password doesn't exceed max length - if password.count > config.maxLength { - password = Array(password.prefix(config.maxLength)) - } - - return String(password) -} - -// MARK: - Kolmogorov Complexity Analysis -func calculateShannonEntropy(of string: String) -> Double { - let charCounts = string.reduce(into: [Character: Int]()) { counts, char in - counts[char, default: 0] += 1 - } - - let length = Double(string.count) - let entropy = charCounts.values.reduce(0.0) { result, count in - let probability = Double(count) / length - return result - (probability * log2(probability)) - } - - return entropy -} - -func calculateCompressionRatio(of string: String) -> Double { - // Simple run-length encoding approximation - var compressed = 0 - var previous: Character? - var runLength = 1 - - for char in string { - if char == previous { - runLength += 1 - } else { - compressed += runLength > 1 ? 2 : 1 - runLength = 1 - previous = char - } - } - compressed += runLength > 1 ? 2 : 1 - - return 1.0 - (Double(compressed) / Double(string.count)) -} - -func calculatePatternComplexity(of string: String) -> Double { - let substrings = getSubstrings(from: string, maxLength: 4) - let uniqueSubstrings = Set(substrings) - - if substrings.isEmpty { return 0.0 } - - return Double(uniqueSubstrings.count) / Double(substrings.count) -} - -func getSubstrings(from string: String, maxLength: Int) -> [String] { - let chars = Array(string) - var substrings: [String] = [] - - for length in 2...min(maxLength, chars.count) { - for start in 0...(chars.count - length) { - let substring = String(chars[start.. Double { - let uniqueChars = Set(string) - let hasLower = uniqueChars.contains { $0.isLowercase } - let hasUpper = uniqueChars.contains { $0.isUppercase } - let hasDigits = uniqueChars.contains { $0.isNumber } - let hasSymbols = uniqueChars.contains { !$0.isLetter && !$0.isNumber } - - let categories = [hasLower, hasUpper, hasDigits, hasSymbols].filter { $0 }.count - return Double(categories) / 4.0 -} - -func analyzeComplexity(of password: String) -> (score: Double, analysis: String) { - let entropy = calculateShannonEntropy(of: password) - let compressionRatio = calculateCompressionRatio(of: password) - let patternComplexity = calculatePatternComplexity(of: password) - let diversity = calculateCharacterDiversity(of: password) - - // Weighted complexity score - let score = (entropy * 0.3) + (compressionRatio * 0.25) + - (patternComplexity * 0.2) + (diversity * 0.15) + - (min(Double(password.count) / 25.0, 1.0) * 0.1) - - let finalScore = min(score, 10.0) - - let analysis = """ - Meow Complexity Analysis: - - Password: \(password) - - Tail Size: \(password.count) cm - - Ball of Yarn Entropy: \(String(format: "%.3f", entropy)) bits - - Mashing Resistance: \(String(format: "%.1f", compressionRatio * 100))% - - Shiny Foil Ball Uniqueness: \(String(format: "%.1f", patternComplexity * 100))% - - Percent of Organic NonGMO Catnip: \(String(format: "%.1f", diversity * 100))% - - Overall Relavency: \(String(format: "%.2f", finalScore))/10.0 - """ - - return (finalScore, analysis) -} - -// MARK: - Test Functions - -/** - * Helper function to assert test conditions and print results - * @param condition: Boolean condition to test - * @param message: Description of what is being tested - */ -func assert(_ condition: Bool, _ message: String) { - if condition { - print("PASS: \(message)") - } else { - print("FAIL: \(message)") - } -} - -/** - * Helper function to assert equality and print results - * @param actual: The actual value received - * @param expected: The expected value - * @param message: Description of what is being tested - */ -func assertEqual(_ actual: T, _ expected: T, _ message: String) { - if actual == expected { - print("PASS: \(message)") - } else { - print("FAIL: \(message) - Expected: \(expected), Got: \(actual)") - } -} - -/** - * Test the cat name loading functionality - * Verifies that embedded cat names are properly loaded and accessible - */ -func testLoadCatNames() { - print("\nTesting Cat Name Loading...") - - let catNames = loadCatNames() - assert(!catNames.isEmpty, "Should Meow load cat names from embedded data") - assert(catNames.count > 100, "Should load a substantial Meow number of cat names") - - let nonEmptyNames = catNames.filter { !$0.isEmpty } - assertEqual(nonEmptyNames.count, catNames.count, "All Meow Meow loaded names should be non-empty") - - // Test consistency of embedded loading - let embeddedNames = loadCatNames(from: nil) - assertEqual(embeddedNames.count, catNames.count, "Should return same Meow count for embedded names") - - print("Cat names loaded meow: \(catNames.count)") - print("First few names: \(Array(catNames.prefix(5)))") -} - -/** - * Test the complete password generation process - * Validates that passwords meet all security requirements - */ -func testCompletePasswordGeneration() { - print("\nTesting MeowMeow Complete Password Generation...") - - let testNames = ["Fluffy", "Whiskers", "Shadow", "Mittens", "Tiger", "Luna", "Max", "Bella"] - let config = PasswordConfig(arguments: []) - - for i in 1...3 { - let password = generateSecurePassword(from: testNames, config: config) - - print("Generated password \(i): \(password)") - - assert(password.count >= 10, "MeowPassword should be at least 10 characters") - assert(password.count <= config.maxLength + 10, "Password should not greatly exceed Meow max length") - - let hasNumbers = password.contains { $0.isNumber } - let hasLetters = password.contains { $0.isLetter } - let hasSymbols = password.contains { !$0.isLetter && !$0.isNumber } - - assert(hasNumbers, "Password should contain meow numbers") - assert(hasLetters, "Password meow should contain letters") - assert(hasSymbols, "Password should contain meow symbols") - - let (score, analysis) = analyzeComplexity(of: password) - assert(score >= 0.0 && score <= 10.0, "Complexity score should be meow valid") - assert(!analysis.isEmpty, "Analysis should not be meow empty") - } -} - -/** - * Run all basic tests for the MeowPassword system - * Executes comprehensive testing of all core functionality - */ -func runBasicTests() { - print("Running Basic MeowPassword Tests") - print("=================================") - - testLoadCatNames() - testCompletePasswordGeneration() - - print("\nMeow Basic Tests Complete!") - print("=====================") -} - -// MARK: - Help Function - -/** - * Display help information for command-line usage - * Shows all available options and example usage - */ -func showHelp() { - print(""" - MeowPassword - Cat-Based Secure Password Generator - - USAGE: - meowpass [OPTIONS] - - OPTIONS: - -n, --numbers N Number of random numbers to insert (1-10) - Default: 3-5 (randomly chosen) - - -s, --symbols N Number of symbols to insert (1-10) - Default: 2 - - -m, --max-length N Maximum password length (15-50) - Default: 25 - - -t, --test Run comprehensive tests - - -c, --copy Copy generated password to clipboard - (macOS only) - - -h, --help Show this help message - - DESCRIPTION: - MeowPassword generates secure, memorable passwords using cat names - combined with Kolmogorov complexity analysis. Each run displays a - random ASCII art cat for a delightful experience! - - Features: - • 1000+ embedded cat names (no external files needed) - • Random ASCII art cat on each run - • Configurable security parameters - • Kolmogorov complexity scoring - • Generates 5 candidates and selects the most secure - - EXAMPLES: - Generate a password with default settings: - meowpass - - Generate with custom parameters: - meowpass --numbers 4 --symbols 3 --max-length 30 - meowpass -n 5 -s 4 -m 35 - - Generate and copy to clipboard: - meowpass --copy - meowpass -c - - Run tests: - meowpass --test - meowpass -t - - """) -} - -// MARK: - Main Program -func main() { - let config = PasswordConfig(arguments: CommandLine.arguments) - - // Check for help - if config.showHelp { - showHelp() - return - } - - // Check for test mode - if config.showTests { - runBasicTests() - return - } - - // Show random ASCII art and title - print(getRandomCatArt()) - print("\nMeow Password - Cat Name Based Secure Password Generator") - print("==========================================================") - - // Load cat names (now from embedded data) - let catNames = loadCatNames() - guard !catNames.isEmpty else { - print("ERROR: No cat names loaded from embedded data.") - return - } - - print("Loaded \(catNames.count) meow cat names") - print("Generating 5 secure password meow candidates...") - print("Config: \(config.numNumbers) numbers, \(config.numSymbols) symbols, max meow length \(config.maxLength)") - print("") - - // Generate 5 password candidates - var candidates: [(password: String, score: Double, analysis: String)] = [] - - for i in 1...5 { - let password = generateSecurePassword(from: catNames, config: config) - let (score, analysis) = analyzeComplexity(of: password) - candidates.append((password, score, analysis)) - - print("Candidate \(i): \(password)") - print(" Meow Score: \(String(format: "%.2f", score))/10.0") - print("") - } - - // Select the most secure password - guard let bestCandidate = candidates.max(by: { $0.score < $1.score }) else { - print("ERROR: Could not meow select best password") - return - } - - print("MOST SECURE PASSWORD MEOW SELECTED:") - print("Password: \(bestCandidate.password)") - print("Final Meow Score: \(String(format: "%.2f", bestCandidate.score))/10.0") - print("") - print(bestCandidate.analysis) - - // Option to copy to clipboard (basic approach) - if config.copyToClipboard { - #if os(macOS) - let task = Process() - task.launchPath = "/usr/bin/pbcopy" - let pipe = Pipe() - task.standardInput = pipe - task.launch() - - pipe.fileHandleForWriting.write(bestCandidate.password.data(using: .utf8)!) - pipe.fileHandleForWriting.closeFile() - task.waitUntilExit() - - print("") - print("Password copied to clipboard!") - #else - print("") - print("Clipboard functionality only available on macOS") - #endif - } else { - print("") - print("Use 'meowpass --copy' to copy password to clipboard") - } -} - -// Run the program -main() - From 3ce3abcc9382102f78cd15054ec4419690d48db7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:48:29 +0000 Subject: [PATCH 5/7] Fix typo: change 'Relavant' to 'Relevant' in ASCII art Co-authored-by: SpaceTrucker2196 <641430+SpaceTrucker2196@users.noreply.github.com> --- main.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.swift b/main.swift index a49ac56..acd4689 100644 --- a/main.swift +++ b/main.swift @@ -26,7 +26,7 @@ let asciiCats = [ ;; _,6 ,. ` `, ' `-._ // ,;.=..`_..=.,' -' ,'' _,// _00_____`"=,,,=="',___,,,-----'''----'_'_'_''______00_ - Meow Password Generators of Secure Relavant + Meow Password Generators of Secure Relevant __,,-' /' /'_,,--'' | ( From 311268fbaa6f39810a1f5cbb28c02e9a055e2fa8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:50:12 +0000 Subject: [PATCH 6/7] Fix default range and improve error messages with explicit defaults Co-authored-by: SpaceTrucker2196 <641430+SpaceTrucker2196@users.noreply.github.com> --- README.md | 4 ++-- main.swift | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ab9f697..b63f0be 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ MeowPassword supports both long and short option formats for convenience: | Long Option | Short | Description | Default | |-------------|-------|-------------|---------| -| `--numbers N` | `-n N` | Number of random numbers to insert (1-10) | 3-5 (random) | +| `--numbers N` | `-n N` | Number of random numbers to insert (1-10) | 1-4 (random) | | `--symbols N` | `-s N` | Number of symbols to insert (1-10) | 2 | | `--max-length N` | `-m N` | Maximum password length (15-50) | 25 | | `--test` | `-t` | Run comprehensive tests | - | @@ -124,7 +124,7 @@ MeowPassword supports both long and short option formats for convenience: **Numbers (`-n`, `--numbers`)** - Controls how many random digits (0-9) are inserted into the password - Range: 1-10 -- Default: Randomly chosen between 3-5 for variety +- Default: Randomly chosen between 1-4 for variety - Example: `-n 4` inserts exactly 4 random digits **Symbols (`-s`, `--symbols`)** diff --git a/main.swift b/main.swift index acd4689..758f19e 100644 --- a/main.swift +++ b/main.swift @@ -112,7 +112,7 @@ struct PasswordConfig { * @param arguments: Array of command line arguments */ init(arguments: [String]) { - var numNumbers = Int.random(in: 3...5) // Default range: 3-5 numbers + var numNumbers = Int.random(in: 1...4) // Default range: 1-4 numbers (randomly chosen) var numSymbols = 2 // Default value: 2 symbols var maxLength = 25 // Default max length: 25 characters var showTests = false @@ -131,10 +131,10 @@ struct PasswordConfig { numNumbers = value i += 1 // Skip next argument (the value) } else { - print("Warning: --numbers must be between 1-10. Using default.") + print("Warning: --numbers must be between 1-10. Using default: random 1-4") } } else { - print("Warning: --numbers requires a numeric value. Using default.") + print("Warning: --numbers requires a numeric value. Using default: random 1-4") } case "--symbols", "-s": @@ -143,10 +143,10 @@ struct PasswordConfig { numSymbols = value i += 1 // Skip next argument (the value) } else { - print("Warning: --symbols must be between 1-10. Using default.") + print("Warning: --symbols must be between 1-10. Using default: 2") } } else { - print("Warning: --symbols requires a numeric value. Using default.") + print("Warning: --symbols requires a numeric value. Using default: 2") } case "--max-length", "-m": @@ -155,10 +155,10 @@ struct PasswordConfig { maxLength = value i += 1 // Skip next argument (the value) } else { - print("Warning: --max-length must be between 15-50. Using default.") + print("Warning: --max-length must be between 15-50. Using default: 25") } } else { - print("Warning: --max-length requires a numeric value. Using default.") + print("Warning: --max-length requires a numeric value. Using default: 25") } case "--test", "-t": @@ -558,7 +558,7 @@ func showHelp() { OPTIONS: -n, --numbers N Number of random numbers to insert (1-10) - Default: 3-5 (randomly chosen) + Default: 1-4 (randomly chosen) -s, --symbols N Number of symbols to insert (1-10) Default: 2 From ca8a96fea8a25dd97f7c98da56b0a2ff957bba0d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Feb 2026 05:51:39 +0000 Subject: [PATCH 7/7] Improve error messages to mention both long and short option formats Co-authored-by: SpaceTrucker2196 <641430+SpaceTrucker2196@users.noreply.github.com> --- main.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/main.swift b/main.swift index 758f19e..136ca8d 100644 --- a/main.swift +++ b/main.swift @@ -131,10 +131,10 @@ struct PasswordConfig { numNumbers = value i += 1 // Skip next argument (the value) } else { - print("Warning: --numbers must be between 1-10. Using default: random 1-4") + print("Warning: --numbers/-n must be between 1-10. Using default: random 1-4") } } else { - print("Warning: --numbers requires a numeric value. Using default: random 1-4") + print("Warning: --numbers/-n requires a numeric value. Using default: random 1-4") } case "--symbols", "-s": @@ -143,10 +143,10 @@ struct PasswordConfig { numSymbols = value i += 1 // Skip next argument (the value) } else { - print("Warning: --symbols must be between 1-10. Using default: 2") + print("Warning: --symbols/-s must be between 1-10. Using default: 2") } } else { - print("Warning: --symbols requires a numeric value. Using default: 2") + print("Warning: --symbols/-s requires a numeric value. Using default: 2") } case "--max-length", "-m": @@ -155,10 +155,10 @@ struct PasswordConfig { maxLength = value i += 1 // Skip next argument (the value) } else { - print("Warning: --max-length must be between 15-50. Using default: 25") + print("Warning: --max-length/-m must be between 15-50. Using default: 25") } } else { - print("Warning: --max-length requires a numeric value. Using default: 25") + print("Warning: --max-length/-m requires a numeric value. Using default: 25") } case "--test", "-t":