2015-01-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 で遊んでみました。結果は保証の限りではありません。

Melborne さんの華麗な技巧を鑑賞する(Ruby)

落ちていくRubyistのためのMethopオブジェクト すごく技巧的なので驚きました。何だかよくわからなかったので、調べてみました。まずコピペです。 class Methop def self.[](method) new(method).build end def initialize(method) @method = method end def…

メソッドを変数に入れて呼び出す(Ruby)

メソッドを変数に入れて呼び出すのは、Python では簡単。 def b(): print("test") a = b a() #=>"test" これは Ruby でもできる。Ruby がおもしろいのは、推奨されない手法を使うのが多少面倒になっていること。Object#send メソッドを使う。 a = def b puts…

クラスの中からトップレベルのメソッドを呼び出す(Ruby)

同名のインスタンス・メソッドがなければトップレベルのメソッドが呼び出される。 class A def c; d; end end def d; puts "top"; end A.new.c #=>"top" 同名のインスタンス・メソッドがあれば、そちらを呼び出す。 class A def d; puts "inner"; end def c;…

Python によるオブジェクト指向ジャンケン・プログラム

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング作者: 小森裕介,アクロクエストテクノロジー株式会社出版社/メーカー: 技術評論社発売日: 2004/12/01メディア: 単行本購入: 10人 クリック: 217回この商品を含む…

Ruby でウェブ魚拓してみる

下はまともなプログラムではないので、無視して下さい。(2018/4/15) 有名な「ウェブ魚拓」というウェブ・サービスがあって、ウェブページを保存するのに便利だが、ページの内容によってはすぐに削除されてしまうので、自分でつくってみた。使い方は、ruby …

円を動かしてビリヤードの玉のように跳ね返らせる

こちらです。遊んでみて下さい。HTML はここのとほぼ同じです(読み込む JavaScript のURL を変えるだけ)。円は完全弾性衝突をします。

Ruby で Windows アプリケーション

という題は羊頭狗肉で、とりあえずここにメモを作っておく。Google Ruby の win32ole で Windows GUI アプリのキー操作を自動化する | Futurismo RubyからWSHShellオブジェクトを使う Ruby on Windows: Automating Applications with Ruby & The Windows Scr…

HTML5 の Canvas でしょうもないものを作った(その2)

こちら。今度は円が動きます。続編はこちらです。

はてなブログでリンクを別ウィンドウで開くようにする

はてなダイアリーのように、はてなブログでもリンクを別ウィンドウで開けるようにしてみました(日記の中でだけ有効です)。[デザイン]→[カスタマイズ]→[フッタ]の HTML を記述する部分に、以下のコードを貼り付けて下さい。 <script type="text/javascript"> var ndlist = document.querySe…

HTML5 の Canvas でしょうもないものを作った

こちら。前回のエントリと同じものを、HTML5 の Canvas で作ってみました。マウスでクリックしたところに円を描きます。ランダムな色がちょっとキレイかな。

Green Shoes を使ってみる

Ruby の簡便な GUI ライブラリである Green Shoes を使ってみました。 The Green Shoes Manual // Hello!とても手軽に使えます。例えばこんな感じ。マウスでクリックしたところに円を書きます。 #! /usr/bin/env ruby require 'bundler/setup' require 'gree…

質問の線形代数の行列の問題を Ruby で

質問の線形代数の行列の問題をPythonで解いてみた。 - rscの日記 rsc さんが Python でやっているのを、Ruby でやってみました。元の問題はこれです。自力では解けませんでした。組み合わせの数を劇的に減らすのがコツですね。 ans = [] target = [12, 20, 2…

Linux Mint での Ruby の起動を楽にする

Linux Mint(あるいは Ubuntu)で Ruby を使う場合、rbenv でバージョン管理をしていることが多いと思います。その際、起動時に設定が必要なので、それを一々実行するのが面倒です。で、シェルスクリプトで自動化しました。シェルスクリプトを実行すれば、設…

Linux Mint で複数のバージョンの Python を使う

Linux Mint(あるいは Ubuntu)には最初から Python が入っています。Linux Mint 17.2 には複数のバージョンの Python が入っているので、virtualenv を使って複数のバージョンを切り替えられるようにしてみます。まず $ python として [Tab] キーを二回押す…

Ruby は管理者権限で実行できない

rubyインストールしてあるのにsudoすると「/usr/bin/env: ruby: そのようなファイルやディレクトリはありません」と言われる - プログラマ 福重 伸太朗 〜基本へ帰ろう〜 上記事が参考になる。./.rbenv/.bashrc に以下を追加して、$ source ~/.rbenv/.bashrc…

取り敢えず WEBrick を使ってみる

WEBrick は Ruby の標準添付ライブラリで、簡易サーバです。取り敢えず動かしてみる。まず、『Ruby逆引きハンドブック』の p.530 のコードをコピペ。これを実行。 #! /usr/bin/env ruby require 'bundler/setup' require 'webrick' opts = {:BindAddress => …

n次対称群

クラス Group についてはひとつ前のエントリを見てください。 変数 od に次数を入れます。かなり時間がかかる。自分の環境だと、5次で 40秒くらい、6次で 2.8時間くらい。次数が大きくなったら、結合法則の確認をスキップした方がいいかも知れない。 od = 5 …