Compare commits

..

43 Commits

Author SHA1 Message Date
b6a90cf203 Update dependency friendsofphp/php-cs-fixer to v3.71.0
Some checks failed
CI Pipeline / install (pull_request) Failing after 8s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 5s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-03-08 00:00:58 +00:00
6358f4e466 Update dependency friendsofphp/php-cs-fixer to v3.70.2
Some checks failed
CI Pipeline / install (pull_request) Failing after 8s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 6s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-03-04 00:00:53 +00:00
d646d753a6 Update dependency friendsofphp/php-cs-fixer to v3.70.1
Some checks failed
CI Pipeline / install (pull_request) Failing after 8s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 5s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-03-02 00:00:53 +00:00
9dce552df2 Update dependency friendsofphp/php-cs-fixer to v3.70.0
Some checks failed
CI Pipeline / install (pull_request) Failing after 7s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 4s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-02-23 00:00:48 +00:00
aca4a85101 Update dependency friendsofphp/php-cs-fixer to v3.69.1
Some checks failed
CI Pipeline / install (pull_request) Failing after 5s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 4s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-02-19 00:00:42 +00:00
7dd87b8be8 Update dependency friendsofphp/php-cs-fixer to v3.69.0
Some checks failed
CI Pipeline / install (pull_request) Failing after 7s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-02-16 00:00:49 +00:00
2b07571ffd Update dependency friendsofphp/php-cs-fixer to v3.68.5
Some checks failed
CI Pipeline / install (pull_request) Failing after 5s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 2s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-31 00:00:38 +00:00
52a18f5020 Update dependency friendsofphp/php-cs-fixer to v3.68.3
Some checks failed
CI Pipeline / install (pull_request) Failing after 6s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 2s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-28 00:00:39 +00:00
93a6896c5b Update dependency friendsofphp/php-cs-fixer to v3.68.1
Some checks failed
CI Pipeline / install (pull_request) Failing after 7s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 2s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-18 00:00:39 +00:00
0d4b5c407a Update dependency friendsofphp/php-cs-fixer to v3.68.0
Some checks failed
CI Pipeline / install (pull_request) Failing after 54s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 2m13s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-14 00:00:40 +00:00
02705353ef Update dependency friendsofphp/php-cs-fixer to v3.67.1
Some checks failed
CI Pipeline / install (pull_request) Failing after 13s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-13 00:00:41 +00:00
4d8de674b7 Update dependency friendsofphp/php-cs-fixer to v3.67.0
Some checks failed
CI Pipeline / install (pull_request) Failing after 7s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 4s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-09 00:00:46 +00:00
8dc9727141 Update dependency friendsofphp/php-cs-fixer to v3.66.2
Some checks failed
CI Pipeline / install (pull_request) Failing after 5s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 2s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-08 00:00:41 +00:00
964d1ad793 Update dependency friendsofphp/php-cs-fixer to v3.66.1
Some checks failed
CI Pipeline / install (pull_request) Failing after 6s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2025-01-06 00:00:42 +00:00
b8063e48e0 Update dependency friendsofphp/php-cs-fixer to v3.66.0
Some checks failed
CI Pipeline / install (pull_request) Failing after 6s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-30 00:00:41 +00:00
0f250ab844 Update dependency rector/rector to v2.0.4
Some checks failed
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (pull_request) Failing after 3s
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-27 00:00:45 +00:00
1066916742 Update dependency rector/rector to v2.0.3
Some checks failed
CI Pipeline / install (pull_request) Failing after 5s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-13 00:00:39 +00:00
2db41dde7c Update dependency rector/rector to v2.0.0-rc3
Some checks failed
CI Pipeline / install (pull_request) Failing after 5s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 4s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-10 00:00:42 +00:00
e47dc820d5 Update dependency rector/rector to v2.0.0-rc2
Some checks failed
CI Pipeline / install (pull_request) Failing after 4s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 3s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-04 00:00:41 +00:00
9f14ee2dd0 Update actions/checkout action to v4
Some checks failed
CI Pipeline / install (pull_request) Failing after 4s
CI Pipeline / phpstan (pull_request) Has been skipped
CI Pipeline / rector (pull_request) Has been skipped
CI Pipeline / pest (pull_request) Has been skipped
CI Pipeline / style-check (pull_request) Has been skipped
CI Pipeline / install (push) Failing after 4s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-02 00:00:34 +00:00
06c645f064 Use GH Action instead of drone
Some checks failed
CI Pipeline / install (push) Failing after 17s
CI Pipeline / phpstan (push) Has been skipped
CI Pipeline / rector (push) Has been skipped
CI Pipeline / pest (push) Has been skipped
CI Pipeline / style-check (push) Has been skipped
2024-12-01 11:35:01 +01:00
0c9fc4f017 Update php Docker tag to v8.4 2024-12-01 10:32:46 +00:00
a27e188c9e Test '24 2024-12-01 11:30:36 +01:00
6915c35fed Update stuff 2024-12-01 11:30:31 +01:00
d3f2406b23 Add day 1 '24 2024-12-01 11:04:30 +01:00
0a54b66d2d Run composer update 2024-11-25 12:01:25 +01:00
ac24a28e44 Update dependency rector/rector to v1 2024-11-25 12:00:04 +01:00
af707fbd82 Update dependency nunomaduro/collision to v8 2024-11-25 12:00:04 +01:00
9962f51389 Update dependency symfony/console to v7 2024-11-25 12:00:04 +01:00
8c2642d20b Update dependency pestphp/pest to v2.34.8 2024-11-25 12:00:04 +01:00
d2b77ff64f Update dependency robiningelbrecht/phpunit-pretty-print to v1.3.1 2024-11-25 12:00:04 +01:00
0db2f761dc Update dependency jetbrains/phpstorm-attributes to v1.1 2024-11-25 12:00:04 +01:00
ea75c49044 Update dependency friendsofphp/php-cs-fixer to v3.59.3 2024-11-25 12:00:04 +01:00
5c66ae0bed Update symfony packages 2024-11-25 12:00:04 +01:00
4c0bb00de2 Update dependency nette/php-generator to v4.1.5 2024-11-25 12:00:04 +01:00
5f233de4f8 Update dependency laravel/prompts to v0.1.24 2024-11-25 12:00:04 +01:00
184e730e66 Update dependency rector/rector to ^0.19 2024-11-25 12:00:04 +01:00
60c360d54d Update dependency phpstan/phpstan to v1.11.5 2024-11-25 12:00:03 +01:00
83ca17f8c3 Add renovate.json 2024-11-25 12:00:03 +01:00
da9286a477 Add in-progress of day 6 2024-11-25 12:00:03 +01:00
1369b76f42 Add day 5 2024-11-25 12:00:03 +01:00
8566d61d02 Reorder test per part 2024-11-25 12:00:03 +01:00
5702b333c6 Add day 4 2024-11-25 12:00:03 +01:00
38 changed files with 2882 additions and 1427 deletions

