This code is inspired by Matt’s recommendation to “double check” in this video: https://youtu.be/LYKn0yUTIU4?t=4m43s
<?php
$limit = 1000000; // this is the only thing you'll want to change, this is the highest number we'll check against
$eighteen = 0;
$thirteen = 0;
$i = 0;
while ($i < $limit){
$i++;
$currentStop = countLetters($i);
if ($currentStop == 18){
$eighteen++;
} else if ($currentStop == 13){
$thirteen++;
} else {
echo 'ERROR!' . $currentStop;
}
}
echo '18=' . $eighteen .' Which represents ' . 100*($eighteen/$limit) . '% of the total';
echo '<br />';
echo '13=' . $thirteen .' Which represents ' . 100*($thirteen/$limit) . '% of the total';
echo '<br />';
function countLetters($n){
$ints = str_split (decbin ($n));
$charCount = 0;
foreach ($ints as $int){
if ($int == 0){
$charCount = $charCount + 4; // "zero" has 4 letters
} else {
$charCount = $charCount + 3; // "one" has 3 letters
}
}
if ($n == $charCount){
return $charCount;
} else {
return countLetters($charCount);
}
}
?>
Running this code will result in the following message:
18=999904 Which represents 99.9904% of the total
13=96 Which represents 0.0096% of the total
Which confirms that Matt is correct.