内容

目的

魚へんの漢字を読めるようになって、居酒屋できちんと注文ができて、あわよくば「あなた、詳しいのね。うふん。」と言われるために使用します。

ツールのURL

こちら

使用イメージ

各漢字(50問)に対応するテキストボックスにその漢字の読みをローマ字で入力して「採点」ボタンを押す。

出力イメージ

各漢字の正解と入力した解答及びそれぞれ○か×かと全体の点数。

ソースイメージ

入力画面

#!/usr/bin/perl
#

$MOTO_DATA="./sakana_data/data.txt";

sub print_mondai{
    my $index = 0;
    my $answer_ind="";

    ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
    my $yyyymmddHHMMss = sprintf("%04d_%02d_%02d__%02d%02d%02d", $year + 1900, $mon +1, $mday, $hour, $min, $sec);
    my $list_file = "./sakana_data/data_$yyyymmddHHMMss.txt";
    open (LIST,">$list_file");
    open (MOTO,"$MOTO_DATA");
    @line=<MOTO>;
    for (my $i = @line; --$i; ) {
        my $j = int rand ($i + 1);
        next if $i == $j;
        @line[$i, $j] = @line[$j, $i];
    }
    print LIST @line;
    close(MOTO);
    close(LIST);

    open(LIST,"$list_file");
    print "<table border=\"0\" bordercolor=\"white\" cellspacing=\"0\">\n";
    while(<LIST>){
        chomp($_);
        if ($_=~/(sakana[0-9]{3}\.gif),(\S+),([a-z]+)/){
            $answer_ind = "answer" . $index;
            my $toi = $index+1;
            if($index % 5 == 0) {print "<tr>";}
            print "<td>問($toi)</td>";
            print "<td><IMG SRC=\"./sakana_data/$1\"></td>";
            print "<td width=\"120px\"><input type=\"text\" name=\"$answer_ind\" size=\"12\" maxlength=\"15\" style=\"ime-mode:disabled\">  </td>";
            if($index % 5 == 4) {print "</tr>";}
            $index++;
        }
    }
    close(LIST);
    print "</table>";
    print "<input type=\"hidden\" name=\"filename\" value=\"$list_file\" />";
    print "<p><input type=\"submit\" value=\"採点\" name=\"submit\"></p>\n";
}

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">";
print "<TITLE>魚へん漢字テスト</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<form method=\"POST\" action=\"./sakana_saiten.cgi\">";
print "<p><font size=\"4\">■魚へん漢字読みテスト</font></p>";
print "<p>変換で確かめができないよう、ひらがなの入力ができないようにしています。<br>";
print "ローマ字で読みを記入して採点をクリックしてください。<br>";
print "(ローマ字はtsuとtu、jiとzi、shaとsyaなど、各方式に対応するようにしています。問題があったらご報告いただけると幸いです。)</p>";
print "<p>※ 魚の名前だけでなく、部分やその他を表す漢字もあります。<br>";
print "※ tabキーを使用して各問を移動すると入力が楽かもです。</p>";

&print_mondai();

print "<br>\n";
print "<font size=\"1\">動作に不具合等ありましたら<a href=\"http://hinata.la.coocan.jp/pukiwiki/?%B5%FB%A4%D8%A4%F3%B4%C1%BB%FA%A5%C6%A5%B9%A5%C8%2F%A5%D0%A5%B0%B4%C9%CD%FD%CA%ED\" target=\"blank\">ご連絡ください</a>。";
print "早急に対応したいと思います。(2008年11月30日<a href=\"http://hinata.la.coocan.jp/pukiwiki/?FrontPage\" target=\"blank\">日向充</a>)</font>";
print "<br><br>\n";
print "<script type=\"text/javascript\"><!--\n";
print "amazon_ad_tag = \"hinatamitsuru-22\"; amazon_ad_width = \"728\";  amazon_ad_height = \"90\";//--></script>\n";
print "<script type=\"text/javascript\" src=\"http://www.assoc-amazon.jp/s/ads.js\"></script>\n";
print "<iframe src=\"http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=20&l=qs1&f=ifr\"\n";
print "width=\"120\" height=\"90\" frameborder=\"0\" scrolling=\"no\"></iframe>";
print "</BODY>\n";
print "</HTML>\n";

出力画面

