google の人材募集の解き方
google の人材募集の解き方 ハッキングバージョン。
問題はこれ。
「{eの値中の、最初の連続する10桁の素数}.com」
ということで、普通じゃない解き方。
普通は数学で解きますね。プログラム書いてさ。
素数かどうか判断してさ。アホくさ。
でも、グーグルということでこういう解答が欲しかったんじゃないかな?ということで、、、
ちなみにオレはeの値を知らない。素数の求め方も知らない、Perlくらいしか書けない、Linuxまあまあ、ハッカー魂MAX。
グーグルはWEBページの検索の会社だ。ということでまず「eの値」でぐぐった。
ここに500億桁までのeの値がある。
あ、これ使おう。
まず1億桁分(1ファイル)ダウンロードして(67MBもあるよ!)解凍すると、
e-00010.txt
e-00020.txt
e-00030.txt
.......
e-00100.txt
と10個のファイルが出てきた。
多分1億桁もあれば足りるだろう。
考え方はこうだ。
e=2.7182818284590452353602874713526624977....
なら
wget 2718281828.com
wget 7182818284.com
wget 1828182845.com
と頭から10桁ずつ wget して何かしら index.html がヒットしたらそのリストを作りクリックする。
実にグーグルの入社らしい試験問題の解き方ではないか、、
さっそく Perl で書く。
while(1) {
$file= sprintf("e-00%03s.txt",$no);
print "Here we go ";
print "$file\n";
open (NOTE1 ,">e10.txt");
open (NOTE ,$file);
$cnt=0;
while(
$str = $_;
# print "str $str\n";
$str =~ s/ //g;
$str =~ s/\n//;
$index = index($str,":");
$yuko = substr($str,0,$index);
$e .= $yuko;
$cnt++;
print NOTE1 "$yuko";
}
close(NOTE);
close(NOTE1);
print "make e$no go!";
$cnt=0;
open (NOTE ,">google.html");
while($cnt<999999999999){
$host =substr($e,$cnt++,10);
if (length($host <10)) { $no +=10; $e = $host ; break;}
$host = "$host.com";
$res= system("/usr/bin/wget -O /tmp/$host $host");
$wgetcnt++;
if (-s "/tmp/$host") {
print NOTE "$wgetcnt $host
\n";
print "BINGO!\n";
close(NOTE);
exit;
} else {
unlink ("/tmp/$host");
}
print "$host\n";
}
close(NOTE);
}
exit;
sub error {
$error = $_[0];
print "ERROR\n";
print "$error\n";
print "