Refactor framework to support more years
This commit is contained in:
parent
8f6de7b627
commit
55e4e62d97
@ -9,14 +9,15 @@ use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class ExecuteDay extends Command
|
||||
{
|
||||
protected int $day;
|
||||
|
||||
protected int $year;
|
||||
/**
|
||||
* @var string The title.
|
||||
*/
|
||||
private string $title;
|
||||
|
||||
protected int $day;
|
||||
|
||||
protected int $year;
|
||||
|
||||
/**
|
||||
* Configure the command.
|
||||
*/
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
namespace trizz\AdventOfCode;
|
||||
|
||||
use trizz\AdventOfCode\Utils\SymfonyConsoleMarkdown;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use trizz\AdventOfCode\Utils\SymfonyConsoleMarkdown;
|
||||
|
||||
class Puzzle extends Command
|
||||
{
|
||||
@ -14,7 +14,8 @@ class Puzzle extends Command
|
||||
{
|
||||
$this
|
||||
->setName('puzzle')
|
||||
->addArgument('day', InputArgument::REQUIRED, 'The day number.');
|
||||
->addArgument('day', InputArgument::REQUIRED, 'The day number.')
|
||||
->addArgument('year', InputArgument::OPTIONAL, 'The year', date('y'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -22,7 +23,14 @@ class Puzzle extends Command
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$contents = file_get_contents(sprintf('%s/../data/day%s/puzzle.md', __DIR__, (int) $input->getArgument('day')));
|
||||
$contents = file_get_contents(
|
||||
sprintf(
|
||||
'%s/../data/Y%d/day%s/puzzle.md',
|
||||
__DIR__,
|
||||
$input->getArgument('year'),
|
||||
(int) $input->getArgument('day')
|
||||
)
|
||||
);
|
||||
$rendered = (new SymfonyConsoleMarkdown())->render($contents);
|
||||
|
||||
$output->writeln($rendered);
|
||||
|
@ -3,6 +3,9 @@
|
||||
namespace trizz\AdventOfCode;
|
||||
|
||||
use JetBrains\PhpStorm\ArrayShape;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
abstract class Solution
|
||||
{
|
||||
@ -90,7 +93,7 @@ abstract class Solution
|
||||
return !empty($this->exampleData);
|
||||
}
|
||||
|
||||
#[ArrayShape(['part1' => 'int|string', 'part2' => 'int|string'])]
|
||||
#[ArrayShape(['part1' => "int|string", 'part2' => "int|string"])]
|
||||
public function results(bool $useExampleData = true): array
|
||||
{
|
||||
$data = $useExampleData ? $this->exampleData : $this->data;
|
||||
|
@ -4,4 +4,5 @@ namespace AdventOfCode21\Utils;
|
||||
|
||||
class Arr
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -12,22 +12,6 @@ class Day4 extends Solution
|
||||
public static int|string|null $part2ExampleResult = 1924;
|
||||
public static int|string|null $part2Result = 17435;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function part1(array $data): int|string
|
||||
{
|
||||
return $this->playBingo($data, firstWins: true);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function part2(array $data): int|string
|
||||
{
|
||||
return $this->playBingo($data, firstWins: false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int[] $winningCard
|
||||
* @param int $number
|
||||
@ -46,6 +30,22 @@ class Day4 extends Solution
|
||||
return (int) array_sum($unusedNumbers) * $number;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function part1(array $data): int|string
|
||||
{
|
||||
return $this->playBingo($data, firstWins: true);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function part2(array $data): int|string
|
||||
{
|
||||
return $this->playBingo($data, firstWins: false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $numberList
|
||||
* @param string $separator
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace trizz\AdventOfCode\Y21;
|
||||
|
||||
use trizz\AdventOfCode\Solution;
|
||||
use JetBrains\PhpStorm\Immutable;
|
||||
use trizz\AdventOfCode\Solution;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user