Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $input = file_get_contents("4.txt");
- $passports = explode("\n\n", $input);
- $valid = 0;
- $sections = [
- 'byr' => function($data){ return strlen($data) == 4 && $data >= 1920 && $data <= 2002; },
- 'iyr' => function($data){ return strlen($data) == 4 && $data >= 2010 && $data <= 2020; },
- 'eyr' => function($data){ return strlen($data) == 4 && $data >= 2020 && $data <= 2030; },
- 'hgt' => function($data){ $unit = substr($data,strlen($data)-2,2); return ($unit == "in" && intval($data) >= 59 && intval($data) <= 76) || ($unit == "cm" && intval($data) >= 150 && intval($data) <= 193); },
- 'hcl' => function($data){ return preg_match("/^#[0-9a-f]{6}$/", $data); },
- 'ecl' => function($data){ return in_array($data, ['amb','blu','brn','gry','grn','hzl','oth']); },
- 'pid' => function($data){ return preg_match("/^[0-9]{9}$/", $data); },
- ];
- foreach ($passports as $passport) {
- // sneaky dirty PHP way of doing it - convert "byr:1980 hgt:160cm" to "byr=1980&hgt=160cm, then parse it into an array
- $line = str_replace([" ", "\n",":"], ["&","&","="], $passport);
- parse_str($line, $attrs);
- // normal way of doing it
- //$line = str_replace("\n", " ", $passport);
- //$attrs = explode(" ", $line);
- $valid++;
- foreach ($sections as $section => $validatefunc) {
- if ($attrs[$section] == null || !$validatefunc($attrs[$section])) {
- $valid--;
- break;
- }
- }
- }
- echo $valid;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement