Browse Source

🎉 Hello world

master
Clement Desmidt 2 years ago
commit
4cefe61056
  1. 2
      .gitignore
  2. 9
      day_1/part_1.php
  3. 19
      day_1/part_2.php
  4. 26
      day_2/part_1.php
  5. 46
      day_2/part_2.php
  6. 59
      day_4/part_1.php
  7. 63
      day_4/part_2.php

2
.gitignore

@ -0,0 +1,2 @@
input.txt
/.idea

9
day_1/part_1.php

@ -0,0 +1,9 @@
<?php
$masses = explode(',', file_get_contents('input.txt'));
echo array_sum(
array_map(function($mass) {
return floor($mass / 3) - 2;
}, $masses)
);

19
day_1/part_2.php

@ -0,0 +1,19 @@
<?php
$masses = explode(',', file_get_contents('input.txt'));
function get_fuel_from_mass($mass)
{
return floor($mass / 3) - 2;
}
echo array_sum(
array_map(function($mass) {
$total_fuel = 0;
while($mass > 0) {
$mass = max(get_fuel_from_mass($mass), 0);
$total_fuel += $mass;
}
return $total_fuel;
}, $masses)
);

26
day_2/part_1.php

@ -0,0 +1,26 @@
<?php
$input = explode(',', file_get_contents('input.txt'));
// don't forget : 12 @ position 1 && 2 @ position 2
$i = 0;
while($input[$i] !== 99) {
[$operation, $first, $second, $position] = array_slice($input, $i, 4);
switch ($operation) {
case 1:
$input[$position] = $input[$first] + $input[$second];
break;
case 2:
$input[$position] = $input[$first] * $input[$second];
break;
case 99:
echo $input[0];
exit;
default:
echo 'unknown operation : '.$operation;
exit;
}
$i += 4;
}
echo $input[0];

46
day_2/part_2.php

@ -0,0 +1,46 @@
<?php
$input = explode(',', file_get_contents('input.txt'));
function run_opcode(array $input)
{
$i = 0;
while ($input[$i] !== 99) {
[$operation, $first, $second, $position] = array_slice($input, $i, 4);
switch ($operation) {
case 1:
$input[$position] = $input[$first] + $input[$second];
break;
case 2:
$input[$position] = $input[$first] * $input[$second];
break;
case 99:
return $input[0];
default:
echo 'unknown operation : '.$operation;
exit;
}
$i += 4;
}
return $input[0];
}
$noun = 0;
$verb = 0;
while ($verb !== 99) {
$noun = 0;
while ($noun !== 99) {
$clone_input = $input;
$clone_input[1] = $noun;
$clone_input[2] = $verb;
$magic_number = run_opcode($clone_input);
if ($magic_number === 19690720) {
echo sprintf('noun : %s | verb : %s', $noun, $verb);
}
$noun++;
}
$verb++;
}
echo sprintf("\n".'answer : %u', ((100*$noun)+$verb));

59
day_4/part_1.php

@ -0,0 +1,59 @@
<?php
[$min, $max] = explode('-', file_get_contents('input.txt'));
/**
* @param int|string $big_number
*
* @return bool
*/
function has_at_least_two_adjacent_number($big_number)
{
$big_number = (string) $big_number;
$current_number = null;
for ($i = 0, $l = strlen($big_number); $i < $l; $i++) {
if ($current_number === $big_number[$i]) {
return true;
}
$current_number = $big_number[$i];
}
return false;
}
/**
* @param int|string $big_number
* @return bool
*/
function never_decrease($big_number)
{
$big_number = (string) $big_number;
$current_number = null;
for ($i = 0, $l = strlen($big_number); $i < $l; $i++) {
if ($current_number > $big_number[$i]) {
return false;
}
$current_number = $big_number[$i];
}
return true;
}
/**
* @param int|string $number
*
* @return bool
*/
function is_valid($number)
{
return has_at_least_two_adjacent_number($number) && never_decrease($number);
}
$valids = [];
for ($i = $min; $i <= $max; $i++) {
if (is_valid($i)) {
$valids[] = $i;
}
}
echo count($valids);

63
day_4/part_2.php

@ -0,0 +1,63 @@
<?php
[$min, $max] = explode('-', file_get_contents('input.txt'));
/**
* @param int|string $big_number
*
* @return bool
*/
function has_no_more_than_two_adjacent_number($big_number)
{
$big_number = (string) $big_number;
$current_numbers = [];
for ($i = 0, $l = strlen($big_number); $i < $l; $i++) {
if (!in_array($big_number[$i], $current_numbers, true)) {
if (count($current_numbers) === 2) {
return true;
}
$current_numbers = [$big_number[$i]];
} else {
$current_numbers[] = $big_number[$i];
}
}
return count($current_numbers) === 2;
}
/**
* @param int|string $big_number
* @return bool
*/
function never_decrease($big_number)
{
$big_number = (string) $big_number;
$current_number = null;
for ($i = 0, $l = strlen($big_number); $i < $l; $i++) {
if ($current_number > $big_number[$i]) {
return false;
}
$current_number = $big_number[$i];
}
return true;
}
/**
* @param int|string $number
*
* @return bool
*/
function is_valid($number)
{
return has_no_more_than_two_adjacent_number($number) && never_decrease($number);
}
$valids = [];
for ($i = $min; $i <= $max; $i++) {
if (is_valid($i)) {
$valids[] = $i;
}
}
echo count($valids); // more than 574 & less than 1099
Loading…
Cancel
Save