View File

@ -1,37 +0,0 @@
kind: pipeline
type: docker
name: default
steps:
- name: install
image: composer
commands:
- composer install
- name: phpstan
image: php:8.3
depends_on:
- install
commands:
- vendor/bin/phpstan analyse
- name: rector
image: php:8.3
depends_on:
- install
commands:
- vendor/bin/rector process --dry-run
- name: pest
image: php:8.3
depends_on:
- install
commands:
- vendor/bin/pest
- name: style check
image: php:8.3
depends_on:
- install
commands:
- vendor/bin/php-cs-fixer fix

69
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,69 @@
name: CI Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
install:
runs-on: ubuntu-latest
container:
image: composer:latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Install Dependencies
run: composer install
phpstan:
runs-on: ubuntu-latest
needs: install
container:
image: php:8.4
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: PHPStan Analysis
run: vendor/bin/phpstan analyse
rector:
runs-on: ubuntu-latest
needs: install
container:
image: php:8.4
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Rector Dry Run
run: vendor/bin/rector process --dry-run
pest:
runs-on: ubuntu-latest
needs: install
container:
image: php:8.4
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Run Pest Tests
run: vendor/bin/pest
style-check:
runs-on: ubuntu-latest
needs: install
container:
image: php:8.4
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: PHP CS Fixer
run: vendor/bin/php-cs-fixer fix

View File

@ -2,7 +2,7 @@
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__.'/src-php/');
->in(__DIR__.'/src/');
$config = new PhpCsFixer\Config();

View File

