ruby

Yahooの日本語形態素解析Webサービスのテスト

文字列のエンコードの仕方がよく分からずに手こずった( ´・ω・`) CGI.escape(文字列)を使うときは、 事前に文字列の文字コードを変換しておくのがポイント。 今回のYahooのAPIの場合は、UTF-8に変換しておく。 それからCGI.escape。 これでバッチリうまくい…

簡単な人工知能もどき

まぐまぐ! - 読みたいメルマガ、きっと見つかる。で出されている問題を、Rubyでやってみた。 以下はリンク先からの引用。 例えば、 「ソクラテス」は「人間」である。 「人間」は「必ず死ぬ存在」である。 という2つの知識が与えられて、 「ソクラテス」は…

フィボナッチ数列を返すクラス

フィボナッチ数を返す関数 - gan2 の Ruby 勉強日記の続き。 引数で与えられた数までのフィボナッチ数列を返すクラス。 class Fibonacci def initialize(n) @n = n.to_i @ary = Array.new if n < 1 puts "1以上の整数を入力して下さい。" return end f(n) en…

フィボナッチ数を返す関数

フィボナッチ数 - Wikipedia 引数で与えた数のフィボナッチ数を求める。 デフォルトは10。 あんまり大きい数を与えると時間がかかるみたい。 50で試してみたらずっと止まってた( ´・ω・`) def fibonacci(n) return 1 if n == 1 or n == 2 fibonacci(n-2) + f…

Ajaxなチャットを作ってみた

サンプルはここ→http://www.gan2.65rpm.com/lab/ajax-chat.html デザインは全然何もいじってない。 とりあえず、これから色々作っていくものの雛形って感じ。 ファイルは、HTMLとJavaScriptとCGIスクリプト(Ruby)の3つに分けてある。 JavaScriptのライブラリ…

正規表現でマッチした箇所と、その前後を取り出す

Regexp#matchを使うと、MatchDataオブジェクトが返される。 そしてMatchDataを使えば、マッチした結果の詳細を見ることができる。 MatchData#[n] ・・・ n番目にマッチした部分の文字列 MatchData#pre_match ・・・ マッチした部分より前の文字列 MatchData#…

ディレクトリ中に含まれるclassファイルを出力する

ただし、ファイル名に $ が含まれないもののみとする。 dir = ARGV[0] || Dir.pwd Dir.open(dir){|d| d.each{|item| puts item if /^[^$]+\.class$/ =~ item } } 正規表現の頭の ^ を省くと、うまくいかない。 理由は、$ を含まない部分にマッチしてしまうか…

効率のよい文字列の連結方法

ある文字列strに他のある文字列'abc'を連結する方法に、次の3つがある。 # 1.+ を使う方法 str += 'abc' # 2.<< を使う方法 str << 'abc' # str.concat('abc') でも同じ # 3.配列に push してから join する方法 ary.push('abc'); str = ary.join() この3…

Golfやってみたらレベル高くてウハー

ってなった。 みんなすごいっす。 anarchy golf

掲示板

とりあえずできた。→これ 前回の一行掲示板を元に、 クラスをつくって、複数行の書き込みをOKにして、CSSをつけてみた。 見た目はあんまりよくないし、ファイルロックもしてないけど、 まあ最初はこんなもんでしょーってことで。 以下がソース。 bbs.cgiがこ…

CSVファイルをパースする

