Great quiz. Thanks for writing it. Sorry to post this after exactly
48 hours, but I have to start a road trip in about 10 minutes, and
wanted to get this out first.
I managed to get the code down to 15 lines without semicolons or
anything particularly in need of wrapping. However, 42 seemed like
such a good number that I padded my solution out with poems by Ikkyu.
I couldn't quite wrap my head around a solution that avoided the
string form of class_eval, but hopefully someone managed it.
# so many paths go up from the foothills
# but one moon grazes the peak
# stare at it until your eyes drop out
# this desk this wall this unreal page
# the edges of the sword are life and death
# no one knows which is which
# inside the koan clear mind
# gashes the great darkness
class Module
def attribute(name, &block)
return name.map {|k,v| attribute(k) {v}} if name.is_a?(Hash)
define_method("__#{name}__", block || proc{nil})
class_eval <<-ZEN
attr_writer :#{name}
def #{name}
defined?(@#{name}) ? @#{name} : @#{name} = __#{name}__
end
def #{name}?
true unless #{name}.nil?
end
ZEN
end
end
# clouds endless clouds climbing beyond
# ask nothing from words on a page
# lone moon, no clouds
# we stumble through the night
# long life
# the wild pines want it too
# mirror facing a mirror
# nowhere else
# only one koan matters
# you