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 mortonfox
from re import sub
COW = r'''
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
'''
def cowsay(text):
lines = []
text = sub(r' +', ' ', text)
while len(text) >= 40:
spacepos = text.rfind(' ', 0, 40)
if spacepos == -1:
lines.append(text[:39])
text = text[39:]
else:
lines.append(text[:spacepos])
text = text[spacepos + 1:]
if text:
lines.append(text)
max_len = max(len(line) for line in lines)
result = '\n ' + '_' * (max_len + 2) + '\n'
if len(lines) == 1:
result += '< ' + lines[0] + ' >\n'
else:
result += '/ %-*s \\\n' % (max_len, lines[0])
for i in range(1, len(lines) - 1):
result += '| %-*s |\n' % (max_len, lines[i])
result += '\\ %-*s /\n' % (max_len, lines[-1])
result += ' ' + '-' * (max_len + 2)
return result + 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 |
|| ||
'''
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
Nov. 15, 2017