123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817 |
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- # https://github.com/MaterializeInc/advent-of-code-2023/blob/main/week1/aoc_1214.md
- mode cockroach
- statement ok
- CREATE TABLE input (input TEXT);
- statement ok
- INSERT INTO input VALUES (
- '.O.#....#.#.#.....O..O..O...
- .O.#....O....#..#....#####..
- .O..##..O..#O...##..#...O...
- O.##.OO#O.#...#.#.#.O..##.O.
- O..#..OO#...#..#.#O.#.#.OO.#
- #.#.#.O.O##...O...#0##..O...
- .O#...#..#.O..O.#.##..#..O..');
- query I
- WITH MUTUALLY RECURSIVE
- lines(r INT, line TEXT) AS (
- SELECT r, regexp_split_to_array(input, '\n')[r] as block
- FROM input, generate_series(1, array_length(regexp_split_to_array(input, '\n'), 1)) r
- ),
- cells(r INT, c INT, symbol TEXT) AS (
- SELECT r, c, substring(line, c, 1)
- FROM lines, generate_series(1, length(line)) c
- ),
- northward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM northward
- -- Anyone on the move does so
- UNION ALL SELECT r - 1, c, 'O' FROM north_move
- EXCEPT ALL SELECT r - 1, c, '.' FROM north_move
- UNION ALL SELECT r, c, '.' FROM north_move
- EXCEPT ALL SELECT r, c, 'O' FROM north_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM cells
- EXCEPT ALL SELECT * FROM cells_delay
- ),
- -- Each 'O' with a '.' to the north will move.
- north_move(r INT, c INT) AS (
- SELECT n1.r, n1.c
- FROM northward n1, northward n2
- WHERE n1.symbol = 'O'
- AND n1.r = n2.r + 1
- AND n1.c = n2.c
- AND n2.symbol = '.'
- ),
- part1(part1 BIGINT) AS (
- SELECT SUM(1 + (SELECT MAX(r) FROM lines) - r)
- FROM northward
- WHERE symbol = 'O'
- ),
- output (r INT, line TEXT) AS (
- SELECT r, string_agg(symbol, ' ' ORDER BY c)
- FROM northward
- GROUP BY r
- ),
- cells_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM cells )
- SELECT * FROM part1;
- ----
- 146
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR
- WITH MUTUALLY RECURSIVE
- lines(r INT, line TEXT) AS (
- SELECT r, regexp_split_to_array(input, '\n')[r] as block
- FROM input, generate_series(1, array_length(regexp_split_to_array(input, '\n'), 1)) r
- ),
- cells(r INT, c INT, symbol TEXT) AS (
- SELECT r, c, substring(line, c, 1)
- FROM lines, generate_series(1, length(line)) c
- ),
- northward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM northward
- -- Anyone on the move does so
- UNION ALL SELECT r - 1, c, 'O' FROM north_move
- EXCEPT ALL SELECT r - 1, c, '.' FROM north_move
- UNION ALL SELECT r, c, '.' FROM north_move
- EXCEPT ALL SELECT r, c, 'O' FROM north_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM cells
- EXCEPT ALL SELECT * FROM cells_delay
- ),
- -- Each 'O' with a '.' to the north will move.
- north_move(r INT, c INT) AS (
- SELECT n1.r, n1.c
- FROM northward n1, northward n2
- WHERE n1.symbol = 'O'
- AND n1.r = n2.r + 1
- AND n1.c = n2.c
- AND n2.symbol = '.'
- ),
- part1(part1 BIGINT) AS (
- SELECT SUM(1 + (SELECT MAX(r) FROM lines) - r)
- FROM northward
- WHERE symbol = 'O'
- ),
- output (r INT, line TEXT) AS (
- SELECT r, string_agg(symbol, ' ' ORDER BY c)
- FROM northward
- GROUP BY r
- ),
- cells_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM cells )
- SELECT * FROM part1;
- ----
- Explained Query:
- With
- cte l0 =
- Project (#1, #2) // { arity: 2 }
- Map (array_index(regexp_split_to_array["\n", case_insensitive=false](#0{input}), integer_to_bigint(#1{r}))) // { arity: 3 }
- FlatMap generate_series(1, (regexp_split_to_array["\n", case_insensitive=false](#0{input}) array_length 1), 1) // { arity: 2 }
- ReadStorage materialize.public.input // { arity: 1 }
- cte l1 =
- Reduce aggregates=[max(#0{r})] // { arity: 1 }
- Project (#0) // { arity: 1 }
- Get l0 // { arity: 2 }
- cte l2 =
- Union // { arity: 1 }
- Get l1 // { arity: 1 }
- Map (null) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l1 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- cte l3 =
- Project (#0, #2, #3) // { arity: 3 }
- Map (substr(#1{line}, #2{c}, 1)) // { arity: 4 }
- FlatMap generate_series(1, char_length(#1{line}), 1) // { arity: 3 }
- Get l0 // { arity: 2 }
- Return // { arity: 1 }
- With Mutually Recursive
- cte l4 =
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Get l4 // { arity: 3 }
- Project (#2, #1, #3) // { arity: 3 }
- Map ((#0{r} - 1), "O") // { arity: 4 }
- Get l6 // { arity: 2 }
- Negate // { arity: 3 }
- Project (#2, #1, #3) // { arity: 3 }
- Map ((#0{r} - 1), ".") // { arity: 4 }
- Get l6 // { arity: 2 }
- Map (".") // { arity: 3 }
- Get l6 // { arity: 2 }
- Negate // { arity: 3 }
- Map ("O") // { arity: 3 }
- Get l6 // { arity: 2 }
- Get l3 // { arity: 3 }
- Negate // { arity: 3 }
- Get l8 // { arity: 3 }
- cte l5 =
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = "O") // { arity: 3 }
- Get l4 // { arity: 3 }
- cte l6 =
- Project (#0, #1) // { arity: 2 }
- Join on=(#0{r} = (#2{r} + 1) AND #1{c} = #3{c}) type=differential // { arity: 4 }
- implementation
- %0:l5[#1{c}, #0{r}]KKef » %1:l4[#1{c}, (#0{r} + 1)]KKef
- ArrangeBy keys=[[#1{c}, #0{r}]] // { arity: 2 }
- Get l5 // { arity: 2 }
- ArrangeBy keys=[[#1{c}, (#0{r} + 1)]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = ".") // { arity: 3 }
- Get l4 // { arity: 3 }
- cte l7 =
- Reduce aggregates=[sum(((1 + #1{max}) - #0{r}))] // { arity: 1 }
- CrossJoin type=differential // { arity: 2 }
- implementation
- %1[×]U » %0:l5[×]ef
- ArrangeBy keys=[[]] // { arity: 1 }
- Project (#0) // { arity: 1 }
- Get l5 // { arity: 2 }
- ArrangeBy keys=[[]] // { arity: 1 }
- Union // { arity: 1 }
- Get l2 // { arity: 1 }
- Map (null) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l2 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- cte l8 =
- Get l3 // { arity: 3 }
- Return // { arity: 1 }
- Union // { arity: 1 }
- Get l7 // { arity: 1 }
- Map (null) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l7 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- Source materialize.public.input
- Target cluster: quickstart
- EOF
- query I
- WITH MUTUALLY RECURSIVE (RETURN AT RECURSION LIMIT 142)
- lines(r INT, line TEXT) AS (
- SELECT r, regexp_split_to_array(input, '\n')[r] as block
- FROM input, generate_series(1, array_length(regexp_split_to_array(input, '\n'), 1)) r
- ),
- cells(r INT, c INT, symbol TEXT) AS (
- SELECT r, c, substring(line, c, 1)
- FROM lines, generate_series(1, length(line)) c
- ),
- -- Where should we start each iteration from?
- -- From `east`, once it exits, but initially `cells`.
- round(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM east
- UNION ALL SELECT * FROM cells
- EXCEPT ALL SELECT * FROM cells_delay
- ),
- north(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM round
- ),
- northward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM northward
- -- Anyone on the move does so
- UNION ALL SELECT r - 1, c, 'O' FROM north_move
- EXCEPT ALL SELECT r - 1, c, '.' FROM north_move
- UNION ALL SELECT r, c, '.' FROM north_move
- EXCEPT ALL SELECT r, c, 'O' FROM north_move
- -- Second time around, the above cancels and `east` is non-empty.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- north_move(r INT, c INT) AS (
- SELECT n1.r, n1.c
- FROM northward n1, northward n2
- WHERE n1.symbol = 'O'
- AND n1.r = n2.r + 1
- AND n1.c = n2.c
- AND n2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM northward
- ),
- west(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM north
- ),
- westward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM westward
- -- Anyone on the move does so
- UNION ALL SELECT r, c - 1, 'O' FROM west_move
- EXCEPT ALL SELECT r, c - 1, '.' FROM west_move
- UNION ALL SELECT r, c, '.' FROM west_move
- EXCEPT ALL SELECT r, c, 'O' FROM west_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- west_move(r INT, c INT) AS (
- SELECT w1.r, w1.c
- FROM westward w1, westward w2
- WHERE w1.symbol = 'O'
- AND w1.r = w2.r
- AND w1.c = w2.c + 1
- AND w2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM westward
- ),
- south(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM west
- ),
- southward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM southward
- -- Anyone on the move does so
- UNION ALL SELECT r + 1, c, 'O' FROM south_move
- EXCEPT ALL SELECT r + 1, c, '.' FROM south_move
- UNION ALL SELECT r, c, '.' FROM south_move
- EXCEPT ALL SELECT r, c, 'O' FROM south_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- south_move(r INT, c INT) AS (
- SELECT s1.r, s1.c
- FROM southward s1, southward s2
- WHERE s1.symbol = 'O'
- AND s1.r = s2.r - 1
- AND s1.c = s2.c
- AND s2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM southward
- ),
- east(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM south
- ),
- eastward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM eastward
- -- Anyone on the move does so
- UNION ALL SELECT r, c + 1, 'O' FROM east_move
- EXCEPT ALL SELECT r, c + 1, '.' FROM east_move
- UNION ALL SELECT r, c, '.' FROM east_move
- EXCEPT ALL SELECT r, c, 'O' FROM east_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- east_move(r INT, c INT) AS (
- SELECT e1.r, e1.c
- FROM eastward e1, eastward e2
- WHERE e1.symbol = 'O'
- AND e1.r = e2.r
- AND e1.c = e2.c - 1
- AND e2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM eastward
- ),
- output (r INT, line TEXT) AS (
- SELECT r, string_agg(symbol, ' ' ORDER BY c)
- FROM round
- GROUP BY r
- ),
- transitions(source TEXT, target TEXT) AS (
- SELECT
- (SELECT string_agg(symbol, '' ORDER BY r, c) FROM round),
- (SELECT string_agg(symbol, '' ORDER BY r, c) FROM east)
- UNION ALL
- SELECT * FROM transitions
- ),
- part2(part2 BIGINT) AS (
- SELECT SUM(1 + (SELECT MAX(r) FROM lines) - r)
- FROM east
- WHERE symbol = 'O'
- ),
- cells_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM cells )
- -- SELECT count, COUNT(*)
- -- FROM (
- -- SELECT source, target, COUNT(*) count
- -- FROM transitions
- -- GROUP BY source, target)
- -- GROUP BY count;
- -- SELECT * FROM output ORDER BY r;
- SELECT * FROM part2;
- ----
- 105
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH(humanized expressions, arity, join implementations) AS VERBOSE TEXT FOR
- WITH MUTUALLY RECURSIVE (RETURN AT RECURSION LIMIT 142)
- lines(r INT, line TEXT) AS (
- SELECT r, regexp_split_to_array(input, '\n')[r] as block
- FROM input, generate_series(1, array_length(regexp_split_to_array(input, '\n'), 1)) r
- ),
- cells(r INT, c INT, symbol TEXT) AS (
- SELECT r, c, substring(line, c, 1)
- FROM lines, generate_series(1, length(line)) c
- ),
- -- Where should we start each iteration from?
- -- From `east`, once it exits, but initially `cells`.
- round(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM east
- UNION ALL SELECT * FROM cells
- EXCEPT ALL SELECT * FROM cells_delay
- ),
- north(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM round
- ),
- northward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM northward
- -- Anyone on the move does so
- UNION ALL SELECT r - 1, c, 'O' FROM north_move
- EXCEPT ALL SELECT r - 1, c, '.' FROM north_move
- UNION ALL SELECT r, c, '.' FROM north_move
- EXCEPT ALL SELECT r, c, 'O' FROM north_move
- -- Second time around, the above cancels and `east` is non-empty.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- north_move(r INT, c INT) AS (
- SELECT n1.r, n1.c
- FROM northward n1, northward n2
- WHERE n1.symbol = 'O'
- AND n1.r = n2.r + 1
- AND n1.c = n2.c
- AND n2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM northward
- ),
- west(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM north
- ),
- westward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM westward
- -- Anyone on the move does so
- UNION ALL SELECT r, c - 1, 'O' FROM west_move
- EXCEPT ALL SELECT r, c - 1, '.' FROM west_move
- UNION ALL SELECT r, c, '.' FROM west_move
- EXCEPT ALL SELECT r, c, 'O' FROM west_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- west_move(r INT, c INT) AS (
- SELECT w1.r, w1.c
- FROM westward w1, westward w2
- WHERE w1.symbol = 'O'
- AND w1.r = w2.r
- AND w1.c = w2.c + 1
- AND w2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM westward
- ),
- south(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM west
- ),
- southward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM southward
- -- Anyone on the move does so
- UNION ALL SELECT r + 1, c, 'O' FROM south_move
- EXCEPT ALL SELECT r + 1, c, '.' FROM south_move
- UNION ALL SELECT r, c, '.' FROM south_move
- EXCEPT ALL SELECT r, c, 'O' FROM south_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- south_move(r INT, c INT) AS (
- SELECT s1.r, s1.c
- FROM southward s1, southward s2
- WHERE s1.symbol = 'O'
- AND s1.r = s2.r - 1
- AND s1.c = s2.c
- AND s2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM southward
- ),
- east(r INT, c INT, symbol TEXT) AS (
- WITH MUTUALLY RECURSIVE
- start(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM south
- ),
- eastward(r INT, c INT, symbol TEXT) AS (
- SELECT * FROM eastward
- -- Anyone on the move does so
- UNION ALL SELECT r, c + 1, 'O' FROM east_move
- EXCEPT ALL SELECT r, c + 1, '.' FROM east_move
- UNION ALL SELECT r, c, '.' FROM east_move
- EXCEPT ALL SELECT r, c, 'O' FROM east_move
- -- Initial state is cells, but not refreshed each round.
- UNION ALL SELECT * FROM start
- EXCEPT ALL SELECT * FROM start_delay
- ),
- -- Each 'O' with a '.' in front of them will move.
- east_move(r INT, c INT) AS (
- SELECT e1.r, e1.c
- FROM eastward e1, eastward e2
- WHERE e1.symbol = 'O'
- AND e1.r = e2.r
- AND e1.c = e2.c - 1
- AND e2.symbol = '.'
- ),
- start_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM start )
- SELECT * FROM eastward
- ),
- output (r INT, line TEXT) AS (
- SELECT r, string_agg(symbol, ' ' ORDER BY c)
- FROM round
- GROUP BY r
- ),
- transitions(source TEXT, target TEXT) AS (
- SELECT
- (SELECT string_agg(symbol, '' ORDER BY r, c) FROM round),
- (SELECT string_agg(symbol, '' ORDER BY r, c) FROM east)
- UNION ALL
- SELECT * FROM transitions
- ),
- part2(part2 BIGINT) AS (
- SELECT SUM(1 + (SELECT MAX(r) FROM lines) - r)
- FROM east
- WHERE symbol = 'O'
- ),
- cells_delay(r INT, c INT, symbol TEXT) AS ( SELECT * FROM cells )
- -- SELECT count, COUNT(*)
- -- FROM (
- -- SELECT source, target, COUNT(*) count
- -- FROM transitions
- -- GROUP BY source, target)
- -- GROUP BY count;
- -- SELECT * FROM output ORDER BY r;
- SELECT * FROM part2;
- ----
- Explained Query:
- With
- cte l0 =
- Project (#1, #2) // { arity: 2 }
- Map (array_index(regexp_split_to_array["\n", case_insensitive=false](#0{input}), integer_to_bigint(#1{r}))) // { arity: 3 }
- FlatMap generate_series(1, (regexp_split_to_array["\n", case_insensitive=false](#0{input}) array_length 1), 1) // { arity: 2 }
- ReadStorage materialize.public.input // { arity: 1 }
- cte l1 =
- Reduce aggregates=[max(#0{r})] // { arity: 1 }
- Project (#0) // { arity: 1 }
- Get l0 // { arity: 2 }
- cte l2 =
- Union // { arity: 1 }
- Get l1 // { arity: 1 }
- Map (null) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l1 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- cte l3 =
- Project (#0, #2, #3) // { arity: 3 }
- Map (substr(#1{line}, #2{c}, 1)) // { arity: 4 }
- FlatMap generate_series(1, char_length(#1{line}), 1) // { arity: 3 }
- Get l0 // { arity: 2 }
- Return // { arity: 1 }
- With Mutually Recursive
- cte [recursion_limit=142, return_at_limit] l4 =
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Get l20 // { arity: 3 }
- Get l3 // { arity: 3 }
- Negate // { arity: 3 }
- Get l22 // { arity: 3 }
- cte l8 =
- With Mutually Recursive
- cte l5 =
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Get l5 // { arity: 3 }
- Project (#2, #1, #3) // { arity: 3 }
- Map ((#0{r} - 1), "O") // { arity: 4 }
- Get l6 // { arity: 2 }
- Negate // { arity: 3 }
- Project (#2, #1, #3) // { arity: 3 }
- Map ((#0{r} - 1), ".") // { arity: 4 }
- Get l6 // { arity: 2 }
- Map (".") // { arity: 3 }
- Get l6 // { arity: 2 }
- Negate // { arity: 3 }
- Map ("O") // { arity: 3 }
- Get l6 // { arity: 2 }
- Get l4 // { arity: 3 }
- Negate // { arity: 3 }
- Get l7 // { arity: 3 }
- cte l6 =
- Project (#0, #1) // { arity: 2 }
- Join on=(#0{r} = (#2{r} + 1) AND #1{c} = #3{c}) type=differential // { arity: 4 }
- implementation
- %0:l5[#1{c}, #0{r}]KKef » %1:l5[#1{c}, (#0{r} + 1)]KKef
- ArrangeBy keys=[[#1{c}, #0{r}]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = "O") // { arity: 3 }
- Get l5 // { arity: 3 }
- ArrangeBy keys=[[#1{c}, (#0{r} + 1)]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = ".") // { arity: 3 }
- Get l5 // { arity: 3 }
- cte l7 =
- Get l4 // { arity: 3 }
- Return // { arity: 3 }
- Get l5 // { arity: 3 }
- cte l12 =
- With Mutually Recursive
- cte l9 =
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Get l9 // { arity: 3 }
- Project (#0, #2, #3) // { arity: 3 }
- Map ((#1{c} - 1), "O") // { arity: 4 }
- Get l10 // { arity: 2 }
- Negate // { arity: 3 }
- Project (#0, #2, #3) // { arity: 3 }
- Map ((#1{c} - 1), ".") // { arity: 4 }
- Get l10 // { arity: 2 }
- Map (".") // { arity: 3 }
- Get l10 // { arity: 2 }
- Negate // { arity: 3 }
- Map ("O") // { arity: 3 }
- Get l10 // { arity: 2 }
- Get l8 // { arity: 3 }
- Negate // { arity: 3 }
- Get l11 // { arity: 3 }
- cte l10 =
- Project (#0, #1) // { arity: 2 }
- Join on=(#0{r} = #2{r} AND #1{c} = (#3{c} + 1)) type=differential // { arity: 4 }
- implementation
- %0:l9[#0{r}, #1{c}]KKef » %1:l9[#0{r}, (#1{c} + 1)]KKef
- ArrangeBy keys=[[#0{r}, #1{c}]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = "O") // { arity: 3 }
- Get l9 // { arity: 3 }
- ArrangeBy keys=[[#0{r}, (#1{c} + 1)]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = ".") // { arity: 3 }
- Get l9 // { arity: 3 }
- cte l11 =
- Get l8 // { arity: 3 }
- Return // { arity: 3 }
- Get l9 // { arity: 3 }
- cte l16 =
- With Mutually Recursive
- cte l13 =
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Get l13 // { arity: 3 }
- Project (#2, #1, #3) // { arity: 3 }
- Map ((#0{r} + 1), "O") // { arity: 4 }
- Get l14 // { arity: 2 }
- Negate // { arity: 3 }
- Project (#2, #1, #3) // { arity: 3 }
- Map ((#0{r} + 1), ".") // { arity: 4 }
- Get l14 // { arity: 2 }
- Map (".") // { arity: 3 }
- Get l14 // { arity: 2 }
- Negate // { arity: 3 }
- Map ("O") // { arity: 3 }
- Get l14 // { arity: 2 }
- Get l12 // { arity: 3 }
- Negate // { arity: 3 }
- Get l15 // { arity: 3 }
- cte l14 =
- Project (#0, #1) // { arity: 2 }
- Join on=(#0{r} = (#2{r} - 1) AND #1{c} = #3{c}) type=differential // { arity: 4 }
- implementation
- %0:l13[#1{c}, #0{r}]KKef » %1:l13[#1{c}, (#0{r} - 1)]KKef
- ArrangeBy keys=[[#1{c}, #0{r}]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = "O") // { arity: 3 }
- Get l13 // { arity: 3 }
- ArrangeBy keys=[[#1{c}, (#0{r} - 1)]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = ".") // { arity: 3 }
- Get l13 // { arity: 3 }
- cte l15 =
- Get l12 // { arity: 3 }
- Return // { arity: 3 }
- Get l13 // { arity: 3 }
- cte [recursion_limit=142, return_at_limit] l20 =
- With Mutually Recursive
- cte l17 =
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Threshold // { arity: 3 }
- Union // { arity: 3 }
- Get l17 // { arity: 3 }
- Project (#0, #2, #3) // { arity: 3 }
- Map ((#1{c} + 1), "O") // { arity: 4 }
- Get l18 // { arity: 2 }
- Negate // { arity: 3 }
- Project (#0, #2, #3) // { arity: 3 }
- Map ((#1{c} + 1), ".") // { arity: 4 }
- Get l18 // { arity: 2 }
- Map (".") // { arity: 3 }
- Get l18 // { arity: 2 }
- Negate // { arity: 3 }
- Map ("O") // { arity: 3 }
- Get l18 // { arity: 2 }
- Get l16 // { arity: 3 }
- Negate // { arity: 3 }
- Get l19 // { arity: 3 }
- cte l18 =
- Project (#0, #1) // { arity: 2 }
- Join on=(#0{r} = #2{r} AND #1{c} = (#3{c} - 1)) type=differential // { arity: 4 }
- implementation
- %0:l17[#0{r}, #1{c}]KKef » %1:l17[#0{r}, (#1{c} - 1)]KKef
- ArrangeBy keys=[[#0{r}, #1{c}]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = "O") // { arity: 3 }
- Get l17 // { arity: 3 }
- ArrangeBy keys=[[#0{r}, (#1{c} - 1)]] // { arity: 2 }
- Project (#0, #1) // { arity: 2 }
- Filter (#2{symbol} = ".") // { arity: 3 }
- Get l17 // { arity: 3 }
- cte l19 =
- Get l16 // { arity: 3 }
- Return // { arity: 3 }
- Get l17 // { arity: 3 }
- cte l21 =
- Reduce aggregates=[sum(((1 + #1{max}) - #0{r}))] // { arity: 1 }
- CrossJoin type=differential // { arity: 2 }
- implementation
- %1[×]U » %0:l20[×]ef
- ArrangeBy keys=[[]] // { arity: 1 }
- Project (#0) // { arity: 1 }
- Filter (#2{symbol} = "O") // { arity: 3 }
- Get l20 // { arity: 3 }
- ArrangeBy keys=[[]] // { arity: 1 }
- Union // { arity: 1 }
- Get l2 // { arity: 1 }
- Map (null) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l2 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- cte [recursion_limit=142, return_at_limit] l22 =
- Get l3 // { arity: 3 }
- Return // { arity: 1 }
- Union // { arity: 1 }
- Get l21 // { arity: 1 }
- Map (null) // { arity: 1 }
- Union // { arity: 0 }
- Negate // { arity: 0 }
- Project () // { arity: 0 }
- Get l21 // { arity: 1 }
- Constant // { arity: 0 }
- - ()
- Source materialize.public.input
- Target cluster: quickstart
- EOF
|