2015-12-01から1ヶ月間の記事一覧

インデックス付きの無限ループ(Ruby)

Kernel#loop と同じですが、インデックスが付きます。意外と使うと思うのだが。Kernel#loop をオーバーライドしてもいいのだが、ここではやめておきました。 module Kernel def loop_with_index(i = 0) begin yield(i) end while (i += 1) end end 実行例。…

文字列をあらゆる n 通リに分割する(Ruby)

String#separate です。分割のすべての場合を尽くします。配列で返します。 class String def separate(n) return [[self]] if n <= 1 or n > self.length if n == 2 st = self return [[st]] if st.length == 1 ar = [] (st.length - 1).times {|i| ar << […

任意の階層だけ繰り返しをネストする(Ruby)

※注 改訂版があります。 任意の階層だけ繰り返しをネストする(Ruby) -- 改訂版 - Camera Obscura 簡単にネストした繰り返しを実行できるようにしました。Integer#times の多重ネスト版です。配列にそれぞれの階層で繰り返す回数を入れます。配列の大きさを…

分数を循環小数に直すメソッドを作った(Ruby)

※注記 のちに全面的に書き直しました。 割り算をするとき、場合によっては割り切れず、小数部分が循環して無限に続くことがあります。これが「循環小数(recurring decimal)」です。これを扱うメソッドを作ってみました。 Rational クラスのインスタンス・…

Python のスライスを Ruby で実装(その2)

Pythonのリストのスライスに同等のメソッドをRubyで実装 - Camera Obscura 上の記事では Python のスライスを Ruby の Array に対して実装しましたが、ほんの少しの修正で完全に String にも適用できます。いわゆる「ダック・タイピング」ですね。なので、モ…

Object#methods の出力が protected メソッドも含むこと(Ruby)

Object#protected_methods もありますけれど。 class A def hello A.new.x end def x; puts "hello"; end protected :x end a = A.new p a.methods #=>[:hello, :x, :nil?, ...] p a.protected_methods #=>[:x] a.hello #=>"hello" a.x #=>protected method …

変数を比較するときに NoMethodError が出るのを回避する(Ruby)

変数が定義されている(nil or false でない)とき、その変数の評価をしたい場合がありますよね。例えば puts a if a > 0 とかです。これは a が定義されていない(nil or false の)場合、当然比較はできないのでエラー(NoMethodError)になります。これを…

Pythonのリストのスライスに同等のメソッドをRubyで実装

Python にはリスト(Ruby の配列)のスライスと呼ばれる操作があります。 >>> a = [0, 1, 2, 3] >>> a[0 : 2] [0, 1] みたいなやつです。Python のお勉強に、これと同等のメソッドを Ruby で実装してみました。Array#slice は既に存在するので、pickup とい…

virtualenv で Python 3.4 にNumPy を入れる

$ sudo apt-get install python3.4-devが必要です。あとは source bin/activate で環境に入ったあと、 $ pip install numpyで OK です。ついでに $ pip install scipyで SciPy もインストール。Linux Mint 17.2 で確認しました。参考: Python - Ubuntu 12.0…

プロジェクト・オイラーで遊ぶ(3)

ここの続きです。Ruby でやっています。 ※追記 本家サイトに登録すると、答えがチェックできるのですね。ここまではすべて正しいことを確認しました。答えは消しておきます。

プロジェクト・オイラーで遊ぶ(2)

ここの続きです。Ruby でやっています。

整数を2数の積に分ける/約数を求める

例えば 48 は、2 * 24, 3 * 16, 4 * 12, 6 * 8 に分けられますね。これを Ruby の Integer#divide2 メソッドとして実装しました。ペアを配列に格納して返します(そのようなペアがなければ、空の配列を返します)。引数に true を取れば、自明な 1 * 48 のよ…

プロジェクト・オイラーで遊ぶ(Ruby)

Project Euler - PukiWiki プロジェクト・オイラーというのは、数学の問題をプログラムで解いてみようというものです。全部解こうとか、そういう殊勝な決意ではないのですが、ちょっとだけ Ruby で遊んでみました。結果は保証の限りではありません。