Caio Lente

Advent of R com {aor}

Quem acompanha o blog talvez se lembre que ano passado eu fiz um post resolvendo todos os problemas do Advent of Code de 2021 em R. Este ano eu voltei para a festa, mas desta vez com um presente para todo mundo 🎁

O evento

Se você não está por dentro, o Advent of Code é um Calendário do Advento para quem programa. Entre 1º de dezembro e o Natal de cada ano, os organizadores vão disponibilizando 1 problema de programação por dia e o objetivo é chegar em 25 de dezembro com todos os 25 exercícios resolvidos.

Ano passado, no que eu chamei de Advent of R, eu me desafiei a de fato entrar no ritmo e resolver todos os problemas no dia em que eles fossem publicados, em R e documentando o processo no blog. Eu até consegui, mas foi extremamente difícil! Este ano eu vou pegar mais leve e fazer as coisas com mais calma.

Mas eu não queria deixar o evento passar em branco… Em 2022, minha contribuição para o Advent of R é um pacote para ajudar a comunidade toda 🎉

O pacote {aor}

O objetivo do {aor} é ajudar todo mundo que programa R a resolver o Advent of Code usando essa linguagem maravilhosa. Ele tem algumas funções que ajudam a baixar os desafios e as suas entradas o mais rápido possível.

Instalação

Você pode instalar a versão em desenvolvimento do {aor} do GitHub usando o comando abaixo:

1# install.packages("devtools")
2devtools::install_github("clente/aor")

Exemplo

O uso básico do {aor} gira em torno das funções day_start() e day_continue(). Por padrão, ambas as funções baixam os enunciados do dia atual, mas vou usar um dia fixo (01/12/2022) para ficar mais fácil de entender:

 1# Começar o problema do dia 01/12/2022 na pasta aoc2022/
 2aor::day_start("2022-12-01", "aoc2022/")
 3#> ✔ Fetched title.
 4#> ✔ Fetched puzzle.
 5#> ✔ Fetched input.
 6
 7# Arquivos criados
 8fs::dir_tree("aoc2022/")
 9#> aoc2022/
10#> └── 01_calorie_counting
11#>     ├── input.txt
12#>     └── puzzle.R

Essa é a cara do arquivo aoc2022/01_calorie_counting/puzzle.R (note que eu estou omitindo a maior parte das linhas do enunciado para que a saída não fique muito longa):

 1# --- Day 1: Calorie Counting ---
 2#
 3# Santa's reindeer typically eat regular reindeer food, but they need a
 4# lot of [magical energy](/2018/day/25) to deliver presents on Christmas.
 5# For that, their favorite snack is a special type of *star* fruit that
 6# only grows deep in the jungle. The Elves have brought you on their
 7# annual expedition to the grove where the fruit grows.
 8#
 9# ...
10#
11# Find the Elf carrying the most Calories. *How many total Calories is
12# that Elf carrying?*
13
14# Your input can be found on the file below:
15input <- "aoc2022/01_calorie_counting/input.txt"
16
17# Once you're done with part 1, run the following line to fetch part 2:
18aor::day_continue("2022-12-01", "aoc2022/01_calorie_counting/puzzle.R")

Quando você resolver a parte 1 do exercício, você pode rodar a última linha do arquivo para automaticamente baixar a parte 2 ali mesmo!

1aor::day_continue("2022-12-01", "aoc2022/01_calorie_counting/puzzle.R")
2#> ✔ Fetched puzzle.

E essa é a cara do arquivo logo depois de rodar day_continue() (de novo omitindo a maior parte das linhas):

 1# --- Day 1: Calorie Counting ---
 2#
 3# Santa's reindeer typically eat regular reindeer food, but they need a
 4# lot of [magical energy](/2018/day/25) to deliver presents on Christmas.
 5# For that, their favorite snack is a special type of *star* fruit that
 6# only grows deep in the jungle. The Elves have brought you on their
 7# annual expedition to the grove where the fruit grows.
 8#
 9# ...
10#
11# Find the Elf carrying the most Calories. *How many total Calories is
12# that Elf carrying?*
13
14# Your input can be found on the file below:
15input <- "aoc2022/01_calorie_counting/input.txt"
16
17# Once you're done with part 1, run the following line to fetch part 2:
18aor::day_continue("2022-12-01", "aoc2022/01_calorie_counting/puzzle.R")
19
20# --- Part Two ---
21#
22# By the time you calculate the answer to the Elves' question, they've
23# already realized that the Elf carrying the most Calories of food might
24# eventually *run out of snacks*.
25#
26# ...
27#
28# Find the top three Elves carrying the most Calories. *How many Calories
29# are those Elves carrying in total?*

Espero que vocês aproveitem o Advent of R com o {aor}! Boa sorte e boas festas 🎄

#r   #aoc   #pkg