« PL/SQL で Python Challenge 15 いきなり完結編 | トップページ | Mac De Oracle »

2005年10月 4日 (火)

PL/SQL で Python Challenge 15 やっぱり書いておこう

「UTL_HTTPパッケージと正規表現で終わりそうだった」というのはLevel 15を解いた結果がどうなるか見えてしまったから、その先を(URLを求めるプログラム)プログラミングしてしまおうかなと考えていたためだったのだが、URLを直接求めるプログラミングを要求しているわけではないので、やはり Level 15のURLを探るために必要な答えを導きだす方法は書いておくべきだな。と考え直した。
(私はプログラミングなしで判ってしまったが、一般的にそれに気付く方は少ないよな〜と思ったためである。)

なので、Level 15 をちゃんと解くことにした。
ヒントとしては、Oracleの日付関連の関数を活用すればいい。
ここまで書けば答えを書いているようなものだが。。


今回は特別にLevel 15のHTMLにあるコメント(ヒント)を載せておく。
タイトルは、whom?
コメント(ヒント1):he ain't the youngest, he is the second
コメント(ヒント2):todo: buy flowers for tomorrow


(注意)
日本人にはヒント2がヒントにならないかもしれない。その日のために、花を買うような習慣のある方は少ないだろうから。でも私はすぐにピンときてしまったのだ。)



今回は、ストアドファンクションにした、javaも不要なので、MacOSX 10.4.2 Tigerに作成したOracle10g for MacOSX Serverで行える。
create or replace function level15
return varchar2
is
type date_tbl_typ is table of date index by binary_integer;
days date_tbl_typ;
y pls_integer := 1006;
ctr pls_integer := 0;
mmdd constant char(4) := '0126';
begin
while y<=1996 loop
if to_char(to_date(to_char(y)||mmdd, 'yyyymmdd'),'d') = 2 then
ctr := ctr + 1;
days(ctr) := to_date(to_char(y)||mmdd, 'yyyymmdd');
end if;
y := y + 10;
end loop;
return to_char(days(days.last-2), 'YYYY/MM/DD DAY');
end;
/


/Users/oracle> @level15

ファンクションが作成されました。

/Users/oracle> select level15() from dual;

LEVEL15()
--------------------------------------------------------------------------
1756/01/26 月曜日

/Users/oracle>

この結果が本当の答えではない。ヒント2に関するロジックを、あえてプログラミングしていない。
上記の結果を、ヒント2を元に調整する必要がある。(簡単でしょ!)調整した日付がURLを完成させるための「鍵」になるのだ。

今回は完全にネタバレですね。でもね。この問題プログラミングしなくても判る方は判るし、別な方はググるだけでも解けてしまうくらい単純なのであえてネタバレにしてみました。m(__)m

今度こそ本当に、Level 16へつづく。

|

トラックバック


この記事へのトラックバック一覧です: PL/SQL で Python Challenge 15 やっぱり書いておこう:

コメント

コメントを書く