simanのブログ

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

2013-03-01から1ヶ月間の記事一覧

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,…

lispでfizzbuzz

プログラミング言語を学ぶときは「Hello World」と「FizzBuzz」ができればOKなので、FizzBuzz書いてみた。 (setq i 1) ; setqで変数の初期化 (loop ; lispでは剰余の計算は%ではなくremで行う (if (= (rem i 15) 0) (print "FizzBuzz") (if (= (rem i 5) 0) …

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のインスタンス…

MacOSXでLispの環境を整える

Mountain Lion上でlispの環境を整えたのでそのメモ。brewコマンドで一発で入ったので楽ちんでした。 brew install clispclispの前はclozure-clなるものを入れた brew install clozure-clclozure-clが必要かどうかは微妙。 この2つをインストールしたら、lisp…

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とブロック、イテレータについて…

topcoderにおけるC++の標準入力読み込み

競技プログラミングをやっていると標準入力から1行ずつ読み込んで処理をする場合が 出てくる。要素の数が決まっている場合はcinで対応出来るが、そうでない場合が多い。 例(要素の数が決まっている場合) #include <iostream> using namespace std; int main(){ int n, </iostream>…

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…