プログラミングテストの問題をMySQL ストアドプロシージャで解答する
最近更新していないのすこし休憩・・以下に記載している問題を、SQLなんかでやったら評価的には、おそらく「プログラミング能力不適合者」に認定されること必至なのでマネしないように・・・この問題・・前職での問題なのですが、利用する言語はなんでもよく、おそらくコードの可読性とか考え方を採点するものだと思われ・・(こんなの書かれたらきっと評価者は、解答自体を評価せずすっとばすでしょうww
ちゃんとした解答は、前職におりました。スーパープログラマ的な人が以下のサイトで紹介しております。
その中に書かれている問題は以下の通りです。
与えられた文字列に対して、数字を挿入する関数を記述してください。 挿入ルールは、最初に”1″、1文字あけて”2″、2文字あけて”3”、・・・(英字が与えられる前提でOK、スペースやカンマも1文字と数える。) ただし最後は、あける文字数によらず数字で終わらせる。 例) Hello Jason, how are you? →1H2el3lo 4Jaso5n, ho6w are 7you?8
・・ボクなりにがんばったのが以下のSQL(プロシージャ)
mysql> DELIMITER // mysql> CREATE FUNCTION q1(_word varchar(500)) RETURNS varchar(600) DETERMINISTIC -> BEGIN -> DECLARE _resultword varchar(600); -> DECLARE _work varchar(600); -> DECLARE _work2 varchar(600); -> -> -> declare _cnt1 int; -> declare _cnt2 int; -> -> set _resultword = ''; -> -> set _cnt1 = 1; -> set _cnt2 = 1; -> -> set _resultword = ''; -> set _work = ''; -> set _work2 = ''; -> -> set _work2 = concat('1',substr(_word,1,1)); -> -> while _cnt2 <= length(_word) do -> set _cnt2 = _cnt1 + _cnt2; -> set _work = concat(substr(_word,_cnt2,_cnt1 + 1)); -> set _work2 = concat(_work2,_cnt1 + 1,_work); -> -> set _cnt1 = _cnt1 + 1; -> -> end while; -> -> SET _resultword = _work2; -> -> RETURN _resultword; -> -> END; -> // Query OK, 0 rows affected (0.00 sec) mysql> DELIMITER ;
・結果は以下の通りです
mysql> select q1('Hello Jason, how are you?') ; +-----------------------------------+ | q1('Hello Jason, how are you?') | +-----------------------------------+ | 1H2el3lo 4Jaso5n, ho6w are 7you?8 | +-----------------------------------+ 1 row in set (0.00 sec)