算数にチャレンジの問題を解いてみた
高校から続けている、算数にチャレンジ!!の第624回問題を解いてみた。
本当は、算数の知識で解答するべきなんだけれど数字にがれなのでRubyでやってみた。
解答になるので、まだ解いていない方はお気をつけてください。
問題は
1〜512の数の書かれたカードが1枚ずつ、左から小さい順に、「1,2,3,4,・・・,511,512」と並んでいます。いま、次のような作業を行うことにします。
ア. 前から奇数番目のカードをすべて取り除く
イ. 前から偶数番目のカードをすべて取り除くまず、この作業を、ア→イ→ア→イ→・・・の順に、カードが残り1枚になるまで繰り返して行うことにします。
このとき、最後に残るカードに書かれた数字を答えてください。
def run(nums, flag = true) return nums[0] if nums.length == 1 nums.reject!{|i| (nums.index(i)%2).zero? == flag} run(nums, !flag) end result = run((1..512).to_a) puts result
で、342。
こんな感じでいかがでしょうか?
出題曜日を忘れてて、昨日解答して191位ですね。
意外と解答している人いたのですね
解答をして、さっきTwitterのログとか読んでたら解答している人がいた。
しかも、同じ大学の気配。
ということで、リンク張ってみる。
2008-11-28 - い〜さねっと
算数にチャレンジ! - はこべにっき@bkc - bkcグループ
算数にチャレンジ!! 第624回問題 をRubyで解く - y_tsuda's blog - s21g
僕の解答は、y_tsudaさんと同じ感じですが、y_tsudaさんの解答の方が綺麗ですね。
再帰なんか使わなくても、reject!で破壊的に消し去ってるんだからwhileでいいよな・・・。
何やってんだ俺・・・。
こちらはJavaでやった例
RubyとかPerlとかゆるふわで困る - UDONCHAN
という事で、やってみました。