Today, as I was writing a post on sorting in vim, I issued myself a challenge.
The challenge: without using a bash script, write a one liner that reads through all the lines in a file, sorts them and printed these sorted lines to stdout. Do so in under a minute without using the internet.
Before you continue, I encourage you to try it yourself. Get out a timer … Ready? Go!
In about 35 seconds, I had this:
print 'n'.join(sorted([line.strip() for line in open("file.txt")]))
Although this one-liner works, the filename is hardcorded. Quick fix (finished at 52 seconds):
import sys; print 'n'.join(sorted([line.strip() for line in open(sys.argv)]))
I find that self-issuing pseudorandom timed challenges is a fun way to train yourself to work under pressure. ‘Tis one of the many ways to gamify everyday life!
Sidenote: Do not fall into the trap of using one-liners in actual code. The Pythonic way to do this is:
import sys try: with open(sys.argv) as f: for line in f: print 'n'.join(sorted(line.strip())) except IOError: print "File does not exist."