import Cookie, os
c = Cookie.SimpleCookie( os.environ.get("HTTP_COOKIE",""))
c["name"]["expires"] = "Tue, 1-Jan-1980 00:00:00 GMT"
print "Content-type: text/html"
print c
print
...
のどちらかを選べ。ということなんじゃなかろうか。1. 口のうまい営業を挟む -- 染之助・染太郎方式
2. 自ら口もうまくなる -- ホンダディーラー方式
海賊が1位と2位の2人だけの場合
1位がどんな提案をしても、2位はそれに反対すれば、金貨の全てが手に入る。
したがって1位は0枚、2位は100枚。
海賊が1位と2位と3位の場合。
どちらか1人が賛成すれば、1位の提案は通る。
1位の提案が通らない = 2位と3位だけが残る = 2位は0枚、3位は100枚
だから、2位は1枚以上もらえるなら賛成するべき。
したがって1位は99枚、2位は1枚、3位は0枚。
海賊が1位と2位と3位と4位の場合
2人が賛成すれば、1位の提案は通る。
1位の提案が通らない = 2位と3位と4位が残る = 2位は99枚、3位は1枚、4位は0枚
だから、2位は100枚全部もらえない限り、賛成するべきではない。
だから、1位が生き残るには3位と4位の賛成を集めるしかない。
したがって、1位は97枚、2位は0枚、3位は2枚、4位は1枚。
海賊が1位と2位と3位と4位と5位の場合
2人が賛成すれば、1位の提案は通る。
1位の提案が通らない = 2位と3位と4位と5位が残る = 2位は97枚、3位は0枚、4位は2枚、5位は1枚。
最低の金貨で票を集めるには、3位と5位に賛成してもらう。
したがって、1位は97枚、2位は0枚、3位は1枚、4位は0枚、5位は2枚。
「98%」というヒントは、問題を訳した人が間違えたか、問題を作ったGoogleの人が間違えたか、もしくは「ヒントと自分が考えた結果が食い違ったときに、自分の考えを捨ててヒントにあわせた答えをひねり出すのか、それとも自分の考えの正しさを信じてヒントが間違っていると考えるのか」を観察するために意図的に入れられたブラフだろう。
面接についてはいろいろ面白い話があるけど具体的にいえないのが残念。ちなみにSoftware Engineer では、こんな問題 はだしません。 What to expect from your Google interview を見ましょう。
FizzBuzz問題が簡単すぎるという人はいろいろなバリエーションを考えてみるといいかも。例えばこういうの
* 制限を加える(ループを使わないで書く、剰余を使わないで書く、…)
* printせず list にしてかえす
* FizzBuzzをテストするプログラムを書く
* 3とか5がパラメータ化されているとして、出力からそのパラメータを調べる