-
-
Save latentflip/987222 to your computer and use it in GitHub Desktop.
g=Golf=Hash | |
def g.method_missing s, a | |
k=[] | |
case s.to_s[-1] | |
when ?1 | |
a.reduce :* | |
when ?2 | |
a.split.sort_by{|i| i[1] }*' ' | |
when ?3 | |
h1 1..a | |
when ?4 | |
a.map { |i| i. | |
sub(/(man.*)/,'hat(\1)'). | |
sub(/(dog.*)\)/,'\1(bone))'). | |
sub 'cat','dead' | |
} | |
when ?5 | |
a.size.times { |i| k += a.each_cons(i+1).to_a } | |
k | |
when ?6 | |
f="fizz" | |
b="buzz" | |
(1..a).map { |s| s%3 > 0 ? s%5 > 0 ? s : b : s%15>0 ? f : f+b } | |
when ?7 | |
*r=0 | |
l,x=a | |
m=l | |
a.map {|a| | |
x ? x=$_ : (m+=1) == a ? r[-1]=[l,a]*'-' : r<<l=m=a | |
} | |
r | |
when ?8 | |
*i=0,1 | |
a.times { i << i[-1]+i[-2] } | |
i[1..-2] | |
when ?9 | |
b = open(a).map {|e| e.chomp.split ', '} | |
g = z b | |
while (c,d = g.minmax_by {|e,s| s.size})[0][1].size*2 < b.size | |
b.select {|e,| e==c[0]}.map &:shift | |
b -= [k] | |
g = z b | |
end | |
d[0] | |
when ?z | |
a.group_by {|e,| e} | |
end | |
end |
601
x*2 < y
is shorter than
x < y/2.0
Under 600! (590)
In hole9 we can use minmax by instead of max_by then min_by.
586
We can use
[1,2,3]*' '
instead of
[1,2,3].join ' '
582
- hole2: don't need parentheses around ranges
- hole3:
a.times.size {}
is more efficient than
(1..a.size).map {}
579!
Hole 9: we can do the double association of minmax_by on a single line
576
- Hole 6: testing for
x>0
is more efficient than
x==0
566
- Hole 9:
array -= [[]]
is more efficient than
array.reject! &:empty?
Hole 6 if used x<1 instead of ==0 would not have had to rearrange order.
@morganp Heh, good spot. D'oh.
549
Seriously, make this end.
A step to far, but I guess all is fair in golf.
Added hole7 from @andrewmcdonough's repo in and back up to 617.
- My favourite bits are:
l,*x=a;
m=l
and
r<<l=m=a
- Also refactored method missing to check the last char instead of using a regex. Nicely obfuscates it since you have to use ?1 instead of /1/
615
- Lose the brackets in final sub method on hole 4
614
- Hole7: We can use
$_ #The last input line of string by gets or readline.
instead of nil
since we aren't using gets/readline.
613
- Pull multiple
<variable>=[]
into a singlek=[]
at top of method.
I updated my rake file to this
RSpec::Core::RakeTask.new(:spec) do |spec|
spec.rspec_opts = ["--fail-fast"]
spec.pattern = 'spec/**/*_spec.rb'
end
So will only show first fail, faster to work through the first build. Relies on RSpec 2.1 though.
612
- Hole7: Since we are just setting x to anything, we don't need the *. - with thanks to @jonmountjoy
606
- Fun with parallel assignments
*e=0 #=> e = [0]
*e=0,1 #=> e = [0,1]
e, = [1,2,3] #=> e = 1
602 is about as good as it gets for this route I think
603 Now :)
As mentioned in https://github.com/rkh/almost-sinatra: