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.