Ruby

古いRubyをビルドする

動機 現時点でRubyの最新版は2.4, サポートされているのは2.2までで、2.1以前はメンテナンス対象外である。そのような古いバージョンを動かすのは決してよいことではない。 しかし実のところ、現在でも多くのWindowsマシンで、Ruby1.8.1とRuby1.9.2p0が動作…

ボゾソート(Bozo Sort)

今日は結局何も書けなかったのでボゾソート(ボゴソートの仲間)を適当に書いた。 #!/usr/bin/ruby1.9.1 # -*- coding: utf-8 -*- class Array def bozo_sort! defined? yield or return bozo_sort!{|a,b|a<=>b} until (1...size).inject(true){|s,i|s && yiel…

10分でコーディング

たいへんよくできました@Ruby1.9 def fun(n, s) s.scan(/#{"(.)"*n}/).transpose.map &:join end p fun(3, "123123123") 時間とか測ってないけどわりと一瞬だったんじゃないかな。http://ameblo.jp/programming/entry-10001721422.html

床板が薄いようなので底上げしておきましたよ

#!/usr/bin/ruby1.9 # -*- coding: utf-8 -*- ObjectSpace.each_object(Class).select{|i|i.method_defined? :floor }.each do|clazz| clazz.class_exec do alias_method :floor_old, :floor begin remove_method :floor def floor floor_old+0.2 end rescue…

有理数の平方根を扱うRubyクラスを作った

有理数の平方根や、その合計値を式を保持して扱います。(複素数の範囲はサポートしません)Wikipediaのフィボナッチ数#一般項にあるような式を扱ったりできます。コード:RtNumber: handles sum of rational numbers' sqrt — Gistコードに付属してるサンプル: …

mathn.rbを副作用なしでロード

なんでPrimeがmathn.rbに入ってるんだろう。 追記: Ruby1.9.0のRevision 19095あたりからprime.rbが作成されたのでこのような方法は不要なようです。 unless $".include? "mathn.rb" module Math alias sqrt_tmp sqrt end load "mathn.rb" class Fixnum remo…

4文字タイトルを判定する正規表現

qnighy's gist: 178354 — Gist #!/usr/bin/ruby -Ku # -*- coding: utf-8 -*- r = /\A(([あいうえおか-もやゆよら-ろわ-んアイウエオカ-モヤユヨラ-ロワ-ヴ]|う゛)[ぁぃぅぇぉゃゅょゎァィゥェォャュョヮ]?){2}[×☆]?(([あいうえおか-もやゆよら-ろわ-んアイ…

JavaでRubyのpもどきを実装してみた

スーパーリフレクティングターイム qnighy's gist: 145639 — Gist 以下のようにつかう。 import java.util.HashMap; import static org.acikelabo.RubyInspect.p; public class Test { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<String, Integer>(</string,></string,>…

15パズルのパリティー

15パズルの状態は2つの集合にわけられ、片方からもう片方の状態に遷移することはない。どちらの集合に所属しているかを、ある値で表現してみる。 並びのパリティー 15パズルの各部品に0から15の番号をつける。今回は、板は番号そのまま、穴は0とした。また、…

Ruby1.9でwith

map が面倒なので DelegateMap - まめめもに触発されて。テストコード require "with" class A attr_accessor :ins def test self.ins = "instance variable" lo = "local variable" with(["target variable"]) do # sorry can't use self... p ins p lo p a…

ProjectEuler 1-10 Ruby

#!/usr/bin/ruby require "rational" def p1 p (0...1000).select {|i|i%3==0||i%5==0}.inject(0) {|a,b|a+b} end def p2 a,b = 1,1 sum = 0 while b<=4000000 sum += b if b%2==0 a,b = b,a+b end p sum end def p3 a=600851475143;(2..a).each{|i|i

ProjectEuler 3 Ruby

#!/usr/bin/ruby #ans 1 a=600851475143 i=2 while i

ProjectEuler 2 Ruby

a,b = 1,1 sum = 0 while b<=4000000 sum += b if b%2==0 a,b = b,a+b end p sum

ProjectEuler 1 Ruby

#!/usr/bin/ruby #ans 1 p (0...1000).select {|i|i%3==0||i%5==0}.inject(0) {|a,b|a+b} #ans 2 require "enumerator" p ((0...1000).to_enum(:step,3).to_a+(0...1000).to_enum(:step,5).to_a).uniq.inject(0) {|a,b|a+b}

Re2: Enumerable#mins_by

nowa サービス終了のお知らせ Re: Enumerable#mins_by - チナミニ 反則? //minsby.c #include <ruby.h> static ID id_cmp, id_each; static VALUE mins_by_i(VALUE i, VALUE *memo, int argc, VALUE *argv) { VALUE v; //ENUM_WANT_SVALUE(); if(argc == 0) { i = Q</ruby.h>…

Rubyでnext_permutation

STLのソースの丸写しだが。 class Array def swap_at(i, j) self[i], self[j] = self[j], self[i] end def reverse_in(first, last) return if first == last last -= 1 while first < last swap_at(first, last) first += 1 last -= 1 end end def next_per…

フィボナッチ数列に関する3つのアルゴリズムの速度比較@Ruby

アルゴリズムの違いが速度に明確に表れるわかりやすい例のひとつであるフィボナッチ数列を使って速度比較。気軽に多倍長が使える言語でないと、線形とlogの違いは見えづらい。 #!/usr/bin/ruby -Ku require 'matrix' def fib_recursive(n) case n when 0 ret…

今日やったJMO予選の問題をRubyで解いてみた

数学オリンピック予選うけてきました。プログラムで解けそうな問題があったので、答えあわせしてみました。 #!/usr/bin/ruby -Ku require "rational" anssum = 0 (-100..400).each do |i| x = Rational(i, 44) sum = 0 (1..9).each do |j| sum += (x*j).floo…

id:CanIがRubyではなくPythonを選んだ理由について

私がPythonを選んだ理由(修正:10/29 15:37) - CanI’s Diary 本人降臨。文法に関しては、まったくその通りだと思う。ただ、やっぱり重要なのは、Rubyはスクリプト言語だということだと思う。RubyとPythonは、機能は似ているが、言語の性質はだいぶ違うと思う…

分数小数変換を改良した

分数から循環小数への変換で、単純な筆算アルゴリズムに変更。あとテストを改良した。assert_equal(期待する値, 計算式)という形式で呼ぶのがベストかな? #repeating-decimal.rb require 'rational' class Rational def self.from_rd(s) case s when /^(-?)…

分数小数変換をモジュール化してテストを作ってみた

Rubyでテストケース作るのはじめて。テストケースの書き方がわかりやすくていいね。変えたこと まず、readline→printというルーチンから、引数→戻り値というルーチンにした。 それをRationalのメソッドとして組み込んだ。 mathn.rbはシステム全体に影響を与…

Rubyのユーザーを増やすためにできること。

Rubyは素晴らしい言語だ。(ここで愛情表現をしてもいいけどアレな内容になりそうなのでやめる。)だけど、Rubyユーザーが増えるためには、まだまだ障害が大きい。そしてその中には、非常に些細な問題もあると思う。例えば、別の言語のユーザーがRubyに触れる…

分数小数変換の修正と逆の処理を作った@Ruby

まず、昨日書いた小数→分数のコードに不備があった。不覚。 #!/usr/bin/ruby -Ku require 'mathn' case readline when /^(-?)([0-9]+)$/ print $1, $2.to_i, $/ when /^(-?)([0-9]*)\.([0-9]*)$/ print $1, $2.to_i + $3.to_i / 10**$3.size, $/ when /^(-?)…

循環小数を分数に直す@Ruby

部活の合宿で、循環小数を分数に直すのとかいい課題じゃねと誰かが言っていて、Rubyだと簡単に作れそうだったので作ってみたコード。 #!/usr/bin/ruby require 'mathn' case readline when /^(-?)([0-9]+)$/ print $1, $2.to_i, $/ when /^(-?)([0-9]*)\.([0…