Overlay Image

<?php

/**
 * overlay_image
 *
 * Overlay a transparent image on top of another image.
 *
 * @version 0.2
 * @author Contributors at eXorithm
 * @link /algorithm/view/overlay_image Listing at eXorithm
 * @link /algorithm/history/overlay_image History at eXorithm
 * @license /home/show/license
 *
 * @param resource $base (GD image) 
 * @param resource $image (GD image) 
 * @return mixed
 */
function overlay_image($base=null,$image=null)
{
	$h = imagesy($image);
	$w = imagesx($image);
	
	imagealphablending($base, true);
	imagesavealpha($base, true);
	imagecopy($base, $image, 0, 0, 0, 0, $w, $h);
	return $base;
}

?>

PI Digits

<?php

/**
 * pi_digits
 *
 * Calculate the digits of pi.
 *
 * @version 0.4
 * @author Contributors at eXorithm
 * @link /algorithm/view/pi_digits Listing at eXorithm
 * @link /algorithm/history/pi_digits History at eXorithm
 * @license /home/show/license
 *
 * @param number $digits 
 * @return mixed
 */
function pi_digits($digits=500)
{
	$n = floor($digits * 14/4);
	
	$scale = 10000;
	$init = 2000;
	$carry = 0;
	$result = '';
	
	for($i=0;$i<=$n;$i++) {
		$arr[$i] = $init;
	}
	
	for($i=$n;$i>0;$i=$i-14) {  
		$sum = 0;  
		for($j=$i;$j>0;$j--) {  
			$sum = ($sum * $j) + ($scale * $arr[$j]);  
			$arr[$j] = $sum % (($j*2)-1);  
			$sum = floor($sum / (($j*2)-1));  
		}
		$result .= sprintf("%04d", ($carry + ($sum / $scale)));
		$carry = $sum % $scale;  
	}
	
	if ($digits>1) {
		return $result[0].'.'.substr($result,1,$digits-1);
	} else {
		return substr($result,0,$digits);
	}
}

?>

Photobucket

<?php

/**
 * photobucket
 *
 * Gets all the pictures from a Photobucket album.
 *
 * @version 0.2
 * @author Contributors at eXorithm
 * @link /algorithm/view/photobucket Listing at eXorithm
 * @link /algorithm/history/photobucket History at eXorithm
 * @license /home/show/license
 *
 * @param mixed $url Photobucket URL
 * @return mixed
 */
function photobucket($url='http://s283.photobucket.com/albums/kk285/konnarak_1608/romantic/')
{
	$str = file_get_contents($url);
	preg_match_all('/<img[^>]+>/i',$str, $result); 
	
	$strPics = "";
	foreach( $result as $img_tag) {
		foreach( $img_tag as $img) {
			if( !strpos($img, 'class="under off"') ) continue;
			preg_match('/< *img[^>]*src *= *["\']?([^"\']*)/i', $img, $imgURLs);
			$imgURL = str_replace("/th_", "/", $imgURLs[1]);
			$strPics .= $imgURL . "\n";
		}
	}
	return $strPics;
}

?>

Sort Multi Array

<?php

/**
 * sort_multi_array
 *
 * Sort a two-dimensional array by one (or more) of the elements in the nested arrays. Accepts a variable number of arguments.
 *
 * @version 0.1
 * @author Contributors at eXorithm
 * @link /algorithm/view/sort_multi_array Listing at eXorithm
 * @link /algorithm/history/sort_multi_array History at eXorithm
 * @license /home/show/license
 *
 * @param array $array Two dimensional array. Each array in the array should have the same keys.
 * @param mixed $key Key in the sub-arrays to sort by.
 * @return array
 */
function sort_multi_array($array=array(0=>array('surname'=>'Smith','givenname'=>'Henrietta'),1=>array('surname'=>'Smythe','givenname'=>'Stuart'),2=>array('surname'=>'Black','givenname'=>'Conrad'),3=>array('surname'=>'Smith','givenname'=>'Abigail'),4=>array('surname'=>'Eaves','givenname'=>'Ruth'),5=>array('surname'=>'Travis','givenname'=>'Earl')),$key='surname')
{
	$keys = array();
	for ($i=1;$i<func_num_args();$i++) {
		$keys[$i-1] = func_get_arg($i);
	}
	
	// create a custom search function to pass to usort
	$func = function ($a, $b) use ($keys) {
		for ($i=0;$i<count($keys);$i++) {
			if ($a[$keys[$i]] != $b[$keys[$i]]) {
				return ($a[$keys[$i]] < $b[$keys[$i]]) ? -1 : 1;
			}
		}
		return 0;
	};
	
	usort($array, $func);
	
	return $array;
}

?>

Hailstone

<?php

/**
 * hailstone
 *
 * Calculates a hailstone sequence.
http://en.wikipedia.org/wiki/Collatz_conjecture
 *
 * @version 0.3
 * @author Contributors at eXorithm
 * @link /algorithm/view/hailstone Listing at eXorithm
 * @link /algorithm/history/hailstone History at eXorithm
 * @license /home/show/license
 *
 * @param number $number number to start with
 * @return array
 */
function hailstone($number=17)
{
	$result = array();
	
	while ($number > 1) {
		$result[] = $number;
		if ($number & 1)
			$number = 3 * $number + 1;
		else
			$number = $number / 2;
	}
	
	$result[] = $number;
	
	return $result;
}

?>

Check Domain

<?php

/**
 * check_domain
 *
 * Check a domain name against a whitelist and blacklist.
 *
 * @version 0.1
 * @author Contributors at eXorithm
 * @link /algorithm/view/check_domain Listing at eXorithm
 * @link /algorithm/history/check_domain History at eXorithm
 * @license /home/show/license
 *
 * @param mixed $url 
 * @param array $white_list 
 * @param array $black_list 
 * @return bool
 */
function check_domain($url='',$white_list=array(0=>'*.gov',1=>'*.gov.ru'),$black_list=array(0=>'*.nk',1=>'*.ru'))
{
	foreach ($white_list as $re) {
		$re = preg_quote($re);
		$re = str_replace('\*', '.*', $re);
		
		if (preg_match('|^'.$re.'$|', $url)) {
			return true;
		}
	}
	
	foreach ($black_list as $re) {
		$re = preg_quote($re);
		$re = str_replace('\*', '.*', $re);
		
		if (preg_match('|^'.$re.'$|', $url)) {
			return false;
		}
	}
	
	return true;
}

?>

eXorithm – Execute Algorithm: History For Algorithm unity

unity     version 1.2     Returns digit summation of any numerical value given for passkey (up to 14 digits in length)

Version Note Created Diff
1.2 [edit Feb 19, 2013 01:55 pm by eyeseethree
1.1 [revert Feb 19, 2013 11:53 am by eyeseethree
1.0 [revert Feb 19, 2013 11:36 am by eyeseethree

Sum List

<?php

/**
 * sum_list
 *
 * Sum up the numbers in an array.
 *
 * @version 0.1
 * @author Contributors at eXorithm
 * @link /algorithm/view/sum_list Listing at eXorithm
 * @link /algorithm/history/sum_list History at eXorithm
 * @license /home/show/license
 *
 * @param array $numbers 
 * @return number
 */
function sum_list($numbers=array(0=>'2',1=>'4',2=>'12',3=>'1'))
{
	return array_sum($numbers);
}

?>