タグ

ブックマーク / yaneurao.hatenadiary.com (8)

  • CodeIQで結城先生が出題されたCrossingが神がかっていた件 - やねうらおブログ(移転しました)

    CodeIQで挑戦者数が400人超えという異例の事態になったCrossingとはどんな問題だったのか。twitterでも恐ろしい勢いで拡散され、最終日に100人を超えるチャレンジがあった、この問題。一体どこにそんな魅力があったのかについて考えてみる。 まず、このように注目されるためには満たすべき条件が二つある。 繁盛する飲店を考えてもわかるように、まず美味しくなければならない。CodeIQで言うと、問題として良問でなければならない。解答後の達成感がなくてはならない。 次に、飲店なら、その店に入ってみようという気にさせなければならない。入りにくそうなお店でも、料理さえ美味しければその後口コミで広がることもあるだろうが、それだと繁盛するまでに時間がかかりすぎる。だからCodeIQで言うと、まず問題を解いてみようという気にさせなければならない。 このどちらが欠けても駄目である。この問題はこの

    CodeIQで結城先生が出題されたCrossingが神がかっていた件 - やねうらおブログ(移転しました)
  • 古くて新しい自動迷路生成アルゴリズム - やねうらおブログ(移転しました)

    最近、ゲーム界隈ではプロシージャルテクスチャー生成だとか、プロシージャルマップ生成だとか、手続き的にゲーム上で必要なデータを生成してしまおうというのが流行りであるが、その起源はどこにあるのだろうか。 メガデモでは初期のころから少ないデータでなるべくど派手な演出をするためにプロシージャルな生成は活用されてきたが、ゲームの世界でプロシージャル生成が初めて導入されたのは、もしかするとドルアーガの塔(1984年/ナムコ)の迷路の自動生成かも知れない。 なぜ私が迷路のことを突然思い出したのかと言うと、最近、Twitterで「30年前、父が7年と数ヶ月の歳月をかけて描いたA1サイズの迷路を、誰かゴールさせませんか。」というツイートが話題になっていたからである。 この迷路を見て「ああ、俺様も迷路のことを書かねば!俺様しか知らない(?)自動迷路生成のことを後世に書き残さねば!」と誰も求めちゃいない使命感が

    古くて新しい自動迷路生成アルゴリズム - やねうらおブログ(移転しました)
  • そろそろ死にたくなってきた人に捧げる雑文 - やねうらおブログ(移転しました)

    昨年、小学校で教える「掛け算の順序問題」がインターネットで非常に話題になった。*1 *2 簡単に言えば、小学校で「リンゴが3個置かれた皿が5枚ある。リンゴは全部で何個か」という問題が出題されて、「式: 5×3 = 15 答:15個」と書いたら先生にバツをされた、先生の用意していた正解は「式: 3×5 = 15 答:15個」だというものだ。 ぶっちゃけ、その教師は頭がおかしいと私は思うのだけど、まあ、その教師にはその教師なりの主張があって、この話は突き詰めていくと「掛け算の交換則が成り立つことを証明していないときに交換則を使っている」(それが解答として許されるのか)ということに行き着く。つまり、「まだ授業で習っていない事項を使ってはならない」という考えかたが根底にあることがわかる。 最近では、「習っていない漢字は使ってはならない。(ひらがなで書かなくてはならない。自分の名前さえも) 」だとか

    そろそろ死にたくなってきた人に捧げる雑文 - やねうらおブログ(移転しました)
  • 3回に1回出力するだけの簡単ではないお仕事 - やねうらおブログ(移転しました)

    なんかさ、3回に1回出力するだけの簡単なプログラムのお仕事ってあるじゃん。 if ( (++counter % 3) == 0) printf("Fizz\n"); これって意外と難しいんだよね。 ……なんてことを言うと「おいおい、天下のやねうらお、ついに頭おかしくなったか」とか言われるだろうけど、これ実際うちの仕事であった話で、このコードが原因でお客さんと大きなトラブルになった。 あまり具体的には言えないので、ちょっと別のものに置き換えて話すけど、それは、ひよこの餌やりプログラム(仮)だったわけ。 上のプログラムは、3回に1回だけど、このソフトには、N時間に1回、餌をやるロジックが書いてあった。 if ( (++counter % N) == 0) printf("餌やるでー\n"); なんかこんな感じな。それでNの値は、UI(ユーザーインターフェース)で調整できる作りにしてあった。一度

    3回に1回出力するだけの簡単ではないお仕事 - やねうらおブログ(移転しました)
    Makots
    Makots 2010/10/11
    テストで気づけないものか
  • virtualを「仮想」と訳していいものか - やねうらおブログ(移転しました)

    私は「virtual」を「仮想」と訳すのにすごく抵抗がある。 「virtual」って英語来の意味は、「実質上の」「実際上の」というような意味だ。「表面的にはそうではないが実質的にはこれなんだ」というような時に使う。 「virtual memory」を「仮想記憶」と訳すと「実際は存在しないメモリ」であるかのように思える。現実的に存在しないのなら無くても構わないようにすら思える。確かに物理的には存在しないから実在はしないんだけど、かと言って不要というわけでもなく、「virtual memory」来の意味は「(ユーザーアプリなどが)実際に使うときのメモリ」みたいなニュアンスで「無くても構わないメモリ」とは、ちょうど真逆の意味だ。 「仮想」という言葉が、「存在しない」という否定っぽい語感なのに対して、「virtual」来の意味は「実質上(は、これだ)」という肯定っぽい意味だからどうもギャップ

    virtualを「仮想」と訳していいものか - やねうらおブログ(移転しました)
  • はてなのCAPTCHAを破るプログラムは30分で書ける - やねうらおブログ(移転しました)

    CAPTCHAとは、スパムコメントなどを防止するための認証画像のことである。 それにしても、はてなのCAPTCHAはひどい。無いよりマシという考え方もあるのでそれについてはあまり議論する気は無いのだが、それにしてもこれを破るプログラムは30分あれば十分書ける。 具体的には、はてなのCAPTCHAには8つの好ましくない特徴と、2つの脆弱性がある。 ■ 8つの好ましくない特徴 ・画像自体のサイズが小さすぎる。→ こんなに小さいと探索量(計算量)が小さくて済む。 ・フォントにゆがみがない → フォントはある程度変形させたほうが良い。変形させてあるとテンプレートマッチングがしにくくなる。 ・フォントが固定。→ フォントは毎回変えたほうが良い。 ・フォントを回転させていない → フォントは文字ごとにある程度ランダムに回転させた方が良い。 ・フォントサイズが一定 → フォントサイズは文字ごとにある程度

  • 何故私は計算が小学校で一番速かったのか? - やねうらおブログ(移転しました)

    小学校のころ、私は四則演算が学校で一番速く出来た。そんな私だが、実は九九はほとんど覚えていなかった。 掛け算や割り算を速く行なうのに必要なのは九九じゃないことを私は知っていたからだ。 簡単な例を出そう。あなたは、40÷6をどうやって計算するだろうか? 九九を持ち出してきて、「6×8 = 48 あれ、大きすぎたか。6×7 = 42、ありゃ、まだ大きいか。6×6 = 36。おお、40より小さくなった。40-36 = 4だから、6余り4が答え!」なんてやらないだろうか。これは凄く無駄な作業だ。どう考えてもやり方がおかしい。 ここで必要なのは、九九ではなく、36〜41は、6で割ったら商は6という知識である。「余り」もセットにして覚えてあるとなお良い。 「÷6」をするとき、割られる数が60以上であることは考えなくて良い。また、もう少し一般化して言えば、「÷N」するときは、割られる数がN*10以上であ

    何故私は計算が小学校で一番速かったのか? - やねうらおブログ(移転しました)
  • FF(16進数の掛け算)を覚えよう - やねうらおブログ(移転しました)

    最近、あるプログラマと話していて気づいたのだけど、彼は16進数の2桁と1桁との掛け算(FDh×5とか)が出来ない。やり方自体を知らないのだ。彼はWindowsの電卓を立ち上げて計算していた。 そのときは「プログラマでなくともこんなこと知ってて当然だろ!」と思ったのだけど、その後、10人ぐらいのプログラマに出来るかどうか聞いてみたが誰も出来ない。 結局、「普通は出来ない」のだと私は理解した。しかし16進数の掛け算はそんなに難しくない。私が子供のころには、まわりにFF(1×1=1に始まって、F×F=E1まで)を丸暗記している人がいっぱいいた。情報教育の一環として中学か高校で教えても計算の仕方ぐらい教えればいいのになぁと思っている。 前置きが長くなったが、以下にやり方などを書いておく。 ■ 16進数に馴染もう 16進数では、A = 10 , B = 11 , C = 12 , D = 13 ,

    FF(16進数の掛け算)を覚えよう - やねうらおブログ(移転しました)
  • 1