mirror of
https://github.com/HenkKalkwater/aoc-2020
synced 2024-12-22 08:35:16 +00:00
Added day 1
This commit is contained in:
parent
51afb9d03e
commit
c6f7df0bf3
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
.dub
|
||||
docs.json
|
||||
__dummy.html
|
||||
docs/
|
||||
/aoc-2020
|
||||
aoc-2020.so
|
||||
aoc-2020.dylib
|
||||
aoc-2020.dll
|
||||
aoc-2020.a
|
||||
aoc-2020.lib
|
||||
aoc-2020-test-*
|
||||
*.exe
|
||||
*.o
|
||||
*.obj
|
||||
*.lst
|
200
in/1.txt
Normal file
200
in/1.txt
Normal file
|
@ -0,0 +1,200 @@
|
|||
1036
|
||||
1897
|
||||
1256
|
||||
1080
|
||||
1909
|
||||
1817
|
||||
1759
|
||||
1883
|
||||
1088
|
||||
1841
|
||||
1780
|
||||
1907
|
||||
1874
|
||||
1831
|
||||
1932
|
||||
1999
|
||||
1989
|
||||
1840
|
||||
1973
|
||||
1102
|
||||
1906
|
||||
1277
|
||||
1089
|
||||
1275
|
||||
1228
|
||||
1917
|
||||
1075
|
||||
1060
|
||||
1964
|
||||
1942
|
||||
2001
|
||||
1950
|
||||
1181
|
||||
1121
|
||||
1854
|
||||
1083
|
||||
1772
|
||||
1481
|
||||
1976
|
||||
1805
|
||||
1594
|
||||
1889
|
||||
1726
|
||||
1866
|
||||
798
|
||||
1739
|
||||
1709
|
||||
1946
|
||||
1948
|
||||
1808
|
||||
1836
|
||||
1849
|
||||
1465
|
||||
1066
|
||||
1943
|
||||
664
|
||||
1894
|
||||
1993
|
||||
1061
|
||||
1225
|
||||
1589
|
||||
1916
|
||||
1885
|
||||
1998
|
||||
1470
|
||||
1668
|
||||
1666
|
||||
1499
|
||||
1437
|
||||
1986
|
||||
1127
|
||||
1875
|
||||
1132
|
||||
1888
|
||||
1877
|
||||
1046
|
||||
1982
|
||||
1265
|
||||
1757
|
||||
1848
|
||||
1786
|
||||
1638
|
||||
1958
|
||||
1015
|
||||
1013
|
||||
1552
|
||||
1742
|
||||
1850
|
||||
1016
|
||||
1839
|
||||
558
|
||||
1826
|
||||
1261
|
||||
1988
|
||||
1545
|
||||
1078
|
||||
1963
|
||||
1967
|
||||
1951
|
||||
1086
|
||||
1947
|
||||
1880
|
||||
1903
|
||||
1994
|
||||
1167
|
||||
1736
|
||||
1041
|
||||
1652
|
||||
1040
|
||||
1033
|
||||
1179
|
||||
1844
|
||||
1861
|
||||
1488
|
||||
1962
|
||||
1135
|
||||
1347
|
||||
1187
|
||||
1777
|
||||
1598
|
||||
1803
|
||||
1147
|
||||
1760
|
||||
1926
|
||||
1898
|
||||
1923
|
||||
1865
|
||||
1313
|
||||
1924
|
||||
1023
|
||||
1576
|
||||
1715
|
||||
1391
|
||||
1346
|
||||
1882
|
||||
2000
|
||||
1024
|
||||
1143
|
||||
1065
|
||||
1560
|
||||
1029
|
||||
1119
|
||||
1966
|
||||
1022
|
||||
1931
|
||||
1512
|
||||
1049
|
||||
1929
|
||||
1312
|
||||
1069
|
||||
1159
|
||||
1053
|
||||
1249
|
||||
1074
|
||||
1983
|
||||
1761
|
||||
1868
|
||||
195
|
||||
24
|
||||
1331
|
||||
1636
|
||||
1020
|
||||
1034
|
||||
1671
|
||||
708
|
||||
1699
|
||||
1900
|
||||
1927
|
||||
1829
|
||||
301
|
||||
1832
|
||||
1042
|
||||
1896
|
||||
1928
|
||||
1032
|
||||
1992
|
||||
2005
|
||||
1955
|
||||
1047
|
||||
1068
|
||||
1001
|
||||
1052
|
||||
1744
|
||||
1845
|
||||
1208
|
||||
1018
|
||||
1859
|
||||
1342
|
||||
1823
|
||||
1758
|
||||
2007
|
||||
1241
|
||||
1893
|
||||
1876
|
||||
1984
|
||||
1655
|
||||
1534
|
||||
1150
|
||||
1789
|
||||
1870
|
39
source/app.d
39
source/app.d
|
@ -1,6 +1,37 @@
|
|||
import std.stdio;
|
||||
import core.stdc.stdlib;
|
||||
|
||||
import std.conv;
|
||||
import std.format;
|
||||
import std.stdio;
|
||||
import std.getopt;
|
||||
|
||||
import day1;
|
||||
|
||||
immutable string progName = "aoc-2020";
|
||||
|
||||
void function(string[])[] programs = [
|
||||
&day1.run
|
||||
];
|
||||
|
||||
void main(string[] args) {
|
||||
int day;
|
||||
if (args.length < 2) {
|
||||
stderr.writeln("USAGE: %s [day]".format(args[0]));
|
||||
exit(-1);
|
||||
}
|
||||
try {
|
||||
day = to!int(args[1]);
|
||||
} catch (ConvException e) {
|
||||
stderr.writeln("[day] is not an integer");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (day <= 0 || day > programs.length) {
|
||||
stderr.writeln("Day must be between 1 and %d".format(programs.length - 1));
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
programs[day - 1](args[2..$]);
|
||||
|
||||
void main()
|
||||
{
|
||||
writeln("Edit source/app.d to start your project.");
|
||||
}
|
||||
|
|
58
source/day1.d
Normal file
58
source/day1.d
Normal file
|
@ -0,0 +1,58 @@
|
|||
import std.algorithm;
|
||||
import std.array;
|
||||
import std.conv;
|
||||
import std.exception;
|
||||
import std.format;
|
||||
import std.range;
|
||||
import std.stdio;
|
||||
|
||||
immutable string progName = "aoc-2020";
|
||||
|
||||
void run(string[] args) {
|
||||
enforce(args.length == 1, "Please provide a part to run %s 1 [part]".format(progName));
|
||||
int part = to!int(args[0]);
|
||||
enforce(part > 0 && part <= 2, "Parts %d to %d supported".format(1, 2));
|
||||
|
||||
auto numbers = stdin.byLineCopy.map!(a => to!int(a)).array.sort;
|
||||
|
||||
auto fun = part == 1 ? &part1 : &part2;
|
||||
writeln(fun(numbers));
|
||||
}
|
||||
|
||||
int part1(SortedRange!(int[]) numbers) {
|
||||
int result = -1;
|
||||
|
||||
foreach (ref int a; numbers) {
|
||||
int b = 2020 - a;
|
||||
if (numbers.contains(b)) {
|
||||
result = b * a;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
unittest {
|
||||
auto numbers = [1721, 979, 366, 299, 675, 1456].sort;
|
||||
assert(part1(numbers) == 514579);
|
||||
}
|
||||
|
||||
int part2(SortedRange!(int[]) numbers) {
|
||||
int result = -1;
|
||||
foreach (ref int a; numbers) {
|
||||
foreach (ref int b; numbers) {
|
||||
int c = 2020 - b - a;
|
||||
if (numbers.contains(c)) {
|
||||
result = c * b * a;
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
exit:
|
||||
return result;
|
||||
}
|
||||
|
||||
unittest {
|
||||
auto numbers = [1721, 979, 366, 299, 675, 1456].sort;
|
||||
assert(part2(numbers) == 241861950);
|
||||
}
|
Loading…
Reference in a new issue