Avent of Code - un événement annuel en décembre depuis 2015.S chaque année depuis lors, avec le premier jour de décembre, un concours de puzzles de programmation est publié chaque jour pendant vingt-cinq jours. Un ensemble de défis axés sur Noël fournit toute contribution à laquelle vous devez utiliser pour répondre en utilisant la langue de votre choix. Nous vous proposons un modèle prêt à utiliser avec le langage Kotlin dans ce référentiel.
Advent of Code Kotlin Template est un type particulier de référentiel GitHub qui vous permet d'accélérer la phase de configuration et de commencer à écrire vos solutions AOC immédiatement.
L'idée générale est simple - pour créer un nouveau projet basé sur ce modèle, vous devez vous connecter à votre compte GitHub et utiliser le bouton Utiliser ce modèle . Et rappelez-vous - ne le fourre pas!
Après avoir créé un nouveau projet basé sur ce modèle dans votre compte, un workflow GitHub Actions dédié commencera et nettoiera le code à partir de fichiers redondants. Il personnalisera également le code pour utiliser votre nom d'utilisateur et votre nom de projet dans les espaces de noms et les propriétés Gradle. À quel point est-ce cool?
Vous pouvez le cloner dans l'idée IntelliJ chaque fois que l'acteur @ actions-user pousse le deuxième engagement dans votre référentiel.
Important
Juste après avoir ouvert le projet dans Intellij Idea, vérifiez si vous utilisez au moins Java 11 comme SDK du projet. Pour ce faire, visitez les paramètres de la structure du projet ( ⌘ CMD ; sur macOS ou Ctrl Alt Shift S sur Windows / Linux).
À partir de maintenant, tout est entre vos mains! Rejoignez le concours de l'Avent of Code pour résoudre le jour 01 dès sa publication.
Copiez le fichier de solution Day01.kt
pour les jours suivants et incrément le numéro de jour.
Note
N'oubliez pas de rejoindre le concours Kotlin!
Pour ce faire, modifiez la section de votre projet avec icône et ajoutez le sujet aoc-2024-in-kotlin
à votre projet.
Nous trouverons votre référentiel et vous compterons dans notre cadeau.
Après avoir créé un nouveau projet basé sur le référentiel de modèle actuel à l'aide du bouton Utiliser ce modèle , un échafaudage minimal nu apparaîtra dans votre compte GitHub avec la structure suivante:
.
├── README.md README file
├── build.gradle.kts Gradle configuration created with Kotlin DSL
├── settings.gradle.kts Gradle project settings
├── gradle* Gradle wrapper files
└── src
├── Day01.kt An empty implementation for the first AoC day
├── Utils.kt A set of utility methods shared across your days
│
│ (create those files manually)
├── Day01.txt An empty file for the Day 01 input data
└── Day01_test.txt An optional Day 01 test input data used for checks
Note
Tous les fichiers d'entrée de tâche ( src/*.txt
) sont exclus du référentiel avec .gitignore
- nous ne devons pas les publier publiquement, comme Eric Wastl l'a demandé.
Lorsque le premier puzzle apparaît, accédez au Day01.kt
et pour chaque fonction part1
et part2
, fournissez une implémentation d'algorithme à l'aide des données input
chargées du fichier src/Day01.txt
. Ces données d'entrée sont courantes pour les deux pièces, et vous pouvez la trouver au bas de chaque journée sur la page de la page de code.
Pour lire les données d'entrée, vous pouvez accompagner la méthode utilitaire readInput(name: String)
fournie dans le fichier Utils.kt
, comme:
fun main () {
fun part1 ( input : List < String >): Int {
return input.size
}
val input = readInput( " Day01 " )
println (part1(input))
}
Pour appeler l'algorithme que vous implémentez, cliquez sur le bouton de lecture verte à côté de la définition fun main()
.
Important
Créez des fichiers pertinents avant d'exécuter des tâches ou des tests, comme: src/Day01.txt
ou src/Day01_test.txt
.
Le fichier Utils.kt
contient également la méthode String.md5()
pour générer du hachage MD5 de la chaîne donnée et attend plus de fonctions d'assistance pour le principe du baiser.
Chaque puzzle décrit certaines conditions de test, une petite partie des informations qui aide à vérifier si la valeur produite pour l'entrée de test donnée est valide. Pour gérer ce cas, vous pouvez mettre une telle entrée dans un fichier séparé et effectuer un chèque par rapport à la sortie, comme:
fun main () {
// ...
val testInput = readInput( " Day01_test " )
check(part1(testInput) == 13 )
}
L'approche actuelle de la fourniture de solutions part1
et part2
dans le Day##.kt
Avec des cas simples qui ne consomment pas trop de temps et de ressources qui peuvent être presque imperceptibles, mais lorsque la solution prend quelques secondes, il vaut la peine d'envisager de diviser la solution quotidienne en deux pièces séparées, comme Day07_part1.kt
et Day07_part2.kt
.
Le résultat final de votre algorithme sera imprimé à l'écran afin que vous puissiez le transmettre au site Web de l'Avent of Code.
Pour aller avec le lendemain, placez le fichier Day02.txt
dans le src
avec des données d'entrée pertinentes et créez un fichier Day02.kt
avec un échafaudage de code similaire:
fun main () {
fun part1 ( input : List < String >): Int {
return 0
}
fun part2 ( input : List < String >): Int {
return 0
}
val input = readInput( " Day02 " )
println (part1(input))
println (part2(input))
}
Note
Il existe une fourche de ce référentiel disponible qui utilise l'outil Amper pour la configuration du projet, récemment introduit par JetBrains.
Pour en savoir plus, voir Avent of Code Kotlin Template - Amper Project.
Si vous êtes coincé avec des questions spécifiques à Kotlin ou tout ce qui concerne ce modèle, consultez les ressources suivantes: