Ruby

pentominoコマンドをgemに公開する最小の手順

前回のpentominoコマンドをgemに公開するまでの手順のメモ。次回公開する時に、悩まず・素早く・苦労最小限で公開できますように! 必要な環境 RubyGems.orgで1度でも何らかのgemを公開した環境であること。 つまり、RubyGems.orgにユーザー登録して、~/.gem…

途中経過を表示しながら解くpentominoコマンドに仕上げる

前回までにc言語なら0.9秒(さらなる高速化を追記した)でペントミノパズル(6×10)の全解を出力できるようになった。1秒切ったので、高速化についてはこれで満足。しかし、何かまだ満たされないものがある。 最速を狙ったコマンドは1度試せばそれで満たされ…

RubyとC言語でもペントミノバズルを解いてみる

前回からの続き。 明治ミルクチョコーレートパズルの解をすべて探す - ザリガニが見ていた...。 ペントミノの解を求めるプログラム高速化 - ザリガニが見ていた...。 ペントミノパズルを解くPythonコードは、順調に高速化の道を歩んできた。 3時間以上 → 50…

with_indifferent_accessはなぜ文字列キーを使うのか?

前回からの続き。 ところで、最近のRubyは{abc:123}({:abc => 123}と同等)のようなハッシュ定義も可能になり、間違いなくシンボルキーが多用される時代なのに... with_indifferent_accessは、なぜ文字列キーを使うのか? シンボルは無駄にオブジェクトを生…

Rubyのハッシュにメソッドでアクセスするには?やらない方がいい?

JavaScriptな脳状態でRubyを触り始めると、ハッシュにアクセスする時にエラーで怒られる。 h={abc:123} => {:abc=>123} h.abc NoMethodError: undefined method `abc' for {:abc=>123}:Hash from (irb):15 from /usr/bin/irb:12:in `<main>' いかん、いかん、Ruby</main>…

Ruby1.8.7+bundler+mecab-rubyのインストール

和布蕪(めかぶ)は美味しい。あのコリコリ感とぬめり感が最高である。一方、MeCab*1も素晴らしいソフトウェアである。日本語を扱う時はどうしても欲しくなる。和布蕪はスーパーで買うけど、MeCabはHomebrewでインストールした。 まずはmecabで検索してみた…

プロンプトにRubyのバージョンを表示したい

rbenvによって、Rubyバージョンは素早く、簡単に切り替えられるようになった。 すると、作業中にいったい自分はどのRuby環境にいるのか、見失ってしまうことがある...。 そうならないように、コマンドプロンプトにRubyのバージョンを表示しておきたい。 やっ…

bundlerでgemバージョンを束ねる

Rails1.1.6の環境でどうにかscaffoldはできるようになった。その時の実行環境は以下の状態だった。 $ rbenv version 1.8.7-p375 (set by /Users/zari/.rbenv/version) $ gem list *** LOCAL GEMS *** actionmailer (1.2.5) actionpack (1.12.5) actionwebser…

rbenvは何をしているのか?

