2022 day 17 init
This commit is contained in:
111
2022/day17/Makefile
Normal file
111
2022/day17/Makefile
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
# AOC daily Makefile - GNU make only.
|
||||||
|
#
|
||||||
|
# Copyright (C) 2021-2023 Bruno Raoult ("br")
|
||||||
|
# Licensed under the GNU General Public License v3.0 or later.
|
||||||
|
# Some rights reserved. See COPYING.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with this
|
||||||
|
# program. If not, see <https://www.gnu.org/licenses/gpl-3.0-standalone.html>.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later <https://spdx.org/licenses/GPL-3.0-or-later.html>
|
||||||
|
#
|
||||||
|
|
||||||
|
INPUT := input/input.txt
|
||||||
|
SHELL := /bin/bash
|
||||||
|
|
||||||
|
CC := gcc
|
||||||
|
BEAR := bear
|
||||||
|
CCLSFILE:= compile_commands.json
|
||||||
|
|
||||||
|
LIB := aoc_$(shell uname -m)
|
||||||
|
INCDIR := ../include
|
||||||
|
LIBDIR := ../lib
|
||||||
|
LDFLAGS := -L$(LIBDIR)
|
||||||
|
#LDLIB := -l$(LIB) -lm
|
||||||
|
LDLIB := -l$(LIB)
|
||||||
|
|
||||||
|
export LD_LIBRARY_PATH = $(LIBDIR)
|
||||||
|
|
||||||
|
CFLAGS += -std=gnu11
|
||||||
|
CFLAGS += -O2
|
||||||
|
CFLAGS += -g
|
||||||
|
# for gprof
|
||||||
|
# CFLAGS += -pg
|
||||||
|
CFLAGS += -Wall
|
||||||
|
CFLAGS += -Wextra
|
||||||
|
CFLAGS += -march=native
|
||||||
|
# Next one may be useful for valgrind (some invalid instructions)
|
||||||
|
# CFLAGS += -mno-tbm
|
||||||
|
CFLAGS += -Wmissing-declarations
|
||||||
|
CFLAGS += -Wno-unused-result
|
||||||
|
|
||||||
|
CFLAGS += -DDEBUG_DEBUG # activate general debug (debug.c)
|
||||||
|
CFLAGS += -DDEBUG_POOL # memory pools management
|
||||||
|
|
||||||
|
VALGRIND := valgrind
|
||||||
|
VALGRINDFLAGS := --leak-check=full --show-leak-kinds=all --track-origins=yes \
|
||||||
|
--sigill-diagnostics=yes --quiet --show-error-list=yes
|
||||||
|
|
||||||
|
|
||||||
|
TIME := \time -f "\ttime: %E real, %U user, %S sys\n\tcontext-switch:\t%c+%w, page-faults: %F+%R\n"
|
||||||
|
export PATH := .:$(PATH)
|
||||||
|
|
||||||
|
.PHONY: clean all compile assembly memcheck memcheck1 memcheck2 part1 part2 ccls bear org
|
||||||
|
|
||||||
|
all: README.org ccls part1 part2
|
||||||
|
|
||||||
|
memcheck: memcheck1 memcheck2
|
||||||
|
|
||||||
|
memcheck1: aoc-c
|
||||||
|
@$(VALGRIND) $(VALGRINDFLAGS) aoc-c -p 1 < $(INPUT)
|
||||||
|
|
||||||
|
memcheck2: aoc-c
|
||||||
|
@$(VALGRIND) $(VALGRINDFLAGS) aoc-c -p 2 < $(INPUT)
|
||||||
|
@#@valgrind -s --track-origins=yes aoc-c -p 2 < $(INPUT)
|
||||||
|
|
||||||
|
compile: aoc-c
|
||||||
|
|
||||||
|
cpp: aoc-c.i
|
||||||
|
|
||||||
|
assembly: aoc-c.s
|
||||||
|
|
||||||
|
part1: aoc-c
|
||||||
|
@#$(TIME) aoc.bash -p 1 < $(INPUT) 2>&1
|
||||||
|
@$(TIME) aoc-c -p 1 < $(INPUT)
|
||||||
|
|
||||||
|
part2: aoc-c
|
||||||
|
@#$(TIME) aoc.bash -p 2 < $(INPUT) 2>&1
|
||||||
|
@$(TIME) aoc-c -p 2 < $(INPUT)
|
||||||
|
|
||||||
|
ccls: $(CCLSFILE)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@rm -f aoc-c core* vgcore* gmon.out aoc-c.s aoc-c.i README.html compile_commands.json
|
||||||
|
|
||||||
|
aoc-c: aoc-c.c common.c
|
||||||
|
@echo compiling $<
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -I $(INCDIR) $^ $(LDLIB) -o $@
|
||||||
|
|
||||||
|
# generate pre-processed file (.i) and assembler (.s)
|
||||||
|
%.i: %.c
|
||||||
|
@echo generating $@
|
||||||
|
@$(CC) -E $(CFLAGS) -I $(INCDIR) $< -o $@
|
||||||
|
|
||||||
|
%.s: %.c
|
||||||
|
@echo generating $@
|
||||||
|
@$(CC) -S -fverbose-asm $(CFLAGS) -I $(INCDIR) $< -o $@
|
||||||
|
|
||||||
|
# generate README.org from README.html (must cleanup !)
|
||||||
|
org: README.org
|
||||||
|
|
||||||
|
%.org: %.html
|
||||||
|
@echo generating $@. Cleanup before commit !
|
||||||
|
@pandoc $< -o $@
|
||||||
|
|
||||||
|
# generate compile_commands.json
|
||||||
|
$(CCLSFILE): aoc-c.c Makefile
|
||||||
|
$(BEAR) -- make clean compile
|
||||||
|
|
||||||
|
bear: clean
|
||||||
|
@touch .ccls-root
|
||||||
|
@$(BEAR) -- make compile
|
374
2022/day17/README.org
Normal file
374
2022/day17/README.org
Normal file
@@ -0,0 +1,374 @@
|
|||||||
|
** --- Day 17: Pyroclastic Flow ---
|
||||||
|
Your handheld device has located an alternative exit from the cave for
|
||||||
|
you and the elephants. The ground is rumbling almost continuously now,
|
||||||
|
but the strange valves bought you some time. It's definitely getting
|
||||||
|
warmer in here, though.
|
||||||
|
|
||||||
|
The tunnels eventually open into a very tall, narrow chamber. Large,
|
||||||
|
oddly-shaped rocks are falling into the chamber from above, presumably
|
||||||
|
due to all the rumbling. If you can't work out where the rocks will fall
|
||||||
|
next, you might be crushed!
|
||||||
|
|
||||||
|
The five types of rocks have the following peculiar shapes, where =#= is
|
||||||
|
rock and =.= is empty space:
|
||||||
|
|
||||||
|
#+begin_example
|
||||||
|
####
|
||||||
|
|
||||||
|
.#.
|
||||||
|
###
|
||||||
|
.#.
|
||||||
|
|
||||||
|
..#
|
||||||
|
..#
|
||||||
|
###
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
The rocks fall in the order shown above: first the =-= shape, then the
|
||||||
|
=+= shape, and so on. Once the end of the list is reached, the same
|
||||||
|
order repeats: the =-= shape falls first, sixth, 11th, 16th, etc.
|
||||||
|
|
||||||
|
The rocks don't spin, but they do get pushed around by jets of hot gas
|
||||||
|
coming out of the walls themselves. A quick scan reveals the effect the
|
||||||
|
jets of hot gas will have on the rocks as they fall (your puzzle input).
|
||||||
|
|
||||||
|
For example, suppose this was the jet pattern in your cave:
|
||||||
|
|
||||||
|
#+begin_example
|
||||||
|
>>><<><>><<<>><>>><<<>>><<<><<<>><>><<>>
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
In jet patterns, =<= means a push to the left, while =>= means a push to
|
||||||
|
the right. The pattern above means that the jets will push a falling
|
||||||
|
rock right, then right, then right, then left, then left, then right,
|
||||||
|
and so on. If the end of the list is reached, it repeats.
|
||||||
|
|
||||||
|
The tall, vertical chamber is exactly /seven units wide/. Each rock
|
||||||
|
appears so that its left edge is two units away from the left wall and
|
||||||
|
its bottom edge is three units above the highest rock in the room (or
|
||||||
|
the floor, if there isn't one).
|
||||||
|
|
||||||
|
After a rock appears, it alternates between /being pushed by a jet of
|
||||||
|
hot gas/ one unit (in the direction indicated by the next symbol in the
|
||||||
|
jet pattern) and then /falling one unit down/. If any movement would
|
||||||
|
cause any part of the rock to move into the walls, floor, or a stopped
|
||||||
|
rock, the movement instead does not occur. If a /downward/ movement
|
||||||
|
would have caused a falling rock to move into the floor or an
|
||||||
|
already-fallen rock, the falling rock stops where it is (having landed
|
||||||
|
on something) and a new rock immediately begins falling.
|
||||||
|
|
||||||
|
Drawing falling rocks with =@= and stopped rocks with =#=, the jet
|
||||||
|
pattern in the example above manifests as follows:
|
||||||
|
|
||||||
|
#+begin_example
|
||||||
|
The first rock begins falling:
|
||||||
|
|..@@@@.|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock right:
|
||||||
|
|...@@@@|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit:
|
||||||
|
|...@@@@|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock right, but nothing happens:
|
||||||
|
|...@@@@|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit:
|
||||||
|
|...@@@@|
|
||||||
|
|.......|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock right, but nothing happens:
|
||||||
|
|...@@@@|
|
||||||
|
|.......|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit:
|
||||||
|
|...@@@@|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock left:
|
||||||
|
|..@@@@.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit, causing it to come to rest:
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
A new rock begins falling:
|
||||||
|
|...@...|
|
||||||
|
|..@@@..|
|
||||||
|
|...@...|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock left:
|
||||||
|
|..@....|
|
||||||
|
|.@@@...|
|
||||||
|
|..@....|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit:
|
||||||
|
|..@....|
|
||||||
|
|.@@@...|
|
||||||
|
|..@....|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock right:
|
||||||
|
|...@...|
|
||||||
|
|..@@@..|
|
||||||
|
|...@...|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit:
|
||||||
|
|...@...|
|
||||||
|
|..@@@..|
|
||||||
|
|...@...|
|
||||||
|
|.......|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock left:
|
||||||
|
|..@....|
|
||||||
|
|.@@@...|
|
||||||
|
|..@....|
|
||||||
|
|.......|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit:
|
||||||
|
|..@....|
|
||||||
|
|.@@@...|
|
||||||
|
|..@....|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Jet of gas pushes rock right:
|
||||||
|
|...@...|
|
||||||
|
|..@@@..|
|
||||||
|
|...@...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
Rock falls 1 unit, causing it to come to rest:
|
||||||
|
|...#...|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
A new rock begins falling:
|
||||||
|
|....@..|
|
||||||
|
|....@..|
|
||||||
|
|..@@@..|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|...#...|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
The moment each of the next few rocks begins falling, you would see
|
||||||
|
this:
|
||||||
|
|
||||||
|
#+begin_example
|
||||||
|
|..@....|
|
||||||
|
|..@....|
|
||||||
|
|..@....|
|
||||||
|
|..@....|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|..#....|
|
||||||
|
|..#....|
|
||||||
|
|####...|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|..@@...|
|
||||||
|
|..@@...|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|..@@@@.|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|...@...|
|
||||||
|
|..@@@..|
|
||||||
|
|...@...|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.####..|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|....@..|
|
||||||
|
|....@..|
|
||||||
|
|..@@@..|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|..#....|
|
||||||
|
|.###...|
|
||||||
|
|..#....|
|
||||||
|
|.####..|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|..@....|
|
||||||
|
|..@....|
|
||||||
|
|..@....|
|
||||||
|
|..@....|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.....#.|
|
||||||
|
|.....#.|
|
||||||
|
|..####.|
|
||||||
|
|.###...|
|
||||||
|
|..#....|
|
||||||
|
|.####..|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|..@@...|
|
||||||
|
|..@@...|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|....#..|
|
||||||
|
|....#..|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|..####.|
|
||||||
|
|.###...|
|
||||||
|
|..#....|
|
||||||
|
|.####..|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
|
||||||
|
|..@@@@.|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|.......|
|
||||||
|
|....#..|
|
||||||
|
|....#..|
|
||||||
|
|....##.|
|
||||||
|
|##..##.|
|
||||||
|
|######.|
|
||||||
|
|.###...|
|
||||||
|
|..#....|
|
||||||
|
|.####..|
|
||||||
|
|....##.|
|
||||||
|
|....##.|
|
||||||
|
|....#..|
|
||||||
|
|..#.#..|
|
||||||
|
|..#.#..|
|
||||||
|
|#####..|
|
||||||
|
|..###..|
|
||||||
|
|...#...|
|
||||||
|
|..####.|
|
||||||
|
+-------+
|
||||||
|
#+end_example
|
||||||
|
|
||||||
|
To prove to the elephants your simulation is accurate, they want to know
|
||||||
|
how tall the tower will get after 2022 rocks have stopped (but before
|
||||||
|
the 2023rd rock begins falling). In this example, the tower of rocks
|
||||||
|
will be =3068= units tall.
|
||||||
|
|
||||||
|
/How many units tall will the tower of rocks be after 2022 rocks have
|
||||||
|
stopped falling?/
|
17
2022/day17/aoc.h
Normal file
17
2022/day17/aoc.h
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/* aoc.c: Advent of Code 2022
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022-2023 Bruno Raoult ("br")
|
||||||
|
* Licensed under the GNU General Public License v3.0 or later.
|
||||||
|
* Some rights reserved. See COPYING.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with this
|
||||||
|
* program. If not, see <https://www.gnu.org/licenses/gpl-3.0-standalone.html>.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later <https://spdx.org/licenses/GPL-3.0-or-later.html>
|
||||||
|
*/
|
||||||
|
#ifndef _AOC_H_
|
||||||
|
#define _AOC_H_
|
||||||
|
|
||||||
|
extern int parseargs(int ac, char**av);
|
||||||
|
extern int testmode(void);
|
||||||
|
#endif /* _AOC_H_ */
|
68
2022/day17/common.bash
Normal file
68
2022/day17/common.bash
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# common.bash: Advent of Code 2022, common bash functions
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022-2023 Bruno Raoult ("br")
|
||||||
|
# Licensed under the GNU General Public License v3.0 or later.
|
||||||
|
# Some rights reserved. See COPYING.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with this
|
||||||
|
# program. If not, see <https://www.gnu.org/licenses/gpl-3.0-standalone.html>.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later <https://spdx.org/licenses/GPL-3.0-or-later.html>
|
||||||
|
|
||||||
|
# shellcheck disable=2034
|
||||||
|
export cmdname=${0##*/}
|
||||||
|
export debug=0
|
||||||
|
export res
|
||||||
|
export LANG=C
|
||||||
|
|
||||||
|
shopt -s extglob
|
||||||
|
set -o noglob
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf "usage: %s [-d DEBUG] [-p PART]\n" "$cmdname"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
checkargs() {
|
||||||
|
local part=1
|
||||||
|
while getopts p:d: todo; do
|
||||||
|
case "$todo" in
|
||||||
|
d)
|
||||||
|
if [[ "$OPTARG" =~ ^[[:digit:]+]$ ]]; then
|
||||||
|
debug="$OPTARG"
|
||||||
|
else
|
||||||
|
printf "%s: illegal [%s] debug level.\n" "$CMD" "$OPTARG"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
if [[ "$OPTARG" =~ ^[12]$ ]]; then
|
||||||
|
part="$OPTARG"
|
||||||
|
else
|
||||||
|
printf "%s: illegal [%s] part.\n" "$CMD" "$OPTARG"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
# Now check remaining argument (backup directory)
|
||||||
|
shift $((OPTIND - 1))
|
||||||
|
|
||||||
|
(( $# > 1 )) && usage
|
||||||
|
return "$part"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local -i part
|
||||||
|
|
||||||
|
checkargs "$@"
|
||||||
|
part=$?
|
||||||
|
parse "$part"
|
||||||
|
solve "$part"
|
||||||
|
printf "%s: res=%s\n" "$cmdname" "$res"
|
||||||
|
}
|
59
2022/day17/common.c
Normal file
59
2022/day17/common.c
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/* common.c: Advent of Code 2022, common functions
|
||||||
|
*
|
||||||
|
* Copyright (C) 2022-2023 Bruno Raoult ("br")
|
||||||
|
* Licensed under the GNU General Public License v3.0 or later.
|
||||||
|
* Some rights reserved. See COPYING.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with this
|
||||||
|
* program. If not, see <https://www.gnu.org/licenses/gpl-3.0-standalone.html>.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later <https://spdx.org/licenses/GPL-3.0-or-later.html>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "aoc.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
static int _testmode = 0;
|
||||||
|
|
||||||
|
static int usage(char *prg)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Usage: %s [-t][-d debug_level] [-p part] [-i input]\n", prg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int testmode(void)
|
||||||
|
{
|
||||||
|
return _testmode;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parseargs(int ac, char **av)
|
||||||
|
{
|
||||||
|
int opt, part = 1;
|
||||||
|
|
||||||
|
while ((opt = getopt(ac, av, "td:p:")) != -1) {
|
||||||
|
switch (opt) {
|
||||||
|
case 't':
|
||||||
|
_testmode = 1;
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
debug_level_set(atoi(optarg));
|
||||||
|
break;
|
||||||
|
case 'p': /* 1 or 2 */
|
||||||
|
part = atoi(optarg);
|
||||||
|
if (part < 1 || part > 2)
|
||||||
|
return usage(*av);
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
|
||||||
|
default:
|
||||||
|
return usage(*av);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (optind < ac)
|
||||||
|
return usage(*av);
|
||||||
|
return part;
|
||||||
|
}
|
1
2022/day17/input/example.txt
Normal file
1
2022/day17/input/example.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
>>><<><>><<<>><>>><<<>>><<<><<<>><>><<>>
|
1
2022/day17/input/input.txt
Normal file
1
2022/day17/input/input.txt
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user