2011-01-01から1年間の記事一覧

『ある金額になるコインの組み合わせ』 に挑戦

お題:ある金額になるコインの組み合わせ - No Programming, No Life Javaで「ある金額になるコインの組み合わせ」 - terazzoの日記 を Groovy に翻訳しようといろいろ調べていたら Tree iterator が簡単そうだったので実装してみた*1。 参考 General design…

『FizzBuzz(Nパターン)』 に挑戦

お題:FizzBuzz(Nパターン) - No Programming, No Life fizz buzz without trial division · GitHub を Groovy に翻訳してみた。 @Grab(group='com.google.guava', module='guava', version='r09') import com.google.common.base.Function import static co…

『サマーインターン2011問題』 に挑戦

サマーインターン2011問題 | Preferred Research 思いついた方法が 解かれてブックマークされている方 と違ったので。半分より多く現れるなら文字のバイト位置をカウントして半分より大きいバイト位置だけ拾った文字を出力すればよいのではないかと思った。 …

0〜1000に含まれる0をカウントする

0〜1000に含まれる0をカウントする という問題。 参考 練習 - krystal: プログラミング超初心者(文系) - Rubyist - オリジナル 0〜1000に含まれる0をカウントする - http://rubikitch.com/に移転しました - Ruby で '0' in 0~1000 - ellaneous - golf で 他…

型キャスト

最初に Groovy 1.8.1 がリリースされました。 前回 Grape について書いたばかりですがデフォルトでローカルの Maven リポジトリが参照されるようになりました。 Maven リポジトリを参照する設定を追加しただけならもう設定ファイルは削除してもいいです。 2…

Grape

groovysh でライブラリを参照したかったので Grape について調べた。(Groovy 1.8.0 時点) 参考 http://groovy.codehaus.org/Grape http://groovy.codehaus.org/Japanese+Grape groovy.grape.Grape.grab メソッド スクリプトで使用する @Grab の代わりに groo…

Levenshtein distance

diffの動作原理を知る〜どのようにして差分を導き出すのか を読んでからずいぶん時間を経たけれども Diff のアルゴリズムを理解できた*1。 理解するためにいろいろ検索したが Diff algorithm の解説が自分にはいちばん分かりやすかった*2。このエントリがな…

Longest common subsequence

