<?xml version="1.0" encoding="UTF-8"?>
<code>
  <code>class RSExp

	def equate(xp)
		(xp + 300 * (2 ** (xp.to_f / 7))).floor
	end

	def level_to_xp(level)
		xp = 0.0

		(1...level).each do |lvl|
			xp += equate(lvl)
		end

		(xp / 4).floor
	end

	def xp_to_level(xp)
		level = 1

		while level_to_xp(level) &lt; xp
			level += 1
		end

		level
	end

end

rs = RSExp.new

(1...100).each do |lvl|
	puts("level #{lvl}: #{rs.level_to_xp(lvl)}")
end</code>
  <comment>Noob to Ruby here. Any way to make this cleaner?</comment>
  <created-at type="datetime">2008-09-20T03:43:30+00:00</created-at>
  <id type="integer">498</id>
  <language>Ruby</language>
  <permalink>cleaner-ruby</permalink>
  <refactors-count type="integer">5</refactors-count>
  <title>Cleaner Ruby</title>
  <trackback-url></trackback-url>
  <updated-at type="datetime">2008-09-22T19:05:59+00:00</updated-at>
  <user-id type="integer">1027</user-id>
  <refactors type="array">
    <refactor>
      <code># Duplicated post, please help to delete</code>
      <code-id type="integer">498</code-id>
      <comment></comment>
      <created-at type="datetime">2008-09-20T23:34:59+00:00</created-at>
      <id type="integer">27707</id>
      <language>Ruby</language>
      <rating type="integer">1</rating>
      <ratings-count type="integer">1</ratings-count>
      <title>On Cleaner Ruby</title>
      <user-id type="integer">856</user-id>
      <user-name>Tien Dung</user-name>
      <user-website>http://codemonkeycode.blogspot.com/</user-website>
    </refactor>
    <refactor>
      <code>def equate(level)
  (level + 300 * (2 ** (level / 7.0))).floor
end

x = 0
(1...100).each do |level|
  puts("level #{level}: #{(x/4).floor}")
  x = x + equate(level)
end
</code>
      <code-id type="integer">498</code-id>
      <comment>Man, you made your code over complicated and ugly.

* Why you use class as a namespace?
* Why you create a function called xp_to_level and don't use it in your program?
* Why you don't reuse computation result from previous step?
* Why you name a function that no one can understand what does it mean without any comment? (what does xp stand for).

Here is an equivalent program that is faster, clearer and shorter.</comment>
      <created-at type="datetime">2008-09-20T23:57:43+00:00</created-at>
      <id type="integer">27750</id>
      <language>Ruby</language>
      <rating type="integer">0</rating>
      <ratings-count type="integer">0</ratings-count>
      <title>On Cleaner Ruby</title>
      <user-id type="integer">856</user-id>
      <user-name>Tien Dung</user-name>
      <user-website>http://codemonkeycode.blogspot.com/</user-website>
    </refactor>
    <refactor>
      <code>class RandomClassName &lt; Struct.new(:level)
  RANDOMLY_CHOSEN_CONSTANT_1 = 300
  RANDOMLY_CHOSEN_CONSTANT_2 = 7.0
  
  def some_kind_of_conversion_from_level
    (calculation_method_just_because_by_level / 4.0).floor
  end
  
  def to_s
    "level #{level}: #{some_kind_of_conversion_from_level}"
  end
  
  protected
    def calculation_method_just_because_by_level
      1.enum_for(:upto, level).inject do |randomly_chosen_name,name_that_describes_what_this_is|
        randomly_chosen_name + calculation_method_just_because(name_that_describes_what_this_is)
      end
    end    
  
    def calculation_method_just_because(randomly_chosen_variable)
      interesting_calcuation = (randomly_chosen_variable / RANDOMLY_CHOSEN_CONSTANT_2) ** 2
      (randomly_chosen_variable + RANDOMLY_CHOSEN_CONSTANT_1 * interesting_calcuation).floor
    end
end

100.times do |level|
  puts RandomClassName.new(level + 1)
end</code>
      <code-id type="integer">498</code-id>
      <comment></comment>
      <created-at type="datetime">2008-09-22T01:45:00+00:00</created-at>
      <id type="integer">28395</id>
      <language>Ruby</language>
      <rating type="integer">3</rating>
      <ratings-count type="integer">3</ratings-count>
      <title>On Cleaner Ruby</title>
      <user-id type="integer">938</user-id>
      <user-name>Adam</user-name>
      <user-website></user-website>
    </refactor>
    <refactor>
      <code></code>
      <code-id type="integer">498</code-id>
      <comment>@Adam: cool refactoring :D</comment>
      <created-at type="datetime">2008-09-22T01:53:58+00:00</created-at>
      <id type="integer">28396</id>
      <language>Ruby</language>
      <rating type="integer">0</rating>
      <ratings-count type="integer">0</ratings-count>
      <title>On Cleaner Ruby</title>
      <user-id type="integer">856</user-id>
      <user-name>Tien Dung</user-name>
      <user-website>http://codemonkeycode.blogspot.com/</user-website>
    </refactor>
    <refactor>
      <code>  .-&#180;&#175;&#175;&#175;`-.
,&#180;          `.
|             \
|              \
\           _  \
,\  _    ,&#180;&#175;,/&#175;)\
( q \ \,&#180; ,&#180; ,&#180;&#175;)
 `._,)     -&#180;,-&#180;)
   \/         ,&#180;/
    )        / /
   /       ,&#180;-&#180;</code>
      <code-id type="integer">498</code-id>
      <comment>Oh lawd</comment>
      <created-at type="datetime">2008-09-22T19:05:58+00:00</created-at>
      <id type="integer">28659</id>
      <language>Ruby</language>
      <rating type="integer">0</rating>
      <ratings-count type="integer">0</ratings-count>
      <title>On Cleaner Ruby</title>
      <user-id type="integer">1027</user-id>
      <user-name>pootcode</user-name>
      <user-website></user-website>
    </refactor>
  </refactors>
</code>
