Ruby solution (don't have enough rep to post to codegolf): def mad_addr(a,b) a == b && a == 2 ? (a.object_id + b.object_id)/a : a + b end Explanation: If a and b are both equal to 2 we can sum the values of the object_id's (the object_id of 2 is 5), and then divide the sum by 2. [Edit to add] For all other numbers this should behave as expected. I just learned the object_id of 2 is 5 while doing this exercise, and I…
a == b && a = 2 ? (a.object_id + b.object_id)/a : a + b It looks like you are missing an equals sign on a == 2. I just learned the object_id of 2 is 5 while doing this exercise, and I would like to continue learning more about how Ruby works. So if you have feedback, criticisms, or other ideas regarding this solution please feel free to share :) The object_id appears to be the tagged pointer that contains the value c…
As a result here are some new ways I learned to get 5 from 2 + 2:
require 'fiddle'
a = 2
b = 2
Fiddle::Pointer.new(a.object_id 5
Note: This happens because calling `to_value` on the `Fiddle::Pointer` object returns a Float (2.0000000000000004) instead of Fixnum (which was a surprise to me).And here's another using `Object#tap`:
a = 2
(a + a).tap{|x| a = x + 1}.send(:eval,'a')
=> 5
[1] These links were helpful for me. The last one is an MIT licensed book called, "Kestrels, Quirky Birds,
and Hopeless Egocentricity."http://stackoverflow.com/questions/1872110/is-ruby-pass-by-r...
http://patshaughnessy.net/2014/1/9/how-big-is-a-bignum
http://stackoverflow.com/questions/2818602/in-ruby-why-does-...
http://combinators.info/#kestrels
Edit: line formatting