Archive

Posts Tagged ‘source’

Teka teki solver

January 5th, 2009

Ini dulu gue bikin waktu lagi isenk di kantor, adu cepet2an pecahin teka teki silang, akhirnya karena kalah melulu gue kesel, terus bikin programnya buat pecahin teka teki silang otomatis. Emang engga guna :P tapi sapa tau suatu saat berguna.

<html>
<head><title>Crozz Puzzle - Problem Solver</title></head>
<body onLoad="frmSolver.txtFind.focus();frmSolver.txtFind.select()">
  <form name="frmSolver" method="GET" action="crossSolverFixedMulti.php">
    Soal : <br>
    <textarea name="txtSoal" cols="30" rows="12"><?echo $txtSoal?></textarea><br>
    Kata yang dicari :<br>
    <input type="text" name="txtFind" value="<?echo $txtFind?>">
    <input type="submit" value="Cari">
  </form>
 
<br>
Hasil : <br>
<table cellpadding="10"><tr>
<?
  // Pecahin soalnya jadi array of char
  $soal = trim($_GET["txtSoal"]);
  $verti = 0; $hori = 0; $totalchar = 0;
  for($a = 0 ; $a < strlen($soal) ; $a++) {
    if (ord($soal[$a]) != 13 && ord($soal[$a]) != 10) {
      $chara[] = $soal[$a];
      $warna[] = 0;
      $verti++;
      $totalchar++;
    }
    else {
      $a++;
      $verti = 0;
      $hori++;
    }
  }
  $hori++;
 
  $find = $_GET["txtFind"];
  $maxLevel = strlen($find);
 
  // Proses $warna
  function process($x, $y, $level, $arah) {
    global $chara, $verti, $hori, $totalchar, $maxLevel, $find, $warna;
    $pos = ($y * $verti) + $x;
    if ($level == $maxLevel) {
      return true; // Ketemu nich berarti
    }
    if ($x < 0 || $x >= $verti) {
      return false; // Melebihi batas X
    }
    if ($y < 0 || $y >= $hori) {
      return false; // Melebihi batas Y
    }
    if ($chara[$pos] != $find[$level]) { // Huruf di posisi ini salah :D
      return false;
    }
 
    $found = 0;
    if ($arah == 1 || $arah == 99) if (process($x + 1 , $y , $level + 1, $arah)) $found++; // Kanan
    if ($arah == 2 || $arah == 99) if (process($x + 1 , $y + 1, $level + 1, $arah)) $found++; // Kanan Bawah
    if ($arah == 3 || $arah == 99) if (process($x + 1 , $y - 1, $level + 1, $arah)) $found++; // Kanan Atas
    if ($arah == 4 || $arah == 99) if (process($x , $y + 1, $level + 1, $arah)) $found++; // Bawah
    if ($arah == 5 || $arah == 99) if (process($x , $y - 1, $level + 1, $arah)) $found++; // Atas
    if ($arah == 6 || $arah == 99) if (process($x - 1 , $y , $level + 1, $arah)) $found++; // Kiri
    if ($arah == 7 || $arah == 99) if (process($x - 1 , $y + 1, $level + 1, $arah)) $found++; // Kiri Bawah
    if ($arah == 8 || $arah == 99) if (process($x - 1 , $y - 1, $level + 1, $arah)) $found++; // Kiri Atas
 
    if ($found > 0) {
      $warna[$pos] = 1;
      return true;
    }
    else {
      return false;
    }
  }
 
  function cetakHasil() {
    global $warna, $chara, $verti, $hori;
    static $counter = 0;
    if ($counter % 5 == 0 && $counter > 0) echo "</tr><tr>";
    echo "<td style='border: 1px solid #FFCCFF;'><gantijadipre>";
    for ($y = 0 ; $y < $hori ; $y++) {
      for ($x = 0 ; $x < $verti ; $x++) {
        $pos = ($y * $verti) + $x;
        if ($warna[$pos] == 1) {
          echo "<font color='red'>" . $chara[$pos] . "</font>";
        }
        else {
          echo "<font color='black'>" . $chara[$pos] . "</font>";
        }
      }
      echo "\n";
    }
    echo "</gantijadipre></td>";
    $counter++;
    flush();
  }
 
  function resetWarna() {
    global $warna, $verti , $hori;
    for ($y = 0 ; $y < $hori ; $y++) {
      for ($x = 0 ; $x < $verti ; $x++) {
        $pos = ($y * $verti) + $x;
        $warna[$pos] = 0;
      }
    }
  }
 
  for ($a = 0 ; $a < $totalchar ; $a++) {
    if (process($a % $verti , floor($a / $verti) , 0 , 1)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 2)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 3)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 4)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 5)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 6)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 7)) {cetakHasil();resetWarna();};
    if (process($a % $verti , floor($a / $verti) , 0 , 8)) {cetakHasil();resetWarna();};
  }
 
