simanのブログ

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

2013-01-01から1年間の記事一覧

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

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…

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 内容としては前半と後半でそれぞれ違うペアを組み、ペアプログラミングをしながら 課題に取り組む感じでした。 ちなみに、課題の内容としましては ・前半は、「西暦から…

PixivのAPIについて調べてみた

就活でPixiv行ってみたんですが、よく考えてみたら * Pixivのサービスをあまり使ってない * 昔はROM専でよく見てたのですが。。。 そんなことで、唐突に * PixivのMacOSX用クライアントでも作るか * と思ったのですが、どうもPixivはAPIを公開していない模様…

ライフ・ゲーム in Ruby

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

就活で東京へ

ただいま絶賛就職活動中です。 そんなこんなで沖縄から東京に来たわけですが * 思ったよりは寒くない * 空気は冷たいですけど、風が無いのでそこまで寒くないです。 「今日の気温は5℃」という表示を見たときは「あ、詰んだ」 とも思いましたが、なんとか大丈…

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

JiNSのPCメガネと疲れ目

最近頭痛が増えてきたので 「これはメガネの度が合ってないな」 と思い。眼科へ そしたら「視力は悪くはなっていない」とのこと ついでに「PCのやりすぎ」と注意を受けました。 しかし、情報工の自分としては * 1日の9割はPCの画面の前にいる * といっても過…