Entries in the Category “残滓”

岡嶋さんの問題を解いたけど、採用されなさそう

written by shn, on Jan 12, 2010 1:13:00 AM.

去年の暮れにほってんとりになってた採用問題が公開されたのでやってみた。

というのも、当初問題文を読み違えていて(格子マップじゃなくて、連続的なマップだと思ってた)、「各経路点を取って最短経路問題ですかねぇ」とか「僕だったら、答えをASCIIにプロットするのに25分かかるなぁ」とか頓珍漢な事を言っていたのが恥ずかしかったからです。 問題文を読んでないので応募以前の問題ですね。ここらへんを参照

んで、最適解法を知った上でコード書いたのに40分かかりました…

さて、僕自身も経営者の端っこなので、いろいろ思う点がありました。

まず、こういうアルゴリズム系の問題を出すことでGoogleの使い方を知らない奴を簡単に落とせるのがわかったのは参考になりました。 というのも、問題解決について求められるのはその時点での知識ではなく、最終的に許される時間の中で解決できるかという点だからです。 また、実務をこなす上でのほとんどの細かい問題に関しては、それまで世界の誰もそんな問題に直面したことが無い!なんて事は殆どないはずなので、そういうった問題を確実に解けるのか?というのは重要なポイントだと思います。

また、話には聞いていましたが、それぐらいの人材が我々のような(勝手に一緒にしちゃいましたが)零細IT企業にふらっと応募することは少ないのだなというのも参考になります。そういう点で、公募する場合には根気よく採用を続ける必要がありそうなので、あんまり応募者をディスると今後の応募に影響してしまいそうな点は気になります。

このエントリに応えると、小さな企業が人を取った場合、新人の戦力が30で今の戦力と足して130だ!、というよりも、新人がしちめんどくせーことやってくれるお陰で俺らが強まって足して150だ!みたいな気概でいるのがいいんじゃないのかなーと思います。

イメージとしてはこんな感じ

以下がコード。Pythonです。:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys

CELLMAX = 9999

def main(input):
    m, start, goal = load_map(input)
    solve(m, start, goal)

    print_result(m, goal)

def load_map(input):
    start, goal = [], None

    d = {
        '*': -1,
        ' ': CELLMAX,
        'S': 0
    }
    m = []
    for l in input:
        m.append([d.get(ch, ch) for ch in l.rstrip()])

    for y in range(len(m)):
        for x in range(len(m[y])):
            if m[y][x] == 0:
                start.append((x, y))
            elif m[y][x] == 'G':
                goal = (x, y)

    return m, start, goal

def solve(m, start, goal):
    cur = 0
    while start:
        next = []

        for c in start:
            m[c[1]][c[0]] = cur

            for d in [(-1, 0), (0, -1), ( 1,  0), ( 0, 1)]:
                if m[c[1]+d[1]][c[0]+d[0]] > cur:
                   next.append((c[0]+d[0], c[1]+d[1]))
        start = next
        cur += 1
        if goal in start:
            m[goal[1]][goal[0]] = cur # syoboi
            return

    if goal not in start:
        raise RuntimeError, u'とけないよ'

def fill(m, c, x):
    filled = []
    for d in [(-1, 0), (0, -1), ( 1,  0), ( 0, 1)]:
        if m[c[1]+d[1]][c[0]+d[0]] > x:
           m[c[1]+d[1]][c[0]+d[0]] = x
           filled.append((c[0]+d[0], c[1]+d[1]))
    return filled

def print_result(m, goal):
    c = goal
    while True:
        check = m[c[1]][c[0]] - 1
        if check == -1:
            break

        m[c[1]][c[0]] = '$'
        for d in [(-1, 0), (0, -1), ( 1,  0), ( 0, 1)]:
            if m[c[1]+d[1]][c[0]+d[0]] == check:
               c = (c[0]+d[0], c[1]+d[1])
               break
        else:
            raise RuntimeError
    m[goal[1]][goal[0]] = 'G' # syoboi
    d = {
       -1: '*',
        0: 'S',
       '$': '$',
       'G': 'G',
    }
    for l in m:
       print ''.join(d.get(ch, ' ') for ch in l)    

if __name__=='__main__':
    main(sys.stdin)

「最短性のチェック」というのは、(コードの外で)アルゴリズムの証明をせよ、という意味だろうか?基本的にダイクストラ法を格子マップでやっているので、最短性はダイクストラ法の証明となると思うのだけど。

って岡嶋さんてスウィフトの関係者なのか!

あとはっちゅう君バジョナップ期待しています!

ソフトバンクのポリシーがよくわからん

written by shn, on Jun 30, 2009 4:15:00 PM.

iPhone 3GS 白を法人新規契約しようとしているのだけど、いまいち勝手がわからない。 みなさんのお話を聞くかんじだと、法人契約は往々にして面倒らしいが、僕には面倒というよりは対応が相手によって変わるのがなんだかな、という感じである。

先々週の木曜(だっけ?)

表参道に用事があったついでに、昼飯ついでにぶらりソフトバンク表参道に立ち寄った。 会社印などは持ってるわけなかったが、僕の免許証と会社の名刺で予約は受付てくれた。 法人だと受け取りは26日の発売日ではなく、29日になるそうだ。

ここで対応してくれた人は、どうやら個人契約しかやったことないのか教わってもないのかで、しばしば個人契約向けの説明をしだして、僕が「いや今回は法人買い切りの契約ですよね」と確認する場面があった。最終的に彼が混乱してきたので、一個上の人に説明してもらった。

29日に受取にいった

待ち行列の券を貰うときに「40-20分程お待ちいただいております」とか言われて、えー! と思ったのだが、たしかに窓口に案内されてから係員がどっか消えて20分ぐらい待たされた。 帰ってきた彼に「謄本などはお持ちですか?」と言われ「ありません」と答えたら、再び彼はどっかいって15分ぐらい待たされた。 なんだろう、何してるのかな。"Staff Only"の向こうには全知全能のSoftbank神みたいな人がいるのだろうか。彼が直接対応してくれたら良いのに。

んで、再び帰ってきた彼に「謄本ないとダメ」的な事をいわれ、いたく凹む。「パンフレットに書いてあります。」的な事を言われてもねぇ、予約の時に説明してくれなかったじゃない… 「それでは、表参道から六本木に予約を振り変えてくれますか?」と頼んだら、

       / \  /\ キリッ
.     / (ー)  (ー)\    キャンセルしました!
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |
     \     `ー'´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

いやキャンセルしました。じゃないよ、予約振り替えてよ。

あと、こっちがイラッとしてるのに、マニュアル通りのスマイルされると腹立つなぁ、と小さいこと思ったりしてた。

30日に六本木に行った

印鑑証明書(でも良いらしい)をゲットして、ソフトバンク六本木へ。 法人契約受付票的なものに記入して、5分で終わった。 説明によると「法人契約の場合、営業が事務所に伺ってからの契約になる」そうで、ちょっと時間がかかるとの事。 印鑑証明は確認されなかった。

あれれ? なんで僕は六本木に来る必要があったのかな?