Skip to content

Commit

Permalink
Includes Palindrome challenge.
Browse files Browse the repository at this point in the history
  • Loading branch information
Caul58 committed Mar 29, 2024
1 parent 69c273b commit 29130e7
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
 
[< Previous](@previous)           [Home](Introduction)           [Next >](@next)
# Challenge 11: Removing characters
# Challenge 11: Disjoint Sets
Create a function that receives two strings (str1, str2) and returns two processed strings (out1, out2) with the following instructions about the process.
* out1 will contain all characters present in str1 but *not* in str2.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*:
&nbsp;
[< Previous](@previous)           [Home](Introduction)           [Next >](@next)
# Challenge 12: Is it a palindrome?
Create a function that receives a string and returns a boolean, true if the given string is a palindrome, false otherwise.
* Palindrome is a word or phrase that it's the same if read from right to left or in inverse order.
* Discard spaces, punctuation signs and acentuation.
Escribe una función que reciba un texto y retorne verdadero o falso (Boolean) según sean o no palíndromos.
* Un Palíndromo es una palabra o expresión que es igual si se lee de izquierda a derecha que de derecha a izquierda.
* NO se tienen en cuenta los espacios, signos de puntuación y tildes.
*/

import Foundation

func isPalindrome(_ str: String) -> Bool {
// process given string
var processedString = str
.lowercased()
.replacingOccurrences(of: " ", with: "")
.replacingOccurrences(of: ".", with: "")
.replacingOccurrences(of: ",", with: "")
.replacingOccurrences(of: ";", with: "")
.replacingOccurrences(of: "á", with: "a")
.replacingOccurrences(of: "é", with: "e")
.replacingOccurrences(of: "í", with: "i")
.replacingOccurrences(of: "ó", with: "o")
.replacingOccurrences(of: "ú", with: "u")

return String(processedString) == String(processedString.reversed())
}

func isPalindromeRegExp(_ str: String) -> Bool {
// process given string
var processedString = str
.lowercased()
.folding(options: .diacriticInsensitive, locale: .current) // Removes acentuation
.replacing(/[^a-z0-9]/, with: "")

return String(processedString) == String(processedString.reversed())
}

print("""
Test 1:
Ana lleva al oso la avellana.
Result: \(isPalindrome("Ana lleva al oso la avellana."))
Result RegExp: \(isPalindromeRegExp("Ana lleva al oso la avellana."))
""")
print("""
Test 2:
Adivina ya te opina, ya ni miles origina, ya ni cetro me domina, ya ni monarcas, a repaso ni mulato carreta, acaso nicotina, ya ni cita vecino, anima cocina, pedazo gallina, cedazo terso nos retoza de canilla goza, de pánico camina, ónice vaticina, ya ni tocino saca, a terracota luminosa pera, sacra nómina y ánimo de mortecina, ya ni giros elimina, ya ni poeta, ya ni vida
Result: \(isPalindrome("Adivina ya te opina, ya ni miles origina, ya ni cetro me domina, ya ni monarcas, a repaso ni mulato carreta, acaso nicotina, ya ni cita vecino, anima cocina, pedazo gallina, cedazo terso nos retoza de canilla goza, de pánico camina, ónice vaticina, ya ni tocino saca, a terracota luminosa pera, sacra nómina y ánimo de mortecina, ya ni giros elimina, ya ni poeta, ya ni vida"))
Result RegExp: \(isPalindromeRegExp("Adivina ya te opina, ya ni miles origina, ya ni cetro me domina, ya ni monarcas, a repaso ni mulato carreta, acaso nicotina, ya ni cita vecino, anima cocina, pedazo gallina, cedazo terso nos retoza de canilla goza, de pánico camina, ónice vaticina, ya ni tocino saca, a terracota luminosa pera, sacra nómina y ánimo de mortecina, ya ni giros elimina, ya ni poeta, ya ni vida"))
""")
print("""
Test 3:
¿Qué os ha parecido el reto?
Result: \(isPalindrome("¿Qué os ha parecido el reto?"))
Result RegExp: \(isPalindromeRegExp("¿Qué os ha parecido el reto?"))
""")
//: [Next](@next)
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
* [Challenge #8: From decimal to binary](Challenge#08)
* [Challenge #9: Morse Code](Challenge#09)
* [Challenge #10: Balanced Expressions](Challenge#10)
* [Challenge #11: Disjoint Sets](Challenge#11)
* [Challenge #12: Is it a palindrome?](Challenge#12)
* [...]
* [Challenge #43: Special by Halloween](Challenge#43)
* [Challenge #44: Boomerang](Challenge#44)
Expand Down
1 change: 1 addition & 0 deletions Challenges2022.playground/contents.xcplayground
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<page name='Challenge#09'/>
<page name='Challenge#10'/>
<page name='Challenge#11'/>
<page name='Challenge#12'/>
<page name='Challenge#43'/>
<page name='Challenge#44'/>
<page name='Challenge#45'/>
Expand Down

0 comments on commit 29130e7

Please sign in to comment.