ブログトップ 記事一覧 ログイン 無料ブログ開設

まめ畑 このページをアンテナに追加 RSSフィード Twitter


2008-11-29 算数にチャレンジの問題を解いてみた

[]算数にチャレンジの問題を解いてみた 02:47 算数にチャレンジの問題を解いてみたを含むブックマーク

高校から続けている、算数にチャレンジ!!の第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


という事で、やってみました。

y_tsuday_tsuda 2008/11/29 09:55 残念ながら、僕は同じ大学じゃなかったりするんですよ。

con_mamecon_mame 2008/11/29 13:36 >y_tsuda
そうだったんですか。
申し訳ないです。。。