programming

GCJ Japan 2011 予選

参加しました。夕方までバイトしてたので空き時間に問題だけ見て,終わってからコード書きました。A は,カットの回数が少ないのでシミュレーションでできるんだろうと思ったらできました。けどちょっとめんどくさかったです。こういう手続きを書くのは苦手…

lambda term の個数を数えてみる

上限を適当に決めて,サイズがそれ以下の lambda term の個数はいくつになるか計算してみました。本当に項の個数を数えると変数の名前を変えるだけでいくらでもできるので,自由変数として使える変数の個数を制限します。この条件は都合のいいように設定した…

Google Code Jam 2011 Round 1C

今年も参加してます。1B がさっぱりだったので,年々レベル上がってるし今年は無理かなと思いましたが,どうにか通りました。ちなみに submit して通ったコードは http://www.go-hero.net/jam/11/name/k.kojima から落とせます。 経過 開始直後,なぜか問題…

読書感想文: 抽象への憧れ

たまたま図書館で見かけて,タイトルに引かれて借りてみた本。抽象への憧れ−位相空間:20世紀数学のパラダイム (大人のための数学 5)作者: 志賀浩二出版社/メーカー: 紀伊國屋書店発売日: 2008/08/27メディア: 単行本(ソフトカバー)購入: 1人 クリック: 18…

きれいに書けないループ

ちょっとした疑問,兼 Euler 302 反省会。いろいろミスしたのだけど一番しょうもないやつ。N > n * p^e となる e についてループしたい。どう書きましょう,というお話。素直に書くと for (long n1 = n * p; n1 < N; n1 *= p) { ... }ですが,N, p が大きい…

Codeforces 26

参加しました。今回は新しいルールということで,lock と hack という仕組みが導入されました。システムとしては topcoder の SRM に近くなっているようです。 A. Almost prime numbers 相異なる素因数をちょうど二つもつ正の整数を almost prime number と…

CodeChef August 2010 Challenge

なんとなく。相変わらず難しい。Stepping Numbers と Swarm of Polygons の方針がだいたいわかった気がするのだけどいろいろと実装が大変というか面倒だなあとか。Stepping Numbers は上限が 2^64 なので unsigned long long 相当の値が扱える言語でないと厳…

逆行列の計算

必要になって何となく OCaml で書いて何となく晒す。なんとなく面倒臭そうなイメージを持ってたんですが,実際に書いてみたらそうでもありませんでした。破壊的代入の塊であるという点では関数型らしくありませんが,配列の破壊的操作が Array.iteri で思い…

codeforces 25

昨日の Codeforces Beta #25 にまた参加しました。Div 2 only に毎回参加できる程度の能力。反省会。 A. IQ test 三つ以上の自然数が与えられます。一つだけ奇偶が異なるものがあります。それが何番目にあるか答えましょう。一部で問題文が難しいとの評判が…

codeforces 24

Codeforces Beta #24 参加しました。久しぶりに反省会。 A. Ring road リング状の無向グラフに向きをつけました。ばらばらに向きをつけたので一周できません。一周したくなったのでいくつかの辺の向きを変えます。各辺の向きを変えるのに必要なコストが与え…

yield と Common Lisp の collect clause

なんか似てるなって思ったことを。例として素数の列挙を考えます。F# だと,こんな風に書けます。 let primes n = seq { for x = 2 to n do if isprime x then yield x } 要するに,2 から順番に見ていって,素数だったときだけ yield するわけです。Python …

一行読み込んで空白で切ったリストを作る

codeforces の問題を解きながらコード書く練習中。使えそうなパターンを蓄積してみたい。既出とか気にしませんよ。 let readWords fn = stdin.ReadLine().Split([|' '|]) |> Array.toList |> List.map fn GCJ で拾ったコードの中にあったものを少し改造した…

F# 始めました

codeforces で F# が使えるようになったということもあり,試しに使ってみることにしました。ということを書こうとしたら前回のエントリとかぶってましたが気付かなかったことにします。xyzzy で F# 用のモードがないかなと思ったのですが,それらしいのが見…

GCJ Qualification Round

とりあえず参加して通りました報告。どの問題も,素朴に書くとたぶん large が終わらない程度の計算量にしてあります。だから少しは賢く計算する必要がありますが,どれもそんなに難しくはなかったと思います。C はちょっとややこしいか。目を引く点として,…

composition calculus

あなごるに出てた composition calculus が面白そうで,真面目にインタプリタを書いてみたくなったので OCaml で実装してみた。所要時間は Stream のインタフェースを思い出すところから始めて全部で一時間くらい。 type token = char type expr = Atom of t…

MathMania 参加

CodeFest というイベントの一環として開催された MathMania というコンテストに参加しました。195 点満点中 145 点で 6 位になりました。思いの外上位に入れたし,問題を見た瞬間は半分も解けないかなと思っていたのが結局時間内に一応全問正解かそれに近い…

CodeCraft

CodeCraft に少しだけ参加しました。途中で面倒になってやました。問題自体はそんなに難しすぎず,面白そうだったのですが,言語の壁は高い。

invmod だか modinv だか

さっき変に手間取ったので書いてみる。a, b が与えられたとき,ax + by = 1 を満たす x, y の組を求める問題。存在しない場合はとりあえず考えない。b = 1 のときは x = 0, y = 1 でよい。a = 1 でも同様。それ以外の場合を考える。a > b と仮定して,a = qb…

apply in Scala

Scala をちょっと勉強中。こんなのが書けるそうです。 scala> val primes = List(2, 3, 5, 7) primes: List[Int] = List(2, 3, 5, 7) scala> primes(2) res2: Int = 5 scala> primes(3) res3: Int = 7 リストや配列へのアクセスが関数適用みたいな形で書ける…

グラフが苦手

GCJ の問題を解いていると、やっぱりグラフが苦手ということを感じるので『アルゴリズムC』のグラフアルゴリズムの部分を眺めたりしました。それで思ったことはいくつかあるのですが、アルゴリズムがどのようなコードで実現されるのかが見えていないという点…

放置中の問題を解く

110 前後で未解答のままになっていた比較的簡単そうなものをいくつか解きました。やり方はなんとなく思いついても、コードを書くのが面倒だなー、と思って放置していたものが多いのですが、書いてみればそんなに大変でもなかったりします。いきなりエディタ…

GCJ Round 1B

本当は 1A に参加したかったのですが用事があったので、昨日の深夜の 1B に参加しました。結果からいうと 164 位で通過。(scoreboard: http://code.google.com/codejam/contest/scoreboard?c=186264#vf=1&sp=161)C はあまり解ける気がしなかったのと早く寝た…

GCJ Qualification Round

今日の朝 8:00 からスタート。8:40 ごろから始めて、昼の 12 時過ぎに解答を提出し終えました。コードを書くのに時間かかりすぎ。

問題

とある経緯により思いついた問題。GCJ 系。与えられたアルファベットの有限集合 Σ と、Σ 上の語の集合 {w_1, ..., w_n} に対し、次の条件を満たす語の列 u_1, ..., u_n で長さの和が最小になるものを(ひとつ)求めよ。( は "u は w の部分列である" の意味) …