2011-03-01から1ヶ月間の記事一覧

時間帯重複チェック(応用編)その2

お題:時間帯重複チェック(応用編) - No Programming, No Life をもう一度解く。 フラグ方式には及ばないが計算量を改善した方法に辿り着いた*1。フラグ方式は bucket sort のように限定条件に気づいているので気づいていない方式では太刀打ちできない。ま…

時間帯重複チェック(応用編)

お題:時間帯重複チェック(応用編) - No Programming, No Life を解く。*1 調べてみたら 区間木 - Wikipedia というものがあるみたいだが、手頃な感じではないので Groovy で力づくな方法で解くことにする。 class Time implements Comparable<Time> { int h, m </time>…

Parser Combinator ライブラリを使ってみる

数式のところを Java のライブラリで書いてみる。*1 JParsec http://jparsec.codehaus.org/ @Grab('jparsec:jparsec:2.0') import org.codehaus.jparsec.Parser import org.codehaus.jparsec.Parser.Reference import org.codehaus.jparsec.functors.* impor…

spread の Operator Overloading

Groovy では List は * 演算子で 1つ外側の List の要素に展開できる。 groovy:000> [1,2,*[3,4,5]] ===> [1, 2, 3, 4, 5] Groovy の演算子はメソッドで定義できるが http://groovy.codehaus.org/Operator+Overloading に * は載っていない。*1 groovy:000> …

Parser Combinator

Graham Hutton 氏の『プログラミング Haskell』 第8章 関数型パーサーを Groovy で書く。 Page Redirection にコードがあるがテキストとは少し違う。 Parser で扱う補助的な関数を定義する Closure を Parser として扱うので Parser 自体は定義しない Just …

Groovy で swap

http://www.fepc.or.jp/present/jigyou/japan/ によると 0〜8 時が消費電力の少ない時間帯みたいだ。というわけで深夜プログラミング中 単純な変数の場合 Groovy には Multiple Assignment があるので単純な変数の swap は簡単に行える。 http://groovy.code…

Groovy の getAt

Groovy では演算子の多重定義によって a[b] は a.getAt(b) の呼び出しに置き換えられる。 a, b のクラスは自由なので、次のようなこともできる。 class Greeting { def text } class Say { def getAt(Greeting greeting) { println greeting.text } } new Sa…

Groovy の Range

s = "abc" assert "abc" == s[0..<s.size()] assert "abc" == s[0..-1] assert "ab" == s[0..-2] assert "a" == s[0..<-1] 最後の動作に驚いたので Groovy の Range を調査する。 Range のプロパティ class MyRange extends AbstractList /* implements Range */ { int from, to boolean reverse MyRange(int from, int to) { this.reverse = from >…</s.size()]>

シャッフルする

シャッフル関連のメモ 1年前の記事 「Microsoft が提供しているブラウザ選択でランダムであるはずの表示順序に偏りがあった」という内容だ。 MS、Webブラウザ選択画面にアルゴリズム上のバグか − @IT Doing the Microsoft Shuffle: Algorithm Fail in Brows…

PApplet

[ActionScript 3.0] Fisher-Yatesアルゴリズムの可視化│miscellaneous を Groovy で実装したい。 Processing.org *1 依存関係がなく Groovy スクリプトから利用し易そうな Processing を使ってみる。 Processing を Grape から利用するための設定 公開されて…

順列を生成する

まずは Groovy の機能で Groovy の List は順列を生成するメソッドを持っている。*1 [1,2,3].permutations().each { println it } ただし、辞書式順序ではない。 [1, 2, 3] [2, 3, 1] [3, 2, 1] [3, 1, 2] [2, 1, 3] [1, 3, 2] でも Collection#eachPermutat…