Day 2 solution.
This commit is contained in:
parent
5e5c726ebb
commit
f39448a54e
@ -8,15 +8,12 @@
|
|||||||
* Runtime: ~0.158ms
|
* Runtime: ~0.158ms
|
||||||
*/
|
*/
|
||||||
function day1solution1() {
|
function day1solution1() {
|
||||||
$start_time = microtime(true);
|
|
||||||
$instructions = file_get_contents('./2015/inputs/day1.txt');
|
$instructions = file_get_contents('./2015/inputs/day1.txt');
|
||||||
$up_floors = substr_count($instructions, "(");
|
$up_floors = substr_count($instructions, "(");
|
||||||
$down_floors = substr_count($instructions, ")");
|
$down_floors = substr_count($instructions, ")");
|
||||||
$total = $up_floors - $down_floors;
|
$total = $up_floors - $down_floors;
|
||||||
echo "The answer is $total\n";
|
|
||||||
$end_time = microtime(true);
|
return $total;
|
||||||
$execution_time = ($end_time - $start_time);
|
|
||||||
echo $execution_time * 1000 . "\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -25,7 +22,6 @@ function day1solution1() {
|
|||||||
* Runtime: ~.33ms
|
* Runtime: ~.33ms
|
||||||
*/
|
*/
|
||||||
function day1solution1b() {
|
function day1solution1b() {
|
||||||
$start_time = microtime(true);
|
|
||||||
$instructions = file_get_contents('./2015/inputs/day1.txt');
|
$instructions = file_get_contents('./2015/inputs/day1.txt');
|
||||||
$chars = str_split($instructions);
|
$chars = str_split($instructions);
|
||||||
$position = 1;
|
$position = 1;
|
||||||
@ -42,8 +38,6 @@ function day1solution1b() {
|
|||||||
$position++;
|
$position++;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
echo "The position is $position\n";
|
|
||||||
$end_time = microtime(true);
|
return $position;
|
||||||
$execution_time = ($end_time - $start_time);
|
|
||||||
echo $execution_time * 1000 . "\n";
|
|
||||||
}
|
}
|
||||||
|
|||||||
98
2015/days/day2.php
Normal file
98
2015/days/day2.php
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class Box {
|
||||||
|
|
||||||
|
protected $length;
|
||||||
|
protected $width;
|
||||||
|
protected $height;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $property
|
||||||
|
*/
|
||||||
|
public function get($property): int|string {
|
||||||
|
return $this->{$property};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $property
|
||||||
|
* @param mixed $value
|
||||||
|
*/
|
||||||
|
public function set($property, $value): void {
|
||||||
|
$this->{$property} = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the required sq footage of paper needed.
|
||||||
|
*/
|
||||||
|
public function calculateRequiredFootage(): int {
|
||||||
|
$side_1 = $this->length * $this->width;
|
||||||
|
$side_2 = $this->width * $this->height;
|
||||||
|
$side_3 = $this->height * $this->length;
|
||||||
|
$extra = min($side_1, $side_2, $side_3);
|
||||||
|
$area =
|
||||||
|
(2 * $side_1) +
|
||||||
|
(2 * $side_2) +
|
||||||
|
(2 * $side_3);
|
||||||
|
|
||||||
|
return $area + $extra;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function calculateShortestPerimeter() {
|
||||||
|
$perimeter_1 = 2 * $this->length + 2 * $this->width;
|
||||||
|
$perimeter_2 = 2 * $this->width + 2 * $this->height;
|
||||||
|
$perimeter_3 = 2 * $this->height + 2 * $this->length;
|
||||||
|
|
||||||
|
return min($perimeter_1, $perimeter_2, $perimeter_3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extracts the dimensions from a string.
|
||||||
|
*/
|
||||||
|
public function extractDimensions(string $dimensions): void {
|
||||||
|
$dimensions_exploded = explode("x", $dimensions);
|
||||||
|
$this->length = $dimensions_exploded[0];
|
||||||
|
$this->width = $dimensions_exploded[1];
|
||||||
|
$this->height = $dimensions_exploded[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function calculateRibbonRequirements() {
|
||||||
|
$bow = $this->length * $this->width * $this->height;
|
||||||
|
$shortest_perimeter = $this->calculateShortestPerimeter();
|
||||||
|
|
||||||
|
return $bow + $shortest_perimeter;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function day2part1() {
|
||||||
|
$box_dimension_list = file_get_contents('./2015/inputs/day2.txt');
|
||||||
|
$box_dimension_list = explode(PHP_EOL, $box_dimension_list);
|
||||||
|
$wrapping_paper_total = 0;
|
||||||
|
foreach ($box_dimension_list as $box_dimensions) {
|
||||||
|
if (strlen($box_dimensions) < 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$box = new Box();
|
||||||
|
$box->extractDimensions($box_dimensions);
|
||||||
|
$wrapping_paper_total = $wrapping_paper_total + $box->calculateRequiredFootage();
|
||||||
|
}
|
||||||
|
return $wrapping_paper_total;
|
||||||
|
}
|
||||||
|
|
||||||
|
function day2part1b() {
|
||||||
|
$box_dimension_list = file_get_contents('./2015/inputs/day2.txt');
|
||||||
|
$box_dimension_list = explode(PHP_EOL, $box_dimension_list);
|
||||||
|
$ribbon_requirements = 0;
|
||||||
|
foreach ($box_dimension_list as $box_dimensions) {
|
||||||
|
if (strlen($box_dimensions) < 1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$box = new Box();
|
||||||
|
$box->extractDimensions($box_dimensions);
|
||||||
|
$ribbon_requirements = $ribbon_requirements + $box->calculateRibbonRequirements();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $ribbon_requirements;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
1000
2015/inputs/day2.txt
Normal file
1000
2015/inputs/day2.txt
Normal file
File diff suppressed because it is too large
Load Diff
@ -5,6 +5,15 @@ foreach ($days as $day) {
|
|||||||
require($day);
|
require($day);
|
||||||
}
|
}
|
||||||
|
|
||||||
$d1 = day1solution1();
|
$solutions = [];
|
||||||
$d1b = day1solution1b();
|
$solutions['day_1']['part_1'] = day1solution1();
|
||||||
|
$solutions['day_1']['part_2'] = day1solution1b();
|
||||||
|
$solutions['day_2']['part_1'] = day2part1();
|
||||||
|
$solutions['day_2']['part_2'] = day2part1b();
|
||||||
|
|
||||||
|
// OUTPUT THE SOLUTIONS WE HAVE.
|
||||||
|
foreach ($solutions as $day => $parts) {
|
||||||
|
foreach ($parts as $part => $answer) {
|
||||||
|
echo "*** The answer to $day $part is: $answer ***\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user