2013-03-01から1ヶ月間の記事一覧
rubyで行列を扱いたい場合には標準クラスでMatrixクラスが用意されていますが、そこまで複雑な操作をしないのであれば、二次元配列で簡単に行列を表現することが可能です。 require 'pp' mat = [[1,2,3],[4,5,6],[7,8,9]] pp mat [[1, 2, 3], [4, 5, 6], [7,…
Project EularをRubyを使用して解いているのですが、その5番目の問題が最小公倍数に関する問題でした。 http://projecteuler.net/problem=5そこで複数の値の最小公倍数を求めるメソッドを作ってみました。 require 'prime' class Integer # 素数指数表現 def…
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,…
プログラミング言語を学ぶときは「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ではハッシュを宣言するときにHash.newを使用するが、このときnewの中に引数を与えると、キーが存在しない時のデフォルト値となる。 hash1 = Hash.new hash2 = Hash.new("test") p hash1[1] p hash2[1] nil "test"デフォルト値を確認すると…
rubyでは真を表す表現として「true」が、偽を表す表現として「nil」と「false」が定義されています。Rubyでは「全てがオブジェクト」なので、実はこのtrue,nil,falseにはクラスが存在します。 ・TrueClass trueのクラスです、つまりTrueClassのインスタンス…
Mountain Lion上でlispの環境を整えたのでそのメモ。brewコマンドで一発で入ったので楽ちんでした。 brew install clispclispの前はclozure-clなるものを入れた brew install clozure-clclozure-clが必要かどうかは微妙。 この2つをインストールしたら、lisp…
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では「順列」と「組み合わせ」を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で配列の最大値、最小値取得にはmaxメソッドとminメソッドを用いる。 array = [1,2,3,4,5,6,7,8,9,10] p array.max # 要素の最大値を取得 p array.min # 要素の最小値を取得 10 1こんな感じで簡単に習得できる。 ・条件付きの最大値、最小値の取得 条件…
Rubyのgroup_byメソッドが便利です。要素をグループ分けするためのメソッドなのですが、色々と応用が効きそうです。まずは、簡単な例から。 names = %w(ruby python java c++ php javascript perl lisp haskell) group = names.group_by do |name| name[0] #…
一つ思いついたメソッドがあったので実装してみた。 数値を日本語表記に変換したい 例えばこんな感じ 1000 => "千" 777 => "七百七十七" 1000000 => "百万" ところがRubyにはそんなメソッドは存在しない。 * 存在しないなら作ればいいじゃない * to_jメソッ…
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では色々な変数が定義できます。そこでごっちゃになりやすそうな「クラス変数」と「インスタンス変数」と「クラスインスタンス変数」について自分なりにまとめてみました。 クラス変数 class Siman @@name = "siman" def print_siman puts @@name end en…
Rubyでは既存のクラスを再定義することができる。これを「オープンクラス」と読んだりします。例えば配列の合計値を求めたい場合。Arrayクラスにはsumメソッドは無いので新しくメソッドを作る必要があります。 array = [1,2,3,4,5] def sum(array) array.inj…
ryudai.rb第2回が無事に終わりました。 今回は4人と前回より参加者は減りましたが、発表の内容の質は上がっていたいました。今回の発表者はatton君です。atton君の発表資料 https://github.com/atton-/ryudairb_002今回はProcとブロック、イテレータについて…
競技プログラミングをやっていると標準入力から1行ずつ読み込んで処理をする場合が 出てくる。要素の数が決まっている場合はcinで対応出来るが、そうでない場合が多い。 例(要素の数が決まっている場合) #include <iostream> using namespace std; int main(){ int n, </iostream>…
前回のinstance_evalに引き続き次はclass_eval class_evalはブロックで渡された文をまるで、classの定義の中にいるかのように実行でき るメソッド。これもなかなかに壊れている。例 class Siman def initialize @siman = "Siman" end end s = Siman.new puts…
ryudai.rb第1回が終わりました。(パチパチ今回は最初ということで、右も左もわからない状態で始めたのですが割りと面白かった です。今回は自分が担当?ということで「ストリームスのAIを作ろう」と題して発表し てみたのですが、色々横道にそれました。 Insta…