simanのブログ

ゆるふわプログラマー。競技プログラミングやってます。Ruby好き

Ruby

Rubyでボゴソート

なんとなくボゴソートを書いてみました。 ボゴソート ボゴソートは配列の要素がソートされるまで、配列の要素のシャッフルを繰り返すアルゴリズムです。計算量がかなり膨大。( O(n*n!) ) def sort_checker(array) for i in 0..(array.size-2) return false i…

RubyでGrowlを操作 ( ruby-growl )

「RubyでGrowlを操作したい!」 と思って軽い気持ちで始めたのですが、まず環境構築にかなり手こずりました。 Growl2.0.1の導入 AppStoreで有料(350円)で販売されていたのですが、調べてみると自分でbuildすれば無料で手に入るみたいなのでやってみました。…

Rubyで日本の祝日を表示してくれるgem「holiday_jp」

Rubyで日本の休日を表示してくれるものを探していたら「holiday_jp」を見つけました。http://docs.komagata.org/tags/holiday_jp/使い方はこんな感じです(githubのUSAGE参照) holidays = HolidayJp.between(Date.new(2010, 9, 14), Date.new(2010, 9, 21)) h…

rubyで掛け算九九の表示

rubyで掛け算九九を書いてみました。 puts "+--+--+--+--+--+--+--+--+--+--+" puts "| | 1| 2| 3| 4| 5| 6| 7| 8| 9|" puts "+--+--+--+--+--+--+--+--+--+--+" puts "| 1| 1| 2| 3| 4| 5| 6| 7| 8| 9|" puts "+--+--+--+--+--+--+--+--+--+--+" puts "| 2|…

RubyでHello World!

大学にも新しい1年生が入って来て、自分たちのryudai.rbに参加する人が出てきたので、1年生向けにRubyで簡単なプログラムが書けるようなメモを残していこうかなと。 Hello World! プログラミングの入門はまず「Hello World!」から始まる。むしろHello World…

rubyで2次元配列を使用しての行列表現&行列の回転

