Skip to content

Instantly share code, notes, and snippets.

@hyone
Created July 5, 2011 15:21
Show Gist options
  • Save hyone/1065043 to your computer and use it in GitHub Desktop.
Save hyone/1065043 to your computer and use it in GitHub Desktop.
100 doors by ruby
# 安直にやる
doors1 = (1..100).inject([false] * 100) {|a,p|
a.each_with_index.map {|st,i| (i+1) % p == 0 ? !st : st }
}.map {|b| b ? :open : :close }
# 平方数だけが最終的 open になる、という性質を使う
doors2 = (1..100).map {|i|
root = Math.sqrt(i)
root == root.to_i ? :open : :close
}
# >> doors1
# => [:open, :close, :close, :open, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :open, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :close, :open]
# >> doors1 == doors2
# => true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment