Ruby

Project Euler 25を解く

Clojure, Haskell & Ruby Vs Euler 25 | BEST IN CLASS Problem 25 - Project Euler

書いてみた > 人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか

まずは元ネタ: 人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか これを解いてみました.久し振りにRubyを書いたので,かなり微妙. さらにいくつかまずいと思う部分があるけど,無視してガーっと書いたので,突っ込み大歓迎です: def parse_in…

Open3で標準出力と標準エラー出力からの出力を全て読む

RubyにはOpen3というプロセスの起動とプロセス間通信用にIOポートの接続を行う便利なライブラリがある.しかし,起動したプロセスの標準出力と標準エラー出力の両方を読もうとすると,デッドロックのような状態になってなかなか上手く行かない.ググってみる…

切り上げ

10 なら 10、 11 なら 20 になる関数を作りたい - IT戦記 x + a - ((x % a) || a); とか: Math.ceil(x / a) * a; とか…JavaScriptは良く知らないので(いや手元のFirebugを使えば良いんだけど),Cで書き直してみる: #include <math.h> int main() { int i; int a = 10</math.h>…

ScalaパズルをRubyで書くと

リストから表を生成する - Onion開発再開しつつある日記 短くなるかなー? $ ruby -e '$;=",";puts"<table>",ARGV.join.scan(/\d(?:.?\d){0,2}/).map(&:split).map{|x|s="";3.times{s+="<td>#{x.shift}</td>"};"<tr>#{s}</tr>"},"</table>"' 1, 2, 3, 4, 5, 6, 7 こうかな.

mkmf.rbが提供するhave_headerにて実行されるCPP="gcc -E"を,C++用にCPP="g++ -E"にする

require "mkmf" Config::CONFIG["CPP"] = "g++ -E" # … have_header("hoge/foo.hpp") # … Config自体はmkmf.rbでrequireされているrbconfig.rbで定義されている模様.

REXMLのDoS脆弱性

REXMLのDoS脆弱性 入力の量や構造の複雑さがそのままDoS攻撃に繋がるということか.再帰的なアルゴリズムだと,スタックを消費して落ちそう → スタック数に制限を設けることができるようにして,適切な例外を設定して回避,とかするのかな?個人的にWebアプ…

メソッド定義のデフォルト式はどう実現するのか?

Rubyではメソッドの定義で,仮引数のデフォルト値を与える式も定義することができる. # この場合はcとdがデフォルト値が与えられた仮引数という def foo(a, b, c = [], d = {})ことになる [a, b, c, d] end foo(0, 1, 2, 3) => [0, 1, 2, 3] foo(0, 1, 2) =…

Ruby拡張ライブラリのコード中で`オブジェクトがあるクラスのインスタンスである'ことを確認する方法

こうかな? VALUE rb_cUserDefined; /* … */ VALUE test(VALUE self, VALUE input) { if (rb_cUserDefined == rb_obj_class(input)) { return Qtrue; } else { return Qfalse; } } /* … */ void Init_your_ext(void) { /* … */ rb_cUserDefined = rb_define_…

C++でClass#allocateを登録する

Ruby 1.8.7 p72 VALUE rb_cUserDefined; /* … */ VALUE your_class_singleton_allocate(VALUE klass) { VALUE allocated; /* … */ return allocated; } /* … */ #ifdef __cplusplus extern "C" { #endif void Init_your_ext(void) { /* … */ rb_cUserDefined…

ちょっと思い付いたコード

ObjectSpace.each_object.to_a.select {|obj| obj.class.equal?(Class) and obj.methods.any? {|m| m == "new" or m == "allocate"}}.length クラスのうち,インスタンスを生成することができるものを集めて,その長さを返す.

RSpecのbeforeはどう書いた方が良いかな?

次のRSpecを使ったテストコードはどちらが良いだろうか? Type 1 describe Foo, "hoge" do before do @arg = gen_something() end it "bar" do Foo.new(@arg).should be_an_instance_of(Foo) end # ...略,以降のコードに@argは現れない. end Type 2 descri…

erubisを使って埋め込みパターンをCのコメントのパターンにしてみた

メモ.何をやっているかはコードで判断して下さいm(_ _)msample.c.erbの内容: #include <stdio.h> /* * ここは普通のコメント */ /**=%[/\* これもコメント *\/]**/ int main() { printf(/**=%w["Hello\ world!" "Hello\ Hatena!"].join(" \"\\n\" ")**/ "\n"); retur</stdio.h>…

C++でRubyの拡張ライブラリを書く時のためのメモ

Cのサンプルは沢山あったし動いたけど,C++の場合は色々とやらなければならないことがあるようだ.とりあえず簡単に書いたものを貼っておきます: #include<cstdio> #include<ruby.h> typedef VALUE RubyType(...); static VALUE add(VALUE self, VALUE va, VALUE vb) { VALUE</ruby.h></cstdio>…

[ruby-list:44839] Ruby 1.8.7-preview1 has been released

[ruby-list:44839] Ruby 1.8.7-preview1 has been released とりあえずビルドしてみた.makeと,make testは問題無く通過.make checkはいくつかfail. Finished in 290.527752 seconds. 1) Failure: test_event(TestSetTraceFunc) [./test/ruby/test_settra…

Rubygemsのインストールがよくわからないので,手動で修正

Rubygemsが1.1.1にアップグレードしていたので,インストールしてみた.最初はgemから更新してみたが,何だか上手く行かなかったので,配布元から落として直接インストールした.それでもよくわからない結果になったので,とりあえずインストールログを見る…