?>
</tr></table>
</body>
</html>
Share

programming, web , ,

HTTP Class

January 5th, 2009

Class buat GET dan POST pake PHP, mengsimpelkan pemanggilan ke website laen, bisa buat REST juga

<?
  if (!extension_loaded("curl")) dl("curl.so"); // USed for MWN
 
  function HTTPPost($data , $url , $referer) {
    $ch = curl_init();
    $proxy = getOneProxy();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Set supaya return value nya ke string
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($ch, CURLOPT_POST, 1);
//    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
//    curl_setopt($ch, CURLOPT_PROXY, $proxy);
//    echo "Using proxy $proxy\n";
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $retval = curl_exec($ch);
//    echo $retval;
    curl_close($ch);
  }
 
  function HTTPGet($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Set supaya return value nya ke string
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_REFERER, "");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
    $retval = curl_exec($ch);
    return $retval;
    curl_close($ch);
  }
 
  function doREST($url, $params) {
    if ($params) {
      foreach($params as $key => $param) {
        $_par[] = "$key=" . urlencode($param);
      }
      $_complete = "?";
      $_complete .= implode("&" , $_par);
    }
    return HTTPGet($url . $_complete);
  }
 
 
 
?>
Share

web , , , ,

Database class

January 5th, 2009

Dulu ini gue buat sebelum PHP mempunya Class DB sendiri. Class ini dipake di berbagai project gede juga loh :P huehuehe� tapi sekarang dengan adanya CI, jadi udah engga dipake lagi. Dan juga ada beberapa branch dari script ini sendiri. Teddy (clixie), udah punya branch yang lebih stable dan keren. Yang gue tampilin di sini adalah branchnya gue.

<?
 
/*
   Database Library
   * Ver 1.21 2006/11/20 22:10
     - Pindahin tempat dari $this->debug jadi ke atas
     - ganti connected jadi $this->connected
   * Ver 1.2 02/02/2005 4:19PM
     - Perubahan dari fungsi mysql_db_query ke mysql_query, karena fungsi nya sekarang udah
       deprecated
     - Penambahan paramater pada database constructor
     - Penambahan fungsi fetchIntoArray()
   * Ver 1.1 Lupa
     - Penambahan dumpData() dan dumpSQL()
   * Ver 1.0 14/11/2002 9:15PM
     - Yayy.. fungsi db pertama :D
   Author : Frederick Lasmana
   Email  : rickyok at yahoo dot REMOVE THIS com
*/
 
