カテゴリー
PHP プログラミング

お巡りさんの必要人数を求める

子供が小学6年生で、算数で数列を学んでいます。課題で次のような問題が出されました。

ある地域内で、複数の道路が互いに一箇所だけ交差するとして、各交差点に交通整理の警察官を配置した場合の必要人数を求めよ

図に示すと次のようなものです。

A_road 道路が1本、交差点なし
2_roads 道路が2本、交差点ひとつ
3_roads 道路が3本、交差点3つ
4_roads 道路が4本、交差点6つ
5_roads 道路が5本、交差点10個

つまり道路の本数を n、お巡りさんの必要人数を Kn と置いたとき、次の漸化式で表現することができます。

K_n=K_{n-1}+n-1 (ただしn > 0, K_0=0)

この手の問題はプログラムを作ることで、道路が数え切れないほどたくさんあっても一瞬に答えを出せることを教えようと、子供に PHPで作ってみな、といってみたものの少々難しかったようです。
アルゴリズムの部分だけ示すと下記のようなコードとなります。

$n = $_GET['numroads'];
printf("<p>Number of roads = </p>", $n);
$Kn = 0;
for ($i = 0; $i < $n; $i++)
{
	$Kn += $i;
}
printf("<p>Number of policemen = %d</p>", $Kn);

numroads にはフォームからユーザに入力してもらった道路の本数が格納されています。

実際に作ってみたフォームがこちらです。お粗末さまでした。

カテゴリー
Raspberry PI Model B+

Nginx で CGI を使えるようにする

  1. 必要なパッケージのインストール
  2. sudo apt-get install fcgiwrap spawn-fcgi
    
  3. 設定ファイル /etc/nginx/sites-available/default を編集
  4. pi@raspberrypi /etc/nginx/sites-available $ diff -u default.org default
    --- default.org 2015-01-11 14:28:27.657198270 +0900
    +++ default     2015-01-11 14:27:20.828190564 +0900
    @@ -77,6 +77,17 @@
            #location ~ /\.ht {
            #       deny all;
            #}
    +       # Userdir - cgi
    +       location ~ ^/~([^/]+)/(.+\.cgi)$ {
    +                if (!-f /home/$1/public_html/$2) {
    +                        rewrite ^ 404;
    +               }
    +               alias /home/$1/public_html/$2;
    +               fastcgi_pass unix:/var/run/fcgiwrap.socket;
    +               fastcgi_index index.cgi;
    +               fastcgi_param SCRIPT_FILENAME $request_filename;
    +               include fastcgi_params;
    +       }
            # Userdir - php
            location ~ ^/~([^/]+)/(.+\.php)$ {
                     if (!-f /home/$1/public_html/$2) {
    
  5. デーモンを再起動
  6. sudo /etc/init.d/fcgiwrap restart
    sudo /etc/init.d/nginx restart
    
  7. 動作確認用CGIスクリプトの準備
  8. cat > ~/public_html/does_work.cgi <<HERE
    #!/bin/bash
    
    cat << EOF
    Content-type: text/html
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <HTML>
    <HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=iutf-8">
    <TITLE>Building a report</TITLE>
    </HEAD>
    <BODY>
    CGI works!
    </BODY>
    </HTML>
    EOF
    HERE
    
  9. パーミッションの変更
  10. chmod a+x ~/public_html/does_work.cgi
    
  11. ブラウザからURLを与えて動作確認
  12. http://IPADDRESS/~pi/does_work.cgi
    
  13. うまくいけばブラウザ上に次のような結果を得る
  14. cgi_works

カテゴリー
Raspberry PI Model B+

gvimrc の設定

ラズパイで GVim を使うときに役に立つパラメータのまとめ

set guifont=東風ゴシック\ 16