コードを短くするのって楽しいですよね?(1)
限られたメモリ、資源環境下においてプログラミングするというのは、一人前のプログラマになるために必要な道程だと感じる。組み込み系やら、携帯型のハードに一生携わらないとしても、経験しておいたほうがいいだろう。
ところで、コード(ソースコード)を短くするのはどうだろう?
id:tanakh:20051119#p1で、あがっている問題が非常に面白い。lispのS式で表現されたtreeを辿って、root nodeからleaf(終端node)への和を計算するものだ。右図で言えば、この和は27,22,26と18。
ちなみに右図のS式は
と表現される。この問題では、入力は標準入力から与えられ、先頭にこの和である数字がついていれば「yes」と標準出力に出力。ついていなければ「no」と出力する。
(5 (4 (11 (7 () ()) (2 () ()) ) ()) (8 (13 () ()) (4 () (1 () ()) ) ) )
例)
[入力]
22 (5 (4 (11 (7 () ()) (2 () ()) ) ()) (8 (13 () ()) (4 () (1 () ()) ) ) )[出力]
yes
また、処理は標準入力からEOFを受け取るまで続けなければならない。
例)
[入力]
22 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))
20 (5(4(11(7()())(2()()))()) (8(13()())(4()(1()()))))
10 (3
(2 (4 () () )
(8 () () ) )
(1 (6 () () )
(4 () () ) ) )
5 ()[出力]
yes
no
yes
no
問題文の紹介が終わったところでまずは各自チャレンジしてみて欲しい。(つづく)