Forked from bernerdschaefer/Evolution of a Ruby Programmer.rb
Created
February 13, 2010 19:06
-
-
Save akitaonrails/303626 to your computer and use it in GitHub Desktop.
Revisions
-
bernerdschaefer revised this gist
Feb 5, 2010 . 1 changed file with 20 additions and 8 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,6 +7,7 @@ def factorial(x) end end puts factorial(6) puts factorial(0) # Discovered #upto def factorial(x) @@ -17,45 +18,52 @@ def factorial(x) factorial end puts factorial(6) puts factorial(0) # Discovered Enumerators def factorial(x) x.downto(1).inject(1) { |m, i| m * i } end puts factorial(6) puts factorial(0) # Discovered Range+Inject def factorial(x) (1..x).inject(1) { |m, i| m * i } end puts factorial(6) puts factorial(0) # Embraced 1.8.7/1.9 def factorial(x) (1..x).inject(:*) || 1 end puts factorial(6) puts factorial(0) # Discovered Ternary Operators def fac(x); x == 0 ? 1 : x * fac(x - 1);end puts fac(6) puts fac(0) # Discovered Operator Precedence def factorial(x) i = 1 and (i *= x and x -= 1 while x > 0) or i end puts factorial(6) puts factorial(0) # Discovered Rails class Numeric def fact (1..self).inject(:*) || 1 end end puts 6.fact puts 0.fact # Discovered Camping def F(x)((1..x).inject(:*)||1)end;p(F(6));p(F(0)) # Discovered Magic module Math @@ -65,7 +73,7 @@ def method_missing(method, *args) if method.to_s =~ /^fact(orial)?/ class_eval <<-EOS def #{method}(x) (1..x).inject(:*) || 1 end EOS send(method, *args) @@ -76,10 +84,12 @@ def #{method}(x) end end puts Math.fact(6) puts Math.fact(0) # Discovered Hash Magic FACTORIALS = Hash.new { |h, k| h[k] = (1..k).inject(:*) || 1 } puts FACTORIALS[6] puts FACTORIALS[0] # Attends Seattle.rb require 'rubygems' @@ -99,8 +109,10 @@ class << self end end end puts Factorial.factorial(6) puts Factorial.factorial(0) # Premature Optimizer + eval class << self; class_eval "def factorial(x); case x; #{(0..100).map{|i|"when #{i} then #{(1..i).inject(:*) || 1};"}}; else (1..x).inject(:*) || 1 end end" end puts factorial(6) puts factorial(0) -
bernerdschaefer created this gist
Feb 5, 2010 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,106 @@ # Newbie Programmer def factorial(x) if x == 0 return 1 else return x * factorial(x - 1) end end puts factorial(6) # Discovered #upto def factorial(x) factorial = 1 1.upto(x) do |i| factorial *= i end factorial end puts factorial(6) # Discovered Enumerators def factorial(x) x.downto(1).inject(1) { |m, i| m * i } end puts factorial(6) # Discovered Range+Inject def factorial(x) (1..x).inject(1) { |m, i| m * i } end puts factorial(6) # Embraced 1.8.7/1.9 def factorial(x) (1..x).inject(:*) end puts factorial(6) # Discovered Ternary Operators def fac(x); x == 0 ? 1 : x * fac(x - 1);end puts fac(6) # Discovered Operator Precedence def factorial(x) i = 1 and (i *= x and x -= 1 while x > 0) or i end puts factorial(6) # Discovered Rails class Numeric def fact (1..self).inject(:*) end end puts 6.fact # Discovered Camping def F(x)(1..x).inject(:*)end;p(F(6)) # Discovered Magic module Math extend self def method_missing(method, *args) if method.to_s =~ /^fact(orial)?/ class_eval <<-EOS def #{method}(x) (1..x).inject(:*) end EOS send(method, *args) else super end end end puts Math.fact(6) # Discovered Hash Magic FACTORIALS = Hash.new { |h, k| h[k] = (1..k).inject(:*) } puts FACTORIALS[6] # Attends Seattle.rb require 'rubygems' require 'inline' class Factorial class << self inline do |builder| builder.c %q{ long factorial(int value) { long result = 1, i = 1; for (i = 1; i <= value; i++) { result *= i; } return result; } } end end end Factorial.factorial(6) # Premature Optimizer + eval class << self; class_eval "def factorial(x); case x; #{(0..100).map{|i|"when #{i} then #{(1..i).inject(:*)};"}}; else (1..x).inject(:*) end end" end puts factorial(6)