#!/usr/bin/perl
#
sub decode {
    local($args, $n_read, *terms, $tag, $value);

    $ENV{'REQUEST_METHOD'} eq "POST" ?
    ($n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'})):
    ($args = $ENV{'QUERY_STRING'});

    @terms = split('&', $args);

    foreach (@terms) {
        ($tag, $value) = split(/=/, $_, 2);
        $value =~ s/\+/ /g;
        $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/ge;
        $tags{$tag} = $value;       # tags is global
    }
}

sub yomi_chikan{
    my $value = $_[0];
    $value =~ s/ji/zi/g;
    $value =~ s/shi/si/g;
    $value =~ s/chi/ti/g;
    $value =~ s/tsu/tu/g;
    $value =~ s/fu/hu/g;
    $value =~ s/sha/sya/g;
    $value =~ s/shu/syu/g;
    $value =~ s/sho/syo/g;
    $value =~ s/ja/zya/g;
    $value =~ s/ju/zyu/g;
    $value =~ s/jo/zyo/g;
    $value =~ s/cha/tya/g;
    $value =~ s/chu/tyu/g;
    $value =~ s/cho/tyo/g;
    $value =~ s/she/sye/g;
    $value =~ s/che/tye/g;
    $value =~ s/nn/n/g;
    $value =~ s/syake/sake/g;
    $value =~ s/wakasagi/haya/g;
    return $value;
}
sub print_result{

    my $index = 0;
    my $seikai=0;
    my $toi=0;
    my $answer_ind="";
    open(LIST,"$tags{filename}");
    print "お疲れ様でした!!結果は以下の通りです。<br><br><br>";
    print "<table border=\"0\" bordercolor=\"white\" cellspacing=\"0\">\n";
    print "<tr><td></td><td></td><td>正解</td><td>あなたの答え</td><td></td>";
    print "<td></td><td></td><td>正解</td><td>あなたの答え</td><td></td>";
    print "<td></td><td></td><td>正解</td><td>あなたの答え</td><td></td></tr>";
    while(<LIST>){
        chomp($_);
        if ($_=~/(sakana[0-9]{3}\.gif),(\S+),([a-z]+)/){
            $answer_ind = "answer" . $index;
            $toi = $index+1;
            if($index % 3 == 0) {print "<tr>";}
            print "<td>問($toi)</td>";
            print "<td><IMG SRC=\"./sakana_data/$1\"></td>";
            print "<td width=\"110px\">$2</td>";
            print "<td>$tags{$answer_ind}</td>";
            $tags{$answer_ind}=&yomi_chikan("$tags{$answer_ind}");
            print "<td width=\"80px\">";
            if($tags{$answer_ind} eq $3){
                print "<font color=\"blue\"><b>○</b></font>";
                $seikai++;
            }else{
                print "<font color=\"red\"><b>×</b></font>";
            }
            print "</td>";
            if($index % 3 == 2) {print "</tr>";}
            $index++;
        }
    }
    close(LIST);
    print "</table>";
    print "<div align=\"right\">";
    print "$toi問中$seikai問正解。<br>";
    $seikai = $seikai*2;
    print "<font size=\"20\"><font color = \"red\">$seikai</font> / 100 点</font><br>";
    print "<a href=\"http://hinata.la.coocan.jp/tool/sakana.cgi\">→もう1回やる</div></a>";
}

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">";
print "<TITLE>魚へん読みテスト 採点結果</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
if ($ENV{'REQUEST_METHOD'} eq "POST") {
    &decode();
    &print_result();
    $time = localtime(time);
}else{
    print "情報の取得に失敗しました。<br>";
    print "恐れ入りますがもう一度解答を記入してください。<br>";
    print " →再度実施される時は<a herf=\"http://hinata.la.coocan.jp/tool/sakana.cgi\">こちら</a>をクリックしてください。<br>";

}

print "このテストは元ネタに<a href=\"http://www.hana300.com\" target=\"blank\">季節の花 300</a>様のページを使用させて頂いています。<br>";
print "画像も拝借させていただきました。管理者様の許可も頂いています。<br>\n";
print "誠にありがとうございます!!<br>\n";

print "<br>\n";
print "<font size=\"1\">動作に不具合等ありましたら<a href=\"http://hinata.la.coocan.jp/pukiwiki/?%B5%FB%A4%D8%A4%F3%B4%C1%BB%FA%A5%C6%A5%B9%A5%C8%2F%A5%D0%A5%B0%B4%C9%CD%FD%CA%ED\" target=\"blank\">ご連絡ください</a>。";
print "早急に対応したいと思います。(2008年11月30日<a href=\"http://hinata.la.coocan.jp/pukiwiki/?FrontPage\" target=\"blank\">日向充</a>)</font>";
print "<br><br>\n";
print "<script type=\"text/javascript\"><!--\n";
print "amazon_ad_tag = \"hinatamitsuru-22\"; amazon_ad_width = \"728\";  amazon_ad_height = \"90\";//--></script>\n";
print "<script type=\"text/javascript\" src=\"http://www.assoc-amazon.jp/s/ads.js\"></script>\n";
print "<iframe src=\"http://rcm-jp.amazon.co.jp/e/cm?t=hinatamitsuru-22&o=9&p=20&l=qs1&f=ifr\"\n";
print "width=\"120\" height=\"90\" frameborder=\"0\" scrolling=\"no\"></iframe>";
print "</BODY>\n";
print "</HTML>\n";

データ

これはネタバレなので、これから試験する人は見ないほうがいいかも。

あとは各漢字の画像。

もとネタに使用させていただいたサイト

季節の花 300

改版履歴

081130(初版)

・入力画面

・出力画面

・データ

081202

Bug#1,2,3対処。
■Bug#3 はやとわかさぎ両方正解にしないと。
■Bug#2 しゃけも正解にしてほしい。
■Bug#1 nnが不正解となる。
・入力画面
変更なし
・出力画面

・データ

081203

Bug#4対処。
■Bug#4 問題をやり直すとき並び替えてほしい。
・入力画面

・出力画面

・データ

バグ管理簿


  • vkrnmojEQHjIhVkxhbP -- exqojac? 2012-07-28 (土) 02:14:54



添付ファイル: filesakana_saiten_081203.cgi.txt 181件 [詳細] filesakana_081203.cgi.txt 200件 [詳細] filedata_081203.txt 103件 [詳細] filesakana_saiten_081202.cgi.txt 193件 [詳細] filedata_081202.txt 109件 [詳細] filedata_081130.txt 116件 [詳細] filesakana_saiten_081130.cgi.txt 191件 [詳細] filesakana_081130.cgi.txt 211件 [詳細] filedata.txt 115件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-07-28 (土) 02:14:53 (2636d)