Longest common subsequence - Rosetta Code を Groovy で実装してみる。 DP は Java 版を再帰は Haskell 版を参考にした。 Dynamic programming def lcs1(xs, ys) { int N = xs.size() int M = ys.size() int[][] dp = new int[N+1][M+1] for (i in 0..

java.lang.Double

Java の double の非数や無限大の振る舞いについてのメモ。 比較 Groovy のバグ報告で Doublle.NaN == Double.NaN は false と評価されるべきと上がっていた。 http://jira.codehaus.org/browse/GROOVY-4906 Java 言語仕様ではそうなっているらしいので確認…

Huffman coding

ハフマン符号はデータ圧縮の手法で 『プログラミングコンテストチャレンジブック』 によると貪欲法になるらしい。 出現頻度が高い文字により短い符号を割り当てるので元の文字列より圧縮できる。 エンコードの手順 文字列から頻度表を作成する 頻度表からハ…

monoid

id:akihiro4chawon 氏の 比較はモノイド を読んで新しい視点が得られた気がするので忘れないうちに書いておく。 半群とは Wikipedia から引用 演算が閉じている S の各元 a, b に対して、演算結果 a • b は再び S に属する。 結合律 S の各元 a, b, c に対し…

subsequences

Groovy Sequence of a number - Stack Overflow から def number = 169 // need a method in groovy to find the consecutive numbers that is, 1,6,9,16,69,169 // not 19! Groovy には List#subsequences があるがどうやら連続しているものだけ欲しいらし…

Text wrapping

終わってたけど 「プログラミングGroovy」のカバーに載せる短いプログラム - Togetter みて考えたもの。 「プログラミングGROOVY」と表示するプログラム。無茶な 3 行だったのできれいにした。 本当は Groovy のロゴをどこかの API でアスキーアートに変換し…

型クラス

.hs

このとき 本当は ArrowChoice*1 での実装も書く予定だったけどまだ理解が足りてなかった。 それで id:nskj77 氏が書かれた Arrow のはなし を読んでいる。 読みながら実際の定義も調べているとどうやら型クラスが理解できていない。 型クラスについて調べて…

場合の数でループする

inamori 氏の ある確率 - 桃の天然水 を実装してみた*1。 8つのコップがあって、ボールをランダムに16個コップに入れる。 そのとき全てのコップに2個ずつボールが入る確率は? ボールを入れるコップでループする どのコップに入れたかで処理すると 8^16 回処…

trampoline

Windows update を実行したらパソコンが壊れてしまった。 パソコンが壊れたことは過去に 3 回あるがいずれも Windows update 中と直後。 今回はグラフィックボードが壊れただけ*1で助かったので続きを。 前回調べたのは TCO を実装するためで、何故実装した…

metaClass

以前 uehaj 氏が指摘されたエントリ ExpandoMetaClass.enableGlobally()について一言いっておくか - uehaj's blog ExpandoMetaClass.enableGlobally() で metaClass が変化するのは同じだけど振る舞いは変わっているようなのでメモしておく。 この辺りは明文…

Closure.DONE

Closure は便利だけれども Groovy の場合は途中で break や return *1ができない。 値を返す必要がないときは each より for を使っているが内部イテレータが必要な場合は先に findAll でフィルタリングしている。 でも Groovy も一部のメソッドは break の…

Bitwise operation

Java と Groovy のビット演算のメモ 基本 参考: http://leepoint.net/notes-java/data/expressions/bitops.html assert (3 & 5) == 1 // AND assert (3 | 5) == 7 // OR assert (3 ^ 5) == 6 // XOR assert ~3 == -4 // NOT assert (3 << 2) == 12 assert (…

Saruman's Army

『プログラミングコンテストチャレンジブック』 から N 個の点が直線上にあります。点 i の位置は Xi です。N 個のうちいくつかの点を選び、それらの点に印を付けます。N 個のすべての点について、距離が R 以内の場所に印を付けられた点がなければなりませ…

Best Cow Line

『プログラミングコンテストチャレンジブック』 から N 文字の文字列 S が与えられ、N 文字の文字列 T を作ります。はじめは T は長さ 0 の文字列で、次のいずれかの操作が行えます。 S の先端を 1 文字削除し、T の末尾に追加する S の末尾を 1 文字削除し…

Y combinator

Y combinator について分かった(気がする)範囲のメモ 『Scheme 手習い』 9章 この章が難しくて悩んでいたのだけど理由が分かった。 Learning Programming Languages with Koans によると*1『Scheme 手習い』は Koan の元になっているようだ。 各章はあるテー…

Re: そのコード、本当に最適化されてますか?

Nagai Masato 氏の Exploring Groovy 1.8 Part 1 - そのコード、本当に最適化されてますか? を読んでコメントしようとしたができなかったので。 if-else と if + return は変わらない エントリのソースを試していて偶然気が付いた。{} をつければ変わらない…

埋め込み文字列+遅延評価

元ネタ Re: Just for fun Groovy script for Google Picasa Venkat Subramaniam 氏の『Programming Groovy』に載っている Tips らしい*1。 Groovy で pass-by-name を検索して Hit した*2。 いつか使おうと思っていたが面白い使用例を思いつきそうにないので…

foldr

.hs

『Real World Haskell』 4章の内容から。 左畳み込みと右畳み込みの違い foldl (+) 0 (1:2:3:[]) == foldl (+) (0 + 1) (2:3:[]) == foldl (+) ((0 + 1) + 2) (3:[]) == foldl (+) (((0 + 1) + 2) + 3) [] == (((0 + 1) + 2) + 3) foldr (+) 0 (1:2:3:[]) ==…

Scala exercises for beginners

id:akihiro4chawon 氏の scala を左傾化させる話 - akihiro4chawonの日記 が元ネタ Pattern match*1 で解いてみた。 Pattern match は好きなのだが RWH によると明示的な再帰より fold を使う方がわかりやすいと書いてあった。この辺りは経験を積んでから判…

Koan

Ryo Tomidokoro 氏の エントリ を読んで知った。 調べてみたところ Ruby 発祥の禅問答集のようなもので様々な言語で存在するみたいだ*1。 禅の公案(Koan)がプログラミング学習でプチブーム:Rails Hub情報局:エンジニアライフ Groovy は cjudd 氏の groov…

A micro-manual for LISP Implemented in Groovy

元ネタは Nurullah Akkaya 氏の A micro-manual for LISP Implemented in C その元ネタは Lisp の始祖である John McCarthy 氏の A micro-manual for LISP - not the whole truth*1 LISP による実装は 50 行ぐらい、C による実装は 380行ぐらいある。 この差…

ファイルの改行コードを変換する方法

元ネタ:1行で指定ディレクトリ配下のファイルの改行コードを変換する方法 - Togetter がんばってみたが AntBuilder に及ばなかった。 // 個人的な設定なので注意 new File('.').eachFileRecurse(groovy.io.FileType.FILES) { it.write(it.text.normalize()…

文字列で+を表示する

Groovyのtrampolineを使ってピラミッドのお題を解いてみた - No Programming, No Life が楽しそうなので私も エロと風俗情報満載 どう抜く? から引用する。 pooq 氏からの お題 与えられた文字列で+のかたちを表示するプログラムをかいてください。 サンプ…