結城浩の『Perlクイズ』

[PQ][Perl Quiz 1999-12-12 No.0038]


カテゴリー: 1999年12月12日
===========================================================
結城浩の『Perlクイズ』1999-12-12 No.0038
http://www.st.rim.or.jp/~hyuki/pq/
===========================================================
■今日の一言
-----------------------------------------------------------
こんにちは、結城浩です。
ここしばらく多忙な日々が続いていて、
メールマガジン『Perlクイズ』はお休みしていました。
時間を見つけてまたお送りしたいと思いますので、
どうぞよろしくお願いいたします。
===========================================================
■今回のクイズ
-----------------------------------------------------------
●クイズ
-----------------------------------------------------------
もうすぐクリスマスですね。
今回の『Perlクイズ』ではクリスマスツリーを作ってみましょう。
次の表示を行うプログラムを書いてください。
ともかく以下の表示ができれば正解としますが、
プログラムの内容はみなさんがそれぞれ工夫をこらしてみてください。
(1)と(2)が別のプログラムでも構いませんし、
一つのプログラムで両方を書いても構いません。

(1) 小さなツリー

      *
     *!*
    *!*!*
   *!*%*!*
  *!*%/%*!*
 *!*%/*/%*!*

(2) 大きなツリー

               *
              *!*
             *!*!*
            *!*%*!*
           *!*%/%*!*
          *!*%/*/%*!*
         *!*%/*+*/%*!*
        *!*%/*+-+*/%*!*
       *!*%/*+-!-+*/%*!*
      *!*%/*+-!.!-+*/%*!*
     *!*%/*+-!.*.!-+*/%*!*
    *!*%/*+-!.***.!-+*/%*!*
   *!*%/*+-!.**%**.!-+*/%*!*
  *!*%/*+-!.**%/%**.!-+*/%*!*
 *!*%/*+-!.**%/*/%**.!-+*/%*!*