rubyで行列を扱いたい場合には標準クラスでMatrixクラスが用意されていますが、そこまで複雑な操作をしないのであれば、二次元配列で簡単に行列を表現することが可能です。 require 'pp' mat = [[1,2,3],[4,5,6],[7,8,9]] pp mat [[1, 2, 3], [4, 5, 6], [7,…

rubyで複数の値の最小公倍数と最大公約数を求める

Project EularをRubyを使用して解いているのですが、その5番目の問題が最小公倍数に関する問題でした。 http://projecteuler.net/problem=5そこで複数の値の最小公倍数を求めるメソッドを作ってみました。 require 'prime' class Integer # 素数指数表現 def…

Rubyで配列の挿入

Rubyの配列挿入には色々種類があるので、必要に応じて使い分けましょう。 push pushメソッドを使用すると配列の末尾に要素の追加を行います。 array = [1,2,3] p array array.push(4) #=> [1,2,3,4] array.push(5) #=> [1,2,3,4,5] p array [1, 2, 3] [1, 2,…

rubyのハッシュの初期値の設定

自分のメモ用rubyではハッシュを宣言するときにHash.newを使用するが、このときnewの中に引数を与えると、キーが存在しない時のデフォルト値となる。 hash1 = Hash.new hash2 = Hash.new("test") p hash1[1] p hash2[1] nil "test"デフォルト値を確認すると…

rubyのnilとtrueとfalse

rubyでは真を表す表現として「true」が、偽を表す表現として「nil」と「false」が定義されています。Rubyでは「全てがオブジェクト」なので、実はこのtrue,nil,falseにはクラスが存在します。 ・TrueClass trueのクラスです、つまりTrueClassのインスタンス…

Rubyで配列の削除

Rubyで配列の削除には「delete」「delete_at」「delete_if」メソッドが存在する。 ・deleteメソッド array = (1..10).to_a p array array.delete(3) p array [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [1, 2, 4, 5, 6, 7, 8, 9, 10]deleteメソッドは引数で与えた要素…

Rubyでの順列、組み合わせ。

Rubyでは「順列」と「組み合わせ」をArrayクラスのcombinationメソッドとpermutationメソッドを用いることで、簡単に求めることができます。 array = [1,2,3,4] p array.combination(3).to_a [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]combinationの引数…

rubyで配列の要素の最大値と最小値を取得

rubyで配列の最大値、最小値取得にはmaxメソッドとminメソッドを用いる。 array = [1,2,3,4,5,6,7,8,9,10] p array.max # 要素の最大値を取得 p array.min # 要素の最小値を取得 10 1こんな感じで簡単に習得できる。 ・条件付きの最大値、最小値の取得 条件…

rubyのgroup_byが便利

Rubyのgroup_byメソッドが便利です。要素をグループ分けするためのメソッドなのですが、色々と応用が効きそうです。まずは、簡単な例から。 names = %w(ruby python java c++ php javascript perl lisp haskell) group = names.group_by do |name| name[0] #…

Rubyで数値を日本語表記に変換

一つ思いついたメソッドがあったので実装してみた。 数値を日本語表記に変換したい 例えばこんな感じ 1000 => "千" 777 => "七百七十七" 1000000 => "百万" ところがRubyにはそんなメソッドは存在しない。 * 存在しないなら作ればいいじゃない * to_jメソッ…

rubyでmethod_missingからのdefine_method

method_missing Rubyでは通常、存在しないメソッドを呼び出した場合エラーが発生する。 class Siman end s = Siman.new s.hello method_missing.rb:5:in `<main>': undefined method `hello' for #<Siman:0x007f811c066798> (NoMethodError)NoMethodErrorが発生。このエラーメッセージは実</siman:0x007f811c066798></main>…

Rubyでのクラス変数、インスタンス変数、クラスインスタンス変数の違いについて

Rubyでは色々な変数が定義できます。そこでごっちゃになりやすそうな「クラス変数」と「インスタンス変数」と「クラスインスタンス変数」について自分なりにまとめてみました。 クラス変数 class Siman @@name = "siman" def print_siman puts @@name end en…

Rubyのオープンクラスについて

Rubyでは既存のクラスを再定義することができる。これを「オープンクラス」と読んだりします。例えば配列の合計値を求めたい場合。Arrayクラスにはsumメソッドは無いので新しくメソッドを作る必要があります。 array = [1,2,3,4,5] def sum(array) array.inj…

ryudai.rb第2回まとめ(1) Procとlambda編

ryudai.rb第2回が無事に終わりました。 今回は4人と前回より参加者は減りましたが、発表の内容の質は上がっていたいました。今回の発表者はatton君です。atton君の発表資料 https://github.com/atton-/ryudairb_002今回はProcとブロック、イテレータについて…

Ryudai.rb第1回まとめ(2) class_eval編

前回のinstance_evalに引き続き次はclass_eval class_evalはブロックで渡された文をまるで、classの定義の中にいるかのように実行でき るメソッド。これもなかなかに壊れている。例 class Siman def initialize @siman = "Siman" end end s = Siman.new puts…

Ryudai.rb第1回まとめ(1)

ryudai.rb第1回が終わりました。(パチパチ今回は最初ということで、右も左もわからない状態で始めたのですが割りと面白かった です。今回は自分が担当?ということで「ストリームスのAIを作ろう」と題して発表し てみたのですが、色々横道にそれました。 Insta…

Ruby2.0-p0 リリース

ついにRuby2.0がリリースされました(パチパチパチ http://www.ruby-lang.org/ja/news/2013/02/24/ruby-2-0-0-p0-is-released/ どうやら1.9からの互換性を意識したらしいです。やったね。 Ruby2.0で色々遊んでもよいのですが、rbenvに来るまでは待つことにします…

Okinawa.rb+lex.rb合同勉強会 vol.1に参加してきたお話

Okinawa.rb+lex.rb合同勉強会 vol.1に参加して来ました http://atnd.org/event/okrb1 内容としては前半と後半でそれぞれ違うペアを組み、ペアプログラミングをしながら 課題に取り組む感じでした。 ちなみに、課題の内容としましては ・前半は、「西暦から…

ライフ・ゲーム in Ruby

那覇空港 -> 成田での飛行機の中で、あまりにも暇だったのでライフ・ゲームを 組んでました。ライフ・ゲームについてはグーグル大先生にでも 最初の組んだ仕様では ・周囲のマスに生きているセルが2か3であれば生き残る だけでした。 * 本人がライフ・ゲーム…

Rubyでの1行条件式

Rubyをやるなら1行条件式を書こう! 普通のif文 if true puts "Hello World" end Hello World 普通すぎる。あとなんかださい(個人的主観です) else ifやelse句を使わない条件式なら1行で書いたほうがスッキリする。 puts "Hello World" if true Hello World …

RubyでのProcとlambdaとクロージャー

Procとlambdaを使ってクロージャを書く。 自分の中のクロージャの認識は「独立したローカル変数の操作」程度である 簡単なサンプルとしてはカウンティングがよくある [1] pry(main)> def closure [1] pry(main)* count = 0 [1] pry(main)* return lambda { r…

RubyのProcでHello World

Rubyを色々触ってきたけど、Proc周りを全く触ってなかったので意識的に 触ってみようかと思う。まずは「Hello World」から [1] pry(main)> proc = Proc.new { puts "Hello World" } => #<Proc:0x007fbe230c3bc0@(pry):1> [2] pry(main)> proc.call Hello World => nil Proc.newでブロック内</proc:0x007fbe230c3bc0@(pry):1>…

Rubyで配列の足し算

ふと配列の足し算が必要になったので、sumメソッドあるだろーと思ったら [1] pry(main)> a=[1,2,3,4] => [1, 2, 3, 4] [2] pry(main)> a.sum NoMethodError: undefined method `sum' for [1, 2, 3, 4]:Array from (pry):2:in `__pry__' これは驚いた、Rubyの…