Day 1: The Tyranny of the Rocket Equation

Reference

Part One

library(tidyverse)

calculate_fuel <- function(mass) floor(mass / 3) - 2

input <- read_csv(file = "inputs/2019/01.txt", col_names = "mass") |> 
    mutate(fuel = map_dbl(mass, calculate_fuel))

input |> 
    summarise(total_fuel = sum(fuel)) |> 
    pull(total_fuel) |> 
    cat()
## 3457681
# look at the full table
input |> print(n = nrow(input))
## # A tibble: 100 × 2
##       mass  fuel
##      <dbl> <dbl>
##   1 118868 39620
##   2  88841 29611
##   3 133680 44558
##   4 148066 49353
##   5  70887 23627
##   6  93213 31069
##   7 124243 41412
##   8  92767 30920
##   9  71322 23772
##  10  86793 28929
##  11  53650 17881
##  12 102703 34232
##  13 146958 48984
##  14  53031 17675
##  15 148282 49425
##  16 124989 41661
##  17  74375 24789
##  18 122044 40679
##  19 122693 40895
##  20  74204 24732
##  21  74869 24954
##  22  81803 27265
##  23 124436 41476
##  24  68495 22829
##  25  74865 24953
##  26  70765 23586
##  27  81537 27177
##  28  61376 20456
##  29 145342 48445
##  30 137159 45717
##  31 115230 38408
##  32 119293 39762
##  33 147126 49040
##  34 130191 43395
##  35 131330 43774
##  36 122891 40961
##  37 135407 45133
##  38 116334 38776
##  39 130325 43439
##  40 138521 46171
##  41  71955 23983
##  42  53806 17933
##  43 122260 40751
##  44 102573 34189
##  45  70032 23342
##  46  75981 25325
##  47 111555 37183
##  48 135654 45216
##  49  50805 16933
##  50 122186 40726
##  51 138172 46055
##  52  96422 32138
##  53 124781 41591
##  54  55894 18629
##  55  54337 18110
##  56 149926 49973
##  57  63809 21267
##  58 146163 48719
##  59  55131 18375
##  60  55796 18596
##  61  92771 30921
##  62  80288 26760
##  63 111619 37204
##  64 134602 44865
##  65  82245 27413
##  66  72505 24166
##  67 117209 39067
##  68  92383 30792
##  69 149101 49698
##  70 135399 45131
##  71 112166 37386
##  72 134000 44664
##  73  88771 29588
##  74  63963 21319
##  75 103731 34575
##  76  74915 24969
##  77 146347 48780
##  78 125390 41794
##  79 126249 42081
##  80 131534 43842
##  81 142038 47344
##  82  55327 18440
##  83  58784 19592
##  84  85003 28332
##  85  65909 21967
##  86  89879 29957
##  87 128715 42903
##  88 138559 46184
##  89 146209 48734
##  90 145040 48344
##  91 116032 38675
##  92 130046 43346
##  93 131664 43886
##  94 125899 41964
##  95 141918 47304
##  96  88426 29473
##  97  50488 16827
##  98  67943 22645
##  99  79677 26557
## 100  94858 31617

Part Two

calculate_fuel_adj <- function(mass) {
    
    total <- calculate_fuel(mass)
    
    repeat{
        new <- calculate_fuel(total[length(total)])
        
        if (new > 0) total <- c(total, new) else break
    }
    
    return(sum(total))
}

input <- input |> 
    mutate(fuel_adj = map_dbl(mass, calculate_fuel_adj))

input |> 
    summarise(total_fuel_adj = sum(fuel_adj)) |> 
    pull(total_fuel_adj) |> 
    cat()
## 5183653
# look at the full table
input |> print(n = nrow(input))
## # A tibble: 100 × 3
##       mass  fuel fuel_adj
##      <dbl> <dbl>    <dbl>
##   1 118868 39620    59402
##   2  88841 29611    44387
##   3 133680 44558    66808
##   4 148066 49353    74001
##   5  70887 23627    35412
##   6  93213 31069    46574
##   7 124243 41412    62088
##   8  92767 30920    46351
##   9  71322 23772    35629
##  10  86793 28929    43366
##  11  53650 17881    26795
##  12 102703 34232    51317
##  13 146958 48984    73447
##  14  53031 17675    26486
##  15 148282 49425    74108
##  16 124989 41661    62464
##  17  74375 24789    37157
##  18 122044 40679    60989
##  19 122693 40895    61313
##  20  74204 24732    37070
##  21  74869 24954    37404
##  22  81803 27265    40869
##  23 124436 41476    62184
##  24  68495 22829    34214
##  25  74865 24953    37401
##  26  70765 23586    35352
##  27  81537 27177    40738
##  28  61376 20456    30657
##  29 145342 48445    72639
##  30 137159 45717    68546
##  31 115230 38408    57582
##  32 119293 39762    59614
##  33 147126 49040    73530
##  34 130191 43395    65063
##  35 131330 43774    65633
##  36 122891 40961    61412
##  37 135407 45133    67669
##  38 116334 38776    58134
##  39 130325 43439    65127
##  40 138521 46171    69229
##  41  71955 23983    35946
##  42  53806 17933    26872
##  43 122260 40751    61097
##  44 102573 34189    51255
##  45  70032 23342    34985
##  46  75981 25325    37959
##  47 111555 37183    55747
##  48 135654 45216    67795
##  49  50805 16933    25373
##  50 122186 40726    61059
##  51 138172 46055    69053
##  52  96422 32138    48178
##  53 124781 41591    62358
##  54  55894 18629    27917
##  55  54337 18110    27137
##  56 149926 49973    74927
##  57  63809 21267    31873
##  58 146163 48719    73048
##  59  55131 18375    27536
##  60  55796 18596    27866
##  61  92771 30921    46354
##  62  80288 26760    40113
##  63 111619 37204    55779
##  64 134602 44865    67267
##  65  82245 27413    41091
##  66  72505 24166    36222
##  67 117209 39067    58571
##  68  92383 30792    46160
##  69 149101 49698    74517
##  70 135399 45131    67665
##  71 112166 37386    56050
##  72 134000 44664    66967
##  73  88771 29588    44352
##  74  63963 21319    31951
##  75 103731 34575    51834
##  76  74915 24969    37425
##  77 146347 48780    73140
##  78 125390 41794    62664
##  79 126249 42081    63093
##  80 131534 43842    65734
##  81 142038 47344    70985
##  82  55327 18440    27633
##  83  58784 19592    29359
##  84  85003 28332    42469
##  85  65909 21967    32924
##  86  89879 29957    44906
##  87 128715 42903    64325
##  88 138559 46184    69247
##  89 146209 48734    73071
##  90 145040 48344    72485
##  91 116032 38675    57983
##  92 130046 43346    64989
##  93 131664 43886    65799
##  94 125899 41964    62918
##  95 141918 47304    70927
##  96  88426 29473    44181
##  97  50488 16827    25215
##  98  67943 22645    33940
##  99  79677 26557    39808
## 100  94858 31617    47398