Just another Ruby porter,

〜2006年10月中旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2006-10-11 (Wed)

[Ruby] テストクラスの名前

&test_name.method(:to_s)というのがなんかわかりにくいので、
自分なりに変更。

module Test::Unit
  def self.define(test_name = caller.first.sub(/ in `.*'\z/, ''), &block)
    Class.new(Test::Unit::TestCase) do
      class << self; attr_reader :name end
      @name = test_name.to_s
      class_eval(&block)
    end
  end
end

Test::Unit.define do
  def test_foo
    assert true
  end
end

要するに無名クラスのクラスメソッドにnameが定義されればどんな方法でもいいわけで。


2006-10-12 (Thu)

[Ruby] Isolating non-unique items in an arrayl

uniqの反対というお題。

a = ["a", "a", "a", "b", "c", "d", "d"]
a.select{|i| a.grep(i).size > 1}

書いたが、数が多いときは2つ見つかった時点で
grepをやめたいところだ。でもなんかそれは無理っぽいので高速化は

h = {}
a.select{|i| h[i] ||= a.grep(i).size > 1}

ぐらいでお茶を濁す。

1.9ならEnumerable#countがあるのでgrepせずに

a.select{|i| a.count(i) > 1}

と書ける。


2006-10-13 (Fri)

[Audio] Woodi WD-S1の電源が入らない

USBでPCへつなぐと直るので充電が切れたのかと思ったら、やたらと頻発する。
2ヶ月しか経ってないのにもう故障と思ったら、
どうも0バイトのOggファイルがいけないらしい。
しばらく原因がわからなかったが、
特定の曲のあとというか途中で死ぬのでやっと気づいた。
たしかに転送してたらディスクフルになってそのままにしてたんだった。

しかしいきなり電源切れてそのままなにもできないってのは困るな。


2006-10-14 (Sat)

[Ruby] Ruby on Windows: A Note for Microsoft

なかださんとこに見たかとメールが来たらしい。
とりあえず長いので後で読むかも。


2006-10-15 (Sun)

[Code] Code Golf参戦

一昨日から参戦。99 Bottlesで200切るまでは他をやらないと決めたが、
それどころか一昨日から1歩も進んでないあたりがだめだめだ。


2006-10-16 (Mon)

[Code] 99 Bottles Of Beer

なんとか200バイトまで来た。このままだともう縮みそうもない。
今までは

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

というかたまりで処理していたが、

Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.

というかたまりで処理すればいいのかなと予想。
こうすると数字が全部同じになるわけで。あと

99.downto(1){|i|}

よりも

("1".."99").map{|i|}.reverse

でブロック変数を文字列として扱うとひょっとして短くなるのかなと思ったり。

[Ruby] ディレクトリが空かどうか?

golfの影響だろうか 変な方法を思いついた。

Dir.entries(dirname).join == "..."

でよさげ。一見 [ruby-talk:220052]でいいような気もするが順番は決まってない。

% mkdir tmp
% ruby -ve 'p Dir.entries("tmp")'               
ruby 1.8.5 (2006-10-13) [i386-linux]
["..", "."]
別のマシン
% mkdir tmp
% ruby -ve 'p Dir.entries("tmp")'
ruby 1.9.0 (2006-07-13) [x86_64-netbsd]
[".", ".."]

2006-10-17 (Tue)

[Vim] Vim6とVim7の:a,:i時のautoindentの挙動の違い

誰だか忘れちゃったんだけど、はてぶで教えてもらった。
:a!とか:i!みたいに!をつければいいようだ!
すばらしい。

:{range}a[ppend][!]
Insert several lines of text below the specified line. If the {range} is missing, the text will be inserted after the current line. Adding [!] toggles 'autoindent' for the time this command is executed.

2006-10-18 (Wed)

[DVD] ぽすれん

考えてみると変更は無料なんだから悩む必要もなく、郵便に変更して試す。
土曜日も休日扱いかと思ったら違ったようだし。


2006-10-19 (Thu)

[Ruby] map.with_index

そういえば1.9だとmap_with_indexというか、 map.with_indexがありだったんだなと思い出した。

% ruby-1.9 -e 'p %w(a b c d).map.with_index{|x| x}'
[["a", 0], ["b", 1], ["c", 2], ["d", 3]]

enum_with_indexなら1.8でも可能

% ruby-1.8 -renumerator -e 'p %w(a b c d).enum_with_index.map{|x| x}'
[["a", 0], ["b", 1], ["c", 2], ["d", 3]]

2006-10-20 (Fri)

[CodeGolf] 99 Bottles Of Beer

先日書いた方法でかたまりの単位を変更して194バイトまで縮めた。
最終的には

$*<<$*.shift

でrotateしたわけだが、なかださん、 これちゃんとコミットしといてよー。
あれ?でもこの仕様だと

$*.rotate(1)

なのか?それじゃあまり意味ないな。同じ長さだよ。
と思ったら、さすがうささんだ。
ちゃんと今日のことを考えて引数を省略した場合は1とみなそうと 提案してる。

[CodeGolf] $*と$"

$*も$"どちらも[]で初期化された配列として使えるはずだが、
CodeGolfはセキュリティチェックのためにsecure.rbというファイルをrequireしてるらしく、
$"をその用途には使えない。残念。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!