From 4f83176521714352bb4db4b461bad845f8a29174 Mon Sep 17 00:00:00 2001 From: anebz Date: Thu, 11 Apr 2019 14:19:07 +0200 Subject: [PATCH] chapter 1 hackerrank exercises 11/04 --- .../hackerrank/alternating_characters.py | 31 +++++++++++++++++++ .../hackerrank/funny_string.py | 28 +++++++++++++++++ .../hackerrank/reduce_to_palindrome.py | 31 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 01. Arrays and strings/hackerrank/alternating_characters.py create mode 100644 01. Arrays and strings/hackerrank/funny_string.py create mode 100644 01. Arrays and strings/hackerrank/reduce_to_palindrome.py diff --git a/01. Arrays and strings/hackerrank/alternating_characters.py b/01. Arrays and strings/hackerrank/alternating_characters.py new file mode 100644 index 0000000..8f33af2 --- /dev/null +++ b/01. Arrays and strings/hackerrank/alternating_characters.py @@ -0,0 +1,31 @@ +# Algorithms > Strings > Alternating Characters +# https://www.hackerrank.com/challenges/alternating-characters + +import unittest + +def alternatingCharacters(s): + if len(set(s)) == 1: + return len(s) - 1 + + res = len(s) - max(s.count("AB"), s.count("BA"))*2 + if s[0] == s[-1]: + res -= 1 + return res + +class Test(unittest.TestCase): + + data = [('AAAA', 3), + ('BBBBB', 4), + ('ABABABAB', 0), + ('BABABA', 0), + ('AAABBB', 4), + ('ABABABAA', 1)] + + + def test(self): + for test_string, expected in self.data: + res = alternatingCharacters(test_string) + self.assertEqual(res, expected) + +if __name__ == "__main__": + unittest.main() diff --git a/01. Arrays and strings/hackerrank/funny_string.py b/01. Arrays and strings/hackerrank/funny_string.py new file mode 100644 index 0000000..ea407f3 --- /dev/null +++ b/01. Arrays and strings/hackerrank/funny_string.py @@ -0,0 +1,28 @@ +# Algorithms > Strings > Funny string +# https://www.hackerrank.com/challenges/funny-string/ + +import unittest + +def funnyString(s): + if len(s) < 2: + return "Funny" + + for i in range(1,len(s)//2): + if abs(ord(s[i]) - ord(s[i-1])) != abs(ord(s[-i]) - ord(s[-i-1])): + return "Not Funny" + + return "Funny" + +class Test(unittest.TestCase): + + data = [('acxz', 'Funny'), + ('bcxz', 'Not Funny'), + ('bcccd', 'Funny')] + + def test(self): + for test_string, expected in self.data: + res = funnyString(test_string) + self.assertEqual(res, expected) + +if __name__ == "__main__": + unittest.main() diff --git a/01. Arrays and strings/hackerrank/reduce_to_palindrome.py b/01. Arrays and strings/hackerrank/reduce_to_palindrome.py new file mode 100644 index 0000000..4ea74d9 --- /dev/null +++ b/01. Arrays and strings/hackerrank/reduce_to_palindrome.py @@ -0,0 +1,31 @@ +# Algorithms > Strings > The Love-Letter Mystery +# https://www.hackerrank.com/challenges/the-love-letter-mystery + +import unittest + +def theLoveLetterMystery(s): + + if len(s) == 1: + return 0 + + count = 0 + for i in range(len(s)//2): + count += abs(ord(s[i]) - ord(s[-1-i])) + + return count + +class Test(unittest.TestCase): + + data = [('abc', 2), + ('abcba', 0), + ('abcd', 4), + ('cba', 2)] + + + def test(self): + for test_string, expected in self.data: + res = theLoveLetterMystery(test_string) + self.assertEqual(res, expected) + +if __name__ == "__main__": + unittest.main()