Advent of Code-Um evento anual em dezembro desde 2015. Todos os anos desde então, com o primeiro dia de dezembro, um concurso de quebra-cabeças de programação é publicado todos os dias durante vinte e cinco dias. Um conjunto de desafios orientados ao Natal fornece qualquer entrada que você deve usar para responder usando o idioma de sua escolha. Oferecemos a você um modelo preparado para usar com o idioma Kotlin neste repositório.
O Advento do Code Kotlin Modelo é um tipo específico de repositório do GitHub que permite acelerar a fase de configuração e começar a escrever suas soluções AOC imediatamente.
A ideia geral é direta - para criar um novo projeto com base neste modelo, você precisa fazer login na sua conta do Github e usar o botão Green Use este modelo . E lembre -se - não bifurque!
Depois de criar um novo projeto com base neste modelo em sua conta, um fluxo de trabalho de ações do GitHub dedicado iniciará e limpará o código de arquivos redundantes. Ele também personalizará o código para usar seu nome de usuário e nome do projeto em namespaces e propriedades gradle. Quão legal é isso?
Você pode cloná-lo dentro da idéia Intellij sempre que o ator de ações-ações-usuário empurra o segundo compromisso com seu repositório.
Importante
Logo após abrir o projeto em Intellij Idea, verifique se você usa pelo menos o Java 11 como Projeto SDK. Para fazer isso, visite as configurações da estrutura do projeto ( ⌘ CMD ; no MacOS ou Ctrl Alt Shift S no Windows/Linux).
De agora em diante, tudo está em suas mãos! Participe do concurso de advento do código para resolver o dia 01 assim que for publicado.
Copie o arquivo de solução Day01.kt
para os dias seguintes e incremente o número do dia.
Observação
Lembre -se de participar do concurso Kotlin!
Para fazer isso, edite seu projeto sobre a seção com o ícone e adicione o tópico aoc-2024-in-kotlin
ao seu projeto.
Encontraremos seu repositório e contaremos você em nossa oferta.
Depois de criar um novo projeto com base no repositório de modelo atual usando o botão Usar este modelo , um andaime mínimo nu aparecerá em sua conta do Github com a seguinte estrutura:
.
├── 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
Observação
Todos os arquivos de entrada de tarefas ( src/*.txt
) são excluídos do repositório com .gitignore
- não devemos publicá -los publicamente, como solicitou Eric Wastl.
Quando o primeiro quebra -cabeça aparecer, vá para o Day01.kt
e, para cada função part1
e part2
, forneça uma implementação de algoritmo usando os dados input
carregados no arquivo src/Day01.txt
. Esses dados de entrada são comuns para ambas as partes e você pode encontrá -los na parte inferior de cada dia no advento da página de código.
Para ler os dados de entrada, você pode acompanhar o método do utilitário readInput(name: String)
fornecido no arquivo Utils.kt
, como:
fun main () {
fun part1 ( input : List < String >): Int {
return input.size
}
val input = readInput( " Day01 " )
println (part1(input))
}
Para ligar para o algoritmo que você está implementando, clique no botão Green Play ao lado da definição de fun main()
.
Importante
Crie arquivos relevantes antes de executar tarefas ou testes, como: src/Day01.txt
ou src/Day01_test.txt
.
O arquivo Utils.kt
também contém o método String.md5()
para gerar hash md5 a partir da string dada e espera mais funções auxiliares em prol do princípio do beijo.
Cada quebra -cabeça descreve algumas condições de teste, uma pequena parte das informações que ajuda a verificar se o valor produzido para a entrada de teste fornecido é válido. Para lidar com esse caso, você pode colocar essa entrada em um arquivo separado e executar uma verificação em relação à saída, como:
fun main () {
// ...
val testInput = readInput( " Day01_test " )
check(part1(testInput) == 13 )
}
A abordagem atual de fornecer soluções part1
e part2
dentro do Day##.kt
Com casos simples que não consomem muito tempo e recursos que podem ser quase imperceptíveis, mas quando a solução leva segundos, vale a pena considerar quebrar a solução diária em duas peças separadas, como Day07_part1.kt
e Day07_part2.kt
.
O resultado final do seu algoritmo será impresso na tela para que você possa passar para o advento do site do código.
Para ir no dia seguinte, coloque o arquivo Day02.txt
no src
com dados de entrada relevantes e crie um arquivo Day02.kt
com um andaime de código semelhante:
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))
}
Observação
Há um garfo deste repositório disponível que utiliza a ferramenta AMPER para configuração do projeto, introduzida recentemente pela JetBrains.
Para mais informações, consulte o Advento do Code Kotlin Modelo - Projeto Amper.
Se você estiver preso a perguntas específicas de Kotlin ou qualquer coisa relacionada a este modelo, confira os seguintes recursos: