Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for What Does the Cow Say? by siebenschlaefer
import re
COW = r'''
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
'''
def split_text(text):
"""Split 'text' into lines of maximal 39 characters."""
text = re.sub(r" +", r" ", text)
text = re.sub(r"([^ ]{39})(?=[^ ])", r"\1 ", text) + " "
text = re.sub(r"(.{,39}) ", r"\1\n", text)
return text.split("\n")[:-1]
def build_quote(lines):
"""Return 'lines' framed with line characters."""
max_length = max(map(len, lines))
result = [" {}".format("_" * (max_length + 2))]
if len(lines) == 1:
result.append("< {:{}} >".format(lines[0], max_length))
else:
result.append("/ {:{}} \\".format(lines[0], max_length))
for line in lines[1:-1]:
result.append("| {:{}} |".format(line, max_length))
result.append("\\ {:{}} /".format(lines[-1], max_length))
result.append(" {}".format("-" * (max_length + 2)))
return "\n".join(result)
def cowsay(text):
"""Return 'text' as said by the cow."""
return "\n{}{}".format(build_quote(split_text(text)), COW)
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
expected_cowsay_one_line = r'''
________________
< Checkio rulezz >
----------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
'''
expected_cowsay_two_lines = r'''
________________________________________
/ A \
\ longtextwithonlyonespacetofittwolines. /
----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
'''
expected_cowsay_many_lines = r'''
_________________________________________
/ Lorem ipsum dolor sit amet, consectetur \
| adipisicing elit, sed do eiusmod tempor |
| incididunt ut labore et dolore magna |
\ aliqua. /
-----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
'''
expected_cowsay_long_word = r'''
_________________________________________
/ looooooooooooooooooooooooooooooooooooon \
\ g /
-----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
'''
cowsay_one_line = cowsay('Checkio rulezz')
assert cowsay_one_line == expected_cowsay_one_line, 'Wrong answer:\n%s' % cowsay_one_line
cowsay_two_lines = cowsay('A longtextwithonlyonespacetofittwolines.')
assert cowsay_two_lines == expected_cowsay_two_lines, 'Wrong answer:\n%s' % cowsay_two_lines
cowsay_many_lines = cowsay('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do '
'eiusmod tempor incididunt ut labore et dolore magna aliqua.')
assert cowsay_many_lines == expected_cowsay_many_lines, 'Wrong answer:\n%s' % cowsay_many_lines
cowsay_long_word = cowsay("looooooooooooooooooooooooooooooooooooong")
assert cowsay_long_word == expected_cowsay_long_word, 'Wrong answer:\n%s' % cowsay_long_word
July 9, 2015