@ -5,12 +5,7 @@
In this repository, you'll find my Advent of Code framework and solutions. If you want to
use this framework for your own solution, just remove all data in the `./data` folder.
It provides both a PHP and a Go framework. The PHP framework is the most complete one while
the Go framework is still a work in progress and is meant to learn Go.
## PHP
### 🛠 Setup and running
## 🛠 Setup and running
- Run `composer install` to install the dependencies.
- Run `./aoc day {day} {year?}` to run the solution for a specific day. If year is not given, use the current year (for example `./aoc day 1` to run the code for day 1 2023)
- Run `./aoc test {day} {year?}` to run the solution against the specified results.
@ -20,12 +15,12 @@ the Go framework is still a work in progress and is meant to learn Go.
> - You can add `--one` or `--two` (or `-1` and `-2`) to the day to run the solution for part 1 or part 2.
> - You can add `--skip-example` (or `-s`) to skip the example data.
### 🧪 Testing and quality control
## 🧪 Testing and quality control
- Run `./vendor/bin/pest` to automatically validate the solutions.
- Run `./vendor/bin/phpstan analyse` to run static analysis on the code.
- Run `./vendor/bin/php-cs-fixer fix` to run (and fix) code style checks.
### 🧩 Add a new puzzle/solution
## 🧩 Add a new puzzle/solution
- Run `./aoc new {day?} {year?}` to create a new puzzle/solution.
<details>

View File

@ -1,6 +1,6 @@
# https://taskfile.dev
version: '3'
version: "3"
tasks:
default:
@ -11,21 +11,21 @@ tasks:
check:
cmds:
- task: echo_title
vars: {TITLE: Running php-cs-fixer...}
vars: { TITLE: Running php-cs-fixer... }
- task: style
- task: echo_title
vars: {TITLE: Running phpstan...}
vars: { TITLE: Running phpstan... }
- task: phpstan
- task: echo_title
vars: { TITLE: Running rector... }
- task: rector
- task: echo_title
vars: {TITLE: Running phpunit}
- task: phpunit
vars: { TITLE: Running pest }
- task: pest
style:
cmds:
- php vendor/bin/php-cs-fixer fix
- PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer fix
silent: true
phpstan:
@ -38,7 +38,7 @@ tasks:
- php vendor/bin/rector process
silent: true
phpunit:
pest:
cmds:
- php vendor/bin/pest
silent: true

2
aoc
View File

@ -11,7 +11,7 @@ use trizz\AdventOfCode\Commands\TestDay;
(new CollisionProvider())->register();
require_once __DIR__.'/src-php/bootstrap.php';
require_once __DIR__.'/src/bootstrap.php';
$application = new Application('Advent of Code by trizz');

21
aoc.go
View File

@ -1,21 +0,0 @@
package main
import (
y22 "adventofcode/data/Y22"
"adventofcode/src-go/helpers"
"fmt"
"github.com/fatih/color"
)
func main() {
runY22()
day, year := helpers.GetDayYear()
fmt.Println(day, year)
}
func runY22() {
color.HiYellow("\n--- Advent of Code 2022 ---\n\n")
helpers.PrintDayResults(y22.Day1())
helpers.PrintDayResults(y22.Day2())
}

View File

@ -1,48 +1,49 @@
{
"name": "trizz/adventofcode",
"description": "My Advent of Code solutions",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Tristan",
"email": "me@trizz.io"
}
],
"require": {
"php": "^8.3",
"ext-mbstring": "*",
"cebe/markdown": "^1.2",
"laravel/prompts": "^0.1.13",
"nette/php-generator": "^4.1",
"phppkg/cli-markdown": "^2.0",
"symfony/console": "^6"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"jetbrains/phpstorm-attributes": "^1.0",
"nunomaduro/collision": "^7",
"pestphp/pest": "^2.26",
"phpstan/phpstan": "^1.2",
"rector/rector": "^0.19",
"robiningelbrecht/phpunit-pretty-print": "^1.2",
"symfony/var-dumper": "^7"
},
"autoload": {
"psr-4": {
"trizz\\AdventOfCode\\": "src-php/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"config": {
"sort-packages": true,
"optimize-autoloader": true,
"allow-plugins": {
"pestphp/pest-plugin": true
}
"name": "trizz/adventofcode",
"description": "My Advent of Code solutions",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Tristan",
"email": "me@trizz.io"
}
],
"require": {
"php": "^8.3",
"ext-mbstring": "*",
"cebe/markdown": "^1.2",
"laravel/prompts": "^0.3",
"nette/php-generator": "^4.1",
"phppkg/cli-markdown": "^2.0",
"symfony/console": "^7"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.3",
"jetbrains/phpstorm-attributes": "^1.0",
"nunomaduro/collision": "^8",
"pestphp/pest": "^3.5",
"phpstan/phpstan": "^2.0",
"rector/rector": "^2.0",
"robiningelbrecht/phpunit-pretty-print": "^1.2",
"symfony/var-dumper": "^7"
},
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"trizz\\AdventOfCode\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"config": {
"sort-packages": true,
"optimize-autoloader": true,
"allow-plugins": {
"pestphp/pest-plugin": true
}
}
}

