2019 Day 1 + part of day 2
parent
a22c78c7cb
commit
52e88e6cab
|
@ -2,7 +2,7 @@ FC:=gfortran
|
|||
FFLAGS:=-Wall
|
||||
BIN:=./bin
|
||||
SRC:=./src
|
||||
BINS:=./bin/test.bin
|
||||
BINS:=./bin/test.bin ./bin/day1.bin ./bin/day2.bin
|
||||
|
||||
all: aoc19
|
||||
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
134492
|
||||
88713
|
||||
84405
|
||||
148193
|
||||
95951
|
||||
63545
|
||||
137840
|
||||
65558
|
||||
124836
|
||||
95431
|
||||
77622
|
||||
91864
|
||||
108677
|
||||
116871
|
||||
119496
|
||||
97172
|
||||
86115
|
||||
105704
|
||||
68613
|
||||
77114
|
||||
114013
|
||||
52766
|
||||
57048
|
||||
80814
|
||||
73888
|
||||
58253
|
||||
135934
|
||||
97409
|
||||
112439
|
||||
98262
|
||||
116047
|
||||
57456
|
||||
124261
|
||||
83006
|
||||
101495
|
||||
133449
|
||||
111372
|
||||
56146
|
||||
87818
|
||||
92209
|
||||
149259
|
||||
124559
|
||||
141838
|
||||
147988
|
||||
65703
|
||||
125566
|
||||
59650
|
||||
139564
|
||||
92430
|
||||
126307
|
||||
120406
|
||||
147383
|
||||
84362
|
||||
51529
|
||||
146366
|
||||
131840
|
||||
53270
|
||||
71886
|
||||
118767
|
||||
104311
|
||||
126181
|
||||
76964
|
||||
129430
|
||||
95489
|
||||
91098
|
||||
54133
|
||||
110057
|
||||
107276
|
||||
118226
|
||||
96104
|
||||
135382
|
||||
85152
|
||||
61697
|
||||
143417
|
||||
148879
|
||||
126846
|
||||
130205
|
||||
111170
|
||||
86687
|
||||
113729
|
||||
123330
|
||||
56976
|
||||
148470
|
||||
66028
|
||||
129715
|
||||
75686
|
||||
74964
|
||||
148258
|
||||
72669
|
||||
88809
|
||||
78173
|
||||
92699
|
||||
124806
|
||||
67217
|
||||
139066
|
||||
136002
|
||||
135730
|
||||
145708
|
||||
142054
|
||||
135772
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,13,1,19,1,9,19,23,2,23,13,27,1,27,9,31,2,31,6,35,1,5,35,39,1,10,39,43,2,43,6,47,1,10,47,51,2,6,51,55,1,5,55,59,1,59,9,63,1,13,63,67,2,6,67,71,1,5,71,75,2,6,75,79,2,79,6,83,1,13,83,87,1,9,87,91,1,9,91,95,1,5,95,99,1,5,99,103,2,13,103,107,1,6,107,111,1,9,111,115,2,6,115,119,1,13,119,123,1,123,6,127,1,127,5,131,2,10,131,135,2,135,10,139,1,13,139,143,1,10,143,147,1,2,147,151,1,6,151,0,99,2,14,0,0
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
program day1
|
||||
implicit none
|
||||
integer, parameter :: max_masses = 10000
|
||||
integer :: n_arguments
|
||||
integer :: f_sum = 0
|
||||
integer :: f_full_sum = 0
|
||||
integer :: this_fuel, this_full_fuel, this_mass
|
||||
integer :: i, istat
|
||||
character(200) :: fname
|
||||
n_arguments = command_argument_count()
|
||||
if (n_arguments .eq. 1) then
|
||||
call get_command_argument(1, fname)
|
||||
print *, "File: ", fname
|
||||
else
|
||||
print *, "Wrong number of arguments: ", n_arguments
|
||||
stop
|
||||
end if
|
||||
open(10, file=fname)
|
||||
do i=1,max_masses
|
||||
read (10, *, iostat = istat) this_mass
|
||||
if (is_iostat_end(istat)) then
|
||||
exit
|
||||
end if
|
||||
this_fuel = fuelcalc(this_mass)
|
||||
this_full_fuel = fullfuelcalc(this_mass)
|
||||
f_sum = f_sum + this_fuel
|
||||
f_full_sum = f_full_sum + this_full_fuel
|
||||
print *, i, this_mass, this_fuel, f_sum, this_full_fuel, f_full_sum
|
||||
end do
|
||||
close(10)
|
||||
print *
|
||||
print *, f_sum, f_full_sum
|
||||
|
||||
contains
|
||||
function fuelcalc(mass)
|
||||
implicit none
|
||||
integer, intent(in) :: mass
|
||||
integer :: fuelcalc
|
||||
fuelcalc = mass / 3 - 2
|
||||
end function fuelcalc
|
||||
|
||||
function fullfuelcalc(mass)
|
||||
implicit none
|
||||
integer, parameter :: max_iterations = 10000
|
||||
integer, intent(in) :: mass
|
||||
integer :: fullfuelcalc
|
||||
integer :: ftemp
|
||||
integer :: i
|
||||
ftemp = mass
|
||||
fullfuelcalc = 0
|
||||
do i=1,max_iterations
|
||||
ftemp = fuelcalc(ftemp)
|
||||
if (ftemp .le. 0) then
|
||||
exit
|
||||
else
|
||||
fullfuelcalc = fullfuelcalc + ftemp
|
||||
end if
|
||||
end do
|
||||
if (ftemp .gt. 0) then
|
||||
print *, "Too many iterations for mass", mass
|
||||
stop
|
||||
end if
|
||||
end function fullfuelcalc
|
||||
end program day1
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
program day2
|
||||
implicit none
|
||||
integer, parameter :: path_length = 100
|
||||
character(path_length) :: fname
|
||||
integer :: n_arguments
|
||||
integer, allocatable :: intcode(:)
|
||||
integer :: n_codes
|
||||
|
||||
n_arguments = command_argument_count()
|
||||
if (n_arguments .eq. 1) then
|
||||
call get_command_argument(1, fname)
|
||||
print *, "File: ", fname
|
||||
else
|
||||
print *, "Wrong number of arguments: ", n_arguments
|
||||
stop
|
||||
end if
|
||||
|
||||
intcode = read_intcode(fname)
|
||||
n_codes = size(intcode)
|
||||
print "(4i5)", intcode
|
||||
print *, n_codes
|
||||
deallocate(intcode)
|
||||
|
||||
contains
|
||||
function read_intcode(fname)
|
||||
integer, parameter :: fstr_len = 10000
|
||||
character(*), intent(in) :: fname
|
||||
integer, allocatable :: read_intcode(:)
|
||||
character(fstr_len) :: fstr
|
||||
integer :: fstr_true_len
|
||||
integer :: n_values = 0
|
||||
integer :: i
|
||||
open(10, file=fname)
|
||||
read(10, "(A)") fstr
|
||||
close(10)
|
||||
fstr_true_len = len_trim(fstr)
|
||||
do i=1, fstr_true_len
|
||||
if (fstr(i:i) .eq. ',') n_values = n_values + 1
|
||||
end do
|
||||
allocate(read_intcode(0:n_values))
|
||||
print *, n_values
|
||||
read(fstr, *) read_intcode
|
||||
end function read_intcode
|
||||
end program day2
|
Loading…
Reference in New Issue