~/.rbenv/以下に複数のRubyバージョンをインストールして、それぞれのRuby環境を切り替える仕組みを提供する。 ~/.rbenv/ (rbenvがRubyを管理するルートフォルダ) ~/.rbenv/shims/ (rubyやgemがインストールするコマンドへのラッパーを保存しておくフォル…

bundle gemは何をしてくれるのか?

必要最小のgemパッケージの作り方は大体理解できた。 rubyコードをlib/とbin/に振り分けて、 .gemspecファイルに設定を記述して、 gem build、gem installしてテスト、 問題なければgem pushで公開。 とっても簡単である。初回のみ.gemspecファイルの追加とR…

RubyGems.orgで公開する手順

前回からの続き。 gemコマンドは、.gemファイルを元に、gemが管理する階層にライブラリやコマンドをインストールする。 前回手順7で試したとおり、.gemファイルさえあれば、それがどこにあってもインストールは可能なのだ。 但し、そのためには.gemファイル…

必要最小のgemの作り方とインストール

gemは、Rubyのライブラリ管理のコマンド。Rubyのライブラリを検索・インストール・アップデート・削除など、苦労最小で操作する仕組みを提供してくれる。今までgemを使って、多くの素晴らしいライブラリをインストールしてきた。しかし、自分が作ったものをg…

日本の祝日に関するメモ書き

日本の祝日を出力するJPDateクラス(jcal.rb)を作成する上で調べたことを、忘れないようにメモ書き。 リンク先の各サイトの素晴らしく貴重な情報には、とても感謝しています。 カレンダーに関する知識 ユリウス日(Julian Day) 春分・秋分に関する知識 二十…

日本語を含んでもきっちり揃えるljust・rjust・centerにしておく

カレンダーコマンドを作るには、等幅フォントを使って、日付ごとの文字数を揃えておく必要がある。数値だけのカレンダーなら、簡単に揃えられる。しかし、そこに日本語の祝日が割り込んでくると、厄介なことになってくる...。 祝日の名称は、文字数が一定で…

日本の祝日を出力可能なJPDateクラスを作る

以前からの続き。 jcalコマンドで祝日もちゃんと表示されるようになったのだけど、中のコードはまだ混沌としている...。そもそも、祝日を計算するJPCalendarモジュールが、lookupメソッドで参照する方式なんて、全然いけてない。脳内が表計算アプリの影響を…

日本語が使えるirbにしておく

OSXに標準インストールされているirbは、残念ながら日本語が文字化けする。Rubyの方は標準で日本語が使えるようになったのに、何故なんだ?調べてみると、Ruby自体の日本語処理には問題ないのだけど、irbがコマンド入力を受け取る際に使っているライブラリ(…

jcalコマンドとして仕上げる

前回からの続き 数年分をリスト出力 さらに、数年分を並べてリスト表示するカレンダーも作ってみた。 ...中略... def list_cal(y, col) week_ja = %w(日 月 火 水 木 金 土) date366 = (Date.new(2004, 1, 1)..Date.new(2004, 12, 31)).to_a list366 = Array…

日本の祝日もちゃんと表示するjcalコマンドを作ろう

紙に印刷して使う目的なら、表計算アプリのカレンダーはけっこう使えるのだけど、画面で素早く確認したい時には、ちょっと仰々し過ぎる。特にターミナルで作業している時などは、そのままコマンドラインから素早くカレンダーを表示したい欲求がある。calコマ…

OptionParser底力+ARGFを使ったコマンド作り

前回からの続き。マニュアルがあるのだから、ちゃんと読めばそこにすべてが書かれているのだけど、自分はマニュアルを読むのが苦手。それよりもサンプルコードを実行して、その結果を体感しながら覚える方が好き。自分にとってはそうやって覚えた方が、忘れ…

RubyのOptionParserの底力を知る

コマンドは、以下のような書式でオプションと引数を設定して、実行する仕組みになっている。 例: コマンド名 オプション オプション オプション引数 オプション コマンド引数 optparser_test.rb -a -b VALUE --foo FILE_PATH 実際にコマンドを作ろうとする…

ブロックとProcの世界

Rubyの世界はブロックとProcで溢れている。だのになぜ、自分はそれに精通できないのか?Symbol#to_procとか、関数型Rubyとか、そんな発想は自分には到底できそうもない。そればかりか、自分の頭の中はRuby1.8で止まっている。その状態では、Ruby1.9以降に追…

テトリスの仕上げ

前回からの続き。 Star Rubyのインストール - ザリガニが見ていた...。 Star RubyでHello World! - ザリガニが見ていた...。 テトリスの作り方 - ザリガニが見ていた...。 テトリスとしての基本機能は実装できた。テトリスが動作するサンプルコードとしては…

テトリスの作り方

前回からの続き。 Star Rubyのインストール - ザリガニが見ていた...。 Star RubyでHello World! - ザリガニが見ていた...。 前回までにStar Rubyでスカッシュゲームを作ったのだけど、たった60行のシンプルなゲームであった。ほとんど全ての処理を、Game.ru…

Star RubyでHello World!

前回からの続き ぱらぱらアニメ サンプルコードのhelloworld.rbは、コメント行を削除してみると、以下のようなシンプルな構成となっている。 require "starruby" include StarRuby font = Font.new("fonts/ORANGEKI", 12) white = Color.new(255, 255, 255) …

Star Rubyのインストール

Star Rubyという2Dのゲーム作りの環境を提供してくれるライブラリをMavericksにインストールしてみた。 環境 MacBook Pro Retina15 OSX 10.9.2 Xcode 5.1.1 (5B1008) $ gcc -v Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --…

rubyのワンライナーに見る驚きの省略記法

rubyには、省略されたコードが隠されていることがある。その省略されたコードをちゃんと理解しておかないと、rubyの中で何が起こっているのか?見失ってしまう...。調べてみた。 一般的なソースコードの中では、可能な限り省略せずに書いた方が良いと思われ…

日本語と英語のテキスト境界のスペースをどうするか?

こうゆう発想のワンライナー的スクリプトが大好き。 uedamac:MEMO ueda$ echo "わたしは aho です。4 さいです。" | sed 's/\([^a-zA-Z0-9]\) \([a-zA-Z0-9]\)/\1\2/g' | sed 's/\([a-zA-Z0-9]\) \([^a-zA-Z0-9]\)/\1\2/g' わたしはahoです。4さいです。 出…

迷路の最短経路を求めるには?

相当、出遅れた感はあるが、以下の試験問題をやってみた。(Rubyで) さて試験問題です。 内容は、壁とスペースで構成された迷路が与えられたとき、スタート地点からゴール地点に至る最短経路を求めよ、というものです。 たとえば、S:スタート G:ゴール *:壁…

麻雀の「待ち」を出力する その3

さらに前回の続き。 メソッドを再帰呼び出しすることで、ループ(再帰呼び出し)回数はかなり節約できた。 しかし、puts @outs.uniqに頼っている現状では、まだ無駄な検索をしていることになる。 順序違いの組み合わせは、最初から無視すれば、一石二鳥だ。 …

麻雀の「待ち」を出力する その2

前回の続き。前回は他人のコードを一切参考にせずに書いて、試行錯誤してようやく出来上がった。見直してみると無駄が多い。 ループ回数は節約したと言っても、常に2100回も繰り返されてしまう。どんな単純な「待ち」であっても。 問題は、手牌の状態に関係…