2012年9月16日日曜日

Code Puzzle【1】 --任天堂

先日Pycon2012へ参加した際、任天堂のCode Puzzleというものが入っていた。

↓こんなん



 ちょっと楽しくなったので、解いてみた。 



と言っても、sys.argv[1]なんて表記がある。

これ、引数に何指定しているかわからないので、どうしたものか、、、


エラー処理も書いてないけど、無視される仕様だとしたら、、、←おかしいw 


そんなわけで、とりあえず、 http://cp1.nintendo.co.jp/ へアクセスしてみたw



 すると、、、上記画像まんまのページへ飛ばされるww
答え書くところに、IndexError もしくは Errorといれてポストすると、違うと言われるww



なので、ちょっと考えてみた。。。



 【こっから先、回答書いてきます。 謎解きしたい方は見ないでください。】






































 そんなわけで、少し考えてみた。



1.sys.argv[1]が、上記画像からは何か読み取れない
2.if pow(m, e) % n == c : return str(m)と書かれている、、、
3.上記以外は""(空白)を返す



 ということは、答えは、mであればいいわけだ。


 で、 *[int(i) for i in (sys.argv[1], 17, 3569, 915)] とあるので、
上記の2は、 pow(sys.argv[1], 17) % 3569 == 915: return str(sys.argv[1]) となる。 




ってことは、これは逆を言えば、

   「mすなわち、sys.argv[1]を求めろ。」

 って問題なんじゃね??




 ってことで、解いてみた。
(いや、かなり無理やり解いてみたww) 



まずは、
  pow(sys.argv[1], 17) % 3569 == 915 を満たす最初の数
を探してみようと思ったので、



 def sugar(n):
  for i in range(n): 
   if pow(i, 17) % 3569 == 915:
     print "m=" + str(i) 
     break 


としてあげて、
 (変数名がsugarなのは、問題文がtea breakって書いてあったから)

 sugar(10000) で探してみた。
 (うん、ちからわざ!w でも早く答え知りたかったからね!)


 で、出てきた答えは、

  m=2012 !! 


そんなわけで、
answerに2012をいれて、POSTしてみたら。。。



 見事正解!w


 が、さっそく次の問題がw


 とりあえず、次回へ続く。


あ、第二問は、下記URLから確認できるよ!
 http://cp1.nintendo.co.jp/2012

0 件のコメント:

コメントを投稿