Class Db {
/*
  Ini adalah constructor dari kelas Db, fungsi ini otomatis akan di jalankan
  Semua setting username dan password untuk ke database diletakkan di sini
*/
  function Db($def_server = "", $def_dbName = "", $def_username = "" , $def_password = "") {
    $__userName = "";   // Isi dengan username database
    $__password = "";   // Isi dengan password database
    $__server = "";    // Isi dengan alamat server database, exp : http://www.dbengine.com/
    $__dbName = ""; // Isi dengan nama database, jika lebih dari satu, buat lah dua buah objek Db
 
    // Di sini buat ganti2 warna yang dipake di fungsi dump
    $this->tableOpen = "<table border='0' cellspacing='1' cellpading='1'>";
    $this->tableClose = "</table>\n";
    $this->trOpen = "<tr>";
    $this->trClose = "</tr>\n";
    $this->tdHeadOpen = "<td bgcolor='#CCCCCC'>";
    $this->tdOpen = "<td bgcolor='#CCFFCC'>";
    $this->tdAlternateOpen = "<td bgcolor='#EEFFEE'>";
    $this->tdClose = "</td>\n";
    $this->showHeader = true;
 
    // Jangan edit code dibawah ini ^^
    $this->userName = ($def_username == "")? $__userName : $def_username;
    $this->password = ($def_password == "")? $__password : $def_password;
    $this->server = ($def_server == "")? $__server : $def_server;
    $this->dbName = ($def_dbName == "")? $__dbName : $def_dbName;
    $this->connected = false;
    $this->debug = true;
    $this->connectDb();
 
  }
/*
  Fungsi ini dipanggil dari constructor, jadi ketika class di buat
  langsung di hubungkan dengan database, fungsi ini sebenernya tidak perlu
  dipanggil
  Contoh pembuatan Class : 
  $db = new Db();
*/
  function connectDb() {
    if ($this->handle = mysql_connect($this->server , $this->userName , $this->password)) {
      $this->connected = true;
      return true;
    }
    else {
    	if ($this->debug) $this->errMsg("Host not found : " . $this->server);
      return false;
    }
  }
/*
  Fungsi untuk menutup koneksi ke database, biasanya di letakkan di bagian
  bawah dari halaman, namun fungsi ini tidak harus dipanggil, karena    	
  php otomatis akan menutup koneksi ketika tidak diperlukan lagi
*/
  function closeDb() {
    mysql_close($this->handle);
    $this->connected = false;
  }
 
/*
  Fungsi ini digunakan untuk memasukan query seperti UPDATE, INSERT, DELETE
  dan semua fungsi-fungsi SQL lain nya.
  Parameter :
    $sql : diisi dengan perintah SQL nya
  Contoh :
    $result = $db->query("SELECT * FROM phonebook");
*/
  function query($sql) {
    mysql_select_db($this->dbName, $this->handle);
    if ($result = mysql_query($sql , $this->handle)) {
    	return $result;
    }
    else {
    	if ($this->debug) $this->errMsg("Cannot execute query $sql on database $this->dbName.");
    	return NULL;
    }
  }
/*
  Fungsi ini digunakan untuk mendapatkan nilai per baris dari query yang
  sudah di lakukan dari fungsi di atas. Fungsi ini akan mengembalikan
  result set jika berhasil dan tidak mengembalikkan pesan ERR jika $result = NULL
  Parameter :
    $result : di isi dengan handler yang di dapat dari query($sql)
  Contoh :
    //Untuk mengambil semua data
    while ($row = $db->fetch($result)) {
    	//lakukan sesuatu di sini
    };
    //Untuk mengambil data pertama
    $row = $db->fetch($result);
*/
  function fetch($result) {
  	if ($result != NULL) {
      return mysql_fetch_array($result);
    }
    else {
    	if ($this->debug) $this->errMsg("You've try to fetch an empty result");
    	return NULL;
    }
  }
 
  // Dump all the data with / without header, use result from query as a input
  function dumpData($result) {
  	if ($result == NULL) {
  		if ($this->debug) $this->errMsg("Cannot dump data, data doesn't exist");
  		return false;
  	}
  	// Display header
	  echo $this->tableOpen; // <table>
  	if ($this->showHeader) {
  	  $fieldLen = mysql_num_fields($result);
  	  echo $this->trOpen;    // <tr>
  	  for ($a = 0 ; $a < $fieldLen ; $a++) {
  	  	echo $this->tdHeadOpen . mysql_field_name($result, $a) . $this->tdClose;
  	  }
  	  echo $this->trClose;
  	}
  	// Display data with 2 color, you can modify the code to make 3 color
  	$rowcount = 0;
  	while($row = mysql_fetch_row($result)) {
  		echo $this->trOpen;
  		foreach($row as $value) {
  			if ($rowcount%2) 
  			  echo $this->tdOpen . $value . $this->tdClose;
  			else
  			  echo $this->tdAlternateOpen . $value . $this->tdClose;
  		}
  		echo $this->trClose;
  		$rowcount++;
  		flush();
  	}
  	echo $this->tableClose;
  }
 
/*
  Fungsi ini digunakan untuk mengambil 1 cell paling kiri atas dari hasil
  query
*/
  function getCell($sql) {
    $result = $this->query($sql);
    if ($this->recordCount($result) > 0)
      return mysql_result($result , 0 , 0);
    else
      return NULL;
  }
 
/*
  Fungsi ini digunakan untuk mengambil semua data dalam bentuk array
  Contoh penggunaan :
 
  $datas = $db->fetchIntoArray($result);
  foreach($datas as $data) {
    echo "Datanya adalah {$data['key']}";
  }
*/  
  function fetchIntoArray($result) {
  	if ($result != NULL) {
      $counter = 0;
      while ($row = mysql_fetch_assoc($result)) {
        if ($row) {
          foreach($row as $key => $data) {
            $temp[$counter][$key] = $data;
          }
        }
        $counter++;
      }
      return $temp;
    }
    else {
    	if ($this->debug) $this->errMsg("You've try to fetch an empty result");
    	return NULL;
    }
  }
 
  function dumpCSV($result) {
  	if ($result == NULL) {
  		if ($this->debug) $this->errMsg("Cannot dump data, data doesn't exist");
  		return false;
  	}
  	// Display header
  	if ($this->showHeader) {
  	  $head = array();
  	  $fieldLen = mysql_num_fields($result);
  	  for ($a = 0 ; $a < $fieldLen ; $a++) {
  	  	$head[] = "\"" . mysql_field_name($result, $a) . "\"";
  	  }
  	  echo implode("," , $head);
  	  echo "\n";
  	}
  	while($row = mysql_fetch_row($result)) {
  	  $col = array();
  		foreach($row as $value) {
  			$value = str_replace('"', '""' , $value);
  			$col[] = "\"" . $value . "\"";
  		}
  	  echo implode("," , $col);
  	  echo "\n";
  	  unset($col);
  		flush();
  	}
  }
 
  // Same function as dumpData, this one use SQL statement as an input
  function dumpSQL($sql) {
  	$this->dumpData($this->query($sql));
  }
/*
  Fungsi-fungsi di bawah ini ditujukan untuk membantu mengisi parameter-parameter
  yang diperlukan untuk masuk ke dalam database. Fungsi ini mungkin tidak
  diperlukan karena semua paramter ini sudah di tentukan ketika Db di buat
*/
  function setServer($server) {
    $this->server = $server;
  }
  function setUserName($uname) {
    $this->userName = $uname;
  }
  function setPassword($pass) {
    $this->password = $pass;
  }
  function setDbName($dbName) {
    $this->dbName = $dbName;
  }
  function isConnected() {
    return $this->connected;
  }
  function debugMode() {
  	$this->debug = true;
  }
  function errMsg($msg) {
  	echo "<script>alert(\"$msg\");</script>";
  }
  // Alias for mysql_num_rows()
  function recordCount($result) {
  	return mysql_num_rows($result);
  }
  // Alias for mysql_affected_rows()
  function rowAffect() {
  	return mysql_affected_rows();
  }
}
 
/*
$db = new Db();
// Contoh query sederhana
$result = $db->query("select * from phonebook");
while($row = $db->fetch($result)) {
  echo $row[1] . "<br>";
}
//*/
 
/*
// Contoh Menggunakan fetchIntoArray
$db = new Db();
$result = $db->query("select * from phonebook");
$datas = $db->fetchIntoArray($result);
foreach($datas as $data) {
  echo $data['name'] . "<br>";
}
//*/
 
 
/*
// Contoh dumpData()
$db = new Db();
$result = $db->query("select p.name 'N a m a', p.phone 'te lp' from phonebook p");
$db->dumpData($result);
$db->dbName = "clixie";
$result = $db->query("select * from rag_item");
$db->dumpData($result);
//*/
 
 
?>
Share

web , ,

Switch to our mobile site