2645
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -21,11 +21,9 @@ final class Day2 extends Solution
$horizontal = 0;
foreach ($data as $current) {
/**
* @var string $direction
* @var int $distance
*/
[$direction, $distance] = explode(' ', $current);
$direction = (string) $direction;
$distance = (int) $distance;
match ($direction) {
'forward' => $horizontal += $distance,
@ -46,11 +44,9 @@ final class Day2 extends Solution
$horizontal = 0;
foreach ($data as $current) {
/**
* @var string $direction
* @var int $distance
*/
[$direction, $distance] = explode(' ', $current);
$direction = (string) $direction;
$distance = (int) $distance;
// Can't use 'match' here because of the multiple expressions for 'forward'.
switch ($direction) {

View File

@ -52,6 +52,10 @@ final class Day7 extends Solution
}
}
if (empty($fuelPerPosition)) {
return -1;
}
return (int) min($fuelPerPosition);
}
}

View File

@ -40,7 +40,7 @@ final class Day8 extends Solution
}
#[\Override]
public function part2(array $data): int|string
public function part2(array $data): int
{
$sequences = [];

View File

@ -1,56 +0,0 @@
package Y22
import (
"adventofcode/src-go/helpers"
"sort"
"strconv"
)
func Day1() helpers.DayResults {
day1Example := helpers.ReadFileByLine("data/Y22/day1/example.txt")
day1 := helpers.ReadFileByLine("data/Y22/day1/data.txt")
calorieCount := calculateCalories(day1Example)
part1Example := calorieCount[len(calorieCount)-1]
part2Example := calorieCount[len(calorieCount)-1] + calorieCount[len(calorieCount)-2] + calorieCount[len(calorieCount)-3]
calorieCount = calculateCalories(day1)
part1Result := calorieCount[len(calorieCount)-1]
part2Result := calorieCount[len(calorieCount)-1] + calorieCount[len(calorieCount)-2] + calorieCount[len(calorieCount)-3]
results := helpers.DayResults{
Day: 1,
Year: 2022,
Part1Example: part1Example,
Part1: part1Result,
Part2Example: part2Example,
Part2: part2Result,
}
return results
}
func calculateCalories(data []string) []int {
var calorieCount []int
total := 0
for _, line := range data {
if line == "" {
calorieCount = append(calorieCount, total)
total = 0
continue
}
val, err := strconv.Atoi(line)
if err != nil {
panic(err)
}
total += val
}
sort.Slice(calorieCount, func(i, j int) bool {
return calorieCount[i] < calorieCount[j]
})
return calorieCount
}

View File

@ -1,93 +0,0 @@
package Y22
import (
"adventofcode/src-go/helpers"
"strings"
)
const (
aRock string = "A"
aPaper string = "B"
aScissors string = "C"
bRock string = "X"
bPaper string = "Y"
bScissors string = "Z"
resultLose string = "X"
resultDraw string = "Y"
resultWin string = "Z"
)
var scoreTable = map[string]map[string]int{
aRock: {
bRock: 4,
bPaper: 8,
bScissors: 3,
},
aPaper: {
bRock: 1,
bPaper: 5,
bScissors: 9,
},
aScissors: {
bRock: 7,
bPaper: 2,
bScissors: 6,
},
}
var winOrLoseTable = map[string]map[string]string{
aRock: {
resultWin: bPaper,
resultDraw: bRock,
resultLose: bScissors,
},
aPaper: {
resultWin: bScissors,
resultDraw: bPaper,
resultLose: bRock,
},
aScissors: {
resultWin: bRock,
resultDraw: bScissors,
resultLose: bPaper,
},
}
func Day2() helpers.DayResults {
day2Example := helpers.ReadFileByLine("data/Y22/day2/example.txt")
day2 := helpers.ReadFileByLine("data/Y22/day2/data.txt")
results := helpers.DayResults{
Day: 2,
Year: 2022,
Part1Example: part1(day2Example),
Part1: part1(day2),
Part2Example: part2(day2Example),
Part2: part2(day2),
}
return results
}
func part1(input []string) int {
score := 0
for _, line := range input {
data := strings.Split(line, " ")
score += scoreTable[data[0]][data[1]]
}
return score
}
func part2(input []string) int {
score := 0
for _, line := range input {
data := strings.Split(line, " ")
scoreValue := winOrLoseTable[data[0]][data[1]]
score += scoreTable[data[0]][scoreValue]
}
return score
}

View File

@ -1,15 +0,0 @@
package Y22
import (
Y22D1 "adventofcode/data/Y22/day1"
Y22D2 "adventofcode/data/Y22/day2"
"adventofcode/src-go/helpers"
)
func Day1() helpers.DayResults {
return Y22D1.Day1()
}
func Day2() helpers.DayResults {
return Y22D2.Day2()
}

View File

@ -69,7 +69,7 @@ final class Day2 extends Solution
}
/**
* @return array<int, array<int, string>>
* @return array{string, non-empty-list<string>}
*/
private function getHand(string $line): array
{

View File

@ -30,6 +30,17 @@ final class Day3 extends Solution
$numbers = $this->checkLocation($row, $col);
$top = (int) $this->processNumbers($numbers['top'], sum: true);
$bottom = (int) $this->processNumbers($numbers['bottom'], sum: true);
if ($numbers === []) {
continue;
}
if (empty($numbers['left'])) {
continue;
}
if (empty($numbers['right'])) {
continue;
}
$score += $top + $bottom + max($numbers['left']) + max($numbers['right']);
}
@ -54,6 +65,18 @@ final class Day3 extends Solution
$top = (array) $this->processNumbers($numbers['top']);
$bottom = (array) $this->processNumbers($numbers['bottom']);
if ($numbers === []) {
continue;
}
if (empty($numbers['left'])) {
continue;
}
if (empty($numbers['right'])) {
continue;
}
$left = max($numbers['left']);
$right = max($numbers['right']);
@ -81,7 +104,7 @@ final class Day3 extends Solution
if ($numbers[0] !== 0 && $numbers[1] === 0 && $numbers[2] !== 0) {
$result[] = $numbers[0];
$result[] = $numbers[2];
} else {
} elseif ($numbers !== []) {
$result[] = max($numbers);
}
@ -127,7 +150,7 @@ final class Day3 extends Solution
return $numbers;
}
private function getNumber(int $row, int $col, string $direction = null): ?string
private function getNumber(int $row, int $col, ?string $direction = null): ?string
{
$number = $this->matrix[$row][$col] ?? null;

View File

@ -2,7 +2,9 @@
namespace trizz\AdventOfCode\Y23;
final class Day5 extends \trizz\AdventOfCode\Solution
use trizz\AdventOfCode\Solution;
final class Day5 extends Solution
{
public static null|int|string $part1ExampleResult = 35;
@ -47,6 +49,10 @@ final class Day5 extends \trizz\AdventOfCode\Solution
$locations[$seed] = $location;
}
if ($locations === []) {
return -1;
}
return min($locations);
}
@ -97,7 +103,7 @@ final class Day5 extends \trizz\AdventOfCode\Solution
}
if (!empty($line) && !str_contains($line, ':')) {
[$destinationRange, $sourceRangeStart, $rangeLength] = array_values(array_map('intval', explode(' ', $line)));
[$destinationRange, $sourceRangeStart, $rangeLength] = array_map('intval', explode(' ', $line));
$this->maps[$currentMap][] = [
'destinationRange' => $destinationRange,
'sourceRangeStart' => $sourceRangeStart,

66
data/Y24/day1/Day1.php Normal file
View File

@ -0,0 +1,66 @@
<?php
namespace trizz\AdventOfCode\Y24;
use trizz\AdventOfCode\Solution;
final class Day1 extends Solution
{
public static null|int|string $part1ExampleResult = 11;
public static null|int|string $part1Result = 1882714;
public static null|int|string $part2ExampleResult = 31;
public static null|int|string $part2Result = 19437052;
#[\Override]
public function part1(array $data): int
{
[$listLeft, $listRight] = $this->getList($data);
$score = 0;
foreach ($listLeft as $index => $left) {
$right = $listRight[$index];
$score += abs($left - $right);
}
return $score;
}
#[\Override]
public function part2(array $data): int
{
$score = 0;
[$listLeft, $listRight] = $this->getList($data);
foreach ($listLeft as $index => $left) {
$right = count(array_filter($listRight, fn ($x): bool => $x === $left));
if ($right > 0) {
$score += $left * $right;
}
}
return $score;
}
/**
* @param array<int,string> $data
*
* @return array<int,int[]>
*/
private function getList(array $data): array
{
$listLeft = [];
$listRight = [];
foreach ($data as $x) {
[$a1, $_, $_, $b1] = explode(' ', $x);
$listLeft[] = (int) $a1;
$listRight[] = (int) $b1;
}
sort($listLeft);
sort($listRight);
return [$listLeft, $listRight];
}
}

1001
data/Y24/day1/data.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
3 4
4 3
2 5
1 3
3 9
3 3

11
go.mod
View File

@ -1,11 +0,0 @@
module adventofcode
go 1.21.4
require github.com/fatih/color v1.16.0
require (
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
golang.org/x/sys v0.14.0 // indirect
)

11
go.sum
View File

@ -1,11 +0,0 @@
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=

View File

@ -39,8 +39,3 @@ parameters:
message: "#^Property trizz\\\\AdventOfCode\\\\Y21\\\\Day8\\:\\:\\$patternDigits type has no value type specified in iterable type array\\.$#"
count: 1
path: data/Y21/day8/Day8.php
-
message: "#^Method trizz\\\\AdventOfCode\\\\Y23\\\\Day2\\:\\:getHand\\(\\) should return array\\<int, array\\<int, string\\>\\> but returns array\\<int, array\\<int, string\\>\\|string\\>\\.$#"
count: 1
path: data/Y23/day2/Day2.php

View File

@ -1,7 +1,7 @@
parameters:
level: 8
paths:
- src-php
- src
- data
includes:

View File

@ -9,7 +9,7 @@ use Rector\Set\ValueObject\SetList;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->paths(
[
__DIR__.'/src-php',
__DIR__.'/src',
__DIR__.'/data',
]
);
@ -17,7 +17,7 @@ return static function (RectorConfig $rectorConfig): void {
// define sets of rules
$rectorConfig->sets(
[
LevelSetList::UP_TO_PHP_83,
LevelSetList::UP_TO_PHP_84,
SetList::CODE_QUALITY,
SetList::CODING_STYLE,
SetList::TYPE_DECLARATION,

View File

@ -1,29 +0,0 @@
package helpers
import (
"strconv"
"strings"
"github.com/fatih/color"
)
type DayResults struct {
Day int `json:"day"`
Year int `json:"year"`
Part1Example int `json:"part1-example"`
Part1 int `json:"part1"`
Part2Example int `json:"part2-example"`
Part2 int `json:"part2"`
}
func PrintDayResults(results DayResults) {
yellow := color.New(color.FgYellow).SprintFunc()
gray := color.New(color.FgHiBlack).SprintFunc()
color.HiBlue("Day %d%s", results.Day, gray("/"+strconv.Itoa(results.Year)))
color.Green(" Part 1 (example): %s", yellow(results.Part1Example))
color.HiGreen(" Part 1 : %s", yellow(results.Part1))
color.Blue(" " + strings.Repeat("-", 23))
color.Green(" Part 2 (example): %s", yellow(results.Part2Example))
color.HiGreen(" Part 2 : %s", yellow(results.Part2))
}

View File

@ -1,55 +0,0 @@
package helpers
import (
"bufio"
"log"
"os"
"strconv"
"time"
)
func ReadFileByLine(path string) []string {
file, err := os.Open(path)
if err != nil {
log.Fatal(err)
}
defer func(file *os.File) {
err := file.Close()
if err != nil {
log.Fatal(err)
}
}(file)
scanner := bufio.NewScanner(file)
var returnData []string
for scanner.Scan() {
returnData = append(returnData, scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
return returnData
}
func GetDayYear() (int, int) {
// get current year
year, _, day := time.Now().Date()
// Change 2023 to 23
year = year % 100
if len(os.Args) == 2 {
day, _ := strconv.Atoi(os.Args[1])
return day, year
}
if len(os.Args) == 3 {
day, _ := strconv.Atoi(os.Args[1])
year, _ := strconv.Atoi(os.Args[2])
return day, year
}
return day, year
}

View File

@ -78,7 +78,7 @@ abstract class AbstractDayCommand extends Command
protected function loadClass(): Solution
{
require_once sprintf('%s/Y%d/day%d/Day%d.php', DATA_DIR, $this->year, $this->day, $this->day);
$className = sprintf('%s\\Y%d\\Day%d', substr(__NAMESPACE__, 0, -9), $this->year, $this->day);
$className = sprintf('%s\Y%d\Day%d', substr(__NAMESPACE__, 0, -9), $this->year, $this->day);
/** @var Solution $class */
$class = new $className();

3
tests/AoC_2024Test.php Normal file
View File

@ -0,0 +1,3 @@
<?php
testYear(24);