mirror of
https://github.com/Smaug123/advent-of-code-2017
synced 2025-10-13 07:18:41 +00:00
Day 19
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -20,6 +20,10 @@ version = "0.1.0"
|
|||||||
name = "day_18"
|
name = "day_18"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day_19"
|
||||||
|
version = "0.1.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "day_2"
|
name = "day_2"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@@ -12,5 +12,6 @@ members = [
|
|||||||
"day_15",
|
"day_15",
|
||||||
"day_16",
|
"day_16",
|
||||||
"day_18",
|
"day_18",
|
||||||
|
"day_19",
|
||||||
"day_23",
|
"day_23",
|
||||||
]
|
]
|
||||||
|
9
day_19/Cargo.toml
Normal file
9
day_19/Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day_19"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Smaug123 <patrick+github@patrickstevens.co.uk>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
201
day_19/input.txt
Normal file
201
day_19/input.txt
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
|
|
||||||
|
+---------------------------------------------------+ +-+ +-----+ +-------------------------------+ +-------------------------------------+ +---+
|
||||||
|
| | | | | | | | | | | | |
|
||||||
|
| | +-----+ +---------------------------|-------------------|---------+ | | | | +-----+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | |
|
||||||
|
+---+ +-+ | +---+ +-----------------------------+ | +---------------+ | +-----------|-----------------------------|---+ +-+ +---|-+ |
|
||||||
|
| | | | | | | | | | | | | | | | | | |
|
||||||
|
| | +-|---+ +---+ +-|-----------------------------|-|-------------------------------------------------------+ | | +-------------------------------------------|---|-+ |
|
||||||
|
| | | | | | | | | | | | | | | | | | |
|
||||||
|
+---|-+ | +-|---|-----------------------------------|-----------------------------+ +-------------|-----------|-------------------------------------------------------|-----+ |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | +---+ +-+ | +---------------|-----------------------------------------------+ | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---|-|-----|-|---|-|---+ | | | | | +---------------|--------------------------------P--------------|-------------------------------------------------------+ | | | |
|
||||||
|
| | | | | | | | | | | O | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | +-----------|-------|-----------------------------------------------------------------------------------------------------------------+ | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+-------+ | | | | | | +---|-|---+ +-|---+ | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | +-------------------+ | | | +-+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +-+ | +-------|-----|-|-|---|-------------------|-----|-|-----------------------------|-------------------------|-------|---------------------------|-----------------|---|---|-+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +-----|---|-----|-----|---|-----------|-+ +---|-|-----|-----------------|-----------------------------------------------|-------|-|-------------------------+ | +-|---|---|-+ | | | |
|
||||||
|
| | | | | | | M | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+-|-+ +-+ | +---|---+ | | | +---------+ | | | | | | | | | | | | | +---------------------+ | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | +-----------|-------------|---------------------------------|-----------|-----+ | +-------------|-|-------+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +-|-----------|-|-|---|---|----------------S--|-----|-------------------------------|-----------------+ | | | | +-------------------+ | | | | | +-|L----+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | +-|-----------|-----------|-----|-----|-----------|-+ | | | +---|---|-----------+ | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | +-+ | | | | | | | | | | | | | | | | | | | | | | +-----------|---|---------|-|-------|-----|-|-------|-|-+ | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+-|-|-------|-------------|-----|-|-------|---------------------|-------------------|-----------|---------------------------------------------------|-|-------|-----+ | | | | | +---+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | +-----|-+ +-|-----|---|-|---------|---|---------|-|-----------|-----------|-|-----------|-+ | +---+ | | | +-------------|---------+ | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | +-----------------|---|---------|---+ | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------|-----------|---+ | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | +-----+ | | | | | | | | | +---------|-------------------|---------|---|-|-------|---|-----|-------|---------+ | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---|-----|-----|-------|---|---+ | | | | | | | | | | +-----+ | | | | | | +-------------------|-------|-|-----|-------|---|-----|-|---------------|-+ | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---|---|-|-----|-----|-----+ | | | | | | | | | | +-----|-----|-------------|-|-----------------------|-----------|-+ | | | | | | | | | | | | +-|---+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---------------|---------|---------|---------|---+ | | | +-----|---------------|-------------|-|-----------|-----------|-----------+ | +-+ | | | | | +-----|-----|---|-------------+ | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +-|-|---|-----|---|-+ | | | | | | | | | | | +-|-------|-------------|-----------|-----------|---------------------------|-------|---|-----|-|-----|---|---------+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---+ | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +-|-|---|-----|-----------|-------|-------|---|-----------------|-----|-|-------------------+ | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-------+ | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | +-----|---|---|-------|-|---------|-----------------+ | | | | | | | | +-+ | | | | | | | | | | +-----+ | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | +-+ | | | | | | | | | | | | | | | | | +-----------|-------------------------------------------------------------|-----|-|-|-|-----|---|-----|----A|-+ | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | +---|-----+ | | | | | | | | | | | | | | | +-|-----------|-------------------------|-------|-----------------------|-|-------------|-+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---|-|-|---|-----|---|-------|-----|-----|-----|-----|---|-|---|-----------------|-|-----------------------------------------------------------+ | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | +---------------------------|-----|---|-|-----|---|---|-------|-|-------------------------+ | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | +-|-|---|---------------|-|-----------|-----|-------|---|---------|-----------|---------------------------------------------------------|---------|-----|-------|-+ | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +-----|---+ | | +-|---+ | | +---|-|---|-+ | | | | | | | | | | | | | +-------|-------------------------------------|---|---------------|-|---|-|---------|-|---|---|-------|-|-|-+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +---|---+ +-+ +---|-|-|---|-|-----|-----|---|-----------|-|---|-----|-+ | | | | | | +-------------------------|-------------|-----|-|---|-----------------|---|-------|-|-+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | +---|---------------------|-------------------------------------|-------------------|-|---|-------|-+ | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | +-----------|-------------|-------------------------------------|---|-----------------|-----|---|---|-|-----|---|-------|-----+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | +-----|---|-|-----|-|-|-----|---|-----|-------|---------------------+ | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +-----------------|---------|---------|-------|-|-|---|-|---------|-----|-|---------|---|-----------|-----------|-----------------|---------|-------|---|-----|---|-|-|---|-------+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---+ |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +---|-|---|---------|-|-|---|-----|-----------|-------+ | | | | | | | | | | | +---|-----------------------|---------------------------|-----|-----|-|---|-+ | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | +-----------+ | | | | | | | | | | | | | | | | | | | | +-|-----|-------------------|---------+ | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | +-----------|---------------------------------------------|---|---------|-----------|-----+ | | | | | +-|-----|---+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---------------|-------------+ | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | +-|-------+ | | | | | | | | | | | +-|-------|-----------|-----------|-------------|-------------------|-|-----|-----------|-------|-------+ | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | +---+ +---|-----|-|---|-+ +---|---|-|-----+ | | +---------|-------------|---------+ | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | +-|-+ | | | | | | +-----------|-|-----|---|-------|---|-|-------|---------------------+ | | | | +---|-------|-+ | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | +---+ +-|---|-+ | | | | | | +-----------|---+ | | | | | | | | | | | | | | | | | | | | | +-|-----------------------|-+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | +---------+ | +-------|-----|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +-----|-|-------------|-|-|---|---|-------|-------|-+ | | | | | | | | | | | +-----+ +---+ | | +-+ | | | | | | | | +-------------|-+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +-|---------|---|-|---|---|-|-----|---------|---------------|-|-----+ | +-|---+ | | +-------------|-------------|-------------|-------------------|-----|-+ +---|-+ | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|-----------------------|-----|---|-|---|---+ | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | +-----------+ | | | | | | | | | | | | | | | +---------------------|---|---------|-|-------------|-|---------|-|-----+ | | Y
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | +---------------|---|-|-----|-----------|-----------------|---------|---------------------|---|-----|-----|---|-------|-+ | | | | +-----+ | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +-----------|-|-----+ | | | | +---------------------|-|-|---+ | +---------------------------|---------|---------------|---------------------------------------------------------|-|-+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | G | | | | | | | | | | | | | | |
|
||||||
|
| | | +---|---------|---|---|-------|---------------------------------------------|-----|---|-|-----------------------|-|-------------|-----|---------|---|-------+ | | +-------------+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|---------|-----+ | | | +-|-----+ | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | +-|---+ | +-|---|-------|-|-------------------------------|-|---|---|---|---+ | | | | | | | | | | | | +-+ | | +-------------|---|-------+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-|---+ | +---|---------|---------------+ | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | +---------------|-|---------------|-------------------|---|-|-|-|-|---|---|---|-|-|-|-|-------------------+ | | | | | | | | | +---+ | | | | +---|---|-----|-+ | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | +-------------|---|-|---------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+-+ | | +-------------------|-----|-------|-----|-------------+ | | | | | | | | | | | | | +-----------------|---|-|---+ | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | +---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----|-|-|-----+ | | +-------+ |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+-----|---------+ | | | +-----|---|-------|-----|-----------------|-|-----------------+ +---|---------------+ | | | | | | | +-------|---|-------|-|-------|-|---|-+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | +-------------|-------------+ | | | +-|---|-+ | | | | | | | | | | | | | +---+ | | | | | | | +-+ | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | J | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | +-------------|-----------+ | | | | | | | | | | | | | | | +---|---+ | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | +---+ | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | +-+ | | | +---------|---|-|-|-------|---|-------|-|---------|---|---------------------|---------|-----|---------------|-----------|-----+ +---------|-+ |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | +-------|-------|---|-----+ | | +-|-----------------|-----+ +-----------|---|-----|-+ | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+-----|---------|---------+ +-----------------------------+ | | +---|-+ | | +-|-----|-----|-------------|---------|-------+ | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | +---+ | | +---+ | | | +---+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
+---------+ | | | | | | | | | | | | | +-|---|-------------|-------|-+ | | | +-+ | | +-|---+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| | | | | | | | | +-------|-------|---------------|-------------|---------+ | | | | | | | | |
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +---+ | | | | +-----|-|-------|-|---------|-----------|-------------------------|-----------------------------------------+ +-+ | +---|-----|-+
|
||||||
|
| | | | | | | | | | | | | | | | | | | | | | | |
|
||||||
|
| +-----------------------------------|---------|---------+ | +-------|---+ | | | | +-------|---------------------------+ +-----------|-------+ +-+
|
||||||
|
| | | | | | | | | | | | | | | | | |
|
||||||
|
| +-----------------------------------+ | | +---+ | +-----------+ +-----------------------|-------------------------------------------+ +-------+
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | +---------------------|-----------|-----------------------------|-------------------------|-----------------------------------+ +-------+
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
+-----+ +-------------------|---------------------------+ +---------------------------------|-|-----------------------|-----------------------------------------------------+ |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| +-------------------------|-------------------|-------|---|-----+ | | | | | | |
|
||||||
|
| | | | | | | | | | | | | |
|
||||||
|
| | +---|-------------------|-----------|-----------------------------+ +---------------------+ | | +-----+
|
||||||
|
| | | | | | | | | | | |
|
||||||
|
+-----------------+ +-+ +-------------------+ +---+ +-----------------------------------+ +---+
|
||||||
|
|
146
day_19/src/main.rs
Normal file
146
day_19/src/main.rs
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
#[derive(Clone, Copy, PartialEq, Eq)]
|
||||||
|
enum Square {
|
||||||
|
Empty,
|
||||||
|
Vertical,
|
||||||
|
Horizontal,
|
||||||
|
Cross,
|
||||||
|
Char(char),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse(c: char) -> Square {
|
||||||
|
match c {
|
||||||
|
' ' => Square::Empty,
|
||||||
|
'|' => Square::Vertical,
|
||||||
|
'-' => Square::Horizontal,
|
||||||
|
'+' => Square::Cross,
|
||||||
|
c => Square::Char(c),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn input() -> Vec<Vec<Square>> {
|
||||||
|
let input = include_str!("../input.txt");
|
||||||
|
let mut output = input
|
||||||
|
.lines()
|
||||||
|
.map(|l| l.chars().map(|c| parse(c)).collect())
|
||||||
|
.collect::<Vec<Vec<_>>>();
|
||||||
|
let max_len = output.iter().map(|l| l.len()).max().unwrap();
|
||||||
|
for row in output.iter_mut() {
|
||||||
|
if row.len() < max_len {
|
||||||
|
row.extend(std::iter::repeat(Square::Empty).take(max_len - row.len()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output
|
||||||
|
}
|
||||||
|
|
||||||
|
fn execute(square: &Vec<Vec<Square>>) -> (String, u32) {
|
||||||
|
let mut row = 0;
|
||||||
|
let mut col = square[0]
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.filter_map(|(i, &j)| {
|
||||||
|
if j == Square::Vertical {
|
||||||
|
Some(i.clone())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.next()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut answer: Vec<char> = vec![];
|
||||||
|
|
||||||
|
let mut is_vertical = true;
|
||||||
|
let mut increasing = true;
|
||||||
|
let mut steps = 0;
|
||||||
|
|
||||||
|
loop {
|
||||||
|
steps += 1;
|
||||||
|
match square[row][col] {
|
||||||
|
Square::Empty => {
|
||||||
|
return (answer.iter().collect::<String>(), steps - 1);
|
||||||
|
}
|
||||||
|
Square::Cross => {
|
||||||
|
if is_vertical {
|
||||||
|
is_vertical = false;
|
||||||
|
if col == 0 {
|
||||||
|
increasing = true;
|
||||||
|
col = 1;
|
||||||
|
} else if col == square[row].len() - 1 {
|
||||||
|
increasing = false;
|
||||||
|
col = square[row].len() - 2;
|
||||||
|
} else {
|
||||||
|
let left = &square[row][col - 1];
|
||||||
|
let right = &square[row][col + 1];
|
||||||
|
if *left == Square::Empty {
|
||||||
|
increasing = true;
|
||||||
|
col += 1;
|
||||||
|
} else if *right == Square::Empty {
|
||||||
|
increasing = false;
|
||||||
|
col -= 1;
|
||||||
|
} else {
|
||||||
|
panic!("Expected crossroads to move us horizontal.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
is_vertical = true;
|
||||||
|
if row == 0 {
|
||||||
|
increasing = true;
|
||||||
|
row = 1;
|
||||||
|
} else if row == square.len() - 1 {
|
||||||
|
increasing = false;
|
||||||
|
row = square.len() - 2;
|
||||||
|
} else {
|
||||||
|
let top = &square[row - 1][col];
|
||||||
|
let bottom = &square[row + 1][col];
|
||||||
|
if *top == Square::Empty {
|
||||||
|
increasing = true;
|
||||||
|
row += 1;
|
||||||
|
} else if *bottom == Square::Empty {
|
||||||
|
increasing = false;
|
||||||
|
row -= 1;
|
||||||
|
} else {
|
||||||
|
panic!("Expected crossroads to move us vertical.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Square::Char(c) => {
|
||||||
|
answer.push(c);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
if increasing {
|
||||||
|
if is_vertical {
|
||||||
|
row += 1;
|
||||||
|
} else {
|
||||||
|
col += 1;
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
if is_vertical {
|
||||||
|
row -= 1;
|
||||||
|
} else {
|
||||||
|
col -= 1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let input = input();
|
||||||
|
let (part_1, part_2) = execute(&input);
|
||||||
|
println!("part 1 => {}", part_1);
|
||||||
|
println!("part 2 => {}", part_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_day_1() {
|
||||||
|
let (part_1, part_2) = execute(&input());
|
||||||
|
assert_eq!(part_1, "GPALMJSOY");
|
||||||
|
assert_eq!(part_2, 16204);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user