Code Aquarium

minazoko's blog -*- 水底のブログ -*-

(Clojure) 標準出力 - オンライン判定コード提出用テンプレその2

前回投稿では標準出力周りが微妙な感じで終わってしまいました。折角なのでどうすれば出力も楽になるか考えてみました。こんなテンプレになりました。 (def in-seq #(line-seq (java.io.BufferedReader. *in*))) (def s->long #(Long/parseLong %)) (defprot…

(Clojure) 標準入力 - オンライン判定コード提出用テンプレ

最近PaizaのオンラインハッカソンやCodeIQの出題コードを問いたりして遊んでいます。 この手のサイトでは標準入出力を使います。 出力はともかく標準入力読み取りを毎回考えて書くのは無駄なのでコピペできるテンプレを用意するのが常套手段のようです。 と…

(PowerShell) 簡易 timeit

Windowsでコマンドの処理時間計測したい場合みなさんどうしてるんでしょうかね。 PowerShell使えばそういうコマンドがあるだろうと思ったのですが、いやあるにはあるんです Measure-Command が。 PS C:\wk> measure-command {ping localhost}でもこのコマン…

(Racket) トップレベルbeginの継続が捕捉できない

仕様?バグ? #lang racket (define cc '()) (begin (display 'A) (call/cc (lambda (k) (set! cc k))) (display 'B)) (cc) ;; なにも表示されない。 call/ccの継続は (display 'B) を実行してトップレベルへ戻る処理の筈。だけど保存しておいた継続を実行し…

(Racket) composeマクロ

composeマクロを作る 関数合成を行うcomposeは通常関数で提供されます。それをマクロで作るとどうなるかという話。昨日即興で書いた物が全然ダメダメだったので再挑戦です。使用するのは syntax-rules。 compose1 と compose Racketには2つのcompose関数が…

(Scheme) syntax-rulesの引数が1つのパターンは省略できる?

前からあやふやだったので確認してみた。 これでandマクロが作れるのは違和感がある。 (define-syntax myand (syntax-rules () ((_) #t) ((_ e1 e2 ...) (if (not e1) #f (myand e2 ...))))) (_ e1 e2 ...) が引数2つ以上を表すならば、上のマクロ定義では…

(ClojurClr) clojure.xml の代替品

clojure clr には何故か未だ clojure.xml が移植されていないようです。JavaのSAX APIと .Net の XML APIがまるっきり異なっているので後回しにされている、といったところでしょうか?代替品もなさそうなので適当に書いてみました。https://gist.github.com…

(Clojure) vsClojureを触ってみた

この記事は Clojure Advent Calendar 2014 - Qiita 15日目の記事です。 まえおき 去る2014/11/12、無償オープンソース版VisualStudio である VisualStudio Community 2013 が公開されました。Pro相当で機能的な制限はなし。となれば、Clojureの.Net版である …

(Racket) draw-text における文字回転

draw-textによる縦書きは、文字列を分割して一文字ずつ置いていくのが簡単です。ただしカタカナの長音記号は横棒のままになっていますので、文字を回転して描画します。 回転したい文字の中心に座標原点を移動 (set-origin) さらに座標系の回転(rotate) そし…

(Racket) racket/gui で年賀状宛名書き

このエントリは Lisp Advent Calendar 2014 - Qiitaの8日目の記事です。 racket/guiで年賀状印刷してみようとした。 いろいろ未完成感が漂ってますが、取りあえずこんな感じのものができました。 mnzk/nenga-print · GitHub 年賀はがき画像はこの辺から拝借 …

(Racket) 無名関数をcutで評価

lamda式等で無名関数を作り即時評価するコードは次のようになります。 ((lambda (x y) (* x y)) 5 7) ;=> 35 このように無名関数のコードが短ければいいのですが長くなると適用される引数をずっと後ろの方に書く事になり可読性が下がります。 ((lambda (x y)…

(Racket) values->list マクロとか

無いっぽいので... (define-syntax values->list (syntax-rules () ((_ vs) (call-with-values (thunk vs) list)))) (define-syntax values->vector (syntax-rules () ((_ vs) (call-with-values (thunk vs) vector)))) (define-syntax values->hash (syntax…

(Racket) member-keyの話

とりあえずクラスの基本 racketではクラスは次のように作成します。 (define sub-class% (class super-class% (super-new) ...)) racketのクラスは単一継承で必ずなんらかのクラスを継承しなければなりません。この例では super-class%クラスを継承した sub-…

(Racket) Class の External Name Control

RacketのClassシステムの説明にある Internal / External Names がピンと来なかったので、サンプルを書いてみました。 公式ドキュメントでは 比較対象にJavaのprotectedを例にあげていますが、むしろ C++ の friend に近いような気がします。Racketのdefine-…

ifマクロ

Gaucheでifマクロを書いてみた。 マクロ名は if だとアレなので %if とする。 当然ながら if case cond といった分岐用特殊形式の使用は禁止。 else無指定への対応すると煩雑になるので2つに分けています。 (define-macro (%__if test then else) `((assoc-…

(Gauche)バブルソート

今読んでいる数学ガールガロア理論がバブルソートにちょっとだけ触れていました。 考えてみるとバブルソートは何となく概要を知っている程度で、実装した記憶がありません。振り返るとバブルのつもりが結局挿入ソート的な物を書いて終わってることが多いよう…

(Gauche) sort における #"|a|" の(?) 謎挙動

[追記] 本件、早々に突っ込みをいただきました。 @mnzktw #"|a|" は只の定数文字列"|a|"になるので、比較関数が引数に関わらず定数値を返しているためだと思います。多分意図したのは #"~|a|" じゃないでしょうか。— Kilo Kawai (@anohana) 2014, 10月 11#"|…

(Gauche) 2chお題「そろばんAA」

2ちゃんねるプログラム板 プログラミングのお題スレ Part5 より 252 名前: デフォルトの名無しさん [sage] 投稿日: 2014/10/08(水) 21:14:41.09 ID:QOSwbYHc お題: 整数n(0<=n<1000000)をソロバンのAAに変換するプログラムを書け n=9563なら ######## #oo|…

(Racket) generatorでFizzBuzz

racketにもgeneratorライブラリがあるので、前回のgaucheのコードを移植……しようとした。しかしracketのgeneratorは汎用ストリームのように使うには、どうにも使いづらかった……。 steramとの相互変換が出来ればもっと楽できそうなんだけど。 #lang racket (r…

(Gauche)generatorでFizzBuzz

毎度似たような FizzBuzzを書いていますが、gaucheでgeneratorを使ったバージョン。無限リストを3本作ってマージするこの方式は、n f b を受け取った後、n をとるか f b をとるかの判定部分が泥臭くなります。 今回はパターンマッチを使って多少はすっきり…

素数列挙した人々

といっても、ガウスやオイラーのような歴史的偉人の話ではありません。Web上で素数リストを作ったり公開されたりしてる方々です。 最初に見つけたのはそのまんなURLのこちら Prime number list 2014/9現在、9997954969 までの素数がダウンロードできます。10…

(PowerShell)PowerShellで素数列挙

素数列挙スクリプト 素数列挙したくなったので、お手軽にPowerShellで書いてみました。 素数をファイルに保存し続けます。強制中断しても、再開するときに保存した素数を読み込んで続きから列挙。64ビット整数の範囲で延々素数を列挙できます。gist: primes.…

(BAT)バッチで年月日時分秒

Windowsのバッチスクリプトで年月日時分秒を表す数列を得る方法。 ファイルのバックアップ時などに欲しくなることあるよね。日付は環境変数DATEで取得できます。 > echo %DATE% 2014/07/09変数名の後にコロン+チルダを書いてその後ろにスライスする要素の先…

(Clojure)when-let と some->>

タイトルを見て何のことか想像つく人には多分つまらない話です。ついでに nil と seq というキーワードも追加します。おそらく想像通りの内容です。あしからず。 少し長い前置き 前のエントリで逆引き天気予報のプログラムを書きましたが、書いていて何か違…

(Clojure)サーバーにやさしい逆引き天気予報

[追記] tenkijp の rss サービスが終わってしまいました。下記プログラムももう使えません。 はじめに 今更感ありますが、天気予報を取得するプログラムを書いてみました。 コードはこちら データはtenki.jpのこちらから。 ポイント clojure.core.cache で取…

(PowerShell)複数行コメントはネスト不可

PowerShellの複数行コメントは で終わります。 ここはコード <# ここはコメント ここはコメント ここはコメント #> ここはコード ネストは一見できてそうに見えるけど、できません。 ここはコード <# -- コメント開始 ここはコメント <# -- ただのコメント …

(#PowerShell) ODAC でOracle操作

PowerShellでODAC (Oracle Data Access Components) PowerShellとOracleで検索するといくつかサンプルコードが見つかります。 しかしどうも釈然としない、コレじゃない感。すなわち ADO.Netに含まれる System.Data.OracleClient や OleDbではなく、Oracle社…

(PowerShell)ScriptBlockで文脈を作る。あと年賀状も。

この記事は,PowerShell Advent Calendar 2013の7日目の記事です。 なお、私のPowerShell環境は V3 です。以下すべて検証は V3でのみ行っています。 ScriptBlockで文脈を作る ScriptBlockで高階関数を作るとコンテキストをカスタマイズしているかのようなコ…

(PowerShell) $inputはコンテキストが違うと別物である

$inputはコンテキストが違うと別物である 勘違いしていました。 下記の4つのパイプライン変数 $input は同じものなんだろうなと思い込んでいましたが、違うものでした。 function my1 { $input } function my2 { begin{ $input } process{ $input } end{ $in…

(PowerShell) パイプラインはProcessで

2つのパススルー関数 サンプルコードその1 PowerShellの関数は一風変わっていて、内部に3つの役割をもったブロックを書くことができます。 function pass1 ([string] $Tag, [int]$MSec = 0){ begin{ Write-Host "BEGIN pass1 $Tag" } process{ [System.Thr…