simanのブログ

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

Rubyで複数行のコメントアウト

Rubyでは=begin, =endで囲むことで複数行のコメントアウトが出来ます。通常ver # puts "Ruby" # puts "Java" # puts "JavaScript" 複数コメントアウトver =begin puts "Ruby" puts "Java" puts "JavaScript" =end 覚えておくと便利です。

RubyのOpenStructソース読み

Rubyの標準ライブラリを読んでみようってことで今回は「OpenStruct」を読むことにしました。 OpenStructとは OpenStructを使えばJavaScriptみたいにオブジェクトへの要素の追加や削除が簡単に出来るようになります。 require 'ostruct' pos = OpenStruct.new…

ハッカーズチャンプルー前夜祭・カンファレンス

今週末はハッカーズチャンプルーに参加していました。http://hackers-champloo.org/ 前夜祭 前夜祭のほうはLT発表者として参加して、ゲストの方々の前で喋らせてもらいました。発表前にディスプレイテストしたにもかかわらず本番で「何も映らない!」ってな…

Rails + RSpec + Capybaraでbasic認証をパスする

コントローラ内でbefore_filterを使って実装されたBasic認証をパスするのにやたら時間をかけてしまったので、自分用にメモを残しておく。 page.driver.browser.authorize('username','password') これをvisitとかの前に宣言しておくと、Basic認証をパスする…

Rubyで状態遷移を管理するgemを作った(state_transition)

https://github.com/jakesgordon/javascript-state-machineこのjavascript-state-machineが便利だったので、Rubyでも使いたいと思い、Ruby versionを作ってみました。 https://github.com/siman-man/state_transitiongemのインストール gem install state_tr…

勘違い

Herokuにpushしようとした時のこと「そういえばHerokuはpostgresql」だったなと思い、Gemfileの設定を下のように変更していざpushしてみたら全く変更が反映される気配がない。 group :development do gem 'sqlite3', '1.3.7' end group :production do gem '…

xhago4参加録

8/10(土)に開催されたxhago4にスピーカーとして参加してきましたーhttp://hago.doorkeeper.jp/events/4396自分は「僕らの開発日記 24」というタイトルでクックパッド主催の「第4回 開発コンテスト24」に参加したときの様子を発表したのですが、技術的な話は…

CODE VS2.1予選終了

CODE VS2.1の予選が終了しました。前回のCODE VS2.0では学生ランク28位だったのですが、今回はなんとGOLDランクに入ることが出来ました。わーhttp://codevswc.jp/jpn/ranking-total.htmlここまで来たからには優勝目指して頑張ります。

Rubyで二次元配列の初期化

Rubyで二次元配列を初期化するときは注意が必要です。 ・3x3の2次元配列を作るときのよくある間違い a = Array.new(3, Array.new(3, 0) ) これで配列の初期化が出来たと思うのですが、実は出来ていません。実際に配列の状態を変更してみると明らかになります…

ruby-growlで日本語を使用する

ruby-growlでタイトルやテキストに日本語を使用しようとするとエラーが発生する。 /Users/siman/.rbenv/versions/2.0.0-p195/lib/ruby/gems/2.0.0/gems/ruby-growl-4.0/lib/ruby-growl/gntp.rb:336:in `join': incompatible character encodings: UTF-8 and …

Rubyで二次元配列のコピー

Rubyで二次元配列のコピーを行おうとするとコピー元を破壊してしまうケースが多々あるので、まとめてみた。・普通にコピー a = [[1,2],[3,4]] b = a b[0][0] = 10 puts "a = #{a}" puts "b = #{b}" a = [[10, 2], [3, 4]] b = [[10, 2], [3, 4]]このようにb…

Code golf tips of Ruby(4)

Rubyでコードゴルフをやるときに覚えておくと便利です。 joinは*に置き換える joinメソッドは配列を連結させるときに使用するのですが、これは「*」で置き換えることができます。 puts [1,2,3].join('+') puts [1,2,3]*'+' 1+2+3 1+2+3これだけで6文字も短く…

「第4回 開発コンテスト24」参加録(1)

今週末は「第4回 開発コンテスト24」に参加していました。 http://info.cookpad.com/24contest424時間コンテストでは24時間以内にお題に沿ったアプリケーションを開発するコンテストなのですが、今回のお題は。「年をとった自分が使うサービス」でした。 そ…

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…

CODEVS2.1開催

CODEVS2.1が始まりました。前回は学生ランキング28位だったので、今回は頑張ってGOLD目指します。http://codevswc.jp/

sshの公開鍵認証rsaでコケる

ちょこちょこ設定するくせによく忘れる。今回は 「.sshディレクトリの権限を700にしていない」で30分ぐらい悩んでました。かしこ。

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

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の画面の前にいる * といっても過…

MacOSXでのlocateデータベースの更新コマンド

何回も忘れては何回も調べなおしているのでメモ sudo /usr/libexec/locate.updatedb