タグ

ブックマーク / keyesberry.hatenadiary.org (43)

  • RubyでLevenshtein Distanceを解く-CodeEval - hp12c

    できません.. アルゴリズム的にはできてるんだけど*1 答えを得るのに1時間とかorz.. 5秒で答えなきゃいけないのに あとグローバル変数を使ってしまった どうも高速化は苦手です そこに注力する気がなかなか起きない.. レーベンシュタイン距離が1の語同士をfriendとして 与えられた辞書におけるhelloの語から始まる friendの輪に含まれるすべての語の数を答える *1:'causes'の解答が一致した

    RubyでLevenshtein Distanceを解く-CodeEval - hp12c
    yuiseki
    yuiseki 2012/02/19
  • あなたのプログラムを使って宇宙人の種族を答えよ! - hp12c

    図書館で「数学の秘密の棚」という 数学パズルやエピソードなどを集めたを借りたよ 数学の秘密の棚 作者: イアン・スチュアート,水谷淳出版社/メーカー: SBクリエイティブ発売日: 2010/02/24メディア: 単行購入: 3人 クリック: 22回この商品を含むブログ (11件) を見る その一番最初に「宇宙人との遭遇」という 論理パズル問題が出ていたんだ 要約すると次のようなものだよ ある惑星に着いた宇宙船の船長クワークの前に 3人の宇宙人が現れた その惑星には嘘つきのギバリッシュという種族と 正直なベラシータという種族がいる 彼らの名前をアルフィ ベティ ゲンマとして クワーク船長がそれぞれにその種族について聞くと 彼らは以下のように答えた アルフィ「ベティはギバリッシュだよ」 ベティ「アルフィとゲンマは同じ種族だよ」 ゲンマ「ベティはベラシータだよ」 これらの答えだけでクワー

    あなたのプログラムを使って宇宙人の種族を答えよ! - hp12c
    yuiseki
    yuiseki 2012/01/22
  • Rubyでデータをオブジェクト化して集計する - hp12c

    Javaでデータを集計する処理について書かれたブログを読んだよ リストを項目ごとに集計する - 日々常々(id:irof:20111203) 内容は次のようなデータがあって code name value A01 hoge 100 A01 piyo 200 A02 hoge 300 A03 hoge 400 A03 piyo 500 次のような集計の結果を得たいというものだよ code value A01 300 A02 300 A03 900 僕はRubyしか知らないからRubyでやってみるけど RubyにはEnumerable#injectがあるから 集計処理は簡単にできるよ ここではデータの読み込みからやってみることにするよ 先のデータがテキストファイルにあると仮定するよ まずはデータを読み込んでlabelとdataの配列に格納しよう label, *data = ARGF.map

    Rubyでデータをオブジェクト化して集計する - hp12c
    yuiseki
    yuiseki 2011/12/20
  • GraphAzでアナグラムをビジュアライズしたよ - hp12c

    この前Rubyで単語のアナグラムを見つける Anagramライブラリを書いたよ Rubyでアナグラムしようよ - hp12c でもやっぱりアナグラムを単に ターミナルに出力するだけじゃつまらないよね で以前に作った ruby-graphvizをラップするGraphAzを思い出したよ Rubyでアニメーション・グラフを作ろう! - hp12c それで最も組数の多いアナグラム上位5組を GraphAzでビジュアライズしてみたら なんかきれいだったので コードと共にここに貼っておくよ 円の中心がアナグラムのシグネチャで 周囲がそのシグネチャを持った単語だよ 上位100組だとお花畑になるよ (追記:2011-12-12) 100組のイメージを追加を追加しました.

    GraphAzでアナグラムをビジュアライズしたよ - hp12c
  • 秋だ!Rubyを学ぼう! 〜Rubyを知るための26ポスト - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 秋だ!Rubyを学ぼう! 〜Rubyを知るための26ポスト : melborne.github.com - このブログはプログラミング言語Ruby関連 のポストが大半を占めていて それらは僕自身がRubyについて 学んだことをベースに書かれています その一部には これからRubyを学ぶ人や学び始めたばかりの人が Rubyを知るための助けになる内容が含まれてると思います またブログを書く上で自分は 他にないユニークな視点でといつも心掛けているので ここで 他では得られなかった気づきを得られるかもしれません 手前味噌ですけど.. :) そんなわけで.. このブログから Ruby初学者〜中級者向けの投稿26を選んで 簡単な説明を付けて一覧できるようにしてみました 少

    秋だ!Rubyを学ぼう! 〜Rubyを知るための26ポスト - hp12c
    yuiseki
    yuiseki 2011/11/15
  • プログラミング言語が好き? ~WebSocketのデモ - hp12c

    少し前にRubyでWebSocketする記事を書いたよ irbから学ぶRubyの並列処理 ~ forkからWebSocketまで - hp12c 折角WebSocketの概要を理解したんだから 簡単なデモを作ってみんなに見てもらいたいと思ったんだよ それで次のようなものが出来上がったよ Love Languages? 僕の独断で選んだ12の言語から 自分の好きな言語を選んで投票するデモだよ 円グラフはWebSocketによりリアルタイムで更新されるから 君が見ているときに誰かが投票していれば その様子がわかるようになっているよ 誰もそこにいなければiPhoneからでも投票して PCの画面を見てみれば変化がわかると思うよ デモでは好きな言語に好きなだけ投票できるから 言語の人気度は測れないけど その言語に対する熱愛度が測れるかもしれないよ このブログに辿り着く人はRuby好きが多いだろうから

    プログラミング言語が好き? ~WebSocketのデモ - hp12c
    yuiseki
    yuiseki 2011/10/11
  • irbから学ぶRubyの並列処理 ~ forkからWebSocketまで - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 irbから学ぶRubyの並列処理 ~ forkからWebSocketまで : melborne.github.com - 世の中は並列化花ざかりだよ 人間はシングルタスクのままなのに プログラミングするときは マルチタスクが要求されるなんて 世知辛い世の中になったものだね でも情報革命は始まったばかりだから 愚痴ってばかりもいられないよ 自分がその波にうまく乗れないとしても うまく乗ってる人の様を 間近で見てみたいと思うんだ そんなわけで.. Rubyのfork Thread Reactor EventMachine WebSocketなどの並列化について少し学んだので 自分の理解をここにまとめておくよ REPL irbはRubyにおける対話型の実行環境だよ こ

    irbから学ぶRubyの並列処理 ~ forkからWebSocketまで - hp12c
    yuiseki
    yuiseki 2011/09/30
  • Ruby脳でCoffeeScriptのクラスを理解する - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 Ruby脳でCoffeeScriptのクラスを理解する : melborne.github.com - Rubyは最高の言語だから もっと普及していいと思うけれども その障害となっているのはたぶん 「Rubyがビジュアルに訴えない言語」となっているからだよ たしかにRubyにはRuby/TkとかShoesとかがあるけど 現代のプログラミングで「ビジュアル」と言ったら 暗黙的に「Web上の」という修飾が付くよね 一方でJavaScriptは jQueryやCoffeeScriptの人気を見る限り 最高とは言えない言語だけれども 「ビジュアルに訴える言語」となっている点が 普及の大きな要因になっていると思うよ つまりブラウザ上で実行できる唯一の言語たる地位が Jav

    Ruby脳でCoffeeScriptのクラスを理解する - hp12c
    yuiseki
    yuiseki 2011/09/09
  • Rubyで論理プログラミングしようよ! - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 Rubyで論理プログラミングしようよ! : melborne.github.com - 人生は選択の連続だよ 1つの選択が君の未来を変えるよ そして残念なことに 後からその失敗に気がついても 選択をやり直すことは人生ではできないんだよ.. コンピュータプログラムにも似たようなところがあるよ プログラムは一度走り出したら止まらないから 途中の分岐で選ばれた選択を 後から変えるのは得意じゃないんだ 問題1 例えば次のような問題を考えてみるよ xが1,2,3の何れかで yが4,5,6の何れかであるとき x + y = 7 となるx, yの組みを求めよ x, yには複数の選択肢があって xの決定はyの決定に影響を与えるから その組み合わせを決めるためには 人間がするのと

    Rubyで論理プログラミングしようよ! - hp12c
    yuiseki
    yuiseki 2011/09/01
  • RubyのようなCoffeeScriptを使ってJavaのようなProcessingを書いてJavascriptで実行してWebでビジュアライジング・データを実現しようよ! - hp12c

    「ビジュアライジング・データ ―Processingによる情報視覚化手法」(Ben Fry著) という 情報視覚化の実践的テクニックを解説する素晴らしいがあります ビジュアライジング・データ ―Processingによる情報視覚化手法 作者: Ben Fry,増井俊之(監訳),加藤慶彦出版社/メーカー: オライリージャパン発売日: 2008/12/01メディア: 大型購入: 35人 クリック: 718回この商品を含むブログ (65件) を見る このでは情報の視覚化にProcessingという Javaをベースにしたグラフィック専用言語を使っています Processingはマルチプラットフォームの統合開発環境に その実行環境を備えていますが エクスポート機能でJAVAアプレットを生成することで 成果物をWeb上に公開することもできます http://processing.org/ しか

    RubyのようなCoffeeScriptを使ってJavaのようなProcessingを書いてJavascriptで実行してWebでビジュアライジング・データを実現しようよ! - hp12c
    yuiseki
    yuiseki 2011/08/24
  • + (足す)から始めるRuby - hp12c

    数学の世界で + は演算子である 5歳の子供でもそれを知っている そして私やあなたが老いて死にゆくまで + は演算子であり そこに疑念の入る余地はない プログラミングの世界でもふつう + は演算子である CでもJavaでもPerlでも + は演算子であり それ以上でもそれ以下でもない ところが驚くべきことに Rubyの世界では + は演算子ではないのである 嘘だと思うなら エディタを立ち上げて*1 次のようにしてみるといい class Fixnum def +(other) Integer("#{self}"+"#{other}") end end 1 + 2 # => 12 123 + 456 # => 123456 あなたは今 Fixnum#+ メソッドを再定義した そうしたら1 + 2は12という答えを返した そうRubyの世界で + は演算子ではなく ユーザが再定義可能な ひとつの

    + (足す)から始めるRuby - hp12c
    yuiseki
    yuiseki 2011/08/10
  • 1から始めるRuby - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 1から始めるRuby : melborne.github.com - 数学の世界で1は数である 3歳の子供でもそれを知っている そして私やあなたが老いて死にゆくまで 1は数であり そこに疑念の入る余地はない プログラミングの世界でもふつう 1は数である CでもJavaでもHaskellでも 1は数であり それ以上でもそれ以下でもない ところが驚くべきことに Rubyの世界では 1は数ではないのである 嘘だと思うなら irbを立ち上げて 次のようにしてみるといい $ irb >> 1.next => 2 あなたは今 1にnextというメッセージを送った そうしたら1は 2という答えを返したのだ つまりRubyの世界で 1は数以上のものであり メッセージに返答する「

    1から始めるRuby - hp12c
  • RubyのメタプログラミングでInterpreterパターンを実装しよう! - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 RubyのメタプログラミングでInterpreterパターンを実装しよう! : melborne.github.com - 「Rubyによるデザインパターン」(著:ラス・オルセン)は GoFの23あるデザインパターンのうちの14個について Rubyによる実装とその解説を試みた書籍です Rubyによるデザインパターン 作者: Russ Olsen,ラス・オルセン,小林健一,菅野裕,吉野雅人,山岸夢人,小島努出版社/メーカー: ピアソン桐原発売日: 2009/04/01メディア: 単行購入: 13人 クリック: 220回この商品を含むブログ (66件) を見る Interpreterパターン その中にInterpreterパターンを取り扱った章(15)があります

    RubyのメタプログラミングでInterpreterパターンを実装しよう! - hp12c
  • HerokuでSinatraでmemcachedしようよ! - hp12c

    「NoSQL データベースファーストガイド」(著:佐々木達也) というを読んでるよ 各種NoSQLのひと通りの説明と それぞれにRubyを使ったサンプルがあって 僕のようなNoSQL知識ゼロ(NoKnowledge) の人にとってはとてもためになるよ 特にサンプルは各NoSQLの利用状況を想定して作られているから 実用的でうれしいよね NoSQLデータベースファーストガイド 作者: 佐々木達也出版社/メーカー: 秀和システム発売日: 2011/04/26メディア: 大型購入: 8人 クリック: 859回この商品を含むブログ (29件) を見る その中に音楽視聴ランキングサイトの楽しいサンプルがあるんだよ それはGyao音楽ランキングに基づいて YouTubeから対応動画を取ってきてリスト表示するというものだよ 一度アクセスしたデータは memcachedを使ってサイト側で保持すること

    HerokuでSinatraでmemcachedしようよ! - hp12c
  • 内部DSLを使って、RubyのWebフレームワークを書こう! - hp12c

    Sinatraのようなベース言語の構文を使って実現するDSLを 内部DSLといいます 前回僕が書いたChinatraは一見内部DSLにみえるけど ベース言語とは異なる構文を使った外部DSLです でも時代の風は内部DSLに向いています the 0.8 true language 言語ワークベンチ 自分もRubyの構文のユルさとメタプログラミングを使って Sinatraのような内部DSLを書いてみたい そしてRubyistをマインドコントロールしたい.. そんなわけで... Sinatraと別の構文を持った Webフレームワーク「Shynatra」をRubyで書きました:-) ShynatraはRubyで下記のような最小労力で 手早くウェブアプリケーションを作成するためのDSLです # myapp.rb require "shynatra" R/:hello./ { 'Hello world!

    内部DSLを使って、RubyのWebフレームワークを書こう! - hp12c
    yuiseki
    yuiseki 2011/06/08
  • Sinatraに別構文があってもいいじゃないか! - hp12c

    前の投稿でSinatraはRubyそのものでDSLじゃないと言いました SinatraはDSLなんかじゃない、Ruby偽装を使ったマインドコントロールだ! 確かに内部DSLというのはそういうものなのかもしれません でも言語といったら独自の構文くらいはもっていたい それで コードをそのままRubyに通したら Syntaxエラーになってほしい ちょっと意味不明ですけど... そんなわけで... 独自構文を持つSinatra Chinatra を作りました ^^;*1 (ネタ注意!) 使い方 #myroute.rb get / haml :index get /hi 'hi, my friend!' get /:name hello(params[:name]) helpers - hello(name) "Wow you are #{name}!" - 独自の構文です! これはそのままRuby

    Sinatraに別構文があってもいいじゃないか! - hp12c
    yuiseki
    yuiseki 2011/06/05
  • SinatraはDSLなんかじゃない、Ruby偽装を使ったマインドコントロールだ! - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 SinatraはDSLなんかじゃない、Ruby偽装を使ったマインドコントロールだ! : melborne.github.com - Sinatraのサイトを開くとSinatraはDSLだと書いてある Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort: (SinatraはRubyで手早くWebアプリケーションをつくるためのDSLです) DSLというのはDomain-Specific Language つまり特定の目的に特化した言語のことだ 確かにSinatraはWebアプリケーションという 特定の目的のために作られたものだけれども それは言語じゃない

    SinatraはDSLなんかじゃない、Ruby偽装を使ったマインドコントロールだ! - hp12c
    yuiseki
    yuiseki 2011/06/03
    SinatraはほんとうはRubyそのものなんだけど その構文のユルさとメタプログラミングを使って専用言語を装い ユーザをその独自の世界に引き込むべく 僕らをマインドコントロールしてたんだ!
  • Rubyの目次 - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 Rubyの目次 : melborne.github.com - 前の記事で作ったツールで早々 自分が投稿したRuby関連の記事を取得・整理して目次を作りました 内容が古く役に立たないものもあると思いますが どなたかの参考になれば幸いです:-) それにしても自分の中途半端さがよくわかる.. Ruby言語仕様 Ruby、君はオブジェクト指向なんかじゃない、謎の生命体試行錯誤だ!(2008-03-19) Ruby、君はオブジェクト指向なんかじゃない、謎の生命体試行錯誤だ!(2008-03-21) Ruby、君はオブジェクト指向なんかじゃない、謎の生命体試行錯誤だ!(2008-03-23) Rubyのシンボルは文字列の皮を被った整数だ!(2008-08-02) Ruby

    Rubyの目次 - hp12c
  • Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!(その3) - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!(その3) : melborne.github.com - 引き続き「なぜ関数プログラミングは重要か」を Rubyを使って解釈し自分の理解に基づいて解説してみます 誤解が有るかも知れません いやきっとあります ご指摘いただければ助かります プログラムの貼り合せ(遅延評価) 次に関数プログラミングの2つ目の強力な糊 つまりプログラムを貼り合せる糊について説明する いま2つのプログラムfとgがあって 入力inputをこれらに適用する場合を考える g (f input) プログラムfは入力inputを受け取ってその出力を計算し その出力はプログラムgの入力として使われる 一般的なプログラム言語ではfからの

    Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!(その3) - hp12c
    yuiseki
    yuiseki 2011/02/20
  • Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!(その2) - hp12c

    ブログを下記に移転しました。デザイン変更により移転先では記事が一層読みやすくなっていますので、よろしければ移動をお願い致します。 Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!(その2) : melborne.github.com - 前回に引き続き「なぜ関数プログラミングは重要か」を Rubyを使って解釈し自分の理解に基づいて解説してみます 関数の貼り合せ(ツリー編) 貼り合せの能力はリスト上の関数にとどまらない ラベル付き順序ツリーの例でこれを示そう Rubyにはリストに都合の良いArrayクラスが組込みであったが ツリーに都合の良いものはないので自分でクラスを定義しよう ツリーはラベルを持ったノードを連結したものとして表現できるので この連結の機能をもったNodeクラスを定義することで ツリーを表現しよう class Node attr_reader :label,

    Rubyを使って「なぜ関数プログラミングは重要か」を解読しよう!(その2) - hp12c
    yuiseki
    yuiseki 2011/02/19