フラグを使ってやってみた。 それ以外の方法が思いつかない・・・。 class CSV def initialize end def split(str) elems = str.split('') splited = Array.new flg = false s = "" elems.each{|e| if e == '"' flg = !flg elsif e == ',' && !flg splited <…

'abc_def' を 'abcDef' に変換する

'_'でsplitしたあとに、 一旦全ての要素をcapitalizeし、 最後に先頭だけdowncaseする。 while line = gets line.chomp! lines = line.split('_') lines.each{|line| line.capitalize! } lines[0].downcase! puts "-> #{lines.join('')}" puts end 最初は真…

一行掲示板

http://rubycgi.org/cgi_explanation/index.htmを参考にして作ってみた。 .。oO(参考というかほとんどそのまんまだったりする。) 全然何の工夫もしてないけど、 後から少しパワーアップさせたいと思う。 動作テストはローカルでAN HTTPDを動かしてそれでやっ…

ワンライナーの練習 行頭に' 'を追加して出力

以下のワンライナーを実行すると、 hoge.rbの各行の頭に' '(半角スペース)が追加されて出力される。 > ruby -p -e "$_ = ' ' + $_" hoge.rb -eと-pを逆にして書いたらエラーになった。 >ruby -e -p "$_ = ' ' + $_" hoge.rb -e:1: undefined method `-@' for…

XMLをパースしたいのでREXMLの勉強中

ぶっちゃけまだ全然分からない。 ほんとに全然・・・。 XMLから抽出したい文字列があるのだけど、 それを実現することは適当な正規表現だけじゃ難しい。 また、正規表現でどうにかなったとしても、 それはすごく分かりづらい方法になってしまうと思う。 とて…

1月から12月の月末を表示する

出力結果が整うように、 %を使ってmonthのフォーマットを調整してみた。 標準出力の整形にはcenterも役に立つ。 require "date" today = Date.today puts today.year.to_s.center(18) puts "-" * 18 1.upto(12){|month| lday = Date.new(today.year, month, …

Livedoorお天気Webサービスで遊ぶ

Livedoorのお天気Webサービス (Livedoor Weather Web Service / LWWS)で遊んでみる。 仕様はこれ→お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報 対応している地域をリストアップする LWWSは全国142箇所の地域に対応している。 このXMLのcityタ…

RSSをHTMLに変換

指定されたRSSのitemのtitleをcheckbox付きのHTLで出力する。 HTMLが整形されてないのが気になるけど、 とりあえずこれはこれでほぼ完成。 連携するCGIの方は、まだ何もできていないので完成したとは言えない。 require 'rss' require 'kconv' def print_ite…

今月のカレンダーを出力

わりとキレイに書けたような気がする。 たのしいRubyの練習問題にも似たようなのあったなぁ。 require "date" def calendar today = Date.today fday = Date.new(today.year, today.month, 1) lday = Date.new(today.year, today.month, -1) # Date#wday は…

ヒットアンドブローのスクリプトができた

でもひどいコードかも。。 ヒットアンドブローは、コンピュータの用意した数字の並びを当てるゲーム。 コンピュータは、こちらが考えた数字の並びと自分のものを比較して、 次の2つのヒントをくれる。 HIT: 数字も場所も合っているものの数 BLOW: 数字は合っ…

10進数を2進数と16進数に変換する

"%b" % num "%x" % num ってな具合に、フォーマットを指定すればすごい簡単なのだけど、 それじゃつまらないのでそれ以外の方法でやってみた。 2進数はまあこれで大丈夫。 でも16進数はうまくいってない・・・。 hex なぜか '15' が追加されている。。 なん…

ヒットアンドブロー

Rubyで書いてみた。 すぐにできた。 でも同じ数字も使えるようにしようと思ったらそこで止まった。 うまくいかない。 隠してある数字と自分が用意する数字があるけど、 これらの各数字を一対一に対応させないとダメっぽい。 隠してある数字の方だけいじって…

grepっぽいもの

ファイルを読み込んで、 正規表現にマッチする行をファイルに出力する。 使い方はこんな感じ。 > ruby grep.rb [Regexp] [ReadFile] [WriteFile]引数を省略した場合は、 Regexpを/line/で、 ReadFileを実行中のファイルで、 WriteFileを実行中のファイルの拡…

配列の要素で同じものの数を数える

injectの勉強にもなった。 ary = %w(1 2 2 3 3 3 4 4 4 4) p ary.inject(Hash.new(0)){|hash, a| hash[a] += 1; hash} #=> {"1"=>1, "2"=>2, "3"=>3, "4"=>4}

Array#join("\n")の別表記

Array#join(sep)を使うと、 配列の各要素間にsepを挟むことができる。 "\n"を挟みたいときはArray#join("\n")という具合に。 で、join("\n")の別表記として以下の2つがある。 *("\n") *($/) 以下のスクリプトで実験して確かめてみる。 ary = %w(北海道 青森 …

sort_byはブロック内の値を使ってソートする

ref = %w(北海道 青森 秋田 岩手) arr = %w(青森 岩手 北海道 北海道 秋田) puts arr.uniq.sort_by{|a| ref.index(a)} 実行結果はこうなる。 北海道 青森 秋田 岩手sort_by{|a| ref.index(a)}は、 ref中のaのインデックスを使ってソートをする、という意味。…

いつでもchompするeach_line

まだyieldに慣れてない・・・。 色々書いて覚えよう。 yield(line.chomp)とあるから、 chompされたlineがeach_line2のブロック変数lineに渡る、 ってイメージであってると思う。 filename = __FILE__ class IO def each_line2 self.each_line{|line| yield(l…

URI.escapeとCGI.escapeの違い

URI.escapeはhttp://の部分はエンコードしない。 CGI.escapeはhttp://の部分も含めてエンコードする。 日本語入りのURLをエンコードするときはURI.escapeを使うのがよい。 require 'uri' require 'cgi' str = 'ほげ' str_uri = URI.escape("http://d.hatena.…

WebページからURLを抽出する

open-uriは内部でuriをrequireしているので、 open-uriをrequireすると、一緒にuriもrequireされる。 require "open-uri" require "kconv" url = ARGV[0] || "http://d.hatena.ne.jp/gan2/" html = open(url).read.tosjis URI.extract(html, ['http']){|uri|…

いくつかある文字コードライブラリ

NKF以外にも、KconvやIconv、そしてUconvなんてものまである。 何でこんなにたくさんあるの? どれを使えばいいのかよく分からない。 と思ってぐぐってみたら、 るびまのこんな記事が出てきた。 >るびま ふーん。なるほどね。 文字コード絡みのことで分から…