三角暗算
脳を鍛える大人のDSトレーニングで,なにかと不得意な三角暗算難しいバージョンを,Rubyさんにやらせてみるぞ.もはや暗算ではないとかいう突っ込みはしないでね.
東北大学未来科学技術共同研究センター 川島隆太教授監修 脳を鍛える大人のDSトレーニング
- 出版社/メーカー: 任天堂
- 発売日: 2005/05/19
- メディア: Video Game
- 購入: 13人 クリック: 183回
- この商品を含むブログ (814件) を見る
#! /opt/local/bin/ruby class Array def to_i (0 ... self.size).each do |i| self[i] = self[i].to_i end end def sankaku if self.size == 1 self[0] elsif self.size == 2 self[0] + self[1] else new_arr = [] (0 ... (self.size - 2)).each do |i| new_arr[i] = minisankaku(self[i],self[i+1],self[i+2]) end new_arr.sankaku end end def minisankaku(a,b,c) return a + b + b + c end end puts "Please input numbers by separating with a space" print ">" l = gets.chomp nums = l.split(/\s/) nums.to_i puts "result:#{nums.sankaku}"
最初,入力する数字の個数(奇数か偶数か)で処理がややこしくなるかな?とか思いながら,Integerにeven?とかいうメソッドを追加してみたりしたけど,結局要らなかった.
配列の内容を全て整数値にするために,Stringでよく使うto_iを配列用に作りました.簡単.
三角暗算の処理で,each_indexを使うのも有りですが,それだとifの条件をぶち込み,breakしてループから抜けなきゃならないので,おそらく(0 ... (self.size - 2)).eachのほうが楽.to_iのトコはeach_indexで十分ですが,これは練習ですから.
ちなみに,足し算専用です.
実行結果です.
$ ruby sankaku.rb Please input numbers by delimiting space >1 2 3 4 5 6 7 result:256
たぶん正解.
あ,英語は適当です.