✨ Commence le jour 9
This commit is contained in:
		
							
								
								
									
										90
									
								
								day_9/part_1.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								day_9/part_1.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| <?php | ||||
|  | ||||
| $instructions = explode("\n", file_get_contents('./input.txt')); | ||||
|  | ||||
| $h = [0,0]; | ||||
| $t = [0,0]; | ||||
| $places = ["0-0"]; | ||||
|  | ||||
| $grid = [ | ||||
|     ['#'], | ||||
| ]; | ||||
|  | ||||
| foreach ($instructions as $instruction) { | ||||
|     [$direction, $length] = explode(' ', $instruction); | ||||
|     for ($i = 0; $i < $length; $i++) { | ||||
|         $newH = $h; | ||||
|  | ||||
|         switch ($direction) { | ||||
|             case 'U': | ||||
|                 $newH[0]++; | ||||
|                 break; | ||||
|             case 'R': | ||||
|                 $newH[1]++; | ||||
|                 break; | ||||
|             case 'D': | ||||
|                 $newH[0]--; | ||||
|                 break; | ||||
|             case 'L': | ||||
|                 $newH[1]--; | ||||
|                 break; | ||||
|         } | ||||
|  | ||||
|         if (areTooFarAway($newH, $t)) { | ||||
|             $t = $h; | ||||
|             $places[] = implode('-', $h); | ||||
|             $grid[$h[0]][$h[1]] = '#'; | ||||
|         } | ||||
|  | ||||
|         $h = $newH; | ||||
|     } | ||||
| } | ||||
|  | ||||
| displayGrid($grid); | ||||
|  | ||||
| echo count(array_unique($places)); | ||||
|  | ||||
| /** | ||||
|  * @param int[] $x | ||||
|  * @param int[] $y | ||||
|  * | ||||
|  * @return bool | ||||
|  */ | ||||
| function areTooFarAway($x, $y): bool | ||||
| { | ||||
|     for ($i = $x[0] - 1, $l = $x[0] + 1; $i <= $l; $i++) { | ||||
|         for ($j = $x[1] - 1, $m = $x[1] + 1; $j <= $m; $j++) { | ||||
|             if ($y[0] === $i && $y[1] === $j) { | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * @param array $grid | ||||
|  * | ||||
|  * @return void | ||||
|  */ | ||||
| function displayGrid($grid): void | ||||
| { | ||||
|     $maxRow = 0; | ||||
|     foreach ($grid as $item) { | ||||
|         $maxRow = max($maxRow, count($item)); | ||||
|     } | ||||
|  | ||||
|     $grid = array_reverse($grid); | ||||
|  | ||||
|     foreach ($grid as $iValue) { | ||||
|         for ($j = 0; $j <= $maxRow; $j++) { | ||||
|             if (isset($iValue[$j])) { | ||||
|                 echo $iValue[$j]; | ||||
|             } else { | ||||
|                 echo '.'; | ||||
|             } | ||||
|         } | ||||
|         echo "\n"; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user