Skip to content

Instantly share code, notes, and snippets.

@amomchilov
Last active January 22, 2022 18:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amomchilov/41a5b8b8e0aa5980273d1a84b77b1c66 to your computer and use it in GitHub Desktop.
Save amomchilov/41a5b8b8e0aa5980273d1a84b77b1c66 to your computer and use it in GitHub Desktop.
def letterPattern(size):
# TODO: your code goes here
result = ""
for i in range(size):
p = 65
for j in range(i, size):
result += chr(p)
p += 1
result += "\n"
return result
def main():
print("What size of pattern would you like?")
size = int(input())
pattern = letterPattern(size)
print(pattern)
import sys
import unittest
import inspect
class TestLetterPattern(unittest.TestCase):
def test_input_0(self):
self.assertEqual(letterPattern(0), "")
def test_input_1(self):
self.assertEqual(letterPattern(1), "AA")
def test_input_2(self):
expected = inspect.cleandoc("""\
ABBA
A A
""")
self.assertEqual(letterPattern(2), expected)
def test_input_3(self):
expected = inspect.cleandoc("""\
ABCCBA
AB BA
A A
""")
self.assertEqual(letterPattern(3), expected)
def test_input_4(self):
expected = inspect.cleandoc("""\
ABCDDCBA
ABC CBA
AB BA
A A
""")
self.assertEqual(letterPattern(4), expected)
def test_input_7(self):
expected = inspect.cleandoc("""\
ABCDEFGGFEDCBA
ABCDEF FEDCBA
ABCDE EDCBA
ABCD DCBA
ABC CBA
AB BA
A A
""")
self.assertEqual(letterPattern(7), expected)
def test_input_26(self):
expected = inspect.cleandoc("""\
ABCDEFGHIJKLMNOPQRSTUVWXYZZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXY YXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWX XWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVW WVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUV VUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTU UTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRST TSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRS SRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQR RQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQ QPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOP PONMLKJIHGFEDCBA
ABCDEFGHIJKLMNO ONMLKJIHGFEDCBA
ABCDEFGHIJKLMN NMLKJIHGFEDCBA
ABCDEFGHIJKLM MLKJIHGFEDCBA
ABCDEFGHIJKL LKJIHGFEDCBA
ABCDEFGHIJK KJIHGFEDCBA
ABCDEFGHIJ JIHGFEDCBA
ABCDEFGHI IHGFEDCBA
ABCDEFGH HGFEDCBA
ABCDEFG GFEDCBA
ABCDEF FEDCBA
ABCDE EDCBA
ABCD DCBA
ABC CBA
AB BA
A A
""")
self.assertEqual(letterPattern(26), expected)
if __name__ == '__main__':
if len(sys.argv) == 2 and sys.argv[1] == "--test":
argv_for_unit_test = sys.argv.copy()
argv_for_unit_test.pop(1) # Remove the "--test" flag
unittest.main(argv = argv_for_unit_test)
else:
main()
@amomchilov
Copy link
Author

amomchilov commented Jan 22, 2022

When you call this like python3 letter_pattern.py, it will prompt you for the size of the pattern you want interactively.

If you instead run it with python3 letter_pattern.py --test, it will automatically test the patterns of size 0, 1, 2, 3, 4, 7 and 26.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment