Re:C++ has become a scripting language
by ollysb on Wednesday October 16, 2013 @08:28AM
(#6559221)
If we want to golf it, it would probably just be
certainly more readable than the C++ even if you're unfamiliar with ruby.
[ Parent
| on HN ]
Re:C++ has become a scripting language
by danmaz74 on Wednesday October 16, 2013 @08:33AM
(#6559250)
Well, if you really want to golf it, you can just write:
File.write ARGV[1], IO.readlines(ARGV[0]).sort.join('\n')
;)You're fired.
IO.write(ARGV[1], ARGF.lines.sort.join)
Re:C++ has become a scripting language
by Aaronneyer on Wednesday October 16, 2013 @08:53AM
(#6559349)
Here's the shortest I've gotten after looking at some of the comments:
IO.write$*.pop,ARGF.lines.sort.join
And yes, it does work even without the space between `write` and `$*`.Also after testing, I realized the ('\n') is not required for join. When you call 'lines', it still has the '\n' character in the string, and when you join, it defaults to join without a delimiter, so it's putting them back together with the newline still there.
Re:C++ has become a scripting language
by danmaz74 on Wednesday October 16, 2013 @08:48AM
(#6559333)
Wow, this is really sweet and esoteric (didn't know about ARGF) - but, reading the docs for ARGF, wouldn't it also try to ready from ARGV[1]?
Maybe this would fix it:
IO.write(ARGV.pop, ARGF.lines.sort.join('\n'))Yes, good catch. join('\n') is wrong though - IO#lines preserves newlines, the default join is the empty string, and you meant "\n" :)
Re:C++ has become a scripting language
by danmaz74 on Wednesday October 16, 2013 @11:14AM
(#6560089)
:)
Re:C++ has become a scripting language
by Aaronneyer on Wednesday October 16, 2013 @08:48AM
(#6559332)
I believe you still need to join on newline, the default is space. However you can save a couple characters by using `$*` instead of ARGV.
Also, trim out the space between the arguments and kill the parenthesis for the optimal golfing.
Is
> File.write ARGV[1], (IO.readlines ARGV[0]).sort.join('\n')
not valid Ruby?
File.open(ARGV[1], 'w') { |file| file.write(File.read(ARGV[0]).lines.sort.join) }
http://stackoverflow.com/questions/8278680/ruby-undefined-me...