*!*%/*+-!.**%/*+*/%**.!-+*/%*!*
===========================================================
■前回の解答
-----------------------------------------------------------
●クイズ
-----------------------------------------------------------
メールアドレスが or.jp または ac.jp または ne.jp で終わる
ものにマッチする正規表現を書いてください。
メールアドレスの仕様を調べて厳密にやってくださっても
けっこうですが、とりあえずは、
以下に示すものでmatched/nomatchが合えばよいとしましょう。
以下のXXXの部分を埋めてください。
文字数はもちろん3文字じゃないです(^_^;

@arr = (
    'web.master@some.org.or.jp',        # matched
    'web-master@some-school.ac.jp',     # matched
    'web_master@some_provider.ne.jp',   # matched
    'webmaster@someone.to',             # nomatch
    'webmaster@someone.com',            # nomatch
    'webmaster@someone.gr.jp',          # nomatch
);

foreach $addr (@arr) {
    if ($addr =~ /XXX/i) {
        print "matched : $addr\n";
    } else {
        print "nomatch : $addr\n";
    }
}
-----------------------------------------------------------
●解答
-----------------------------------------------------------
@arr = (
    'web.master@some.org.or.jp',        # matched
    'web-master@some-school.ac.jp',     # matched
    'web_master@some_provider.ne.jp',   # matched
    'webmaster@someone.to',             # nomatch
    'webmaster@someone.com',            # nomatch
    'webmaster@someone.gr.jp',          # nomatch
);

foreach $addr (@arr) {
    if ($addr =~ /^[\w.\-_]+\@[\w.\-_]+\.(or|ac|ne)\.jp$/i) {
        print "matched : $addr\n";
    } else {
        print "nomatch : $addr\n";
    }
}
-----------------------------------------------------------
●読者からの解答(複数人から)
-----------------------------------------------------------
今回の結城の出題は、
通常の文字 \. とメタ文字の . の区別を理解していなくても
うまく動作してしまう出題になっていました。
ごめんなさい。

例えば、/.or.jp/ という正規表現では、
'.or.jp'という文字列だけではなく'fordjp'という文字列にも
マッチしてしまうことになります。
'.or.jp'にマッチさせるには、/\.or\.jp/にする必要があります。
この違いを突いた出題になっていなかった、ということです。

読者のみなさんの解答から正規表現部分だけを抜粋してみました。
以下はすべて正解です。

/\w+(.or.jp)|\w+(.ne.jp)|\w+(.ac.jp)/i
/.*(.or.jp|.ac.jp|.ne.jp)$/
/.*or.jp$|.*ac.jp$|.*ne.jp$/
/or\.jp$|ac\.jp$|ne\.jp$/i
/\.(or|ac|ne)\.jp$/i
/(or|ac|ne)\.jp/i
/.+\@.*(\.or\.jp|\.ac\.jp|\.ne\.jp)$/i
/\.or\.|\.ac\.|\.ne\./i
/(or|ac|ne)\.jp$/i
===========================================================
■結城浩の書籍紹介(ソフトバンクパブリッシング)
-----------------------------------------------------------
◆『Java言語プログラミングレッスン』(上下2巻)
    http://www.st.rim.or.jp/~hyuki/jb/
◆『C言語プログラミングレッスン』(入門編・文法編)
    http://www.st.rim.or.jp/~hyuki/lc/
◆『Perlで作るCGI入門』(基礎編・応用編)
    http://www.st.rim.or.jp/~hyuki/cgibook/
    http://www.st.rim.or.jp/~hyuki/cgibook2/
===========================================================
結城浩の『Perlクイズ』
Copyright (C) 1999 by Hiroshi Yuki. <hyuki@st.rim.or.jp>
http://www.st.rim.or.jp/~hyuki/pq/
お送りくださる文章やプログラムは、
書籍や連載などで無断で利用させていただく場合があります。
===========================================================

このメルマガは現在休刊中です

結城浩の『Perlクイズ』

RSSを登録する
発行周期 不定期
最新号 2007/08/25
部数 0部

このメルマガは
現在休刊中です

ついでに読みたい

結城浩の『Perlクイズ』

RSSを登録する
発行周期 不定期
最新号 2007/08/25
部数 0部

このメルマガは
現在休刊中です

今週のおすすめ!メルマガ3選

日本株投資家「坂本彰」公式メールマガジン
サラリーマン時代に始めた株式投資から株で勝つための独自ルールを作り上げる。2017年、億り人に。 平成24年より投資助言・代理業を取得。現在、著者自身が実践してきた株で成功するための投資ノウハウや有望株情報を会員向けに提供しているかたわら、ブログやコラム等の執筆活動も行う。 2014年まぐまぐマネー大賞を受賞。読者数3万人。雑誌等のメディア掲載歴多数。 主な著書に『10万円から始める高配当株投資術』(あさ出版)『「小売お宝株」だけで1億円儲ける法』(日本実業出版社)
  • メールアドレスを入力

  • 規約に同意して

●人生を変える方法【人生をよりよくしたい人必見!誰にでもできる方法を組み合わせました。】
■「人生(自分)の何かを変えたい!」と思ってる方、まずは最初の1分から始めましょう!今日は残っている人生の一番初めの日です。今、「人生を変える方法」を知ることで、一番長くこの方法を使っていくことができます。コーチングで15年間実践を続けてきている方法なので、自信をもってお勧めできます。「人生を良くしたい!」と思うのは人として当然のこと。でも、忙しい生活の中で人生(自分)を変えることって諦めてしまいがちですよね。誰かに変える方法を教えて欲しいけど、その方法を知っている人は少ない。だからこそ・・・。
  • メールアドレスを入力

  • 規約に同意して

生きる意味は仏教に学びなさい
あなたは何のために生きていますか?なぜどんなにお金があっても幸せになれないのか。あなたの人生をむなしくする心の闇とは?今この瞬間に幸せを感じ、後悔のない人生にする方法。本当の生きる意味とは何か。仏教史上初のウェブ通信講座を開設して年間受講者数日本一、5万部突破のベストセラー『生きる意味109』の著者・長南瑞生が、現代の葬式法事の仏教界では失われた、生きている人を心から幸せにする仏教の秘密を分かりやすく公開。発行者サイトでも隠された仏教の教えを知る秘密を無料プレゼント中。
  • メールアドレスを入力

  • 規約に同意して

今週のおすすめ!メルマガ3選

生きる意味は仏教に学びなさい
あなたは何のために生きていますか?なぜどんなにお金があっても幸せになれないのか。あなたの人生をむなしくする心の闇とは?今この瞬間に幸せを感じ、後悔のない人生にする方法。本当の生きる意味とは何か。仏教史上初のウェブ通信講座を開設して年間受講者数日本一、5万部突破のベストセラー『生きる意味109』の著者・長南瑞生が、現代の葬式法事の仏教界では失われた、生きている人を心から幸せにする仏教の秘密を分かりやすく公開。発行者サイトでも隠された仏教の教えを知る秘密を無料プレゼント中。
  • メールアドレスを入力

  • 規約に同意して

●人生を変える方法【人生をよりよくしたい人必見!誰にでもできる方法を組み合わせました。】
■「人生(自分)の何かを変えたい!」と思ってる方、まずは最初の1分から始めましょう!今日は残っている人生の一番初めの日です。今、「人生を変える方法」を知ることで、一番長くこの方法を使っていくことができます。コーチングで15年間実践を続けてきている方法なので、自信をもってお勧めできます。「人生を良くしたい!」と思うのは人として当然のこと。でも、忙しい生活の中で人生(自分)を変えることって諦めてしまいがちですよね。誰かに変える方法を教えて欲しいけど、その方法を知っている人は少ない。だからこそ・・・。
  • メールアドレスを入力

  • 規約に同意して

【六単塾】1日数分で英単語・英文をあきれるほど覚える方法
「英語をやり直したいけど面倒なことはしたくない」「英会話したいけど時間がない」「TOEICスコアが急に必要になった」そんなあなたに。1日10分、たった6単語で英語が話せるようになるためのメルマガを1日1通お送りします。登録は2秒で終了。今すぐ登録してくださいね。
  • メールアドレスを入力

  • 規約に同意して

他のメルマガを読む

ウィークリーランキング