2009年9月 6日 (日)
ということで、Python Challenge Level18の最終回。 前回報告 した通り level 18 はPL/SQLだけで解けます。今回は問題の元ネタの抽出と回答を抽出した後の確認はOSに付属している機能を使ったが大切なのは問題の元ネタから解答を抽出する所なので。
SQL*Plusから実行したストアドプロシージャで問題を解いたところ....例によってヒントになりそうな部分はもやもやさせてます。 :)
ヒントになりまくりの答えのスナップショット。(これ以外にも私のブログにヒントになる記事もあるのだが・・・・・それは書きませんよ。。。。) ちなみに絵を見れば分かると思いますが、MacOS XからX11のX forwordingを使って今回利用したLinuxのDesktopを表示/操作しています。X11のxtermからssh -Y user@hostで接続してgnome-sessionを実行しているだけ。
Python Challenge Level19へつづく!(?)
| 固定リンク | 0
|
| トラックバック (0)
2009年9月 2日 (水)
一年以上間が空いてしまったが・・・Python Challenge Level18はPL/SQLだけで解けますよん。ヒントになるようなならないようなモヤモヤした記事は明日にでも。。
| 固定リンク | 0
|
| トラックバック (0)
2008年5月 7日 (水)
やることは分かったのだが PL/SQLでは重要な部分(pythonなら一発だけど)を手作りしないとならない。。。とりあえず適当に作ったてはみたもののまだ思うような結果にはなっていない。。だが、そこさえクリアできればlevel18はPL/SQLだけで解けるはず。。。。。ということで暇を見て実装中。といってもその暇がなかなか取れなくなりそうな予感も。。。まあ、今回のネタはおもしろそうなので、少しづつでも進めて行きますよ。。。w
| 固定リンク | 0
|
| トラックバック (0)
2008年4月26日 (土)
Level18は以外と簡単かも〜〜、Pythonならば。と。 当然だよね。Python Challenge なんだからPythonを使って解くことを前提に作られてるのは。。。。 しかし、今回はもしかするとPL/SQLだけで全部解けちゃうかもしれない・・・久々だ〜。一部はかなり苦労してガリガリ作り込まなければならないと思われるのだが・・・その方法で上手く解けるという自信は70%。チャレンジしてみますよ〜〜。連休中にロジックを考えとく。。。 次回へつづく。;)
| 固定リンク | 0
|
| トラックバック (0)
2008年4月22日 (火)
前回、つまらないところでモタモタしてしまった が、Oracle Application Express 3.0.xを使わず、単純に mod_plsql を使えばいいじゃんと言うことで。。。。
Level17は、以前にも書いたがWeb Applicationを書いたことのある人なら簡単に解けると思います。 今回は一部を除き、約90%がPL/SQL、残りをJava stored procedureで処理した。;) ということで答えを導きだしたスクリーンショット。(答えはぼかしてますよ!)
次回、Python Challenge Level 18はこれまた気が向いたときにても。。。Enjoy Python Challenge!
| 固定リンク | 0
|
| トラックバック (0)
2008年4月13日 (日)
さて、前回、解き方は見えたような気がすると書いたが いろいろな罠?に見事に引っかかったが解けました。はい。 今、Level18の問題が見えたのだが、また画像問題なのかな?
Level17は、Web Applicationを作った経験のある方ならLevel17の質問の画像自体がヒント。 なんですが、2重、3重の仕掛けがあるのでイライラするよ。ですが、基本的にはいままでの問題を解いてきたテクニックやコードを再利用すれば十分なので特に新しいことが必要でもない。。。
ということで、次回のPL/SQL で Python ChallengeはLevel17のヒントにならないヒント。でLevel17を締めくくろう。
以下のスクリーンショットは、最後の仕掛けを通り抜ける為のヒントを取り出す事に成功した場面。Level18のURLを導きだした時のスクリーンショットではありません。:)
| 固定リンク | 0
|
| トラックバック (0)
2008年3月26日 (水)
さて、ココログのデータベースのデフラグ?作業 でログインできなかったので今書いてますが。 Level 17、少々ハマったが解き方は見えた(ような気がする)ので次回はその経過でも。 Level 17は、Web Applicationを作った経験のあるかたなら案外すんなり解けるかもしれない。
問題の画像にそのすべてのヒントが!
Enjoy! Python Challenge! (Python じゃなくても楽しめるのだ!)
| 固定リンク | 0
|
| トラックバック (0)
2008年3月24日 (月)
前回の続きです
さて、Level 16のページには、"let me get this straight" というタイトルが付けられている。これ自体が大きなヒント。なのでこれ以上は何も言うまい。
問題の解くjavaアプリケーションの内容は、以前、Level 11の処理の流れを書いていたが、その3、4以外の部分は同じ。 但し、Level7で利用した Level7.getBfile()とLevel9で作成したLevel9.writeImageFile()というファンクションとプロシージャを以下のPL/SQLパッケージに纏めた。
CREATE OR REPLACE PACKAGE PYTHONCHALLENGE_UTL AS FUNCTION getBfile ( i_dir_name IN VARCHAR2, i_file_name IN vARCHAR2 ) RETURN BFILE; PROCEDURE writeImageFile( directoryName IN VARCHAR2, fileName IN VARCHAR2, srcImage IN OUT NOCOPY BLOB ); END PYTHONCHALLENGE_UTL; CREATE OR REPLACE PACKAGE BODY PYTHONCHALLENGE_UTL AS FUNCTION getBfile ( i_dir_name IN VARCHAR2, i_file_name IN VARCHAR2 ) RETURN bfile AS v_file BFILE; BEGIN v_file := BFILENAME(UPPER(i_dir_name),i_file_name); RETURN v_file; END getBfile; PROCEDURE writeImageFile( directoryName IN VARCHAR2, fileName IN VARCHAR2, srcImage IN OUT NOCOPY BLOB ) IS file utl_file.file_type; BEGIN file := UTL_FILE.FOPEN(UPPER(directoryName), fileName, 'w', 32767); DBMS_LOB.OPEN(srcImage, DBMS_LOB.LOB_READONLY); DECLARE v_raw RAW(32767); amount INTEGER; offset INTEGER; BEGIN offset := 1; LOOP amount := 32767; DBMS_LOB.READ(srcImage, amount, offset, v_raw); UTL_FILE.PUT_RAW(file, v_raw, true); offset := offset + amount; END LOOP; EXCEPTION WHEN no_data_found THEN NULL; WHEN OTHERS THEN UTL_FILE.FCLOSE(file); DBMS_LOB.CLOSE(srcImage); RAISE_APPLICATION_ERROR(-20001, sqlerrm()); END; UTL_FILE.FCLOSE(file); DBMS_LOB.CLOSE(srcImage); END writeImageFile; END PYTHONCHALLENGE_UTL; /
上記のパッケージをJava Stored Procedureから利用するわけです。javaのソースコードは載せませんよ。ネタバレになっちゃいますから。
次に、デプロイしたjava classは以下のようにしてJava Stored Procedureとして定義します。
CREATE OR REPLACE PACKAGE LEVEL16 AS FUNCTION getResult RETURN NUMBER AS LANGUAGE JAVA NAME 'jp.macdeoracle.Level16.getResult() return java.lang.boolean'; END LEVEL16;
では、SQL*Plusから実行してみましょう!
Last login: Sun Mar 23 20:29:41 on ttyp2 Welcome to Darwin! G5Server:˜ discus$ ssh oracle@corydoras oracle@corydoras's password: Last login: Sun Mar 23 20:31:49 2008 from 192.168.1.19 [oracle@corydoras ˜]$ cd python_challenge [oracle@corydoras python_challenge]$ ll 合計 264 -rw-r--r-- 1 oracle oinstall 254006 3月 23 16:26 level16.gif [oracle@corydoras python_challenge]$ sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on 日 3月 23 20:58:34 2008 Copyright (c) 1982, 2007, Oracle. All rights reserved. > conn scott/tiger 接続されました。 SCOTT> l 1 select 2 case 3 when level16.getResult() = 1 then '成功!' 4 else '失敗!' 5 end as "Level16" 6* from dual SCOTT> / Level16 --------- 成功! SCOTT> !ls -l 合計 504 -rw-r--r-- 1 oracle oinstall 254006 3月 23 16:26 level16.gif -rw-r--r-- 1 oracle oinstall 239515 3月 23 21:02 level16_result.png SCOTT>
これだけでもかなりのヒントになっているような気もしますが。。。 MacOSXのChicken of the VNC(MacOSX向けのVNC Client) 経由でLinux(CentOS5)にある結果を確認!
ということで、Python Challenge Level 16完。 Level 17は気が向いたら載せると思います。 Enjoy Python Challenge!
| 固定リンク | 0
|
| トラックバック (0)
2008年3月23日 (日)
そう、あれは、このブログをはじめたころ、Oracle10g R1 for MacOSX ServerとPL/SQL(画像処理関係はjava stored procedure)を利用し、Python Challengeに PL/SQLでチャレンジしていたっけ〜〜。遠い目。
アクセスログを見ていたら最近、またPython Challenge のキーワード検索が多くヒットしているのにびっくり!。 前述のエントリを書いていたのが約2年半前になるわけですから! ということで、久々にちょっとだけ再開してみようかと。。Level 16を見てみる。
Level 16の問題の画像を見ると、いかにもわざとらしい柄というか模様が目につく!。
で、Level 16のページタイトルもいつものようにヒントになっている。
画像にある模様を眺めつつ、ページタイトルの英文(簡単な英文です)を読み試しにJavaだけで作ってみると、考え方はいいと思うのだが全然答えにはなっていない。。。
こうか? ん、、、、それとも、こうか? でも違う。 あ、横にしてたよ。。。あはは。。(^^;;
と独り言を言いつつ何とか答えを見つけました。。は〜〜っ。暫くぶりだと疲れるわ。
次回は答えは書きませんが、Level 16の結果をぼかしたスナップショットを載せる予定。
ちなみに、今回の環境は以下。Database Server : Oracle11g R1 EE for Linux x86
開発用クライアント:JDeveloper10g 10.1.3 for MacOSX Oracle SQL Developer 1.1.3 for MacOSX (Java Stored Procedure、PL/SQL package、Java関連で利用した)
準備が整ったらMacOSXからsshでLinuxのOracle11gへ接続して実行! 結果確認は、MacOSXのVNCからLinuxへ接続して確認するという面倒なことまでしてMacを絡めている。 (Mac de Oracle ですから! 笑)
尚、以前のように、なるべくPL/SQLやSQLレベルで問題を解いて行くがPL/SQLやSQLでは不可能な処理はJava stored procedureで行う。Level 16もLevel14 と同じような処理になっている。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 7日 (金)
Level16 ざっと眺めたら、また、画像ですか! (ちょいとやる気を無くす)
画像扱う問題だと以前に解いた問題と同じ流れになりがちで興味が薄れてきた。
先月中頃に、HTMLDB2.0 が Oracle10g R1 for MacOSX Serverのダウンロードページに追加されていたのでそちらのほうが面白そうだな。Oracle AS Portalのデータベースポートレットのような感じだが。。。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 4日 (火)
「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へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 3日 (月)
Level 15 は、なんとプログラミングするまでもなく答えが判ってしまった。いきなり、Level 16のページが見えてしまった。(プログラミングもUTL_HTTPと正規表現程度で終わってしまいそうだったのでプログラミングする気も起きず) プログラミングもせずに、Level 15 は終了することにした。 だれの? というタイトルと、HTMLコメントを見れば、すぐに解決できる。簡単すぎて引っ掛けかと思ったほどだった。(実は深読みさせて迷路に誘い込むつもりだったのかもしれないが。。。。)
Level 16 へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年10月 1日 (土)
Level14 はそのページにある画像が問題になっているのでLevel 11 の時とやり方はほぼ同じ。違いは、サイズが、### × ### のファイルを新規に作成することだけ。できあがった画像を元に該当するURLをブラウザで開くと、意地悪ともクイズとも言えないようなページが開く。これも簡単なのですぐに Level 15 が見つかる。すぐに謎は解けると思うのでこれ以上は解説はしない。
定番になってしまった JDeveloper10g for Macでjava をdeploy そして、java stored functionとしてラップして実行。(パッケージ化しているが管理しやすくするためである。パッケージ化しなくても問題はない) ユーザ定義関数として利用できるのでSQL文から直接利用できる。(でもディレクトリオブジェクトぐらいは引数で渡すようにしたほうがよかったかも。。)
ただ、正解の画像にある赤いドットが気になったので遊んでみた。(画像は小さいので拡大してみないと判りずらいと思う) このURLを叩けばその絵は間違っているとわざわざ教えてくれるのだが、こんな引っかけに引っかかるるのかな?〜(引っかかっている間もなく答えが判ってしまったのに。)
Level 15へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月30日 (金)
Eureka! Level 14 は、ヒントを見て仕掛けが判ってしまうほど簡単なのだが、プログラムがバグっていて答えがきれいに描画できていない。ただ、それが何かは判るような状態なのでURLを叩くと、正解! でした。 完結編へつづく。(プログラムを修正してからだが。。)
| 固定リンク | 0
|
| トラックバック (0)
2005年9月25日 (日)
Cubeをサテライトオフィスに移動させてしまった のでJava Stored Proedureが使える環境(MacOSX Panther 10.3.9)のOracle10g がなくなってしまった。Tiger 版の Oracle10g R2がいつリリースされるか不明なので外付けFIreWire DISKにMacOSX Panther(10.3.9)をインストールし、Oracle10g R1 for MacOSX Server環境を再構築した。今回は、PowerBook G4 1Ghz 1GB-ramにつないだ。これでPowerBookは MacOSX 10.4 Tiger と 10.3.9 Panther が起動できる環境になった。 さて、Level 14 再開しますか。。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月11日 (日)
2005年9月10日 (土)
Level 13 は Level11 とLevel 12 の画像系問題ではなかったのでちょいと面白い。 簡単だしね。Level12 でセサミストリート まで辿り着いていればの話だが。。
Level 13 は、Level 12 の解決には余分な情報が”伏線”となっている。
その伏線を Level 12 で見ていれば Level 13 は 70%くらいまで解決しているのだ!。 そして、Level 13ではちょいといじわるな?! 罠がある。私は問題がバグっているのか、サイトがトラブルでも起こしているのかと思い、その翌日に再度アクセスしてみたくらいであった。 しかし、そのエラーメッセージこそが最大のヒントなのである。それに気づけばあとはプログラミングあるのみ! なのである。
前回も書いたがこの問題はPL/SQLだけで解ける。簡単に書くつもりだったが作っているうちにちょっとだけ凝ることにした。そのため全体では40行程度のファンクションとなった。
そのファンクションはSQL文から実行するようにした。4回発行だけで解けるので見かけ上は、Python を利用して4行で解くのとあまり変わらない(ソースコードの量は随分違うが。。。笑。)
プログラムは簡単なのでコードの欠片も載せないが、UTL_HTTPパッケージと、___type型を使う(伏せ文字のところはこの問題でどんなプログラミングをすればよいか見えた方ならすぐ判るはず!。)
Pythonで解くと。。。
今回は、これだけでは終わらない。最後の最後まで”いじわる”な問題である。(面白いけどね)
PL/SQL で Python Challenge 14 へつづく。
Python Challengeの問題の意地悪で思い出したが、その昔、ログインのバナーにクラッシュダンプようなバナーを表示するようにして、ログインした方を慌てさせるというおバカなことやっていたことを思い出した。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月 9日 (金)
Python Challenge Level 13 画像系の問題が連続していたが今回は違うね。Oracleさんも力を入れている分野だけどJavaを使わなくてもPL/SQLのパッケージだけで出来るな。凝ればかっこ良くつくれるが一番単純なプグラミングでやっつけようと思っている。恐らくPL/SQLでも10行程度でできるでと思う。(ちなみに、Python なら Global Module Index にあるモジュールをimportすれば4行で答えが得られる。)
次回、 Level 13 完結編につづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月 7日 (水)
この問題、プログラミングは簡単なんだがそこに辿り着くまでが大変だった。
Level 12のページには画像が1つあるだけ。ページのタイトルも、ヒントなのか、そうではないのか意味不明。
Level 11 と同じなのか?(Level 11と同じな訳ないのだが。。)と感じさせるような画像なのである。しかし、なんのことはない、普通のjpgファイルだったのである。 一体どうすればいいのか? どこに答えが隠れているのか???? ーー> 一週間悩んだ。
ちょっとしたことから仕掛けに気がついたのだが、これが、問題作成者の狙い通り!? という罠にハマり、セサミストリートまで行くことになる。(さらに、3日悩み続けた。。。)
セサミストリートまで行っちゃうと行き過ぎみたいなのだが、それはそれで何かの伏線なのか? と思える実に怪しいページになっている。それは置いといて。。
そこに辿り着くまでにいくつかのアイテムを拾い集めていた、そのアイテムの一つに、”ほんとうの問題”があったのだ。 それをPL/SQLで解いた所。PL/SQLのどのような機能を利用したかは前回の記事 を見てもらうとして。。。
あとはご自分で、といっても感のいい方は答えに気付いてしまうかもしれない。
尚、今回は、PowerBook G4, MacOS X Tigerに構築した Oracle10g R1 EEを利用している。
Level 13 へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月 5日 (月)
謎を解いている私の横で奥さんがそれを検証し始めたのだ。 その結果、私の推測は間違っていると指摘されてしまった! (><)。 ということで、今日のランチタイムに弁当を食べながら問題と睨めっこしていた。そして見えました〜〜答えが!。 自分なりに検証したところPL/SQLだけで解けたのであった。ちょっとだけ解説しておくと、 DBMS_LOBパッケージ、UTL_RAWパッケージ、UTL_FILEパッケージ及びBILEといつものディレクトリオブジェクトなどを利用するのみで全体で40行〜50行程度になっただろうか。
今回の問題は、いろいろな”いじわる”がたっぷり盛り込まれている。 答えが判れば、Level 12のページにある画像を見て、なるほどね〜〜。という気になってくるから不思議である。 次回、PL/SQL で Python Challenge 12 完結編につづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年9月 4日 (日)
PL/SQL で Python Challenge Level 12
実は先週末から本格的にやり始めたのだが、これが私には難解で、難解で、、、記事のネタにもならないのと、仕事の納期が迫っていたため投稿は控えていた。 でも、先ほどから始まった雷の閃光とともに、謎はとけた! 。。。と思う。(ちょいと不安だが。。。。)
おそらく、PL/SQLだけで解けるのではないかと思っている。(私の推測が間違っていなければ。。。)
次回へつづく。(話は変わるが、外はすごい雨になっているね〜。)
| 固定リンク | 0
|
| トラックバック (0)
2005年8月28日 (日)
休暇中に、MacOSX Panther をインストールしてあるPowerMac G4 Cube をサテライトオフィス(実家なんだけどね。帰省中でも事務的なこととかできるし、あると便利なので、いままでおいてあったG3と交換)へ持っていってしまった。 ということで、「PL/SQL で Python Challenge」 を 行う環境がなくなってしまった。 G5 Serverの環境整備と平行して、どうするか検討中。
DBマガジン 10月号に、 「話題のMacOS X によるWeb-DBサーバ構築」という特集がくまれている。DBマガジンに Mac関連の特集が組まれたのは私の知るかぎり初めてかもしれない(記憶違だったらごめんなさい)。標準で組み込まれている MySQL、それにApache と PHPを組み合わせるものだが、どれも標準で組み込まれているだけに簡単に構築できてしまうのが便利なところですね。
| 固定リンク | 0
|
| トラックバック (0)
2005年8月18日 (木)
Level11は、 Level7及び、Level9で作成したパッケージを再利用したことと、、Level7で作成したjavaのコードを多少手直ししただけなので書き直したコードは15行程度だった。(全体では、Level7程度のコード量だが。。)
javaのコードの概要は以下のようになる。
1.問題の画像を、オラクルのDirectoryオブジェクトに置く。
3.javax.ImageIO をクラス利用して、外部LOBとして読み込んだ画像の複製を作る。(複製した画像は、背景色を黒にしておく)
4.3.で複製した画像(BLOB)に、2.で取り込んだ画像(外部LOB)から取り出した答えを描画。
5.答えを描画した画像(BLOB)を一時LOBとしてデータベースへ書き出す。 dbms_lob.createTemporary() を利用する。
7.前述のjavaクラスをデータベースへ配布する。(JDeveloper又は、loadjava コマンドを利用する。)
8.SQL*Plusより、Java Stored Procedureとして呼び出せるようにして実行!。Oracleは、MacOSX 10.3.9 Pahtnerに作成した、Oracle10g である。
cube: oracle$ sqlplus scott/tiger SQL*Plus: Release 10.1.0.3.0 - Production on 水 8月 17 00:00:20 2005 Copyright (c) 1982, 2004, Oracle. All rights reserved. Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production With the Partitioning, OLAP and Data Mining options に接続されました。 SQL> !cat level11.sql -- level11 create or replace package level11 as function getAnswer return number; end level11; / show error create or replace package body level11 as function getAnswer return number is language java name 'jp.discus.Level11.getAnswer() return java.lang.Intger'; end level11; / show errors SQL> @level11 パッケージが作成されました。 エラーはありません。 パッケージ本体が作成されました。 エラーはありません。 SQL> set timi on SQL> select 2 case 3 when level11.getanswer() = 1 then 4 '成功' 5 else 6 '失敗' 7 end as "結果" 8 from 9 dual; 結果 ---- 成功 経過: 00:00:05.68 SQL>
実行後、directoryオブジェクトに対応するフォルダには Level11.jpg が作成される。
9.うまくいったようなので結果を見てみよう! (内容はいつものように隠してある)
Level12 へつづく
| 固定リンク | 0
|
| トラックバック (0)
2005年8月15日 (月)
前回の予想通り、 画像の中に答えがあった。Level11 の ページタイトルがヒントになっている簡単な問題でしたねこれも。(Level11はJavaだけで答えが見えてしまうのだが、、、Level7を解いたときと同じ方法で、PL/SQL から呼び出す形にする。 ) 次回、完結編へつづく。
#何年ぶりだろう!? 東京湾大華火祭を見たのは・・・・・。
| 固定リンク | 0
|
| トラックバック (0)
2005年8月11日 (木)
ここのところ忙しくて脳の体操してなかったが久々に再開?!、Python Challenge Level11。 こいつはまた画像に答えが埋め込まれてますね〜おそらく。。。となんとなく思っただけ。。で、疲れてやる気でず。。。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月29日 (金)
Level10は、前回の通り 、PL/SQL パッケージだけで解けた。珈琲ブレイクの間にコーディングしたのだが、すんなりコンパイルも通りLEVEL10クリア。。
いつものようにコードは載せないが、コレクションの一つであるVARRAY、正規表現関数(REGEXP_SUBSTR()とREGEXP_REPLACE())、あとは昔からある、SUBSTR()関数や、LENGTH()関数を利用したプログラミングで十分。
結果の画像を見てもらうと判るがパッケージの本体は35行である。Level5以降キツい問題が続いたが、このくらいだとPL/SQL で解くのもランチタイムや珈琲ブレイクの間で終わるので十分楽しめる。
Level11へつづく。。。のだが、Tiger Server De Oracle10g は? と突っ込まれたこともあり、次回はMac De Oracleらしく、Tiger Server De Oracle10gにする予定。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月28日 (木)
Level10は、こんな感じの適性試験があったような記憶が蘇るクイズだな。。。。
Level10では、Level9 の答えに出てくる”やつ”が問題のページにあるのだ。。htmlソースをみると、、お〜、 clickable map じゃないか! またなんか嫌らしい問題にしてんのかな〜。 早速、”やつ”をクリックすると基本認証 が設定してある。おや〜〜これは以前解いた問題と同じだな。。。ということで、やっと問題にたどり着く。入手したテキストファイルが意味不明だったが、眺めているとあるパターンがあることに気づく。あ、、、、なるほど。。。謎は解けた! Level10のページには答えを導きだすためのヒントがあるので、あとはその通りにやればいいはずだ。(最後にひねりが何段かある可能性はあるが。。) あとは、PL/SQL でどうプログラミングするかだな。Level10は、久々に、PL/SQL だけで解けそうな感じがする。 Level 10 完結編につづく。
軽井沢に行きたくなってきた。。。暑い、寝苦しい〜。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月27日 (水)
Oracleのdirectory オブジェクト に対応づけられたOS上のフォルダ(ディレクトリ)には、以下のスナップショットのようにlevel9.jpg というLevel9の答えが作成されている。(このlevel9.jpg は、最初からあるわけでなく、Level9を解いた結果作成された画像である)
(この機能自体がサポートされたのはかなり前なのだが、create directoy文だけでOS上のディレクトリにアクセスできるようになったのは、Oracle9i R2以降である)
level9 という PL/SQL パッケージを作成したのだが、今回はpackageの仕様部だけをネタバレになりそうな関数名などをHogeなどと置換して公開しておこう。
最初の create type文で、ユーザ定義型のコレクションを2つ定義している。見ればわかると思うが、hogehoge_typ型は2次元のコレクションになっている。また、hoge_typ型が、2つのintegerを要素とするコレクションであることも判ると思う。感のよい方はこれを見ただけでもLevel9の答えが判ってしまったかもしれない。。(前日の記事で、「答えを画像ファイルに出力する必要ない。」と書いた理由はこれである )
ではpackage仕様部の解説に移ろう。 最初の2つは、定数なので解説は省略する。getHoge()関数は、単純に2次元のnest tableコレクションを返してくるものである。画像ファイルに答えを描画しないのであればここまでできれば十分である。
私は答えをjpegファイルに出力するので、メモリ上で作成した画像をjpegとして一時LOBとしてOracle10gデータベースの一時記憶域に書き出し、その一時LOBを directoryオブジェクト以下に level9.jpg というファイルとして書き出す処理を作成した。
writeImageFile()プロシージャは、PL/SQLだけで記述してある。プロシージャ名からもある程度想像できると思うが、一時LOBを、指定した directoryオブジェクト以下に指定したファイル名(level9.jpg)で書き出すプロシージャである。(コード量は20行程度) 残りの getAnswer()関数はLevel9を解くためのメイン処理になっおり java stored procedure である。java では画像処理だけを行いそれ以外の処理は、PL/SQLを利用している。(javaのコード量は、jdbcを利用していることもありコメント以外の行は100行程度)
$ cat level9.sql -- Level9 package create or replace type hoge_typ is varray(2) of integer; / create or replace type hogehoge_typ is table of hoge_typ; / create or replace package level9 as c_first constant varchar2(16) := 'first.txt'; c_second constant varchar2(16) := 'second.txt'; function gethoge(which in varchar2) return hogehoge_typ; procedure writeimagefile( directoryname in varchar2, filename in varchar2, srcimage in out nocopy blob ); function getanswer() return boolean; end level9; / show error
コーディング後のloadjavaは、JDeveloper10g for MacOSX Developer Previewを利用している。
SQL*Plusを起動し、level9のパッケージや型を作成後、getAnswer()の実行!
注)いつもの通りネタバレになるので答えそのものは載せていないのであしからず!(そうだと思った〜っ。という声が聞こえてきそうだが。。) 画像を開くとなるほど〜〜〜と思う結果になるのだが、日本人だと50%は間違かもしれない。特に日本語では通常、”それ”を区別していないからだ。(画像をよ〜〜〜く見ると区別できる”もの”があるのだが・・) でも心配しなくてよい。間違っている方の xxx.htmlを入力すると正しいURLへのヒントのページが表示される。(いつの間にか、英語の勉強にもなっている気がする Python Challenge )
Level10 へつづく!
尚、nest tableやVARRAY又は、結合配列(むかしのPL/SQL表相当)を関数の戻り値として返すサンプルやBLOBをdirectoryオブジェクト以下に書き出すPL/SQLの簡単なサンプルは別途掲載するかもしれない。
台風一過、波は高いが気持ちのいい湘南にて。。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月26日 (火)
Level9。 最初はそのページにある画像に疑いを持っていたのだが、htmlソースと、ページタイトルで謎は解けた。 Pythonだと、画像処理用のモジュールをimportすれば20行も必要ないだろう。 PL/SQL+Java(Java Stored Procedure) + Oracle10g では、PL/SQLのコードとJavaのコードを合わせて、100行で収まるかな?といったところ。 今回も、MacOS X Panther 10.3.9に構築した、Oracle10gデータベースと、JDeveloper10g for MacOSX Developer Preview Releaseそして、J2SE 1.4を利用して解いてみる。ただ、この問題では解答をjpegファイルで出力することにした。(ちなみに、画像ファイルにしなくても問題ないと思う)
さて、処理方法は、
Level9のhtmlソースをファイルに保存後、答えを導きだすためのデータ群(2つある)をそれぞれテキストファイル(以下、テキストファイル1、テキストファイル2と呼ぶことにする)にして、Oracle の directory オブジェクトに対応する OS上のフォルダに保存する。さらに、Level9 のページに表示されている画像( good.jpg ) も同じ場所に保存する。 ちなみに、directory オブジェクトには、書き込み権限と読み込み権限が付与されていること。
最初に、VARRAYまたは、NEST TABLEをを利用した2次元のユーザ定義型を create type文で作成する。私は1次元目のコレクションは、NEST TABLE、2次元目のコレクションには、VARRAYを利用した。
テキストファイル1と2をutl_fileパッケージを利用して読み込み必要な形に変換する関数を作成する。この関数はPL/SQLだけで記述する。正規表現関数と前述の2次元コレクションも利用する。
good.jpgファイルをBFILEとして返す関数を作成(ただし、Level7で作成したものをそのまま再利用)。これもPL/SQLだけである。utl_fileパッケージを利用している。なぜ、good.jpgを読み込むのかといえば、答えを描画する画像のサイズを good.jpgと同じにしたいということが理由である。答えとなる画像は、黒背景に白で答えを描画する。
次のプロシージャが大事なのだが、BLOB を directory オブジェクト に書き出すプロシージャを作成する。このプロシージャは、DBMS_LOBパッケージ及び、UTLFILEパッケージを利用する。PL/SQLだけで記述する。このプロシージャで答えを描画したjpegファイルを Oracle管理下の directory オブジェクトに書き出すという仕掛けである。
最後に、java stored procedureなのだが、このプロシージャに対応する java classでは
前述したPL/SQL関数を使って、問題のデータ(テキストファイル1と2及び、 good.jpgファイル)を読み込み、”答えをjpegファイル(BLOB)として作成する。
作成したjpegファイル(BLOB)を前述したPL/SQLのプロシージャを利用して、directoryオブジェクト以下に書き出す。(DBMS_LOBパッケージを利用し、一時LOBにjpegを仮作成。仮作成した一時LOBをjpegファイルとして書き出すという方法をとる)
思いついた方法を書いただけなのだが、これでうまく解けると思う。(画像処理については、PL/SQLだけでは無理なので、その部分を Javaで行う)
Level9 完結編へつづく。。。 あ、そういえば、 PowerMac G5 Dual 2.7Ghzが到着して、 MacOS X Server Tiger 10.4.2 はセットアップできたので、 そろそろ Tiger Server De Oracle10g ( Oracle10g が Tiger未対応なので無理矢理構築するのだが。。。) をやりますか。。。。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月25日 (月)
Python challenge Level8 を解いてみた。 PL/SQL とJava とOracle を使って解くと結構大変なことも多々あるなぁ。。。それを承知でやっているのではあるが。。。(^^;;;
Python challenge Level8 のヒントは前回の通り、「ブンブン蜂が飛ぶ。その音」 (もちろん英語で)。
Python Global Module Index にあるどのモジュールを利用するのかがわかれば簡単で、Python では3行で解けてしまった。
しかし、PL/SQL +Java +Oracle10g では手こずった。プログラミング以前に、PL/SQL やJava (J2SE )にもPython のモジュールに該当するものがないのである。
検索したところ、Apache Ant プロジェクトに同じ機能を持つpackageがあることを発見した。(Ant 全体ではなく該当部分だけが jar として公開されていたのでそれを利用することにした。)
そのページのNOTE部分には大事なことが書いてある。それを読まないで該当packageを利用するとハマるので注意。(私はまる一日ハマってしまった)ネタバレになるので、そのページのURLは書かない。自分で探してもらいたい。
今回は、以下のように level8 というPL/SQL パッケージを作成した。(Level7 と同様に、MacOS X Panther 10.3.9にインストールしたOracle10g 10.1.0.3 を利用している )
SQL> desc level8 FUNCTION GETANSWER RETURNS VARCHAR2 FUNCTION GETPS RETURNS VARCHAR2 FUNCTION GETBLOBSOURCE RETURNS BLOB 引数名 タイプ In/Out Default? ------------------------------ ----------------------- ------ -------- SOURCE VARCHAR2 IN FUNCTION GETUN RETURNS VARCHAR2 SQL>
PL/SQL のコードはネタバレになるのでいつもの通り非公開だが、作成手順やネタバレにならない程度の概要は書いておく。
getUn() 関数と getPs() 関数は、Level8の問題そのものを取得する
PL/SQL だけで記述した関数である。長い文字列なので入力の手間を省く為に
PL/SQL package中のプライベート定数としてあり、その文字列を取得するだけの関数である。。
コード量は、それぞれ数行程度だった。
getBlobSource() 関数は、getUn()関数、getPs()関数の戻り値を入力して、加工後、
BLOB として返す。これも
PL/SQL だけで記述した関数である。どんな加工を行ったのか詳細は書かないが
エスケープシーケンス を含む文字列を処理したとだけ書いておく。
Oracle では特定の関数などで
エスケープシーケンス を利用するものがあるが、それ以外では通常の文字列として扱われるのでこの処理がポイントになるのではないかと思う。
Oracle10g 新機能である正規表現関数はすべて利用した。
コード量は、20行程度だった。
getAnswer() 関数は、getBlobSource()関数を呼び出し、戻り値から解答を取り出だすjava stored function としてある。この関数はラップされている method内で、
Apache ant
に含まれているあるpackage (
jar ファイルは該当package分だけ入手可能 )を利用している。
javaのコード量は、60行〜70行程度だった。
手順も書いておく。
1.入手したjarファイル(Apache antの該当packageだけの jar)を loadjava コマンドを利用して、Oracleにロードする。
例) jarファイル名などは隠してあります。(それを見せたらネタバレなので)cube: oracle$ loadjava -v -user scott/tiger xxxxx.jar arguments: '-v' '-user' 'scott/tiger' 'xxxxx.jar' identical: META-INF/MANIFEST.MF identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx identical: org/apache/xxxxxxxxxxxxxxxxx identical: META-INF/LICENSE.txt cube: oracle$
2.getUn()、getPs()、getBlobSource()までをPL/SQLだけで実する。
3.getAnswer()でラップする java classを実装及びテストする。 1のjarファイルはライブラリとして必要。(このclassで、getBlobSource()を jdbc を利用して実行する)。
4.3で作成した classを loadjava または、JDeveloper10g Developer Preview for MacOSX で、データベースにロードする。
以下、実行結果のスナップショット(いつものように答えは隠してある)。
Level9へつづく。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月20日 (水)
Pythonなら3行程度で終わりそうな問題だ。しかし、PL/SQL+Javaでやるにはちょいと面倒かもしれない。いくつかポイントはあるのだが、escapeシーケンスと”ブンブンブン”蜂が飛ぶ〜〜がヒントになるpython global moduleだ。javaのJ2SEにはそのようなパッケージはないし、もちろん、PL/SQLやオラクルにはない。javaだと、apache ant に ”それ” に相当するパッケージがあるのだが使えるのかな? 調べるしかない・・・。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月19日 (火)
前回、「PL/SQL で Python Challenge 7 残念!」 でPL/SQL+Oracle10gで解くことを断念するつもりだった。しかし、Python Challenge の問題自体の面白さに、再開することにしたのだ!。 再開するにあたり、PL/SQL では面倒な部分(例えば、画像処理とか)だけを、Java (Java stored procedure) で解くことにした。(場合によっては、Java で解く部分がクイズの核心だったりするが・・・)
java stored procedureを利用したことで、Level7は簡単に解けた。それなりにひねりの効いた問題だったが、java stored procedureを利用した箇所以外は、Level7以前の問題を解く中で利用してきた機能や関数で十分解ける問題だった。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月15日 (金)
ついに、その時がきたか〜。Level7の謎はそのページにある画像自体にある。PL/SQLでは無理そうだな〜。Pythonだと、20行以内で書けそうなのだが・・・。(クイズ自体は割と簡単なだと思う)ということで、PL/SQLではLevel6までということにしておこう。 (Pythonではやるかもしれない・・・・。)
| 固定リンク | 0
|
| トラックバック (0)
2005年7月14日 (木)
Level5 で格闘したおかげで、Level6は簡単に解けてしまった。
Python Challenge を解く鍵になる最初のヒントは、問題になっているhtmlのページ自体に隠されている。大抵の場合、htmlソースコードや画像などにあるのだが、それなりにひねってある。とうしても判らない場合は、Forumのヒント を見てみるといいだろう。Level6はその必要は全くないと思うが・・・ Python用に考えられたプログラミングクイズなので、PL/SQL で解くには難しい場面や、アプローチを変える必要が出てくる。Level6は、ある形式のファイルから答えを導きださなければならないのだが、PL/SQL ではそれを直接操作するパッケージなどは存在しない(作ればできると思うが、すごく大変でしょうね)。しかし、そのファイルの中身をそのままの形で見れば扱えなくもないということに気づくと思う。 今回利用したパッケージは、UTL_FILEパッケージ、正規表現関数(Oracle10g新機能)、DBMS_OUTPUTパッケージ(結果の表示に利用)、連想配列(日本語のマニュアルでは結合配列とか書いてあるが、英文マニュアルを直訳すると”連想配列”となっている。結合配列より連想配列のほうが判りやすいと思うのだが・・・・)だけである。書き方によると思うが約80行程度だった。 さて、Level 7 はPL/SQL で解けるだろうか? Levelが進むとPL/SQL にはキツくなるね〜やはり・・・・。頭の体操にはいいかもしれないけど・・・。 Level5の時と同じように大事なところは隠している実行結果のスナップショット。。。見せないんだから載せなくてもいいのだが・・・・。
| 固定リンク | 0
|
| トラックバック (0)
2005年7月13日 (水)
ついにPL/SQLで、Python Chellenge Level5を 解いた! PL/SQLで解くためのヒント(ヒントより解答に近いかもしれないが。。)
謎は解けたが、PL/SQLでは、1つ問題になることがある。PL/SQLがオブジェクト指向的な拡張はされているが、オブジェクト指向言語ではないからだ。 一時はあきらめかけたのだが、Pythonを使って解いてみると、オブジェクト指向言語でなくても解けそうな問題であることに気づく。
そこで、Pythonのソースコードや、仕様を決めているPEPを見始める。(PEPは、javaでいえば、JSRみたいなもの)
大きなヒントになってしまうが、PEP307 のソースコードを探し始めたのである。その中で、RubyでPython Chellengeを解いている方のページを発見した。Rubyで PEP307 の一部(Level5を解くためだけに必要な部分)を実装したコードを発見したのだ。おおお〜〜〜。これをPL/SQLで実装すればいいじゃん!
PL/SQLで解くためのヒントは、上記のコードを解析してPL/SQLで書き上げろ。しかない!
ポイントは、ANYDATA型及び、VARCHAR2型をネスト表を利用してユーザ定義型を作成する(ようするに、ANYDATA型とVARCHAR2型のコレクション型を定義するとうこと)。それらを、Rubyのコードにある@stackや@memoの代用として利用する。ANYDATA型のコレクションは、コレクションの各要素がANYDATA型になるのでどんな型でも格納できるのである。しがたって、ANYDATA型コレクションの要素にANYDATA型コレクションを格納し、さらに、その要素に。。。を繰り返すという操作が可能になる。最終的には、VARCHAR2型コレクションを格納してやれば今回の問題の80%はクリアできるはず。残りの部分は、UTL_FILEパッケージを利用してファイルを読み込む。結果もUTL_FILEで書き出せるが、SQL*Plusで確認したい方は、DBMS_OUTPUTパッケージを利用して表示させてもよい。(私はDBMS_OUTPUTパッケージを利用した。)その場合、set serveroutput on size xxxx に続けて、スペース表示を抑止しないオプションを付加することをお忘れなく!(あえて、オプションが何かは書きません! SQL*Plusのマニュアルを読んでくださいね)
ちなみに、この問題、PL/SQLでは、stackなどのロジックを書く必要があるため、PythonやRubyのように10行から20行程度のコードでは解決できない。かなりベタに書いてしまったこともあり、stackおよび、PEP307の一部対応で180行程度、全体で200行程度になった。そこまでして、PL/SQLで解きたいか〜という声が聞こえてきそうだが、ANYDATA型の利用方法が見えてきたのは収穫だった。(^^
以下のスナップショットではぼかしを入れてます。これを見せちゃったらつまらないからね〜。
Python Challenge Level 6につづく。(PL/SQLだけでできるのかな?〜)
| 固定リンク | 0
|
| トラックバック (0)
2005年7月 5日 (火)
Level 5 謎は解けた ものの、PL/SQLの新機能などや、Oracle8i以降で追加されたおオブジェクト指向拡張(ネスト表くらいしかまだ利用したことがない)を再度、読み返してみると、anydata型などが気になり始めた。最初は、単純にPL/SQL表でもいけるかと思っていたが、ネスト表やオブジェクト型などを利用したほうがいいのかもしれないと思い始める。。。ただいま、迷走中! どうせ、Oracle10gのPL/SQLでやるのなら、PL/SQLのオブジェクト指向機能機能拡張部分でも利用してみますか・・・・。
| 固定リンク | 0
|
| トラックバック (0)
2005年6月29日 (水)
Python Challenge Level5をPL/SQLで解けるのか? 。。。。とりあえずPythonでやってみたら、5〜7行程度だ!。 PL/SQLでは、該当する関数もパッケージも無いのだが、なんとかできそうなので意地でもPL/SQLで解いてやる〜〜〜。しかし10〜20行くらいではコーディングできないのは間違いない。
Level 5を解く鍵になるモジュールと同じ機能を持たせれば、オブジェクト指向ではない言語でもなんとかできる問題になっていた。PL/SQLでこれを解くには、やはり、UTL_FILEパッケージ+Level 5を解くための鍵になるモジュール相当の自作パッケージ+DBMS_OUTPUTパッケージこれらを合わせればできると思う。。。では、結果にご期待ください。
| 固定リンク | 0
|
| トラックバック (0)
2005年6月28日 (火)
う〜〜〜ん。Python Challenge Level5 で、ついに終了か! (Python なら簡単。でも、PL/SQLではきついな〜〜)。 でも、もうちょい調べてみよう。
| 固定リンク | 0
|
| トラックバック (0)
Python Challenge Level4 を PL/SQLで解くためのヒント。
前回、level4を解く前に、Python向けに書かれたクイズをPL/SQLでどう解くか考えていた が、やはり、utl_httpパッケージが利用できた。それと、Oracle10gから新たにサポートされた正規表現を扱う関数だ。
Level4は、utl_httpパッケージとOracle10gからサポートされた正規表現を扱う関数(なにを使うかはご自分で考えてください)を利用すると解くことができますよ。書き方にもよると思いますが、20〜30行程度でプログラミングできると思います。
(尚dbms_outputパッケージも少しは利用しますが、それを利用しない場合は、utl_fileパッケージでログ出力というのは、どのLevelのクイズでも利用すると思います。)
次は、level5。(次のクイズもPL/SQLだけで解けるでしょうか?。。。。。)
| 固定リンク | 0
|
| トラックバック (0)
2005年6月25日 (土)
Python Challenge は、Pythonでプログラミングをして問題を解いていくことを前提として問題が用意されているわけで、PL/SQLではプログラミング が困難な問題があるかもしれない。(とりあえず、PL/SQL以外の言語を利用しなくても解けるようなら続けてみようと思う。)
Level3 も、 Oracle10g の PL/SQLなら簡単プログラミングできるが、Oracle9i ではかなり大変。 そして、Level4 も、 答えが見えてきが、PL/SQLでできるのか? と思ったわけである。そして、マニュアルを眺めていたら、 utl_httpパッケージ、 utl_urlパッケージ、場合によっては、 utl_tcpパッケージ(使わないと思うが)というパッケージを利用すれば、プログラミングできそうな感じがしてきた。(まだ、試してないが。。) 結果をお楽しみに。
| 固定リンク | 0
|
| トラックバック (0)
2005年6月24日 (金)
この問題を解くには、Oracle10gのPL/SQLを使え!。 (それ以前のリリースなら、Java Stored か、 Cなどを利用するべし。でもできることなら Oracle10g がいいよ。楽だから。) Oracle10g で新機能として提供されている関数と、substr()関数。 それと、やはり、utl_fileパッケージと directoryオブジェクトを利用すると幸せになれるよ。(^^ ちなみに、Oracle10g の PL/SQLなら 20行以内でコーディングできますよ。 (睡魔に勝てず、Java Storedとか、PL/SQLから Cとか書いてしまったが、PL/SQL で Python Challengeなので、Oracle10g より前のPL/SQLでやるなら、20行以内ではすまないですけど、その気になれば書けなくもないので PL/SQLだけで解いてみてください。 (^^;;
| 固定リンク | 0
|
| トラックバック (0)
2005年6月22日 (水)
これも単純といえば単純なのだが、PL/SQLで 解くには、utl_fileパッケージと、translate() や replace() 関数などを駆使すると数十行で解けます。Oracle9i R2から、utl_fileパッケージでは、directory オブジェクトの利用が推奨されているので この際、directory オブジェクトの利用方法なども調べておくといいでしょうね。ちなみに、 Tigerにインストールして稼働中の Oracle10g でも問題なく解けます。
雨のなかの、湘南( どこでしょう? ) より。
私も購読してますが、なんか、こんな終わり方するメールマガジンありますね〜。ちょいとパクってしまいました。 m(_ _)m
| 固定リンク | 0
|
| トラックバック (0)
2005年6月 3日 (金)
先日、Zope をやっている友人から、The Python Challenge というサイトがあるのを聞いた。Python 使って、クイズを解くと、次のクイズができるという構成になっているサイトだ。(ちなみに、友人は Python を使って解く という部分のコメントを読み飛ばしていたらしく、ExcelVBA でやっていたらしい。)。 ということで、Mac De Oracle のタイトルに相応しく?! PL/SQL でやり始めた次第である。。。。(MacOS X なので、Python は、デフォルトで利用できるのだが。。。。PL/SQL でやるのであった。。。)
ここでは、答えを書くことはできないが、いやはや、やり始めると、これが意外に面白い。(PL/SQL Challengeってサイト があってもいいかもしれない。 ヒントなども PL/SQL向けにアレンジして。。。)
ちょっとだけ、ヒントになりそうなことを。。。
level0 簡単過ぎる! が最初だからね〜。 なので何も書かない
level1 これも、案外簡単だし、プログラミングしなくても、根性で解いてしまう方がいるかもしれない。(笑) PL/SQLなら、translate() って関数を使うといいよね。
と、これくらいにしておきましょう。興味のある方は、ご自分で解いて、プログラミングを楽しんでください。
先日、インストールした、Oracle10g for Mac OS Xの PL/SQL を利用して解いている。 で現在、Level3.
| 固定リンク | 0
|
| トラックバック (0)
最近のコメント