- substr: documentation ( source)
- gc_collect_cycles: documentation ( source)
- str_split: documentation ( source)
<?php
class LookAndSay {
private static function tokenize($input)
{
$currentDigit = substr($input, 0, 1);
$n = 0;
$result = [];
foreach(str_split($input) as $digit) {
if($currentDigit !== $digit) {
$result[] = [$currentDigit, $n];
$n = 0;
$currentDigit = $digit;
}
$n++;
}
$result[] = [$currentDigit, $n];
return $result;
}
public static function transform($input)
{
$tokens = self::tokenize($input);
$result = '';
foreach($tokens as $token) {
list($digit, $n) = $token;
$result .= $n . $digit;
}
return $result;
}
}
$input = '3113322113';
for($i = 0; $i < 40; $i++) {gc_collect_cycles(); $input = LookAndSay::transform($input);} print strlen($input);