Hatena::ブログ(Diary)

い〜さねっと RSSフィード

2008-11-28

算数にチャレンジ!!第624回問題

なんか極々狭い範囲で流行っていたので勢いで挑戦

算数にチャレンジ!!

算数にチャレンジ!! 第624回問題

問題を引用しておく

第624回問題(11月20日〜 11月26日)


 1〜512の数の書かれたカードが1枚ずつ、左から小さい順に、「1,2,3,4,・・・,511,512」と並んでいます。いま、次のような作業を行うことにします。

ア. 前から奇数番目のカードをすべて取り除く
イ. 前から偶数番目のカードをすべて取り除く

 まず、この作業を、ア→イ→ア→イ→・・・の順に、カードが残り1枚になるまで繰り返して行うことにします。

 このとき、最後に残るカードに書かれた数字を答えてください。

Rubyのことが色々わからんかったからid:hakobe932に教えてもらったりしながらやってみた

とりあえずこんな感じ

def remove(nums, i)
    while i < nums.size
        nums[i] = nil
        i += 2
    end
    nums.compact!
    return nums
end

def last_one(nums)
    i = 0
    while nums.size > 1
        nums = remove(nums, i%2)
        i += 1
    end

    return nums
end

nums = (1..512).to_a
nums = last_one(nums)
p nums

こういうちょっとしたプログラムでも,作ってみると色々わかって面白いね〜

センスは徐々につけていこう


追記

Rubyわからんって言ってたら,y_tsudaが教えてくれるということで,

華麗なプログラムを書いてコメントまでつけてくれました

算数にチャレンジ!! 第624回問題 をRubyで解く - y_tsuda’s blog - s21g


わかりやすい!

既存のクラスを拡張してたり,reject!メソッドを使っているところがクールですね

わざわざやってくれて感謝!

こうしてみると,いかに自分のコードがRubyっぽくないかがわかるなぁ…

Rubyらしい書き方も徐々に覚えていきたいところ


追記2

他にも2人がコードを公開してました

算数にチャレンジ! - はこべにっき@bkc - bkcグループ

算数にチャレンジの問題を解いてみた - まめ畑


とりあえずRubyらしさをもっと身につけたいなー


追記3

Javaはこんな感じに

RubyとかPerlとかゆるふわで困る - UDONCHAN

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証