オフ会レポート

yaneurao2007-08-13



人数集まりすぎた。5人ぐらいくればいいかと思ってたら15人!*1


ショートコーダが集まるのにショートコードの話をしないといけないと思って、行く間際に簡単なプログラムの問題を作って持って行ったつもりが難しすぎたようで、みんな食事そっちのけでひたすら問題を解くのに必死。こんなオフ会初めて見た。隣は40名ぐらいで合コンしてやんの。うるさくて何も話ができやしない。まいったね、こりゃ。


今回来れなかった人のために今回出題した問題を掲載。*2

『Short Coding』発売記念オフ会用問題 (出題:やねうらお)

問)
いま A 面ダイスが2つあるとする。
この 2つの A面ダイスで 1〜Nまでの数字をすべて表現したい。
なお、ダイスは二つ並べて一つの数を表現することも出来るものとする。

例えば、2面ダイスが2つある場合、1つのダイスに1,2。
もうひとつのダイスには3,4と書けば、

{ 1 , 2 , 3 , 4 , 13 , 23 , 24 , 31 , 32 , 41 , 42 }

の数が表現できることになる。

いまNを2桁までの自然数として、それぞれのNに対応する最小のAの値を
出力するプログラムをなるべく短く書いてほしい。

※2007/8/13追記 : ダイスのひとつの面には1桁の数字しか書けないものとする。

言語は あなごる(http://golf.shinh.org/)で対応しているものなら
何を用いても良い。

出力例)

N=1,A=1
N=2,A=1
N=3,A=2
(中略)
N=99,A=?

規則性があるのでそれに気づけば解答は容易だが、出来れば正攻法で解くコード(brute forceだけど、Time Exceededにならないように何らかの工夫を入れたコード)も書いて欲しかった。というか、まっさきそれが思いついて欲しいところではある。なにせ、それは何の工夫もなしに間違いなく答えが求まるわけで…。


また、規則性に気付いた人は、1〜32までの数字は6面ダイス2つで表現できることがわかったと思うが、ダイスは普通6面で、2つの6面ダイスで、すべての日付(1日〜31日)が表現できるというのはとても興味深い事実だろう。実際に、病院の受付などにそういうアクセサリ(?)が置いてあるので見たことがあるかも知れない。

*1:予約を間違えて18人で予約してて3人分余計にお勘定を払ってしまったことに今気づいたよ…(´ω`)

*2:急いで書いたのであまりわかりやすい書き方じゃなかった。反省。