/
a10.tt
48 lines (41 loc) · 882 Bytes
/
a10.tt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
composer toInt
<INT>
end toInt
templates mergesort
templates merge
@: $(2);
[ $(1)... -> \(
when <?($@merge<[](0)>)
| ..$@merge(1)> do
$ !
otherwise
^@merge(1) !
$ -> #
\),
$@...] !
end merge
$ -> #
when <[](0..1)> do $!
otherwise
def half: $::length ~/ 2;
[$(1..$half) -> mergesort, $($half+1..last) -> mergesort] -> merge !
end mergesort
def adapters: [$IN::lines -> toInt] -> mergesort;
source part1
@:[1..3 -> 0];
@($adapters(1)): 1;
@(3): $@(3) + 1;
2..$adapters::length -> $adapters($) - $adapters($-1) -> @($): $@($) + 1;
$@(1) * $@(3) !
end part1
'$part1;
' -> !OUT::write
source part2
@: [1, 1, 1, 4..$adapters(last)+3 -> 0];
$adapters... -> #
$@(last) !
<> def adapter: $;
1..3 -> @($adapter+$): $@($adapter+$) + $@($adapter);
end part2
'$part2;
' -> !OUT::write