mirac cafe という名の不思議なブログ
※ ブログ等での私の投稿は個人の見解によるものであり、 所属する組織の見解ではありません。
※ ブログ等での私の投稿は個人の見解によるものであり、 所属する組織の見解ではありません。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今日もバイト行ってpkuといういつものroutine.
1人でプログラム書くときはいつも何かBGMを流してるんですが、、
今日は何故かAve Mariaが聞きたくなったので、
youtubeで見つけたAve Mariaをランダム再生してましたw
で、今日もプログラミングネタなんですがー、、
最近10分で書けるお手軽パーサーにはまってますw
えーと、パーサーと言うのはですね、、
「構文解析器」っていう物なのですが、例えば
I wish I were a bird, which can fly! とか言う文を見たときに、
I wish (I were a bird (, which can fly)))! とか言う感じに、
区切ってくれるような、そんな働き方をします。
別の例で言うと、1+2*3+3*5/2-3っていう数式を、
(((1+(2*3))+((3*5)/2))-3)っていう感じで
適切に括弧をつけてくれる、みたいなのも構文解析です。
んで、上の例を見て分かる通り、構文解析ってのはなかなかややこしいんです。
小学生とかだと1+2*3を9 ( = (1+2)*3 ) って言ってしまったり、
にゅうしとかでえいごをなんねんべんきょうしてもがくしゃたちがこのみそうな
ふくざつでこうぶんがいりみだれたようなえいぶんがかいしゃくできなかったり、
なかなか難しいわけですよ。この平仮名の文章も構文解析しにくいでしょ?w
人間が大変なものってのはプログラムするのも大変なわけで、
普通はパーサ(構文解析器)を作るってのはなかなか手のかかる作業なわけです。
でも上のリンクの、10分で書けるお手軽パーサーっていうサイトを参考にすると、
なんか驚くほど簡単にパーサが作れるようになってしまったのですw
詳細を述べるにはLL文法で左再帰があると不味い理由とか、
なんかそういうおもしろくないことを書かないといけないので省略しますが、、
まぁICPCとか挑戦してる人にはこのサイトはものすごく勉強になると思います。
で、"10分で書ける"お手軽パーサーって名前のサイトなので、
本当に10分で書けるのか試してみました。
使った問題はこちら。問題文の解説とかは省略でw
で、さすがに問題を読む時間を含めると間に合わないことが確定してしまうので、
まず問題を読んでから、時刻をチェックしてプログラムを書き始めてみました。
このとき22:10でした。で、まず文法を列挙して、パーサ部分をカリカリ書いて、
最後に入出力部分をカリカリカリカリ書いて、submitしてみたら一発Accept。
そしてこのときの時間が22:19。所要時間がきっかり10分(笑)
いやー、、正直10分で書けると思ってなかったから感動しました。
これでまた一つ知識がついたので世界大会に近づいたかなー、
なんて思ってみたりみなかったり。いや、思ってるんですがw
俺がここ数日pkuで解いた問題を探すと、
パーサの練習になるような問題がいくつかあるので、
興味のある人はやってみてくださいな。
そろそろお風呂入ったかな、、いてきますw
1人でプログラム書くときはいつも何かBGMを流してるんですが、、
今日は何故かAve Mariaが聞きたくなったので、
youtubeで見つけたAve Mariaをランダム再生してましたw
で、今日もプログラミングネタなんですがー、、
最近10分で書けるお手軽パーサーにはまってますw
えーと、パーサーと言うのはですね、、
「構文解析器」っていう物なのですが、例えば
I wish I were a bird, which can fly! とか言う文を見たときに、
I wish (I were a bird (, which can fly)))! とか言う感じに、
区切ってくれるような、そんな働き方をします。
別の例で言うと、1+2*3+3*5/2-3っていう数式を、
(((1+(2*3))+((3*5)/2))-3)っていう感じで
適切に括弧をつけてくれる、みたいなのも構文解析です。
んで、上の例を見て分かる通り、構文解析ってのはなかなかややこしいんです。
小学生とかだと1+2*3を9 ( = (1+2)*3 ) って言ってしまったり、
にゅうしとかでえいごをなんねんべんきょうしてもがくしゃたちがこのみそうな
ふくざつでこうぶんがいりみだれたようなえいぶんがかいしゃくできなかったり、
なかなか難しいわけですよ。この平仮名の文章も構文解析しにくいでしょ?w
人間が大変なものってのはプログラムするのも大変なわけで、
普通はパーサ(構文解析器)を作るってのはなかなか手のかかる作業なわけです。
でも上のリンクの、10分で書けるお手軽パーサーっていうサイトを参考にすると、
なんか驚くほど簡単にパーサが作れるようになってしまったのですw
詳細を述べるにはLL文法で左再帰があると不味い理由とか、
なんかそういうおもしろくないことを書かないといけないので省略しますが、、
まぁICPCとか挑戦してる人にはこのサイトはものすごく勉強になると思います。
で、"10分で書ける"お手軽パーサーって名前のサイトなので、
本当に10分で書けるのか試してみました。
使った問題はこちら。問題文の解説とかは省略でw
で、さすがに問題を読む時間を含めると間に合わないことが確定してしまうので、
まず問題を読んでから、時刻をチェックしてプログラムを書き始めてみました。
このとき22:10でした。で、まず文法を列挙して、パーサ部分をカリカリ書いて、
最後に入出力部分をカリカリカリカリ書いて、submitしてみたら一発Accept。
そしてこのときの時間が22:19。所要時間がきっかり10分(笑)
いやー、、正直10分で書けると思ってなかったから感動しました。
これでまた一つ知識がついたので世界大会に近づいたかなー、
なんて思ってみたりみなかったり。いや、思ってるんですがw
俺がここ数日pkuで解いた問題を探すと、
パーサの練習になるような問題がいくつかあるので、
興味のある人はやってみてくださいな。
そろそろお風呂入ったかな、、いてきますw
PR
この記事にコメントする
無題
I wish I was a bird, which can fly, which is a fragile dream which often comes up with me, which is mere a man.
なにはともあれGJ
なにはともあれGJ
カレンダー
04 | 2024/05 | 06 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
フリーエリア
最新コメント
[11/30 kamae]
[04/30 mirac]
[04/29 渚]
[01/20 渚]
[01/01 mirac]
[12/09 mirac]
[10/31 mirac]
[03/14 mirac]
[08/10 404ななしさん]
[08/09 halwhite]
最新記事
(07/28)
(07/15)
(05/04)
(04/30)
(04/17)
(03/05)
(02/21)
(02/16)
(02/01)
(01/29)
最新トラックバック
ブログ内検索