Created
December 21, 2021 00:19
-
-
Save NHDaly/2d1d2099a63b458ee3668ac9a6002e82 to your computer and use it in GitHub Desktop.
NHD advent of code 2020 delve
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// def input = load_csv["/Users/nathandaly/Documents/delve/adventofcode/day1-input"] | |
// def nums = input[_, :Numbers] | |
// ic {count[nums] = 200} | |
def input_example = { | |
1721; | |
979; | |
366; | |
299; | |
675; | |
1456; | |
} | |
def input_real = { | |
1150; | |
1579; | |
1361; | |
1319; | |
1201; | |
1253; | |
1806; | |
1783; | |
1164; | |
1772; | |
1920; | |
1428; | |
1918; | |
245; | |
1504; | |
1952; | |
1057; | |
1977; | |
704; | |
1119; | |
1971; | |
1200; | |
1650; | |
1795; | |
1877; | |
1932; | |
1811; | |
1981; | |
1803; | |
1366; | |
1580; | |
1986; | |
1976; | |
1063; | |
1895; | |
1143; | |
1991; | |
1061; | |
1855; | |
1947; | |
1134; | |
1800; | |
1898; | |
1778; | |
1964; | |
1949; | |
1103; | |
1770; | |
1321; | |
2005; | |
1758; | |
1181; | |
1140; | |
1873; | |
1946; | |
1540; | |
1909; | |
1710; | |
1705; | |
1313; | |
1196; | |
1084; | |
1870; | |
1610; | |
1708; | |
1810; | |
1133; | |
1375; | |
1264; | |
1921; | |
1624; | |
41; | |
1899; | |
1226; | |
1757; | |
1978; | |
1485; | |
1385; | |
1526; | |
1653; | |
1130; | |
1223; | |
1577; | |
1912; | |
1894; | |
276; | |
954; | |
1269; | |
1769; | |
1924; | |
93; | |
1165; | |
1812; | |
1092; | |
1402; | |
1284; | |
1903; | |
1884; | |
1581; | |
1887; | |
1963; | |
1983; | |
1233; | |
1445; | |
1974; | |
1956; | |
1691; | |
1954; | |
2000; | |
1469; | |
1875; | |
955; | |
1334; | |
1116; | |
1700; | |
1818; | |
1790; | |
1704; | |
1901; | |
1072; | |
1848; | |
1990; | |
1724; | |
1719; | |
1638; | |
1311; | |
1474; | |
1837; | |
1801; | |
1929; | |
1791; | |
1317; | |
1643; | |
1632; | |
1813; | |
1488; | |
1129; | |
1998; | |
1771; | |
1793; | |
1074; | |
1826; | |
1935; | |
1462; | |
1230; | |
1797; | |
1878; | |
1751; | |
1993; | |
1437; | |
1967; | |
1844; | |
1438; | |
1969; | |
1175; | |
1823; | |
1124; | |
1922; | |
154; | |
936; | |
1117; | |
1145; | |
1308; | |
1320; | |
1767; | |
1850; | |
1809; | |
1350; | |
1820; | |
1082; | |
1597; | |
1913; | |
1766; | |
1701; | |
1294; | |
1556; | |
2006; | |
1480; | |
1953; | |
1104; | |
1861; | |
1966; | |
1248; | |
1671; | |
1955; | |
1863; | |
1202; | |
1356; | |
1842; | |
2010; | |
1288; | |
1067; | |
1576; | |
1295; | |
1760; | |
1888; | |
1639; | |
1282; | |
1633; | |
1619; | |
} | |
def input = input_real | |
def result = a*b*c | |
from (a,b,c) | |
where input(a) and input(b) and input(c) and a+b+c = 2020 | |
/* | |
def num_vars = 3 | |
@inline def nway[1] = input | |
@inline def nway[n] = nway[1], xs... : nway[n-1](xs...) | |
def o = nway[2] | |
*/ | |
/* | |
def result2 = product[vals] | |
from vals | |
where vals = pivot[vars] | |
from vars... | |
where | |
// | |
count[vals] | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def input_real_csv = load_csv["/Users/nathandaly/Documents/delve/adventofcode/day2-input.csv"] | |
// TODO: Woah, this IC isn't even running | |
// ic input_csv_len(x) = {count[input_real_csv](x) and x = 1000} | |
def input_example_csv = { | |
1, (:MinMax, "1-3"; :Char, "a:"; :Pwd, "abcde"); | |
2, (:MinMax, "1-3"; :Char, "b:"; :Pwd, "cdefg"); | |
3, (:MinMax, "2-9"; :Char, "c:"; :Pwd, "ccccccccc"); | |
} | |
def expected_violation = 2;3 | |
// ic test_no_false_positives(v){ | |
// valid(v) implies not expected_violation(v) | |
// } | |
// ic test_no_misses(v){ | |
// expected_violation(v) implies not valid(v) | |
// } | |
def input = input_real_csv | |
def pwd[i] = input[i][:Pwd] | |
def pwd_divider[i] = idx : | |
substring[s, idx, idx] = "-" and range[2,string_length[s],1](idx) | |
from s where s = input[i][:MinMax] | |
def pwd_char_min[i] = parse_int[substring[s, 1, pwd_divider[i]-1]] from s where input[i][:MinMax](s) | |
def pwd_char_max[i] = parse_int[substring[s, pwd_divider[i]+1, string_length[s]]] from s where input[i][:MinMax](s) | |
def pwd_char[i] = substring[s, 1, 1] from s where input[i][:Char](s) | |
def valid_min[i] = pwd(i,_), | |
(if pwd_char[i] = substring[pwd[i], pwd_char_min[i], pwd_char_min[i]] then 1 else 0 end) | |
def valid_max[i] = pwd(i,_), | |
(if pwd_char[i] = substring[pwd[i], pwd_char_max[i], pwd_char_max[i]] then 1 else 0 end) | |
def valid[i] = (valid_min[i] + valid_max[i]) = 1 | |
def total_valid = count[valid] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def input_real_csv = load_csv["/Users/nathandaly/Documents/delve/adventofcode/day2-input.csv"] | |
// TODO: Woah, this IC isn't even running | |
// ic input_csv_len(x) = {count[input_real_csv](x) and x = 1000} | |
def input_example_csv = { | |
1, (:MinMax, "1-3"; :Char, "a:"; :Pwd, "abcde"); | |
2, (:MinMax, "1-3"; :Char, "b:"; :Pwd, "cdefg"); // Not enough (0) | |
3, (:MinMax, "2-9"; :Char, "c:"; :Pwd, "ccccccccc"); | |
// Custom added examples | |
// multi-digit min/max | |
4, (:MinMax, "10-100"; :Char, "e:"; :Pwd, "eeeeeeeeeeeeeeee"); | |
4, (:MinMax, "10-100"; :Char, "e:"; :Pwd, "eeezeeezeeeezeeeeee"); | |
5, (:MinMax, "10-100"; :Char, "e:"; :Pwd, "ee"); // Not enough | |
6, (:MinMax, "10-100"; :Char, "e:"; :Pwd, "a"); // Not enough (0) | |
7, (:MinMax, "1-3"; :Char, "f:"; :Pwd, "ffffff"); // Too many | |
8, (:MinMax, "1-3"; :Char, "f:"; :Pwd, "fafafafafaf"); // Too many | |
// Strict requirement | |
9, (:MinMax, "3-3"; :Char, "f:"; :Pwd, "fff"); | |
10, (:MinMax, "3-3"; :Char, "f:"; :Pwd, "ff"); // Too few | |
11, (:MinMax, "3-3"; :Char, "f:"; :Pwd, "ffff"); // Too many | |
12, (:MinMax, "3-3"; :Char, "f:"; :Pwd, "oooff"); // Too few | |
13, (:MinMax, "3-3"; :Char, "f:"; :Pwd, "oooffff"); // Too many | |
// border cases | |
14, (:MinMax, "2-4"; :Char, "f:"; :Pwd, "ooff"); | |
15, (:MinMax, "2-4"; :Char, "f:"; :Pwd, "ooffff"); | |
16, (:MinMax, "2-4"; :Char, "f:"; :Pwd, "oooof"); // Too few (by 1) | |
17, (:MinMax, "2-4"; :Char, "f:"; :Pwd, "oooofffff"); // Too many (by 1) | |
} | |
// def expected_violation = 2;5;6;7;8;10;11;12;13;16;17 | |
// ic test_no_false_positives(v){ | |
// violation(v) implies expected_violation(v) | |
// } | |
// ic test_no_misses(v){ | |
// expected_violation(v) implies violation(v) | |
// } | |
def input = input_real_csv | |
def pwd[i] = input[i][:Pwd] | |
def pwd_divider[i] = idx : | |
substring[s, idx, idx] = "-" and range[2,string_length[s],1](idx) | |
from s where s = input[i][:MinMax] | |
def pwd_char_min[i] = parse_int[substring[s, 1, pwd_divider[i]-1]] from s where input[i][:MinMax](s) | |
def pwd_char_max[i] = parse_int[substring[s, pwd_divider[i]+1, string_length[s]]] from s where input[i][:MinMax](s) | |
def pwd_char[i] = substring[s, 1, 1] from s where input[i][:Char](s) | |
def char_positions[i] = x : | |
pwd_char[i] = substring[s, x, x] and | |
x = range[1, string_length[s], 1] | |
from s where pwd[i](s) | |
def char_count[i] = | |
// Default value: count of 0 | |
if char_positions(i,_) then count[char_positions[i]] else (0, pwd(i,_)) end | |
def violation[i] = char_count[i] < pwd_char_min[i] or char_count[i] > pwd_char_max[i] | |
def total_valid = count[pwd] - count[violation] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def input_csv = load_csv["/Users/nathandaly/Documents/delve/adventofcode/day3-input.csv"] | |
def input_lines(i,l) = sort[p : input_csv[p, :lines]](i,p,l) from p | |
def width = string_length[input_lines[1]] | |
ic all_lines_same_length(i,l) { input_lines(i,l) implies string_length[l] = width } | |
def tree(r,c) = | |
substring[input_lines[r], c, c] = "#" and | |
range[1, width, 1](c) | |
@inline def wrap_col[c] = ((c-1) % (width))+1 | |
@inline def is_tree(r,c) = | |
tree(r,cc) from cc where cc = wrap_col[c] | |
// ic wrap_tests { | |
// wrap_col[1] = 1 and | |
// wrap_col[2] = 2 and | |
// wrap_col[11] = 11 and | |
// wrap_col[12] = 1 | |
// } | |
@inline def slope[mr, mc][i] = | |
{:r, 1+ mr*i} ; {:c, 1 + mc*i} | |
@inline | |
def path_tree[mr,mc](r,c) = | |
is_tree(r,c) and | |
slope[mr,mc][i][:r](r) and | |
slope[mr,mc][i][:c](c) | |
from i where | |
range[0, count[input_lines], 1](i) | |
@inline | |
def path_count[mr,mc] = count[path_tree[mr,mc]] | |
def path_counts = path_count[mr,mc] | |
for (mr,mc) where { | |
1,1; | |
1,3; | |
1,5; | |
1,7; | |
2,1; | |
}(mr,mc) | |
def final_product = product[path_counts] |
We can make this file beautiful and searchable if this error is corrected: No commas found in this CSV file in line 0.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
lines | |
..##....... | |
#...#...#.. | |
.#....#..#. | |
..#.#...#.# | |
.#...##..#. | |
..#.##..... | |
.#.#.#....# | |
.#........# | |
#.##...#... | |
#...##....# | |
.#..#...#.# |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def input_csv = load_csv["/Users/nathandaly/Documents/delve/adventofcode/day3-input.csv"] | |
def input_lines(i,l) = sort[p : input_csv[p, :lines]](i,p,l) from p | |
def width = string_length[input_lines[1]] | |
ic all_lines_same_length(i,l) { input_lines(i,l) implies string_length[l] = width } | |
def tree(r,c) = | |
substring[input_lines[r], c, c] = "#" and | |
range[1, width, 1](c) | |
@inline def wrap_col[c] = ((c-1) % (width))+1 | |
@inline def is_tree(r,c) = | |
tree(r,cc) from cc where cc = wrap_col[c] | |
// ic wrap_tests { | |
// wrap_col[1] = 1 and | |
// wrap_col[2] = 2 and | |
// wrap_col[11] = 11 and | |
// wrap_col[12] = 1 | |
// } | |
def path_tree(r,c) = | |
is_tree(r,c) and | |
r = 1+i and c = 1 + 3*i | |
from i where | |
range[0, count[input_lines], 1](i) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment