星期四, 11月 25, 2010

Cm取n

這一篇是在 這邊看到的討論
http://twpug.net/modules/newbb/viewtopic.php?viewmode=flat&type=&topic_id=5542&forum=13


Cm取n 


下列是C5取1到C5取5所有排列組合...
第一層{1}{2}{3}{4}{5}
第二層{12}{13}{14}{15}{23}{24}{25}{34}{35}{45}
第三層{123}{124}{125}{134}{135}{145}{234}{235}{245}{345}
第四層{1234}{1235}{1245}{1345}{2345}
第五層{12345}



<?php
class Cmn
{
        
public static function output ($m$n)
        {
                
// $str = range('A', 'E');
                
$str range(1$n);
                for (
$i 1$i <= $n$i++) {
                        eval(
self::createSource($i));
                        echo 
"\r\n";
                }
        }

        
private static function createSource ($n)
        {
                for (
$i 0$i $n$i++) {
                        
$source .= 'for ($var'.$i.' = '.($i == '$var'.($i-1)).($i == '' ' + 1').'; $var'.$i.' < $m; $var'.$i.'++)'."\r\n";
                }

                
$source .= 'self::calc(';
                for (
$j 0$j $n$j++) {
                        
$source .= ($j == '' '.').'$str[$var'.$j.']';
                }
                
$source .= ');';

                return 
$source;
        }
        
private static function calc ($s)
        {
                echo 
'{'.$s.'}';
        }
}
Cmn::output(55);
?>




原理就是動態產生每一層的排列組合程式碼,再使用eval讓程式碼執行。

星期日, 9月 19, 2010

菊花文

菊花文是最近網路流行的ㄧ種新文體,大概就是那些自我感覺良好的人才會使用,因文字後面加上菊花符號,因此而得名。

寫程式也要趕的上一些流行對吧,那麼就來一個 PHP 版的菊花文轉換函式:

class Chrysanthemum{
        
public static function get ($str
)
        {
                
mb_internal_encoding("UTF-8"
);
                
$len mb_strlen($str
);
                
$mb 
= array();
                for (
$i 0$i $len$i
++) {
                        
$mb[] = mb_substr($str$i1
);
                }
                
$mb[] = ""
;
                return 
implode("&#1161;"$mb
);
        }
}
?>


意思就是將字串拆為每個字,然後在中間加上菊花符號(&#1161;)。

echo Chrysanthemum::get("菊花文");

嗯嗯~下面就是結果囉...

菊҉花҉文҉

星期三, 7月 28, 2010

在 Windows 編譯PHP原始碼 (VC++9)

我們需要安裝下面編譯器 和 類別庫 用來編譯PHP,這篇文章則以PHP5.3.1為編譯範例 :

  1. Microsoft Visual Studio C++ 2008 Express Edition x86
  2. Windows SDK 6.1
  3. PHP 編譯用工具
  4. PHP 延伸模組編譯用開發套件(選擇性)
第1,2項,只要下一步的預設安裝即可。(重要:如果是編譯 apache SAPI請用 VC++6 x86 和 Thread Safe 模式)
第3,4項的部分,我們建立一個開發用的目錄夾 c:\php-sdk 並且將 binary-tools.zip 解開到這個目錄匣內,延伸模組用的開發套件也是解壓縮後放到這個目錄夾上來。如果都有抓回並解開的話,那麼c:\php-sdk 底下會有四個目錄匣:

星期三, 1月 20, 2010

求點到直線距離

好幾天沒寫部落格,剛好在某討論區看到C版本的點到線段距離的算法,趕快寫一篇PHP版本『點到直線』和『點到線段』的最短距離。這個方式是透過海倫公式求得面積之後,在透過面積 = 底 x 高 / 2的公式取得高(最短距離)。

問:在直角座標平面上 , P( - 4 , 3 ) 到直線 3x-4y=12 的距離為多少?

那麼,我們先找出在直線上的AB 任意兩點,把A(4,0),B (0,-3)和P( - 4 , 3 ) 連成一個三角形。


星期四, 1月 14, 2010

智慧型手機瀏覽器的電話撥號

目前大多數人用的智慧型手機,都可以透過 HTML 語法直接在瀏覽器撥號。有的瀏覽器會自動辨識字串是否為電話號碼,只要碰觸就可以撥號(如 iPhone 的 Safari 或 Opera),但是若定義 doctype 則可能該功能消失,最保險的方式就是將電話撥號的語法寫在 HTML 上。


星期一, 1月 11, 2010

6個G

原始討論:http://twpug.net/modules/newbb/viewtopic.php?topic_id=4828&forum=16

一個蠻有趣的討論題,這篇可以提供一下學校作業解題的思考方向,可以使用從頭到尾運行一遍,取出答案。或是由數學公式直接取得答案。

題目:6個G


在下列乘法算式中,每個字母代表0~9的一個數字,且不同的字母代表不同的數字:

  ABCDE

X     F

-------

 GGGGGG

求出各字母對應之數字。

星期二, 12月 22, 2009

PHP Extension 的開發環境建立 (Unix-Like方式)

有一陣沒寫 php extension,最近試了一下 PHP 5.3.1 ,發覺它的預設有稍微的不一樣。所以重新記錄一下,建立一個PHP extension 的方式與注意事項。這一篇使用 Linux 下開發當範例,大部分的 unix - like 都為相同方式。

星期四, 12月 17, 2009

取消文字選取狀態

由於作了拖拉物件功能,在廣大的區域移動會造成選取的狀態,整片反白影響了外觀。所以只好在拖拉物件的觸發事件內加了一些取消文字選取狀態的程式碼。

寫了一下範例,開關選取文字狀態的按鈕:



範例文字選擇

星期二, 12月 15, 2009

讓網站的小圖示共用一張圖片

為什麼要讓網站的小圖示共用一張圖片呢?其實在流量小的網站是沒差別的,但是在高流量的網站,一個美觀且功能眾多的網頁,光一個瀏覽頁,就會大量的對 Web Server提出HTTP Request。所以將小圖合併成一個大圖檔,則可以降低Web Server的請求處理。流量大的網站常常使用這種技巧,如 Facebook 就大量使用到這樣的方式。

下面範例是使用一張大圖,透過CSS定義,取得小圖的圖形。

讓圖或顯示區塊變透明

今天記錄這個,讓顯示的元件變透明的語法,IE/Chrome/Firfox都可以用方式。

<style>
.
cryst {

    filter:alpha(opacity=50);
    opacity0.5;
}
</
style>

<
img src=http://img0.gmodules.com/logos/esperanto_09-ig.gif class="cryst">


上面定義的部分 filter:alpha(opacity=50);是給 IE 辨識,而opacity則是給支援CSS 3.0的瀏覽器辨識。