function extra_l33t_entropy($match) { if (!isset($match['l33t'])) { return 0; } $possibilities = 0; $sub = $match['sub']; foreach ($sub as $subbed => $unsubbed) { $S = 0; $U = 0; foreach (str_split($match['token']) as $chr) { if ($chr === (string) $subbed) { $S += 1; } elseif ($chr === $unsubbed) { $U += 1; } } $len = min($U, $S); for ($i = 0; $i <= $len; $i++) { $possibilities += binomial_coefficient($U + $S, $i); } } # corner: return 1 bit for single-letter subs, # like 4pple -> apple, instead of 0. $entropy = logarithm($possibilities); return $entropy ? $entropy : 1; }
<?php $logs = array(2 => 103, 3 => 163, 5 => 239, 7 => 289, 11 => 356, 13 => 381, 17 => 421, 19 => 437.5); for ($number = 1; $number <= 256; $number++) { echo $number; echo ' '; //var_dump(factorise($number)); echo logarithm(factorise($number)); echo '<br>'; } function factorise($number) { $factors = array(); $root = floor(sqrt($number)); for ($divisor = 1; $divisor <= $root; $divisor += 2) { $factor = $divisor == 1 ? 2 : $divisor; if ($number % $factor == 0) { $number = $number / $factor; $factors[] = $factor; $divisor = -1; } } if ($number > 1) { $factors[] = $number; } return $factors; } function logarithm($factors) { global $logs; $sum = 0;