Skip to content

Instantly share code, notes, and snippets.

View dgrtwo's full-sized avatar

David Robinson dgrtwo

View GitHub Profile
# My (NOT WORKING) solution to day 5 Part 2
library(tidyverse)
library(adventdrob)
library(intervals)
library(broom)
# Utility to turn Intervals::intervals into tibble
tidy.Intervals_full <- function(intervals) {
intervals %>%
as.data.frame() %>%
@dgrtwo
dgrtwo / advent-2021-day-19.R
Created December 20, 2021 01:57
My solution to Day 19 of Advent of Code 2021
library(tidyverse)
library(adventdrob)
input <- advent_input(19, 2021)
beacons <- input %>%
filter(x != "") %>%
mutate(scanner = cumsum(str_detect(x, "scanner"))) %>%
filter(!str_detect(x, "scanner")) %>%
separate(x, c("x", "y", "z"), sep = ",", convert = TRUE) %>%
@dgrtwo
dgrtwo / advent-2021-day-18.R
Created December 18, 2021 19:41
My solution to Day 18 of Advent of Code 2021
library(tidyverse)
library(adventdrob)
# Add a value to the leftmost position in a binary tree
add_leftmost <- function(x, value) {
if (!is.list(x)) x + value
else list(add_leftmost(x[[1]], value), x[[2]])
}
# Add a value to the rightmost position in a binary tree
@dgrtwo
dgrtwo / cubic-model-animation.R
Created May 8, 2020 19:56
Showing how a 3rd-degree polynomial model would predict future deaths if a plateau continues
library(tidyverse)
library(broom)
library(scales)
theme_set(theme_light())
US <- read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us.csv") %>%
mutate(new_deaths = deaths - lag(deaths)) %>%
filter(date >= "2020-02-26")
today <- max(US$date)
@dgrtwo
dgrtwo / comparing-polynomial-models-covid.R
Created May 5, 2020 19:33
Comparing the CEA's "cubic model" to quadratic and quartic models
library(tidyverse)
library(broom)
US <- read_csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us.csv") %>%
mutate(new_deaths = deaths - lag(deaths)) %>%
filter(date >= "2020-02-26")
models <- tibble(degrees = 2:4) %>%
mutate(model = map(degrees, ~ lm(log(new_deaths + 1) ~ poly(date, .), data = US)))
@dgrtwo
dgrtwo / simulate-dice
Last active January 5, 2020 16:32
Simulate scoring games of Dice 10,000
# 100,000 simulations
n <- 1e5
dice <- t(rmultinom(n, 5, rep(1, 6) / 6))
# First rules for 1s and 5s
ones_score <- c(0, 100, 200, 1000, 5000, 10000)[dice[, 1] + 1L]
fives_score <- c(0, 50, 100, 0, 0, 0)[dice[, 5] + 1L]
# 100 x n score
most_common <- apply(dice, 1, which.max)
# Code behind this tweet:
# https://twitter.com/drob/status/1126988304090574848
library(tidyverse)
library(broom)
t_tests <- crossing(pi0 = .75,
effect_size = .25,
trial = 1:10000,
@dgrtwo
dgrtwo / dice-rolls.R
Created February 25, 2019 23:56
Animation of die rolls
# Code behind this tweet: https://twitter.com/drob/status/1100182329350336513
library(tidyverse)
library(gganimate)
# Setup
options(gganimate.nframes = 200)
set.seed(2019)
simulation <- tibble(roll = 1:10000) %>%
mutate(result = sample(6, n(), replace = TRUE)) %>%
We can't make this file beautiful and searchable because it's too large.
year,tag,number,year_total
2008,.htaccess,54,58390
2008,.net,5910,58390
2008,.net-2.0,289,58390
2008,.net-3.5,319,58390
2008,.net-4.0,6,58390
2008,.net-assembly,3,58390
2008,.net-core,1,58390
2008,2d,42,58390
2008,32-bit,19,58390
library(modelr)
library(tidyverse)
library(broom)
mtcars %>%
crossv_kfold(k = 10) %>%
mutate(model = map(train, ~ lm(mpg ~ wt, .)),
result = map2(model, test, ~ augment(.x, newdata = .y))) %>%
unnest(result)