円周率クイズを解いてみる

via 2009-03-14

問題:

円周率3.141592653589793…の中で、最初に「"月日時分秒"と見なせる数字列」が出てくるところは、小数点以下何桁目?

ただし「"月日時分秒"と見なせる数字列」は、月二桁(01〜12)、日二桁(01〜31)、時二桁(00〜23)、分二桁(00〜59)、秒二桁 (00〜59)の合計十桁の数字列のこととします。大の月小の月も正しく考えます。2月は29日まであるとしてよいです。以下いくつか例。

* ○: 0314152759 → 3月14日15時27分59秒
* ○: 0229152759 → 2月29日15時27分59秒(閏年と判断)
* ×: 1314152759 → 13月はない。
* ×: 0431152759 → 4月31日はない。
* ×: 0314152760 → 60秒はない。
* 3.141592653589793…のうち、"1415926535"の場所は小数点以下「1桁目」とします。
* 3.141592653589793…のうち、"2653589793"の場所は小数点以下「6桁目」とします。

2009-03-14

Googleの入社試験みたいだ。

JavaScriptしか書けないので…。
ftp://pi.super-computing.org/pub/pi10m/pi10m.ascii.01of10を開いて、
以下のBookmarkletを実行してみた。

javascript:(function(x){z=(x.innerText||x.textContent).replace(/\D/g,''),n=z.length;for(i=0;i<n;i++){a=z.substr(i,10);if(a.match(/((0[13578]|1[02])31|(0[13-9]|1[0-2])30|(0[1-9]|1[0-2])([12][0-9]|0[1-9]))([01][0-9]|2[0-3])([0-5][0-9]){2}/)){j=i+1;alert(j+'桁目\n'+a);break;}}})(document.body)

円周率をよそからひっぱってくるあたり、セコい解法だなあ。