', $input[$i]); $charmaps[$key] = $value[0]; } function get_generation($generation, $initial_state, $charmaps, $search_diff = false) { $padding = $generation*2; $padding_string = implode('',array_fill(0,$padding,'.')); $search_string = $padding_string . $initial_state . $padding_string; $generations = $generation; $last_sum = 0; $diff = 0; $trend = array(); for($i=0;$i<$generations;$i++) { $new_generation = substr($search_string,0,2); for($j=2;$j 8 $check_diff = array_search(8, $vals); if($check_diff && $check_diff == $diff) { return array('sum' => $sum, 'diff' => $check_diff, 'gen' => $i+1); } } } return array('sum'=>$sum, 'diff'=>$diff, 'gen'=>$i); } printf('Part 1: %d', get_generation(20, $initial_state, $charmaps)['sum']); echo PHP_EOL; $gen_search = 500; $result = get_generation($gen_search, $initial_state, $charmaps, true); $sum = $result['sum'] + $result['diff'] * (50000000000 - $result['gen']); printf('Part 2: %d', $sum); echo PHP_EOL;