AI prompts
base on A starter project for Advent of Code in the language Dart. Includes automatic input download, parsing, creation of boilerplate and tests. <img src="https://github.com/dart-lang.png" width="160" align="right" alt="Dart Logo">
# AdventOfCode-Starter-Dart
This is a Starter project for [AdventOfCode](https://adventofcode.com/2024), written in `Dart`. Feel free to use it for your own adventures with the christmas-themed puzzles!
## How to use
Feel free to fork this repository to use it as a starting point for your own solutions.
### Boilerplate Generation
In the root of your directory, run
```console
dart run day_generator.dart <day>
```
This will request your session token if it has not been stored previously. More info can be found in the [Session token](<#session-token>) section.
This will create an input and test file and a solution file with all the needed boilerplate to have a quick start. It also adds the solution to the corresponding index file, so the solution get imported into `main` automatically.
### Session token
When running the `day_generator.dart` script for the first time, you will be asked to provide your session token. This is needed to automatically download your input files. If you need to do this manually for any reason, you can find the instructions below.
Please visit the [AdventOfCode](https://adventofcode.com) site and log in.
After that, get your session token from the cookie:
- Open DevTools (F12)
- "Application" -> Cookies -> <https://adventofcode.com>
- Copy the value of the `session` cookie
By default, the session token is stored in `.dart_tool/aoc/.session_token`. You can either store it there manually, or run the `day_generator.dart` script and paste it when prompted.
### Main
**To add a new solution, all you have to do is add `DayXX()` to the `day` List.**
Running main automatically prints either all your solutions, or just the last one, depending on your settings.
It also measures the time it takes to run each solution, and prints it to the console.
You can run the main file by running
```console
dart run main.dart
```
in the root of your directory.
By default the main file will only show the last solution. If you want to see all of them, you can use the `-a` or `--all` flag.
You can list all the command line arguments by using the `-h` or `--help` flag.
### Tests
A test file is automatically generated for each day. It contains tests for both parts of the example and the real input.
All you have to do is **fill out the variables given at the top of the test file.**
---
## Class Documentation
Below you can find a short documentation of the classes and methods provided by this starter project.
### Naming conventions
When using the Boilerplate generator, everything is done for you automatically. However, if you create a solution or input file by yourself: make sure it has a 2-digit number. Concretely, pad days 1-9 as `day01.dart` for solutions and `aoc01.txt` for input.
### Generic Day
The abstract class all individual days subclass from. When constructed with the correct `day`, it automatically ready the corresponding input file and provides it with the `InputUtil`. To access it, just call `input` inside your class.
### Input Util
Automatically reads the input files and provides different methods to parse it.
- `.asString` to get the whole input as a single String
- `.getPerLine()` splits on `\n` characters, returning a List with single lines as elements.
- `.getPerWhitespace()` splits on `\s` and `\n`, essentially returning a List with all the single characters.
- `.getBy(pattern)` lets you define your own split logic. It essentially calls Dart's native `.split(pattern)`
### Parse Util
A place to store useful parsing operations, like creating a `List<int>` from a `List<String>`. There will be a lot of opportunities during AoC for you to extend this.
### Field Class
A helper class for 2D data, as often present in AoC. Any data can be represented. For Integers specifically, there are convenience methods in `IntegerField`. For all available methods, have a look at the abundantly-documented code.
### Helper Packages
**Tuple** enables operations on pairs/triplets etc of any type. Absolutely needed for most of the puzzles.
**Collection** provides many methods for ...collections... Most importantly, a `groupBy` and a collection equality interface.
**Quiver** is an awesome toolbox of helper methods for Dart. We mostly use `/iterables` (similar to Pythons `itertools`).
## Contributing
Contributing is greatly appreciated, just fork this project and create a Pull Request, or open an Issue!
# Happy Holidays
<img src="https://blogs.sap.com/wp-content/uploads/2020/11/EkaoQQTXEAMA4BN.jpg">
", Assign "at most 3 tags" to the expected json: {"id":"12363","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"